OSDN Git Service

Merge branches 'acpi-video', 'device-properties', 'pm-sleep' and 'pm-cpuidle'
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / drivers / base / property.c
index 1d0b116..f3f6d16 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/export.h>
 #include <linux/kernel.h>
 #include <linux/of.h>
+#include <linux/of_address.h>
 #include <linux/property.h>
 
 /**
@@ -128,9 +129,9 @@ EXPORT_SYMBOL_GPL(device_property_present);
 bool fwnode_property_present(struct fwnode_handle *fwnode, const char *propname)
 {
        if (is_of_node(fwnode))
-               return of_property_read_bool(of_node(fwnode), propname);
+               return of_property_read_bool(to_of_node(fwnode), propname);
        else if (is_acpi_node(fwnode))
-               return !acpi_dev_prop_get(acpi_node(fwnode), propname, NULL);
+               return !acpi_dev_prop_get(to_acpi_node(fwnode), propname, NULL);
 
        return !!pset_prop_get(to_pset(fwnode), propname);
 }
@@ -285,10 +286,10 @@ EXPORT_SYMBOL_GPL(device_property_read_string);
 ({ \
        int _ret_; \
        if (is_of_node(_fwnode_)) \
-               _ret_ = OF_DEV_PROP_READ_ARRAY(of_node(_fwnode_), _propname_, \
+               _ret_ = OF_DEV_PROP_READ_ARRAY(to_of_node(_fwnode_), _propname_, \
                                               _type_, _val_, _nval_); \
        else if (is_acpi_node(_fwnode_)) \
-               _ret_ = acpi_dev_prop_read(acpi_node(_fwnode_), _propname_, \
+               _ret_ = acpi_dev_prop_read(to_acpi_node(_fwnode_), _propname_, \
                                           _proptype_, _val_, _nval_); \
        else \
                _ret_ = pset_prop_read_array(to_pset(_fwnode_), _propname_, \
@@ -424,11 +425,11 @@ int fwnode_property_read_string_array(struct fwnode_handle *fwnode,
 {
        if (is_of_node(fwnode))
                return val ?
-                       of_property_read_string_array(of_node(fwnode), propname,
-                                                     val, nval) :
-                       of_property_count_strings(of_node(fwnode), propname);
+                       of_property_read_string_array(to_of_node(fwnode),
+                                                     propname, val, nval) :
+                       of_property_count_strings(to_of_node(fwnode), propname);
        else if (is_acpi_node(fwnode))
-               return acpi_dev_prop_read(acpi_node(fwnode), propname,
+               return acpi_dev_prop_read(to_acpi_node(fwnode), propname,
                                          DEV_PROP_STRING, val, nval);
 
        return pset_prop_read_array(to_pset(fwnode), propname,
@@ -455,9 +456,9 @@ int fwnode_property_read_string(struct fwnode_handle *fwnode,
                                const char *propname, const char **val)
 {
        if (is_of_node(fwnode))
-               return of_property_read_string(of_node(fwnode), propname, val);
+               return of_property_read_string(to_of_node(fwnode), propname, val);
        else if (is_acpi_node(fwnode))
-               return acpi_dev_prop_read(acpi_node(fwnode), propname,
+               return acpi_dev_prop_read(to_acpi_node(fwnode), propname,
                                          DEV_PROP_STRING, val, 1);
 
        return -ENXIO;
@@ -475,13 +476,13 @@ struct fwnode_handle *device_get_next_child_node(struct device *dev,
        if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
                struct device_node *node;
 
-               node = of_get_next_available_child(dev->of_node, of_node(child));
+               node = of_get_next_available_child(dev->of_node, to_of_node(child));
                if (node)
                        return &node->fwnode;
        } else if (IS_ENABLED(CONFIG_ACPI)) {
                struct acpi_device *node;
 
-               node = acpi_get_next_child(dev, acpi_node(child));
+               node = acpi_get_next_child(dev, to_acpi_node(child));
                if (node)
                        return acpi_fwnode_handle(node);
        }
@@ -500,7 +501,7 @@ EXPORT_SYMBOL_GPL(device_get_next_child_node);
 void fwnode_handle_put(struct fwnode_handle *fwnode)
 {
        if (is_of_node(fwnode))
-               of_node_put(of_node(fwnode));
+               of_node_put(to_of_node(fwnode));
 }
 EXPORT_SYMBOL_GPL(fwnode_handle_put);
 
@@ -519,3 +520,16 @@ unsigned int device_get_child_node_count(struct device *dev)
        return count;
 }
 EXPORT_SYMBOL_GPL(device_get_child_node_count);
+
+bool device_dma_is_coherent(struct device *dev)
+{
+       bool coherent = false;
+
+       if (IS_ENABLED(CONFIG_OF) && dev->of_node)
+               coherent = of_dma_is_coherent(dev->of_node);
+       else
+               acpi_check_dma(ACPI_COMPANION(dev), &coherent);
+
+       return coherent;
+}
+EXPORT_SYMBOL_GPL(device_dma_is_coherent);