mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-09-21 20:22:13 +08:00
device property: Convert device_{dma_supported,get_dma_attr} to fwnode
Make the device_dma_supported and device_get_dma_attr functions to use the fwnode ops, and move the implementation to ACPI and OF frameworks. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Rob Herring <robh@kernel.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
3123109284
commit
8c756a0a2d
@ -1256,6 +1256,17 @@ static bool acpi_fwnode_device_is_available(const struct fwnode_handle *fwnode)
|
|||||||
return acpi_device_is_present(to_acpi_device_node(fwnode));
|
return acpi_device_is_present(to_acpi_device_node(fwnode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool acpi_fwnode_device_dma_supported(const struct fwnode_handle *fwnode)
|
||||||
|
{
|
||||||
|
return acpi_dma_supported(to_acpi_device_node(fwnode));
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum dev_dma_attr
|
||||||
|
acpi_fwnode_device_get_dma_attr(const struct fwnode_handle *fwnode)
|
||||||
|
{
|
||||||
|
return acpi_get_dma_attr(to_acpi_device_node(fwnode));
|
||||||
|
}
|
||||||
|
|
||||||
static bool acpi_fwnode_property_present(const struct fwnode_handle *fwnode,
|
static bool acpi_fwnode_property_present(const struct fwnode_handle *fwnode,
|
||||||
const char *propname)
|
const char *propname)
|
||||||
{
|
{
|
||||||
@ -1387,6 +1398,9 @@ acpi_fwnode_device_get_match_data(const struct fwnode_handle *fwnode,
|
|||||||
const struct fwnode_operations ops = { \
|
const struct fwnode_operations ops = { \
|
||||||
.device_is_available = acpi_fwnode_device_is_available, \
|
.device_is_available = acpi_fwnode_device_is_available, \
|
||||||
.device_get_match_data = acpi_fwnode_device_get_match_data, \
|
.device_get_match_data = acpi_fwnode_device_get_match_data, \
|
||||||
|
.device_dma_supported = \
|
||||||
|
acpi_fwnode_device_dma_supported, \
|
||||||
|
.device_get_dma_attr = acpi_fwnode_device_get_dma_attr, \
|
||||||
.property_present = acpi_fwnode_property_present, \
|
.property_present = acpi_fwnode_property_present, \
|
||||||
.property_read_int_array = \
|
.property_read_int_array = \
|
||||||
acpi_fwnode_property_read_int_array, \
|
acpi_fwnode_property_read_int_array, \
|
||||||
|
@ -823,33 +823,16 @@ EXPORT_SYMBOL_GPL(device_get_child_node_count);
|
|||||||
|
|
||||||
bool device_dma_supported(struct device *dev)
|
bool device_dma_supported(struct device *dev)
|
||||||
{
|
{
|
||||||
const struct fwnode_handle *fwnode = dev_fwnode(dev);
|
return fwnode_call_bool_op(dev_fwnode(dev), device_dma_supported);
|
||||||
|
|
||||||
/* For DT, this is always supported.
|
|
||||||
* For ACPI, this depends on CCA, which
|
|
||||||
* is determined by the acpi_dma_supported().
|
|
||||||
*/
|
|
||||||
if (is_of_node(fwnode))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return acpi_dma_supported(to_acpi_device_node(fwnode));
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(device_dma_supported);
|
EXPORT_SYMBOL_GPL(device_dma_supported);
|
||||||
|
|
||||||
enum dev_dma_attr device_get_dma_attr(struct device *dev)
|
enum dev_dma_attr device_get_dma_attr(struct device *dev)
|
||||||
{
|
{
|
||||||
const struct fwnode_handle *fwnode = dev_fwnode(dev);
|
if (!fwnode_has_op(dev_fwnode(dev), device_get_dma_attr))
|
||||||
enum dev_dma_attr attr = DEV_DMA_NOT_SUPPORTED;
|
return DEV_DMA_NOT_SUPPORTED;
|
||||||
|
|
||||||
if (is_of_node(fwnode)) {
|
return fwnode_call_int_op(dev_fwnode(dev), device_get_dma_attr);
|
||||||
if (of_dma_is_coherent(to_of_node(fwnode)))
|
|
||||||
attr = DEV_DMA_COHERENT;
|
|
||||||
else
|
|
||||||
attr = DEV_DMA_NON_COHERENT;
|
|
||||||
} else
|
|
||||||
attr = acpi_get_dma_attr(to_acpi_device_node(fwnode));
|
|
||||||
|
|
||||||
return attr;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(device_get_dma_attr);
|
EXPORT_SYMBOL_GPL(device_get_dma_attr);
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#define pr_fmt(fmt) "OF: " fmt
|
#define pr_fmt(fmt) "OF: " fmt
|
||||||
|
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
#include <linux/of_address.h>
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
#include <linux/of_graph.h>
|
#include <linux/of_graph.h>
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
@ -872,6 +873,20 @@ static bool of_fwnode_device_is_available(const struct fwnode_handle *fwnode)
|
|||||||
return of_device_is_available(to_of_node(fwnode));
|
return of_device_is_available(to_of_node(fwnode));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool of_fwnode_device_dma_supported(const struct fwnode_handle *fwnode)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum dev_dma_attr
|
||||||
|
of_fwnode_device_get_dma_attr(const struct fwnode_handle *fwnode)
|
||||||
|
{
|
||||||
|
if (of_dma_is_coherent(to_of_node(fwnode)))
|
||||||
|
return DEV_DMA_COHERENT;
|
||||||
|
else
|
||||||
|
return DEV_DMA_NON_COHERENT;
|
||||||
|
}
|
||||||
|
|
||||||
static bool of_fwnode_property_present(const struct fwnode_handle *fwnode,
|
static bool of_fwnode_property_present(const struct fwnode_handle *fwnode,
|
||||||
const char *propname)
|
const char *propname)
|
||||||
{
|
{
|
||||||
@ -1472,6 +1487,8 @@ const struct fwnode_operations of_fwnode_ops = {
|
|||||||
.put = of_fwnode_put,
|
.put = of_fwnode_put,
|
||||||
.device_is_available = of_fwnode_device_is_available,
|
.device_is_available = of_fwnode_device_is_available,
|
||||||
.device_get_match_data = of_fwnode_device_get_match_data,
|
.device_get_match_data = of_fwnode_device_get_match_data,
|
||||||
|
.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_present = of_fwnode_property_present,
|
||||||
.property_read_int_array = of_fwnode_property_read_int_array,
|
.property_read_int_array = of_fwnode_property_read_int_array,
|
||||||
.property_read_string_array = of_fwnode_property_read_string_array,
|
.property_read_string_array = of_fwnode_property_read_string_array,
|
||||||
|
@ -113,6 +113,9 @@ struct fwnode_operations {
|
|||||||
bool (*device_is_available)(const struct fwnode_handle *fwnode);
|
bool (*device_is_available)(const struct fwnode_handle *fwnode);
|
||||||
const void *(*device_get_match_data)(const struct fwnode_handle *fwnode,
|
const void *(*device_get_match_data)(const struct fwnode_handle *fwnode,
|
||||||
const struct device *dev);
|
const struct device *dev);
|
||||||
|
bool (*device_dma_supported)(const struct fwnode_handle *fwnode);
|
||||||
|
enum dev_dma_attr
|
||||||
|
(*device_get_dma_attr)(const struct fwnode_handle *fwnode);
|
||||||
bool (*property_present)(const struct fwnode_handle *fwnode,
|
bool (*property_present)(const struct fwnode_handle *fwnode,
|
||||||
const char *propname);
|
const char *propname);
|
||||||
int (*property_read_int_array)(const struct fwnode_handle *fwnode,
|
int (*property_read_int_array)(const struct fwnode_handle *fwnode,
|
||||||
|
Loading…
Reference in New Issue
Block a user