acpi_fwnode_device_dma_supported,               \
                .device_get_dma_attr = acpi_fwnode_device_get_dma_attr, \
                .property_present = acpi_fwnode_property_present,       \
+               .property_read_bool = acpi_fwnode_property_present,     \
                .property_read_int_array =                              \
                        acpi_fwnode_property_read_int_array,            \
                .property_read_string_array =                           \
 
 }
 EXPORT_SYMBOL_GPL(fwnode_property_present);
 
+/**
+ * device_property_read_bool - Return the value for a boolean property of a device
+ * @dev: Device whose property is being checked
+ * @propname: Name of the property
+ *
+ * Return if property @propname is true or false in the device firmware description.
+ *
+ * Return: true if property @propname is present. Otherwise, returns false.
+ */
+bool device_property_read_bool(const struct device *dev, const char *propname)
+{
+       return fwnode_property_read_bool(dev_fwnode(dev), propname);
+}
+EXPORT_SYMBOL_GPL(device_property_read_bool);
+
+/**
+ * fwnode_property_read_bool - Return the value for a boolean property of a firmware node
+ * @fwnode: Firmware node whose property to check
+ * @propname: Name of the property
+ *
+ * Return if property @propname is true or false in the firmware description.
+ */
+bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
+                            const char *propname)
+{
+       bool ret;
+
+       if (IS_ERR_OR_NULL(fwnode))
+               return false;
+
+       ret = fwnode_call_bool_op(fwnode, property_read_bool, propname);
+       if (ret)
+               return ret;
+
+       return fwnode_call_bool_op(fwnode->secondary, property_read_bool, propname);
+}
+EXPORT_SYMBOL_GPL(fwnode_property_read_bool);
+
 /**
  * device_property_read_u8_array - return a u8 array property of a device
  * @dev: Device to get the property of
 
        .get = software_node_get,
        .put = software_node_put,
        .property_present = software_node_property_present,
+       .property_read_bool = software_node_property_present,
        .property_read_int_array = software_node_read_int_array,
        .property_read_string_array = software_node_read_string_array,
        .get_name = software_node_get_name,
 
 
 static bool of_fwnode_property_present(const struct fwnode_handle *fwnode,
                                       const char *propname)
+{
+       return of_property_present(to_of_node(fwnode), propname);
+}
+
+static bool of_fwnode_property_read_bool(const struct fwnode_handle *fwnode,
+                                        const char *propname)
 {
        return of_property_read_bool(to_of_node(fwnode), propname);
 }
        .device_dma_supported = of_fwnode_device_dma_supported,
        .device_get_dma_attr = of_fwnode_device_get_dma_attr,
        .property_present = of_fwnode_property_present,
+       .property_read_bool = of_fwnode_property_read_bool,
        .property_read_int_array = of_fwnode_property_read_int_array,
        .property_read_string_array = of_fwnode_property_read_string_array,
        .get_name = of_fwnode_get_name,
 
  * @device_is_available: Return true if the device is available.
  * @device_get_match_data: Return the device driver match data.
  * @property_present: Return true if a property is present.
+ * @property_read_bool: Return a boolean property value.
  * @property_read_int_array: Read an array of integer properties. Return zero on
  *                          success, a negative error code otherwise.
  * @property_read_string_array: Read an array of string properties. Return zero
        (*device_get_dma_attr)(const struct fwnode_handle *fwnode);
        bool (*property_present)(const struct fwnode_handle *fwnode,
                                 const char *propname);
+       bool (*property_read_bool)(const struct fwnode_handle *fwnode,
+                                  const char *propname);
        int (*property_read_int_array)(const struct fwnode_handle *fwnode,
                                       const char *propname,
                                       unsigned int elem_size, void *val,
 
  */
 static inline bool of_property_present(const struct device_node *np, const char *propname)
 {
-       return of_property_read_bool(np, propname);
+       struct property *prop = of_find_property(np, propname, NULL);
+
+       return prop ? true : false;
 }
 
 /**
 
                 struct device *: __dev_fwnode)(dev)
 
 bool device_property_present(const struct device *dev, const char *propname);
+bool device_property_read_bool(const struct device *dev, const char *propname);
 int device_property_read_u8_array(const struct device *dev, const char *propname,
                                  u8 *val, size_t nval);
 int device_property_read_u16_array(const struct device *dev, const char *propname,
 
 bool fwnode_property_present(const struct fwnode_handle *fwnode,
                             const char *propname);
+bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
+                            const char *propname);
 int fwnode_property_read_u8_array(const struct fwnode_handle *fwnode,
                                  const char *propname, u8 *val,
                                  size_t nval);
 
 unsigned int device_get_child_node_count(const struct device *dev);
 
-static inline bool device_property_read_bool(const struct device *dev,
-                                            const char *propname)
-{
-       return device_property_present(dev, propname);
-}
-
 static inline int device_property_read_u8(const struct device *dev,
                                          const char *propname, u8 *val)
 {
        return device_property_read_string_array(dev, propname, NULL, 0);
 }
 
-static inline bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
-                                            const char *propname)
-{
-       return fwnode_property_present(fwnode, propname);
-}
-
 static inline int fwnode_property_read_u8(const struct fwnode_handle *fwnode,
                                          const char *propname, u8 *val)
 {