Device properties framework fix for v4.13-rc1
This fixes a problem with bool properties that could be seen as "true" when the property was not present at all by adding a special helper for bool properties with checks for all of the requisute conditions (Sakari Ailus). -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJZaLjVAAoJEILEb/54YlRxh/oP/j0LBZ1+vVMp6onKcQZfHkEi xA3QyRBz+G48u9dmPmKzpMcXzXmelwuw/6bJix098xFkADVlI2qQkmUYCb5sb06t blogDZ3wQokZrVIkFT+kFFUQxcfvX4FgMv6yTerQt+k0xbLXWGighS+46wWvTuPd hD3+M+tBw85NMI4pU4rwWIK8UUDjry5lFYsn96cqTe5VC+wUAEy33aFCY8mw55J8 FGN6DyOmlHbzCdytzi3o4ejfXQkAwjUVAbH/JHVWfEDyxhebo/N6AVAwajtgN8bU yHY6nHMz8xL1XtNvc7q6M0i9UySZdk2YrbLh5JtRvUrUWw5OBpE/A1iaUgaGVclC 5bmeWZww1jejHLnK4U7xUWA2SuQtPE3Kz/rUt3uroJzaCfYuTAxl+7IYftadRW9y s+j3mjO3IKjLmCmPQwgPpMmNIore14bFKMnIfStSqyIxtbw59Gt3CnEYpd11UxIh noCnnacTGHqSyHQSelf2gdYcWiJo+IUvgFAB4ze33yRPtcfkky4med3MG4I7yXP2 Tzi+xVGnAmgb9betNINH6sPUw9JImgY19hrQhVyxs8I8sYXV18Wdrkc6JOAZ9bna REUXseHkF3ofy7iP1L/yrjOQ31kKwYxJ5kEasg/gwkRV6kzWNJ0CLK/qD7Xp0A3O sPm7B8FVfM4xoPOaMngw =KEbK -----END PGP SIGNATURE----- Merge tag 'devprop-fix-4.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull device properties framework fix from Rafael Wysocki: "This fixes a problem with bool properties that could be seen as "true" when the property was not present at all by adding a special helper for bool properties with checks for all of the requisute conditions (Sakari Ailus)" * tag 'devprop-fix-4.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: device property: Introduce fwnode_call_bool_op() for ops that return bool
This commit is contained in:
commit
96d0d831a5
@ -253,10 +253,10 @@ bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
|
||||
{
|
||||
bool ret;
|
||||
|
||||
ret = fwnode_call_int_op(fwnode, property_present, propname);
|
||||
ret = fwnode_call_bool_op(fwnode, property_present, propname);
|
||||
if (ret == false && !IS_ERR_OR_NULL(fwnode) &&
|
||||
!IS_ERR_OR_NULL(fwnode->secondary))
|
||||
ret = fwnode_call_int_op(fwnode->secondary, property_present,
|
||||
ret = fwnode_call_bool_op(fwnode->secondary, property_present,
|
||||
propname);
|
||||
return ret;
|
||||
}
|
||||
@ -1027,7 +1027,7 @@ EXPORT_SYMBOL_GPL(fwnode_handle_put);
|
||||
*/
|
||||
bool fwnode_device_is_available(struct fwnode_handle *fwnode)
|
||||
{
|
||||
return fwnode_call_int_op(fwnode, device_is_available);
|
||||
return fwnode_call_bool_op(fwnode, device_is_available);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fwnode_device_is_available);
|
||||
|
||||
|
@ -99,6 +99,10 @@ struct fwnode_operations {
|
||||
(fwnode ? (fwnode_has_op(fwnode, op) ? \
|
||||
(fwnode)->ops->op(fwnode, ## __VA_ARGS__) : -ENXIO) : \
|
||||
-EINVAL)
|
||||
#define fwnode_call_bool_op(fwnode, op, ...) \
|
||||
(fwnode ? (fwnode_has_op(fwnode, op) ? \
|
||||
(fwnode)->ops->op(fwnode, ## __VA_ARGS__) : false) : \
|
||||
false)
|
||||
#define fwnode_call_ptr_op(fwnode, op, ...) \
|
||||
(fwnode_has_op(fwnode, op) ? \
|
||||
(fwnode)->ops->op(fwnode, ## __VA_ARGS__) : NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user