mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 00:21:59 +00:00
Generic Device Lookup Helpers
Persistent tag for others to pull this branch from Based on patch series from Suzuki K Poulose <suzuki.poulose@arm.com> with Subject: [PATCH v3 0/7] drivers: Add generic device lookup helpers Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iQJPBAABCAA5FiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl1AL7obHGdyZWdraEBs aW51eGZvdW5kYXRpb24ub3JnAAoJEDjbvchgkmk+X9cP/jXGxNeD4Hv2KfpQb32E Zl7bnblRwKaheD1s91WzfV8HFgLcylmu2chW/IGpgX7ujHRr5zIu/H8FApK+Z5F+ 8LiF8HnW2GICcSf95VMLNBXFY3wZq7NzOVnLIPvVcLJdOPPEjfYafQwSxB4WYxW5 UK4JVsLg8SpAOdqA5bGhlOHWaTssLRsktA0VEh4w0uUOxPeel7gh16GRK8GLlKTq 8lHiIKaN7PL9eDFTjh1wYP6FFgEAQhKexYVDtVj3fcEf8M0ArJTPIuPgaCKUqmD/ J233RyFAuMtR8N1jY4ScPlnUyHJzNmM1wF77PRupwIAO0opRjTJ2BNI7GwC1hB2J xiPWtHrD21MBh2g44v+b/OwFNJ5AvuIlWEdEnrpNyj2KzrZP9H8G8Fy6CjFdVsEU HzccNdkfZ0Y2juJjE/HvpPe3t3NjncUgeuFALzgjYrmm/1KVGL16HH2YFvtGZI5P wrJVjyjdkRVU2u5I5+lIHRfULSmQIEPvp2BfkHnsmDmLNQbL8eTYCuowpSdbWWYB yFxoavHuga7uDW3MPMr6c62csaUXMyeb1y9gCKnUqhg9lxkbGujFsUBVviFKJTvH bWt79T2hqShe22JvwoIMSnH0DGpmFxFfdXk5/D7dGJJ5KUFoQ7bI0Q4wB9wW5+C4 uNqNTLD+o6uyIXD3wwRy/kkN =XFYe -----END PGP SIGNATURE----- Merge tag 'generic_lookup_helpers' into for-next Generic Device Lookup Helpers Persistent tag for others to pull this branch from Based on patch series from Suzuki K Poulose <suzuki.poulose@arm.com> with Subject: [PATCH v3 0/7] drivers: Add generic device lookup helpers Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> * tag 'generic_lookup_helpers': platform: Add platform_find_device_by_driver() helper drivers: Add generic helper to match any device drivers: Introduce device lookup variants by ACPI_COMPANION device drivers: Introduce device lookup variants by device type drivers: Introduce device lookup variants by fwnode drivers: Introduce device lookup variants by of_node drivers: Introduce device lookup variants by name
This commit is contained in:
commit
be7fc2cc86
@ -134,22 +134,13 @@ static inline void gizmo_writel(struct tegra_ahb *ahb, u32 value, u32 offset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_TEGRA_IOMMU_SMMU
|
#ifdef CONFIG_TEGRA_IOMMU_SMMU
|
||||||
static int tegra_ahb_match_by_smmu(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
struct tegra_ahb *ahb = dev_get_drvdata(dev);
|
|
||||||
const struct device_node *dn = data;
|
|
||||||
|
|
||||||
return (ahb->dev->of_node == dn) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tegra_ahb_enable_smmu(struct device_node *dn)
|
int tegra_ahb_enable_smmu(struct device_node *dn)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
u32 val;
|
u32 val;
|
||||||
struct tegra_ahb *ahb;
|
struct tegra_ahb *ahb;
|
||||||
|
|
||||||
dev = driver_find_device(&tegra_ahb_driver.driver, NULL, dn,
|
dev = driver_find_device_by_of_node(&tegra_ahb_driver.driver, dn);
|
||||||
tegra_ahb_match_by_smmu);
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
ahb = dev_get_drvdata(dev);
|
ahb = dev_get_drvdata(dev);
|
||||||
|
@ -342,30 +342,6 @@ struct device *bus_find_device(struct bus_type *bus,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(bus_find_device);
|
EXPORT_SYMBOL_GPL(bus_find_device);
|
||||||
|
|
||||||
static int match_name(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
const char *name = data;
|
|
||||||
|
|
||||||
return sysfs_streq(name, dev_name(dev));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* bus_find_device_by_name - device iterator for locating a particular device of a specific name
|
|
||||||
* @bus: bus type
|
|
||||||
* @start: Device to begin with
|
|
||||||
* @name: name of the device to match
|
|
||||||
*
|
|
||||||
* This is similar to the bus_find_device() function above, but it handles
|
|
||||||
* searching by a name automatically, no need to write another strcmp matching
|
|
||||||
* function.
|
|
||||||
*/
|
|
||||||
struct device *bus_find_device_by_name(struct bus_type *bus,
|
|
||||||
struct device *start, const char *name)
|
|
||||||
{
|
|
||||||
return bus_find_device(bus, start, (void *)name, match_name);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(bus_find_device_by_name);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* subsys_find_device_by_id - find a device with a specific enumeration number
|
* subsys_find_device_by_id - find a device with a specific enumeration number
|
||||||
* @subsys: subsystem
|
* @subsys: subsystem
|
||||||
|
@ -2867,13 +2867,6 @@ struct device *device_create_with_groups(struct class *class,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(device_create_with_groups);
|
EXPORT_SYMBOL_GPL(device_create_with_groups);
|
||||||
|
|
||||||
static int __match_devt(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
const dev_t *devt = data;
|
|
||||||
|
|
||||||
return dev->devt == *devt;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* device_destroy - removes a device that was created with device_create()
|
* device_destroy - removes a device that was created with device_create()
|
||||||
* @class: pointer to the struct class that this device was registered with
|
* @class: pointer to the struct class that this device was registered with
|
||||||
@ -2886,7 +2879,7 @@ void device_destroy(struct class *class, dev_t devt)
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = class_find_device(class, NULL, &devt, __match_devt);
|
dev = class_find_device_by_devt(class, devt);
|
||||||
if (dev) {
|
if (dev) {
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
device_unregister(dev);
|
device_unregister(dev);
|
||||||
@ -3357,8 +3350,38 @@ void device_set_of_node_from_dev(struct device *dev, const struct device *dev2)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(device_set_of_node_from_dev);
|
EXPORT_SYMBOL_GPL(device_set_of_node_from_dev);
|
||||||
|
|
||||||
|
int device_match_name(struct device *dev, const void *name)
|
||||||
|
{
|
||||||
|
return sysfs_streq(dev_name(dev), name);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(device_match_name);
|
||||||
|
|
||||||
int device_match_of_node(struct device *dev, const void *np)
|
int device_match_of_node(struct device *dev, const void *np)
|
||||||
{
|
{
|
||||||
return dev->of_node == np;
|
return dev->of_node == np;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(device_match_of_node);
|
EXPORT_SYMBOL_GPL(device_match_of_node);
|
||||||
|
|
||||||
|
int device_match_fwnode(struct device *dev, const void *fwnode)
|
||||||
|
{
|
||||||
|
return dev_fwnode(dev) == fwnode;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(device_match_fwnode);
|
||||||
|
|
||||||
|
int device_match_devt(struct device *dev, const void *pdevt)
|
||||||
|
{
|
||||||
|
return dev->devt == *(dev_t *)pdevt;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(device_match_devt);
|
||||||
|
|
||||||
|
int device_match_acpi_dev(struct device *dev, const void *adev)
|
||||||
|
{
|
||||||
|
return ACPI_COMPANION(dev) == adev;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(device_match_acpi_dev);
|
||||||
|
|
||||||
|
int device_match_any(struct device *dev, const void *unused)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(device_match_any);
|
||||||
|
@ -133,19 +133,13 @@ static struct bus_type *generic_match_buses[] = {
|
|||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int device_fwnode_match(struct device *dev, const void *fwnode)
|
|
||||||
{
|
|
||||||
return dev_fwnode(dev) == fwnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *device_connection_fwnode_match(struct device_connection *con)
|
static void *device_connection_fwnode_match(struct device_connection *con)
|
||||||
{
|
{
|
||||||
struct bus_type *bus;
|
struct bus_type *bus;
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
for (bus = generic_match_buses[0]; bus; bus++) {
|
for (bus = generic_match_buses[0]; bus; bus++) {
|
||||||
dev = bus_find_device(bus, NULL, (void *)con->fwnode,
|
dev = bus_find_device_by_fwnode(bus, con->fwnode);
|
||||||
device_fwnode_match);
|
|
||||||
if (dev && !strncmp(dev_name(dev), con->id, strlen(con->id)))
|
if (dev && !strncmp(dev_name(dev), con->id, strlen(con->id)))
|
||||||
return dev;
|
return dev;
|
||||||
|
|
||||||
|
@ -1197,6 +1197,20 @@ struct bus_type platform_bus_type = {
|
|||||||
};
|
};
|
||||||
EXPORT_SYMBOL_GPL(platform_bus_type);
|
EXPORT_SYMBOL_GPL(platform_bus_type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* platform_find_device_by_driver - Find a platform device with a given
|
||||||
|
* driver.
|
||||||
|
* @start: The device to start the search from.
|
||||||
|
* @drv: The device driver to look for.
|
||||||
|
*/
|
||||||
|
struct device *platform_find_device_by_driver(struct device *start,
|
||||||
|
const struct device_driver *drv)
|
||||||
|
{
|
||||||
|
return bus_find_device(&platform_bus_type, start, drv,
|
||||||
|
(void *)platform_match);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(platform_find_device_by_driver);
|
||||||
|
|
||||||
int __init platform_bus_init(void)
|
int __init platform_bus_init(void)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
@ -19,11 +19,6 @@ static struct class *fpga_bridge_class;
|
|||||||
/* Lock for adding/removing bridges to linked lists*/
|
/* Lock for adding/removing bridges to linked lists*/
|
||||||
static spinlock_t bridge_list_lock;
|
static spinlock_t bridge_list_lock;
|
||||||
|
|
||||||
static int fpga_bridge_of_node_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fpga_bridge_enable - Enable transactions on the bridge
|
* fpga_bridge_enable - Enable transactions on the bridge
|
||||||
*
|
*
|
||||||
@ -104,8 +99,7 @@ struct fpga_bridge *of_fpga_bridge_get(struct device_node *np,
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = class_find_device(fpga_bridge_class, NULL, np,
|
dev = class_find_device_by_of_node(fpga_bridge_class, np);
|
||||||
fpga_bridge_of_node_match);
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
|
|
||||||
|
@ -482,11 +482,6 @@ struct fpga_manager *fpga_mgr_get(struct device *dev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(fpga_mgr_get);
|
EXPORT_SYMBOL_GPL(fpga_mgr_get);
|
||||||
|
|
||||||
static int fpga_mgr_of_node_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_fpga_mgr_get - Given a device node, get a reference to a fpga mgr.
|
* of_fpga_mgr_get - Given a device node, get a reference to a fpga mgr.
|
||||||
*
|
*
|
||||||
@ -498,8 +493,7 @@ struct fpga_manager *of_fpga_mgr_get(struct device_node *node)
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = class_find_device(fpga_mgr_class, NULL, node,
|
dev = class_find_device_by_of_node(fpga_mgr_class, node);
|
||||||
fpga_mgr_of_node_match);
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
|
|
||||||
|
@ -93,11 +93,6 @@ static struct bus_type mipi_dsi_bus_type = {
|
|||||||
.pm = &mipi_dsi_device_pm_ops,
|
.pm = &mipi_dsi_device_pm_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int of_device_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_find_mipi_dsi_device_by_node() - find the MIPI DSI device matching a
|
* of_find_mipi_dsi_device_by_node() - find the MIPI DSI device matching a
|
||||||
* device tree node
|
* device tree node
|
||||||
@ -110,7 +105,7 @@ struct mipi_dsi_device *of_find_mipi_dsi_device_by_node(struct device_node *np)
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = bus_find_device(&mipi_dsi_bus_type, NULL, np, of_device_match);
|
dev = bus_find_device_by_of_node(&mipi_dsi_bus_type, np);
|
||||||
|
|
||||||
return dev ? to_mipi_dsi_device(dev) : NULL;
|
return dev ? to_mipi_dsi_device(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -242,9 +242,7 @@ static struct component_match *exynos_drm_match_add(struct device *dev)
|
|||||||
if (!info->driver || !(info->flags & DRM_COMPONENT_DRIVER))
|
if (!info->driver || !(info->flags & DRM_COMPONENT_DRIVER))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
while ((d = bus_find_device(&platform_bus_type, p,
|
while ((d = platform_find_device_by_driver(p, &info->driver->driver))) {
|
||||||
&info->driver->driver,
|
|
||||||
(void *)platform_bus_type.match))) {
|
|
||||||
put_device(p);
|
put_device(p);
|
||||||
|
|
||||||
if (!(info->flags & DRM_FIMC_DEVICE) ||
|
if (!(info->flags & DRM_FIMC_DEVICE) ||
|
||||||
@ -412,9 +410,8 @@ static void exynos_drm_unregister_devices(void)
|
|||||||
if (!info->driver || !(info->flags & DRM_VIRTUAL_DEVICE))
|
if (!info->driver || !(info->flags & DRM_VIRTUAL_DEVICE))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
while ((dev = bus_find_device(&platform_bus_type, NULL,
|
while ((dev = platform_find_device_by_driver(NULL,
|
||||||
&info->driver->driver,
|
&info->driver->driver))) {
|
||||||
(void *)platform_bus_type.match))) {
|
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
platform_device_unregister(to_platform_device(dev));
|
platform_device_unregister(to_platform_device(dev));
|
||||||
}
|
}
|
||||||
|
@ -477,8 +477,7 @@ static int mcde_probe(struct platform_device *pdev)
|
|||||||
struct device_driver *drv = &mcde_component_drivers[i]->driver;
|
struct device_driver *drv = &mcde_component_drivers[i]->driver;
|
||||||
struct device *p = NULL, *d;
|
struct device *p = NULL, *d;
|
||||||
|
|
||||||
while ((d = bus_find_device(&platform_bus_type, p, drv,
|
while ((d = platform_find_device_by_driver(p, drv))) {
|
||||||
(void *)platform_bus_type.match))) {
|
|
||||||
put_device(p);
|
put_device(p);
|
||||||
component_match_add(dev, &match, mcde_compare_dev, d);
|
component_match_add(dev, &match, mcde_compare_dev, d);
|
||||||
p = d;
|
p = d;
|
||||||
|
@ -330,8 +330,7 @@ static struct component_match *rockchip_drm_match_add(struct device *dev)
|
|||||||
struct device *p = NULL, *d;
|
struct device *p = NULL, *d;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
d = bus_find_device(&platform_bus_type, p, &drv->driver,
|
d = platform_find_device_by_driver(p, &drv->driver);
|
||||||
(void *)platform_bus_type.match);
|
|
||||||
put_device(p);
|
put_device(p);
|
||||||
p = d;
|
p = d;
|
||||||
|
|
||||||
|
@ -237,8 +237,7 @@ static void vc4_match_add_drivers(struct device *dev,
|
|||||||
struct device_driver *drv = &drivers[i]->driver;
|
struct device_driver *drv = &drivers[i]->driver;
|
||||||
struct device *p = NULL, *d;
|
struct device *p = NULL, *d;
|
||||||
|
|
||||||
while ((d = bus_find_device(&platform_bus_type, p, drv,
|
while ((d = platform_find_device_by_driver(p, drv))) {
|
||||||
(void *)platform_bus_type.match))) {
|
|
||||||
put_device(p);
|
put_device(p);
|
||||||
component_match_add(dev, match, compare_dev, d);
|
component_match_add(dev, match, compare_dev, d);
|
||||||
p = d;
|
p = d;
|
||||||
|
@ -37,11 +37,6 @@ static int coresight_alloc_conns(struct device *dev,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int coresight_device_fwnode_match(struct device *dev, const void *fwnode)
|
|
||||||
{
|
|
||||||
return dev_fwnode(dev) == fwnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct device *
|
static struct device *
|
||||||
coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
|
coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
|
||||||
{
|
{
|
||||||
@ -51,8 +46,7 @@ coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
|
|||||||
* If we have a non-configurable replicator, it will be found on the
|
* If we have a non-configurable replicator, it will be found on the
|
||||||
* platform bus.
|
* platform bus.
|
||||||
*/
|
*/
|
||||||
dev = bus_find_device(&platform_bus_type, NULL,
|
dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
|
||||||
fwnode, coresight_device_fwnode_match);
|
|
||||||
if (dev)
|
if (dev)
|
||||||
return dev;
|
return dev;
|
||||||
|
|
||||||
@ -60,8 +54,7 @@ coresight_find_device_by_fwnode(struct fwnode_handle *fwnode)
|
|||||||
* We have a configurable component - circle through the AMBA bus
|
* We have a configurable component - circle through the AMBA bus
|
||||||
* looking for the device that matches the endpoint node.
|
* looking for the device that matches the endpoint node.
|
||||||
*/
|
*/
|
||||||
return bus_find_device(&amba_bustype, NULL,
|
return bus_find_device_by_fwnode(&amba_bustype, fwnode);
|
||||||
fwnode, coresight_device_fwnode_match);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
|
@ -202,6 +202,4 @@ static inline void *coresight_get_uci_data(const struct amba_id *id)
|
|||||||
|
|
||||||
void coresight_release_platform_data(struct coresight_platform_data *pdata);
|
void coresight_release_platform_data(struct coresight_platform_data *pdata);
|
||||||
|
|
||||||
int coresight_device_fwnode_match(struct device *dev, const void *fwnode);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1046,9 +1046,7 @@ static void coresight_fixup_device_conns(struct coresight_device *csdev)
|
|||||||
struct coresight_connection *conn = &csdev->pdata->conns[i];
|
struct coresight_connection *conn = &csdev->pdata->conns[i];
|
||||||
struct device *dev = NULL;
|
struct device *dev = NULL;
|
||||||
|
|
||||||
dev = bus_find_device(&coresight_bustype, NULL,
|
dev = bus_find_device_by_fwnode(&coresight_bustype, conn->child_fwnode);
|
||||||
(void *)conn->child_fwnode,
|
|
||||||
coresight_device_fwnode_match);
|
|
||||||
if (dev) {
|
if (dev) {
|
||||||
conn->child_dev = to_coresight_device(dev);
|
conn->child_dev = to_coresight_device(dev);
|
||||||
/* and put reference from 'bus_find_device()' */
|
/* and put reference from 'bus_find_device()' */
|
||||||
|
@ -789,12 +789,6 @@ static int intel_th_populate(struct intel_th *th)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int match_devt(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
dev_t devt = (dev_t)(unsigned long)(void *)data;
|
|
||||||
return dev->devt == devt;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int intel_th_output_open(struct inode *inode, struct file *file)
|
static int intel_th_output_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
const struct file_operations *fops;
|
const struct file_operations *fops;
|
||||||
@ -802,9 +796,7 @@ static int intel_th_output_open(struct inode *inode, struct file *file)
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
dev = bus_find_device(&intel_th_bus, NULL,
|
dev = bus_find_device_by_devt(&intel_th_bus, inode->i_rdev);
|
||||||
(void *)(unsigned long)inode->i_rdev,
|
|
||||||
match_devt);
|
|
||||||
if (!dev || !dev->driver)
|
if (!dev || !dev->driver)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
@ -89,13 +89,6 @@ static struct class stm_class = {
|
|||||||
.dev_groups = stm_groups,
|
.dev_groups = stm_groups,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int stm_dev_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
const char *name = data;
|
|
||||||
|
|
||||||
return sysfs_streq(name, dev_name(dev));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stm_find_device() - find stm device by name
|
* stm_find_device() - find stm device by name
|
||||||
* @buf: character buffer containing the name
|
* @buf: character buffer containing the name
|
||||||
@ -116,7 +109,7 @@ struct stm_device *stm_find_device(const char *buf)
|
|||||||
if (!stm_core_up)
|
if (!stm_core_up)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
dev = class_find_device(&stm_class, NULL, buf, stm_dev_match);
|
dev = class_find_device_by_name(&stm_class, buf);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -457,18 +457,12 @@ static struct pci_driver amd_mp2_pci_driver = {
|
|||||||
};
|
};
|
||||||
module_pci_driver(amd_mp2_pci_driver);
|
module_pci_driver(amd_mp2_pci_driver);
|
||||||
|
|
||||||
static int amd_mp2_device_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct amd_mp2_dev *amd_mp2_find_device(void)
|
struct amd_mp2_dev *amd_mp2_find_device(void)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct pci_dev *pci_dev;
|
struct pci_dev *pci_dev;
|
||||||
|
|
||||||
dev = driver_find_device(&amd_mp2_pci_driver.driver, NULL, NULL,
|
dev = driver_find_next_device(&amd_mp2_pci_driver.driver, NULL);
|
||||||
amd_mp2_device_match);
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -354,17 +354,11 @@ static int i2c_acpi_find_match_adapter(struct device *dev, const void *data)
|
|||||||
return ACPI_HANDLE(dev) == (acpi_handle)data;
|
return ACPI_HANDLE(dev) == (acpi_handle)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int i2c_acpi_find_match_device(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return ACPI_COMPANION(dev) == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle)
|
struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev = bus_find_device_by_acpi_dev(&i2c_bus_type, handle);
|
||||||
|
|
||||||
dev = bus_find_device(&i2c_bus_type, NULL, handle,
|
|
||||||
i2c_acpi_find_match_adapter);
|
|
||||||
return dev ? i2c_verify_adapter(dev) : NULL;
|
return dev ? i2c_verify_adapter(dev) : NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(i2c_acpi_find_adapter_by_handle);
|
EXPORT_SYMBOL_GPL(i2c_acpi_find_adapter_by_handle);
|
||||||
@ -373,8 +367,7 @@ static struct i2c_client *i2c_acpi_find_client_by_adev(struct acpi_device *adev)
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = bus_find_device(&i2c_bus_type, NULL, adev,
|
dev = bus_find_device_by_acpi_dev(&i2c_bus_type, adev);
|
||||||
i2c_acpi_find_match_device);
|
|
||||||
return dev ? i2c_verify_client(dev) : NULL;
|
return dev ? i2c_verify_client(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,11 +113,6 @@ void of_i2c_register_devices(struct i2c_adapter *adap)
|
|||||||
of_node_put(bus);
|
of_node_put(bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int of_dev_node_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int of_dev_or_parent_node_match(struct device *dev, const void *data)
|
static int of_dev_or_parent_node_match(struct device *dev, const void *data)
|
||||||
{
|
{
|
||||||
if (dev->of_node == data)
|
if (dev->of_node == data)
|
||||||
@ -135,7 +130,7 @@ struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct i2c_client *client;
|
struct i2c_client *client;
|
||||||
|
|
||||||
dev = bus_find_device(&i2c_bus_type, NULL, node, of_dev_node_match);
|
dev = bus_find_device_by_of_node(&i2c_bus_type, node);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -4499,19 +4499,13 @@ static const struct acpi_device_id hns_roce_acpi_match[] = {
|
|||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(acpi, hns_roce_acpi_match);
|
MODULE_DEVICE_TABLE(acpi, hns_roce_acpi_match);
|
||||||
|
|
||||||
static int hns_roce_node_match(struct device *dev, const void *fwnode)
|
|
||||||
{
|
|
||||||
return dev->fwnode == fwnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct
|
static struct
|
||||||
platform_device *hns_roce_find_pdev(struct fwnode_handle *fwnode)
|
platform_device *hns_roce_find_pdev(struct fwnode_handle *fwnode)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
/* get the 'device' corresponding to the matching 'fwnode' */
|
/* get the 'device' corresponding to the matching 'fwnode' */
|
||||||
dev = bus_find_device(&platform_bus_type, NULL,
|
dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
|
||||||
fwnode, hns_roce_node_match);
|
|
||||||
/* get the platform device */
|
/* get the platform device */
|
||||||
return dev ? to_platform_device(dev) : NULL;
|
return dev ? to_platform_device(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -2034,16 +2034,11 @@ arm_smmu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
|
|||||||
|
|
||||||
static struct platform_driver arm_smmu_driver;
|
static struct platform_driver arm_smmu_driver;
|
||||||
|
|
||||||
static int arm_smmu_match_node(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->fwnode == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
static
|
||||||
struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
|
struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
|
||||||
{
|
{
|
||||||
struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
|
struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
|
||||||
fwnode, arm_smmu_match_node);
|
fwnode);
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
return dev ? dev_get_drvdata(dev) : NULL;
|
return dev ? dev_get_drvdata(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -1426,16 +1426,11 @@ static bool arm_smmu_capable(enum iommu_cap cap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int arm_smmu_match_node(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->fwnode == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
static
|
||||||
struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
|
struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
|
||||||
{
|
{
|
||||||
struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
|
struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
|
||||||
fwnode, arm_smmu_match_node);
|
fwnode);
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
return dev ? dev_get_drvdata(dev) : NULL;
|
return dev ? dev_get_drvdata(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -214,13 +214,6 @@ static int led_resume(struct device *dev)
|
|||||||
|
|
||||||
static SIMPLE_DEV_PM_OPS(leds_class_dev_pm_ops, led_suspend, led_resume);
|
static SIMPLE_DEV_PM_OPS(leds_class_dev_pm_ops, led_suspend, led_resume);
|
||||||
|
|
||||||
static int match_name(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
if (!dev_name(dev))
|
|
||||||
return 0;
|
|
||||||
return !strcmp(dev_name(dev), (char *)data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int led_classdev_next_name(const char *init_name, char *name,
|
static int led_classdev_next_name(const char *init_name, char *name,
|
||||||
size_t len)
|
size_t len)
|
||||||
{
|
{
|
||||||
@ -231,7 +224,7 @@ static int led_classdev_next_name(const char *init_name, char *name,
|
|||||||
strlcpy(name, init_name, len);
|
strlcpy(name, init_name, len);
|
||||||
|
|
||||||
while ((ret < len) &&
|
while ((ret < len) &&
|
||||||
(dev = class_find_device(leds_class, NULL, name, match_name))) {
|
(dev = class_find_device_by_name(leds_class, name))) {
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
ret = snprintf(name, len, "%s_%u", init_name, ++i);
|
ret = snprintf(name, len, "%s_%u", init_name, ++i);
|
||||||
}
|
}
|
||||||
|
@ -87,16 +87,6 @@ static struct regmap_config altr_sysmgr_regmap_cfg = {
|
|||||||
.use_single_write = true,
|
.use_single_write = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* sysmgr_match_phandle
|
|
||||||
* Matching function used by driver_find_device().
|
|
||||||
* Return: True if match is found, otherwise false.
|
|
||||||
*/
|
|
||||||
static int sysmgr_match_phandle(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == (const struct device_node *)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* altr_sysmgr_regmap_lookup_by_phandle
|
* altr_sysmgr_regmap_lookup_by_phandle
|
||||||
* Find the sysmgr previous configured in probe() and return regmap property.
|
* Find the sysmgr previous configured in probe() and return regmap property.
|
||||||
@ -117,8 +107,8 @@ struct regmap *altr_sysmgr_regmap_lookup_by_phandle(struct device_node *np,
|
|||||||
if (!sysmgr_np)
|
if (!sysmgr_np)
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
|
|
||||||
dev = driver_find_device(&altr_sysmgr_driver.driver, NULL,
|
dev = driver_find_device_by_of_node(&altr_sysmgr_driver.driver,
|
||||||
(void *)sysmgr_np, sysmgr_match_phandle);
|
(void *)sysmgr_np);
|
||||||
of_node_put(sysmgr_np);
|
of_node_put(sysmgr_np);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return ERR_PTR(-EPROBE_DEFER);
|
return ERR_PTR(-EPROBE_DEFER);
|
||||||
|
@ -858,13 +858,6 @@ static ssize_t dev_state_show(struct device *device,
|
|||||||
}
|
}
|
||||||
static DEVICE_ATTR_RO(dev_state);
|
static DEVICE_ATTR_RO(dev_state);
|
||||||
|
|
||||||
static int match_devt(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
const dev_t *devt = data;
|
|
||||||
|
|
||||||
return dev->devt == *devt;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dev_set_devstate: set to new device state and notify sysfs file.
|
* dev_set_devstate: set to new device state and notify sysfs file.
|
||||||
*
|
*
|
||||||
@ -880,7 +873,7 @@ void mei_set_devstate(struct mei_device *dev, enum mei_dev_state state)
|
|||||||
|
|
||||||
dev->dev_state = state;
|
dev->dev_state = state;
|
||||||
|
|
||||||
clsdev = class_find_device(mei_class, NULL, &dev->cdev.dev, match_devt);
|
clsdev = class_find_device_by_devt(mei_class, dev->cdev.dev);
|
||||||
if (clsdev) {
|
if (clsdev) {
|
||||||
sysfs_notify(&clsdev->kobj, NULL, "dev_state");
|
sysfs_notify(&clsdev->kobj, NULL, "dev_state");
|
||||||
put_device(clsdev);
|
put_device(clsdev);
|
||||||
|
@ -405,17 +405,12 @@ int mux_control_deselect(struct mux_control *mux)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mux_control_deselect);
|
EXPORT_SYMBOL_GPL(mux_control_deselect);
|
||||||
|
|
||||||
static int of_dev_node_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note this function returns a reference to the mux_chip dev. */
|
/* Note this function returns a reference to the mux_chip dev. */
|
||||||
static struct mux_chip *of_find_mux_chip_by_node(struct device_node *np)
|
static struct mux_chip *of_find_mux_chip_by_node(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = class_find_device(&mux_class, NULL, np, of_dev_node_match);
|
dev = class_find_device_by_of_node(&mux_class, np);
|
||||||
|
|
||||||
return dev ? to_mux_chip(dev) : NULL;
|
return dev ? to_mux_chip(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -754,17 +754,11 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
|
|||||||
return (void *)misc_op;
|
return (void *)misc_op;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hns_dsaf_dev_match(struct device *dev, const void *fwnode)
|
|
||||||
{
|
|
||||||
return dev->fwnode == fwnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct
|
struct
|
||||||
platform_device *hns_dsaf_find_platform_device(struct fwnode_handle *fwnode)
|
platform_device *hns_dsaf_find_platform_device(struct fwnode_handle *fwnode)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = bus_find_device(&platform_bus_type, NULL,
|
dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
|
||||||
fwnode, hns_dsaf_dev_match);
|
|
||||||
return dev ? to_platform_device(dev) : NULL;
|
return dev ? to_platform_device(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -262,11 +262,6 @@ static struct class mdio_bus_class = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_OF_MDIO)
|
#if IS_ENABLED(CONFIG_OF_MDIO)
|
||||||
/* Helper function for of_mdio_find_bus */
|
|
||||||
static int of_mdio_bus_match(struct device *dev, const void *mdio_bus_np)
|
|
||||||
{
|
|
||||||
return dev->of_node == mdio_bus_np;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* of_mdio_find_bus - Given an mii_bus node, find the mii_bus.
|
* of_mdio_find_bus - Given an mii_bus node, find the mii_bus.
|
||||||
* @mdio_bus_np: Pointer to the mii_bus.
|
* @mdio_bus_np: Pointer to the mii_bus.
|
||||||
@ -287,9 +282,7 @@ struct mii_bus *of_mdio_find_bus(struct device_node *mdio_bus_np)
|
|||||||
if (!mdio_bus_np)
|
if (!mdio_bus_np)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
d = class_find_device(&mdio_bus_class, NULL, mdio_bus_np,
|
d = class_find_device_by_of_node(&mdio_bus_class, mdio_bus_np);
|
||||||
of_mdio_bus_match);
|
|
||||||
|
|
||||||
return d ? to_mii_bus(d) : NULL;
|
return d ? to_mii_bus(d) : NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(of_mdio_find_bus);
|
EXPORT_SYMBOL(of_mdio_find_bus);
|
||||||
|
@ -76,11 +76,6 @@ static struct bus_type nvmem_bus_type = {
|
|||||||
.name = "nvmem",
|
.name = "nvmem",
|
||||||
};
|
};
|
||||||
|
|
||||||
static int of_nvmem_match(struct device *dev, const void *nvmem_np)
|
|
||||||
{
|
|
||||||
return dev->of_node == nvmem_np;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct nvmem_device *of_nvmem_find(struct device_node *nvmem_np)
|
static struct nvmem_device *of_nvmem_find(struct device_node *nvmem_np)
|
||||||
{
|
{
|
||||||
struct device *d;
|
struct device *d;
|
||||||
@ -88,7 +83,7 @@ static struct nvmem_device *of_nvmem_find(struct device_node *nvmem_np)
|
|||||||
if (!nvmem_np)
|
if (!nvmem_np)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
d = bus_find_device(&nvmem_bus_type, NULL, nvmem_np, of_nvmem_match);
|
d = bus_find_device_by_of_node(&nvmem_bus_type, nvmem_np);
|
||||||
|
|
||||||
if (!d)
|
if (!d)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -280,12 +280,6 @@ unregister:
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(of_mdiobus_register);
|
EXPORT_SYMBOL(of_mdiobus_register);
|
||||||
|
|
||||||
/* Helper function for of_phy_find_device */
|
|
||||||
static int of_phy_match(struct device *dev, const void *phy_np)
|
|
||||||
{
|
|
||||||
return dev->of_node == phy_np;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_phy_find_device - Give a PHY node, find the phy_device
|
* of_phy_find_device - Give a PHY node, find the phy_device
|
||||||
* @phy_np: Pointer to the phy's device tree node
|
* @phy_np: Pointer to the phy's device tree node
|
||||||
@ -301,7 +295,7 @@ struct phy_device *of_phy_find_device(struct device_node *phy_np)
|
|||||||
if (!phy_np)
|
if (!phy_np)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
d = bus_find_device(&mdio_bus_type, NULL, phy_np, of_phy_match);
|
d = bus_find_device_by_of_node(&mdio_bus_type, phy_np);
|
||||||
if (d) {
|
if (d) {
|
||||||
mdiodev = to_mdio_device(d);
|
mdiodev = to_mdio_device(d);
|
||||||
if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
|
if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
|
||||||
|
@ -37,11 +37,6 @@ static const struct of_device_id of_skipped_node_table[] = {
|
|||||||
{} /* Empty terminated list */
|
{} /* Empty terminated list */
|
||||||
};
|
};
|
||||||
|
|
||||||
static int of_dev_node_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* of_find_device_by_node - Find the platform_device associated with a node
|
* of_find_device_by_node - Find the platform_device associated with a node
|
||||||
* @np: Pointer to device tree node
|
* @np: Pointer to device tree node
|
||||||
@ -55,7 +50,7 @@ struct platform_device *of_find_device_by_node(struct device_node *np)
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = bus_find_device(&platform_bus_type, NULL, np, of_dev_node_match);
|
dev = bus_find_device_by_of_node(&platform_bus_type, np);
|
||||||
return dev ? to_platform_device(dev) : NULL;
|
return dev ? to_platform_device(dev) : NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(of_find_device_by_node);
|
EXPORT_SYMBOL(of_find_device_by_node);
|
||||||
|
@ -64,11 +64,6 @@ static struct resource *get_pci_domain_busn_res(int domain_nr)
|
|||||||
return &r->res;
|
return &r->res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_anything(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some device drivers need know if PCI is initiated.
|
* Some device drivers need know if PCI is initiated.
|
||||||
* Basically, we think PCI is not initiated when there
|
* Basically, we think PCI is not initiated when there
|
||||||
@ -79,7 +74,7 @@ int no_pci_devices(void)
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
int no_devices;
|
int no_devices;
|
||||||
|
|
||||||
dev = bus_find_device(&pci_bus_type, NULL, NULL, find_anything);
|
dev = bus_find_next_device(&pci_bus_type, NULL);
|
||||||
no_devices = (dev == NULL);
|
no_devices = (dev == NULL);
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
return no_devices;
|
return no_devices;
|
||||||
|
@ -460,16 +460,11 @@ error:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int of_node_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct regulator_dev *of_find_regulator_by_node(struct device_node *np)
|
struct regulator_dev *of_find_regulator_by_node(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = class_find_device(®ulator_class, NULL, np, of_node_match);
|
dev = class_find_device_by_of_node(®ulator_class, np);
|
||||||
|
|
||||||
return dev ? dev_to_rdev(dev) : NULL;
|
return dev ? dev_to_rdev(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -663,21 +663,12 @@ void rtc_update_irq(struct rtc_device *rtc,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rtc_update_irq);
|
EXPORT_SYMBOL_GPL(rtc_update_irq);
|
||||||
|
|
||||||
static int __rtc_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
const char *name = data;
|
|
||||||
|
|
||||||
if (strcmp(dev_name(dev), name) == 0)
|
|
||||||
return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct rtc_device *rtc_class_open(const char *name)
|
struct rtc_device *rtc_class_open(const char *name)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
struct rtc_device *rtc = NULL;
|
struct rtc_device *rtc = NULL;
|
||||||
|
|
||||||
dev = class_find_device(rtc_class, NULL, name, __rtc_match);
|
dev = class_find_device_by_name(rtc_class, name);
|
||||||
if (dev)
|
if (dev)
|
||||||
rtc = to_rtc_device(dev);
|
rtc = to_rtc_device(dev);
|
||||||
|
|
||||||
|
@ -581,11 +581,6 @@ int ccwgroup_driver_register(struct ccwgroup_driver *cdriver)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ccwgroup_driver_register);
|
EXPORT_SYMBOL(ccwgroup_driver_register);
|
||||||
|
|
||||||
static int __ccwgroup_match_all(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ccwgroup_driver_unregister() - deregister a ccw group driver
|
* ccwgroup_driver_unregister() - deregister a ccw group driver
|
||||||
* @cdriver: driver to be deregistered
|
* @cdriver: driver to be deregistered
|
||||||
@ -597,8 +592,7 @@ void ccwgroup_driver_unregister(struct ccwgroup_driver *cdriver)
|
|||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
/* We don't want ccwgroup devices to live longer than their driver. */
|
/* We don't want ccwgroup devices to live longer than their driver. */
|
||||||
while ((dev = driver_find_device(&cdriver->driver, NULL, NULL,
|
while ((dev = driver_find_next_device(&cdriver->driver, NULL))) {
|
||||||
__ccwgroup_match_all))) {
|
|
||||||
struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
|
struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
|
||||||
|
|
||||||
ccwgroup_ungroup(gdev);
|
ccwgroup_ungroup(gdev);
|
||||||
@ -608,13 +602,6 @@ void ccwgroup_driver_unregister(struct ccwgroup_driver *cdriver)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ccwgroup_driver_unregister);
|
EXPORT_SYMBOL(ccwgroup_driver_unregister);
|
||||||
|
|
||||||
static int __ccwgroupdev_check_busid(struct device *dev, const void *id)
|
|
||||||
{
|
|
||||||
const char *bus_id = id;
|
|
||||||
|
|
||||||
return (strcmp(bus_id, dev_name(dev)) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get_ccwgroupdev_by_busid() - obtain device from a bus id
|
* get_ccwgroupdev_by_busid() - obtain device from a bus id
|
||||||
* @gdrv: driver the device is owned by
|
* @gdrv: driver the device is owned by
|
||||||
@ -631,8 +618,7 @@ struct ccwgroup_device *get_ccwgroupdev_by_busid(struct ccwgroup_driver *gdrv,
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = driver_find_device(&gdrv->driver, NULL, bus_id,
|
dev = driver_find_device_by_name(&gdrv->driver, bus_id);
|
||||||
__ccwgroupdev_check_busid);
|
|
||||||
|
|
||||||
return dev ? to_ccwgroupdev(dev) : NULL;
|
return dev ? to_ccwgroupdev(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -1695,18 +1695,6 @@ int ccw_device_force_console(struct ccw_device *cdev)
|
|||||||
EXPORT_SYMBOL_GPL(ccw_device_force_console);
|
EXPORT_SYMBOL_GPL(ccw_device_force_console);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* get ccw_device matching the busid, but only if owned by cdrv
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
__ccwdev_check_busid(struct device *dev, const void *id)
|
|
||||||
{
|
|
||||||
const char *bus_id = id;
|
|
||||||
|
|
||||||
return (strcmp(bus_id, dev_name(dev)) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get_ccwdev_by_busid() - obtain device from a bus id
|
* get_ccwdev_by_busid() - obtain device from a bus id
|
||||||
* @cdrv: driver the device is owned by
|
* @cdrv: driver the device is owned by
|
||||||
@ -1723,8 +1711,7 @@ struct ccw_device *get_ccwdev_by_busid(struct ccw_driver *cdrv,
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = driver_find_device(&cdrv->driver, NULL, (void *)bus_id,
|
dev = driver_find_device_by_name(&cdrv->driver, bus_id);
|
||||||
__ccwdev_check_busid);
|
|
||||||
|
|
||||||
return dev ? to_ccwdev(dev) : NULL;
|
return dev ? to_ccwdev(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -133,18 +133,6 @@ struct zcdn_device {
|
|||||||
static int zcdn_create(const char *name);
|
static int zcdn_create(const char *name);
|
||||||
static int zcdn_destroy(const char *name);
|
static int zcdn_destroy(const char *name);
|
||||||
|
|
||||||
/* helper function, matches the name for find_zcdndev_by_name() */
|
|
||||||
static int __match_zcdn_name(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return strcmp(dev_name(dev), (const char *)data) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* helper function, matches the devt value for find_zcdndev_by_devt() */
|
|
||||||
static int __match_zcdn_devt(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->devt == *((dev_t *) data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find zcdn device by name.
|
* Find zcdn device by name.
|
||||||
* Returns reference to the zcdn device which needs to be released
|
* Returns reference to the zcdn device which needs to be released
|
||||||
@ -152,10 +140,7 @@ static int __match_zcdn_devt(struct device *dev, const void *data)
|
|||||||
*/
|
*/
|
||||||
static inline struct zcdn_device *find_zcdndev_by_name(const char *name)
|
static inline struct zcdn_device *find_zcdndev_by_name(const char *name)
|
||||||
{
|
{
|
||||||
struct device *dev =
|
struct device *dev = class_find_device_by_name(zcrypt_class, name);
|
||||||
class_find_device(zcrypt_class, NULL,
|
|
||||||
(void *) name,
|
|
||||||
__match_zcdn_name);
|
|
||||||
|
|
||||||
return dev ? to_zcdn_dev(dev) : NULL;
|
return dev ? to_zcdn_dev(dev) : NULL;
|
||||||
}
|
}
|
||||||
@ -167,10 +152,7 @@ static inline struct zcdn_device *find_zcdndev_by_name(const char *name)
|
|||||||
*/
|
*/
|
||||||
static inline struct zcdn_device *find_zcdndev_by_devt(dev_t devt)
|
static inline struct zcdn_device *find_zcdndev_by_devt(dev_t devt)
|
||||||
{
|
{
|
||||||
struct device *dev =
|
struct device *dev = class_find_device_by_devt(zcrypt_class, devt);
|
||||||
class_find_device(zcrypt_class, NULL,
|
|
||||||
(void *) &devt,
|
|
||||||
__match_zcdn_devt);
|
|
||||||
|
|
||||||
return dev ? to_zcdn_dev(dev) : NULL;
|
return dev ? to_zcdn_dev(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
@ -372,15 +372,10 @@ static ssize_t proc_scsi_write(struct file *file, const char __user *buf,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int always_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct device *next_scsi_device(struct device *start)
|
static inline struct device *next_scsi_device(struct device *start)
|
||||||
{
|
{
|
||||||
struct device *next = bus_find_device(&scsi_bus_type, start, NULL,
|
struct device *next = bus_find_next_device(&scsi_bus_type, start);
|
||||||
always_match);
|
|
||||||
put_device(start);
|
put_device(start);
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
@ -3652,37 +3652,25 @@ EXPORT_SYMBOL_GPL(spi_write_then_read);
|
|||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_OF)
|
#if IS_ENABLED(CONFIG_OF)
|
||||||
static int __spi_of_device_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* must call put_device() when done with returned spi_device device */
|
/* must call put_device() when done with returned spi_device device */
|
||||||
struct spi_device *of_find_spi_device_by_node(struct device_node *node)
|
struct spi_device *of_find_spi_device_by_node(struct device_node *node)
|
||||||
{
|
{
|
||||||
struct device *dev = bus_find_device(&spi_bus_type, NULL, node,
|
struct device *dev = bus_find_device_by_of_node(&spi_bus_type, node);
|
||||||
__spi_of_device_match);
|
|
||||||
return dev ? to_spi_device(dev) : NULL;
|
return dev ? to_spi_device(dev) : NULL;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(of_find_spi_device_by_node);
|
EXPORT_SYMBOL_GPL(of_find_spi_device_by_node);
|
||||||
#endif /* IS_ENABLED(CONFIG_OF) */
|
#endif /* IS_ENABLED(CONFIG_OF) */
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_OF_DYNAMIC)
|
#if IS_ENABLED(CONFIG_OF_DYNAMIC)
|
||||||
static int __spi_of_controller_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* the spi controllers are not using spi_bus, so we find it with another way */
|
/* the spi controllers are not using spi_bus, so we find it with another way */
|
||||||
static struct spi_controller *of_find_spi_controller_by_node(struct device_node *node)
|
static struct spi_controller *of_find_spi_controller_by_node(struct device_node *node)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = class_find_device(&spi_master_class, NULL, node,
|
dev = class_find_device_by_of_node(&spi_master_class, node);
|
||||||
__spi_of_controller_match);
|
|
||||||
if (!dev && IS_ENABLED(CONFIG_SPI_SLAVE))
|
if (!dev && IS_ENABLED(CONFIG_SPI_SLAVE))
|
||||||
dev = class_find_device(&spi_slave_class, NULL, node,
|
dev = class_find_device_by_of_node(&spi_slave_class, node);
|
||||||
__spi_of_controller_match);
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -3753,11 +3741,6 @@ static int spi_acpi_controller_match(struct device *dev, const void *data)
|
|||||||
return ACPI_COMPANION(dev->parent) == data;
|
return ACPI_COMPANION(dev->parent) == data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int spi_acpi_device_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return ACPI_COMPANION(dev) == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct spi_controller *acpi_spi_find_controller_by_adev(struct acpi_device *adev)
|
static struct spi_controller *acpi_spi_find_controller_by_adev(struct acpi_device *adev)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@ -3777,8 +3760,7 @@ static struct spi_device *acpi_spi_find_device_by_adev(struct acpi_device *adev)
|
|||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = bus_find_device(&spi_bus_type, NULL, adev, spi_acpi_device_match);
|
dev = bus_find_device_by_acpi_dev(&spi_bus_type, adev);
|
||||||
|
|
||||||
return dev ? to_spi_device(dev) : NULL;
|
return dev ? to_spi_device(dev) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2952,17 +2952,11 @@ void do_SAK(struct tty_struct *tty)
|
|||||||
|
|
||||||
EXPORT_SYMBOL(do_SAK);
|
EXPORT_SYMBOL(do_SAK);
|
||||||
|
|
||||||
static int dev_match_devt(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
const dev_t *devt = data;
|
|
||||||
return dev->devt == *devt;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Must put_device() after it's unused! */
|
/* Must put_device() after it's unused! */
|
||||||
static struct device *tty_get_device(struct tty_struct *tty)
|
static struct device *tty_get_device(struct tty_struct *tty)
|
||||||
{
|
{
|
||||||
dev_t devt = tty_devnum(tty);
|
dev_t devt = tty_devnum(tty);
|
||||||
return class_find_device(tty_class, NULL, &devt, dev_match_devt);
|
return class_find_device_by_devt(tty_class, devt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -942,17 +942,11 @@ error:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int match_devt(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->devt == (dev_t)(unsigned long)(void *)data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct usb_device *usbdev_lookup_by_devt(dev_t devt)
|
static struct usb_device *usbdev_lookup_by_devt(dev_t devt)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
|
||||||
dev = bus_find_device(&usb_bus_type, NULL,
|
dev = bus_find_device_by_devt(&usb_bus_type, devt);
|
||||||
(void *) (unsigned long) devt, match_devt);
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
return to_usb_device(dev);
|
return to_usb_device(dev);
|
||||||
|
@ -85,16 +85,6 @@ enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usb_role_switch_get_role);
|
EXPORT_SYMBOL_GPL(usb_role_switch_get_role);
|
||||||
|
|
||||||
static int switch_fwnode_match(struct device *dev, const void *fwnode)
|
|
||||||
{
|
|
||||||
return dev_fwnode(dev) == fwnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int switch_name_match(struct device *dev, const void *name)
|
|
||||||
{
|
|
||||||
return !strcmp((const char *)name, dev_name(dev));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *usb_role_switch_match(struct device_connection *con, int ep,
|
static void *usb_role_switch_match(struct device_connection *con, int ep,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
@ -104,11 +94,9 @@ static void *usb_role_switch_match(struct device_connection *con, int ep,
|
|||||||
if (con->id && !fwnode_property_present(con->fwnode, con->id))
|
if (con->id && !fwnode_property_present(con->fwnode, con->id))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
dev = class_find_device(role_class, NULL, con->fwnode,
|
dev = class_find_device_by_fwnode(role_class, con->fwnode);
|
||||||
switch_fwnode_match);
|
|
||||||
} else {
|
} else {
|
||||||
dev = class_find_device(role_class, NULL, con->endpoint[ep],
|
dev = class_find_device_by_name(role_class, con->endpoint[ep]);
|
||||||
switch_name_match);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER);
|
return dev ? to_role_switch(dev) : ERR_PTR(-EPROBE_DEFER);
|
||||||
|
@ -205,16 +205,6 @@ static void typec_altmode_put_partner(struct altmode *altmode)
|
|||||||
put_device(&adev->dev);
|
put_device(&adev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int typec_port_fwnode_match(struct device *dev, const void *fwnode)
|
|
||||||
{
|
|
||||||
return dev_fwnode(dev) == fwnode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int typec_port_name_match(struct device *dev, const void *name)
|
|
||||||
{
|
|
||||||
return !strcmp((const char *)name, dev_name(dev));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *typec_port_match(struct device_connection *con, int ep, void *data)
|
static void *typec_port_match(struct device_connection *con, int ep, void *data)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@ -224,11 +214,9 @@ static void *typec_port_match(struct device_connection *con, int ep, void *data)
|
|||||||
* we need to return ERR_PTR(-PROBE_DEFER) when there is no device.
|
* we need to return ERR_PTR(-PROBE_DEFER) when there is no device.
|
||||||
*/
|
*/
|
||||||
if (con->fwnode)
|
if (con->fwnode)
|
||||||
return class_find_device(typec_class, NULL, con->fwnode,
|
return class_find_device_by_fwnode(typec_class, con->fwnode);
|
||||||
typec_port_fwnode_match);
|
|
||||||
|
|
||||||
dev = class_find_device(typec_class, NULL, con->endpoint[ep],
|
dev = class_find_device_by_name(typec_class, con->endpoint[ep]);
|
||||||
typec_port_name_match);
|
|
||||||
|
|
||||||
return dev ? dev : ERR_PTR(-EPROBE_DEFER);
|
return dev ? dev : ERR_PTR(-EPROBE_DEFER);
|
||||||
}
|
}
|
||||||
|
@ -164,16 +164,100 @@ void subsys_dev_iter_init(struct subsys_dev_iter *iter,
|
|||||||
struct device *subsys_dev_iter_next(struct subsys_dev_iter *iter);
|
struct device *subsys_dev_iter_next(struct subsys_dev_iter *iter);
|
||||||
void subsys_dev_iter_exit(struct subsys_dev_iter *iter);
|
void subsys_dev_iter_exit(struct subsys_dev_iter *iter);
|
||||||
|
|
||||||
|
int device_match_name(struct device *dev, const void *name);
|
||||||
int device_match_of_node(struct device *dev, const void *np);
|
int device_match_of_node(struct device *dev, const void *np);
|
||||||
|
int device_match_fwnode(struct device *dev, const void *fwnode);
|
||||||
|
int device_match_devt(struct device *dev, const void *pdevt);
|
||||||
|
int device_match_acpi_dev(struct device *dev, const void *adev);
|
||||||
|
int device_match_any(struct device *dev, const void *unused);
|
||||||
|
|
||||||
int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
|
int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data,
|
||||||
int (*fn)(struct device *dev, void *data));
|
int (*fn)(struct device *dev, void *data));
|
||||||
struct device *bus_find_device(struct bus_type *bus, struct device *start,
|
struct device *bus_find_device(struct bus_type *bus, struct device *start,
|
||||||
const void *data,
|
const void *data,
|
||||||
int (*match)(struct device *dev, const void *data));
|
int (*match)(struct device *dev, const void *data));
|
||||||
struct device *bus_find_device_by_name(struct bus_type *bus,
|
/**
|
||||||
struct device *start,
|
* bus_find_device_by_name - device iterator for locating a particular device
|
||||||
const char *name);
|
* of a specific name.
|
||||||
|
* @bus: bus type
|
||||||
|
* @start: Device to begin with
|
||||||
|
* @name: name of the device to match
|
||||||
|
*/
|
||||||
|
static inline struct device *bus_find_device_by_name(struct bus_type *bus,
|
||||||
|
struct device *start,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
return bus_find_device(bus, start, name, device_match_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bus_find_device_by_of_node : device iterator for locating a particular device
|
||||||
|
* matching the of_node.
|
||||||
|
* @bus: bus type
|
||||||
|
* @np: of_node of the device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
bus_find_device_by_of_node(struct bus_type *bus, const struct device_node *np)
|
||||||
|
{
|
||||||
|
return bus_find_device(bus, NULL, np, device_match_of_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bus_find_device_by_fwnode : device iterator for locating a particular device
|
||||||
|
* matching the fwnode.
|
||||||
|
* @bus: bus type
|
||||||
|
* @fwnode: fwnode of the device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
bus_find_device_by_fwnode(struct bus_type *bus, const struct fwnode_handle *fwnode)
|
||||||
|
{
|
||||||
|
return bus_find_device(bus, NULL, fwnode, device_match_fwnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bus_find_device_by_devt : device iterator for locating a particular device
|
||||||
|
* matching the device type.
|
||||||
|
* @bus: bus type
|
||||||
|
* @devt: device type of the device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *bus_find_device_by_devt(struct bus_type *bus,
|
||||||
|
dev_t devt)
|
||||||
|
{
|
||||||
|
return bus_find_device(bus, NULL, &devt, device_match_devt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bus_find_next_device - Find the next device after a given device in a
|
||||||
|
* given bus.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
bus_find_next_device(struct bus_type *bus,struct device *cur)
|
||||||
|
{
|
||||||
|
return bus_find_device(bus, cur, NULL, device_match_any);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI
|
||||||
|
struct acpi_device;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bus_find_device_by_acpi_dev : device iterator for locating a particular device
|
||||||
|
* matching the ACPI COMPANION device.
|
||||||
|
* @bus: bus type
|
||||||
|
* @adev: ACPI COMPANION device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
bus_find_device_by_acpi_dev(struct bus_type *bus, const struct acpi_device *adev)
|
||||||
|
{
|
||||||
|
return bus_find_device(bus, NULL, adev, device_match_acpi_dev);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline struct device *
|
||||||
|
bus_find_device_by_acpi_dev(struct bus_type *bus, const void *adev)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct device *subsys_find_device_by_id(struct bus_type *bus, unsigned int id,
|
struct device *subsys_find_device_by_id(struct bus_type *bus, unsigned int id,
|
||||||
struct device *hint);
|
struct device *hint);
|
||||||
int bus_for_each_drv(struct bus_type *bus, struct device_driver *start,
|
int bus_for_each_drv(struct bus_type *bus, struct device_driver *start,
|
||||||
@ -342,6 +426,83 @@ struct device *driver_find_device(struct device_driver *drv,
|
|||||||
struct device *start, const void *data,
|
struct device *start, const void *data,
|
||||||
int (*match)(struct device *dev, const void *data));
|
int (*match)(struct device *dev, const void *data));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* driver_find_device_by_name - device iterator for locating a particular device
|
||||||
|
* of a specific name.
|
||||||
|
* @driver: the driver we're iterating
|
||||||
|
* @name: name of the device to match
|
||||||
|
*/
|
||||||
|
static inline struct device *driver_find_device_by_name(struct device_driver *drv,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
return driver_find_device(drv, NULL, name, device_match_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* driver_find_device_by_of_node- device iterator for locating a particular device
|
||||||
|
* by of_node pointer.
|
||||||
|
* @driver: the driver we're iterating
|
||||||
|
* @np: of_node pointer to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
driver_find_device_by_of_node(struct device_driver *drv,
|
||||||
|
const struct device_node *np)
|
||||||
|
{
|
||||||
|
return driver_find_device(drv, NULL, np, device_match_of_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* driver_find_device_by_fwnode- device iterator for locating a particular device
|
||||||
|
* by fwnode pointer.
|
||||||
|
* @driver: the driver we're iterating
|
||||||
|
* @fwnode: fwnode pointer to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
driver_find_device_by_fwnode(struct device_driver *drv,
|
||||||
|
const struct fwnode_handle *fwnode)
|
||||||
|
{
|
||||||
|
return driver_find_device(drv, NULL, fwnode, device_match_fwnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* driver_find_device_by_devt- device iterator for locating a particular device
|
||||||
|
* by devt.
|
||||||
|
* @driver: the driver we're iterating
|
||||||
|
* @devt: devt pointer to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *driver_find_device_by_devt(struct device_driver *drv,
|
||||||
|
dev_t devt)
|
||||||
|
{
|
||||||
|
return driver_find_device(drv, NULL, &devt, device_match_devt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct device *driver_find_next_device(struct device_driver *drv,
|
||||||
|
struct device *start)
|
||||||
|
{
|
||||||
|
return driver_find_device(drv, start, NULL, device_match_any);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI
|
||||||
|
/**
|
||||||
|
* driver_find_device_by_acpi_dev : device iterator for locating a particular
|
||||||
|
* device matching the ACPI_COMPANION device.
|
||||||
|
* @driver: the driver we're iterating
|
||||||
|
* @adev: ACPI_COMPANION device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
driver_find_device_by_acpi_dev(struct device_driver *drv,
|
||||||
|
const struct acpi_device *adev)
|
||||||
|
{
|
||||||
|
return driver_find_device(drv, NULL, adev, device_match_acpi_dev);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline struct device *
|
||||||
|
driver_find_device_by_acpi_dev(struct device_driver *drv, const void *adev)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void driver_deferred_probe_add(struct device *dev);
|
void driver_deferred_probe_add(struct device *dev);
|
||||||
int driver_deferred_probe_check_state(struct device *dev);
|
int driver_deferred_probe_check_state(struct device *dev);
|
||||||
int driver_deferred_probe_check_state_continue(struct device *dev);
|
int driver_deferred_probe_check_state_continue(struct device *dev);
|
||||||
@ -471,6 +632,76 @@ extern struct device *class_find_device(struct class *class,
|
|||||||
struct device *start, const void *data,
|
struct device *start, const void *data,
|
||||||
int (*match)(struct device *, const void *));
|
int (*match)(struct device *, const void *));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* class_find_device_by_name - device iterator for locating a particular device
|
||||||
|
* of a specific name.
|
||||||
|
* @class: class type
|
||||||
|
* @name: name of the device to match
|
||||||
|
*/
|
||||||
|
static inline struct device *class_find_device_by_name(struct class *class,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
return class_find_device(class, NULL, name, device_match_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* class_find_device_by_of_node : device iterator for locating a particular device
|
||||||
|
* matching the of_node.
|
||||||
|
* @class: class type
|
||||||
|
* @np: of_node of the device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
class_find_device_by_of_node(struct class *class, const struct device_node *np)
|
||||||
|
{
|
||||||
|
return class_find_device(class, NULL, np, device_match_of_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* class_find_device_by_fwnode : device iterator for locating a particular device
|
||||||
|
* matching the fwnode.
|
||||||
|
* @class: class type
|
||||||
|
* @fwnode: fwnode of the device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
class_find_device_by_fwnode(struct class *class,
|
||||||
|
const struct fwnode_handle *fwnode)
|
||||||
|
{
|
||||||
|
return class_find_device(class, NULL, fwnode, device_match_fwnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* class_find_device_by_devt : device iterator for locating a particular device
|
||||||
|
* matching the device type.
|
||||||
|
* @class: class type
|
||||||
|
* @devt: device type of the device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *class_find_device_by_devt(struct class *class,
|
||||||
|
dev_t devt)
|
||||||
|
{
|
||||||
|
return class_find_device(class, NULL, &devt, device_match_devt);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI
|
||||||
|
struct acpi_device;
|
||||||
|
/**
|
||||||
|
* class_find_device_by_acpi_dev : device iterator for locating a particular
|
||||||
|
* device matching the ACPI_COMPANION device.
|
||||||
|
* @class: class type
|
||||||
|
* @adev: ACPI_COMPANION device to match.
|
||||||
|
*/
|
||||||
|
static inline struct device *
|
||||||
|
class_find_device_by_acpi_dev(struct class *class, const struct acpi_device *adev)
|
||||||
|
{
|
||||||
|
return class_find_device(class, NULL, adev, device_match_acpi_dev);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline struct device *
|
||||||
|
class_find_device_by_acpi_dev(struct class *class, const void *adev)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct class_attribute {
|
struct class_attribute {
|
||||||
struct attribute attr;
|
struct attribute attr;
|
||||||
ssize_t (*show)(struct class *class, struct class_attribute *attr,
|
ssize_t (*show)(struct class *class, struct class_attribute *attr,
|
||||||
|
@ -51,6 +51,9 @@ extern struct device platform_bus;
|
|||||||
extern void arch_setup_pdev_archdata(struct platform_device *);
|
extern void arch_setup_pdev_archdata(struct platform_device *);
|
||||||
extern struct resource *platform_get_resource(struct platform_device *,
|
extern struct resource *platform_get_resource(struct platform_device *,
|
||||||
unsigned int, unsigned int);
|
unsigned int, unsigned int);
|
||||||
|
extern struct device *
|
||||||
|
platform_find_device_by_driver(struct device *start,
|
||||||
|
const struct device_driver *drv);
|
||||||
extern void __iomem *
|
extern void __iomem *
|
||||||
devm_platform_ioremap_resource(struct platform_device *pdev,
|
devm_platform_ioremap_resource(struct platform_device *pdev,
|
||||||
unsigned int index);
|
unsigned int index);
|
||||||
|
@ -23,11 +23,6 @@
|
|||||||
LIST_HEAD(cfg802154_rdev_list);
|
LIST_HEAD(cfg802154_rdev_list);
|
||||||
int cfg802154_rdev_list_generation;
|
int cfg802154_rdev_list_generation;
|
||||||
|
|
||||||
static int wpan_phy_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return !strcmp(dev_name(dev), (const char *)data);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wpan_phy *wpan_phy_find(const char *str)
|
struct wpan_phy *wpan_phy_find(const char *str)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@ -35,7 +30,7 @@ struct wpan_phy *wpan_phy_find(const char *str)
|
|||||||
if (WARN_ON(!str))
|
if (WARN_ON(!str))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
dev = class_find_device(&wpan_phy_class, NULL, str, wpan_phy_match);
|
dev = class_find_device_by_name(&wpan_phy_class, str);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -422,11 +422,6 @@ static const struct dailink_match_data dailink_match[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int of_dev_node_match(struct device *dev, const void *data)
|
|
||||||
{
|
|
||||||
return dev->of_node == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int rockchip_sound_codec_node_match(struct device_node *np_codec)
|
static int rockchip_sound_codec_node_match(struct device_node *np_codec)
|
||||||
{
|
{
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
@ -438,8 +433,8 @@ static int rockchip_sound_codec_node_match(struct device_node *np_codec)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (dailink_match[i].bus_type) {
|
if (dailink_match[i].bus_type) {
|
||||||
dev = bus_find_device(dailink_match[i].bus_type, NULL,
|
dev = bus_find_device_by_of_node(dailink_match[i].bus_type,
|
||||||
np_codec, of_dev_node_match);
|
np_codec);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
continue;
|
continue;
|
||||||
put_device(dev);
|
put_device(dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user