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
|
||||
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)
|
||||
{
|
||||
struct device *dev;
|
||||
u32 val;
|
||||
struct tegra_ahb *ahb;
|
||||
|
||||
dev = driver_find_device(&tegra_ahb_driver.driver, NULL, dn,
|
||||
tegra_ahb_match_by_smmu);
|
||||
dev = driver_find_device_by_of_node(&tegra_ahb_driver.driver, dn);
|
||||
if (!dev)
|
||||
return -EPROBE_DEFER;
|
||||
ahb = dev_get_drvdata(dev);
|
||||
|
@ -342,30 +342,6 @@ struct device *bus_find_device(struct bus_type *bus,
|
||||
}
|
||||
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: subsystem
|
||||
|
@ -2867,13 +2867,6 @@ struct device *device_create_with_groups(struct class *class,
|
||||
}
|
||||
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()
|
||||
* @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;
|
||||
|
||||
dev = class_find_device(class, NULL, &devt, __match_devt);
|
||||
dev = class_find_device_by_devt(class, devt);
|
||||
if (dev) {
|
||||
put_device(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);
|
||||
|
||||
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)
|
||||
{
|
||||
return dev->of_node == np;
|
||||
}
|
||||
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,
|
||||
};
|
||||
|
||||
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)
|
||||
{
|
||||
struct bus_type *bus;
|
||||
struct device *dev;
|
||||
|
||||
for (bus = generic_match_buses[0]; bus; bus++) {
|
||||
dev = bus_find_device(bus, NULL, (void *)con->fwnode,
|
||||
device_fwnode_match);
|
||||
dev = bus_find_device_by_fwnode(bus, con->fwnode);
|
||||
if (dev && !strncmp(dev_name(dev), con->id, strlen(con->id)))
|
||||
return dev;
|
||||
|
||||
|
@ -1197,6 +1197,20 @@ struct bus_type 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 error;
|
||||
|
@ -19,11 +19,6 @@ static struct class *fpga_bridge_class;
|
||||
/* Lock for adding/removing bridges to linked lists*/
|
||||
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
|
||||
*
|
||||
@ -104,8 +99,7 @@ struct fpga_bridge *of_fpga_bridge_get(struct device_node *np,
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = class_find_device(fpga_bridge_class, NULL, np,
|
||||
fpga_bridge_of_node_match);
|
||||
dev = class_find_device_by_of_node(fpga_bridge_class, np);
|
||||
if (!dev)
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
||||
|
@ -482,11 +482,6 @@ struct fpga_manager *fpga_mgr_get(struct device *dev)
|
||||
}
|
||||
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.
|
||||
*
|
||||
@ -498,8 +493,7 @@ struct fpga_manager *of_fpga_mgr_get(struct device_node *node)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = class_find_device(fpga_mgr_class, NULL, node,
|
||||
fpga_mgr_of_node_match);
|
||||
dev = class_find_device_by_of_node(fpga_mgr_class, node);
|
||||
if (!dev)
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
||||
|
@ -93,11 +93,6 @@ static struct bus_type mipi_dsi_bus_type = {
|
||||
.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
|
||||
* 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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
@ -242,9 +242,7 @@ static struct component_match *exynos_drm_match_add(struct device *dev)
|
||||
if (!info->driver || !(info->flags & DRM_COMPONENT_DRIVER))
|
||||
continue;
|
||||
|
||||
while ((d = bus_find_device(&platform_bus_type, p,
|
||||
&info->driver->driver,
|
||||
(void *)platform_bus_type.match))) {
|
||||
while ((d = platform_find_device_by_driver(p, &info->driver->driver))) {
|
||||
put_device(p);
|
||||
|
||||
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))
|
||||
continue;
|
||||
|
||||
while ((dev = bus_find_device(&platform_bus_type, NULL,
|
||||
&info->driver->driver,
|
||||
(void *)platform_bus_type.match))) {
|
||||
while ((dev = platform_find_device_by_driver(NULL,
|
||||
&info->driver->driver))) {
|
||||
put_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 *p = NULL, *d;
|
||||
|
||||
while ((d = bus_find_device(&platform_bus_type, p, drv,
|
||||
(void *)platform_bus_type.match))) {
|
||||
while ((d = platform_find_device_by_driver(p, drv))) {
|
||||
put_device(p);
|
||||
component_match_add(dev, &match, mcde_compare_dev, d);
|
||||
p = d;
|
||||
|
@ -330,8 +330,7 @@ static struct component_match *rockchip_drm_match_add(struct device *dev)
|
||||
struct device *p = NULL, *d;
|
||||
|
||||
do {
|
||||
d = bus_find_device(&platform_bus_type, p, &drv->driver,
|
||||
(void *)platform_bus_type.match);
|
||||
d = platform_find_device_by_driver(p, &drv->driver);
|
||||
put_device(p);
|
||||
p = d;
|
||||
|
||||
|
@ -237,8 +237,7 @@ static void vc4_match_add_drivers(struct device *dev,
|
||||
struct device_driver *drv = &drivers[i]->driver;
|
||||
struct device *p = NULL, *d;
|
||||
|
||||
while ((d = bus_find_device(&platform_bus_type, p, drv,
|
||||
(void *)platform_bus_type.match))) {
|
||||
while ((d = platform_find_device_by_driver(p, drv))) {
|
||||
put_device(p);
|
||||
component_match_add(dev, match, compare_dev, d);
|
||||
p = d;
|
||||
|
@ -37,11 +37,6 @@ static int coresight_alloc_conns(struct device *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int coresight_device_fwnode_match(struct device *dev, const void *fwnode)
|
||||
{
|
||||
return dev_fwnode(dev) == fwnode;
|
||||
}
|
||||
|
||||
static struct device *
|
||||
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
|
||||
* platform bus.
|
||||
*/
|
||||
dev = bus_find_device(&platform_bus_type, NULL,
|
||||
fwnode, coresight_device_fwnode_match);
|
||||
dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
|
||||
if (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
|
||||
* looking for the device that matches the endpoint node.
|
||||
*/
|
||||
return bus_find_device(&amba_bustype, NULL,
|
||||
fwnode, coresight_device_fwnode_match);
|
||||
return bus_find_device_by_fwnode(&amba_bustype, fwnode);
|
||||
}
|
||||
|
||||
#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);
|
||||
|
||||
int coresight_device_fwnode_match(struct device *dev, const void *fwnode);
|
||||
|
||||
#endif
|
||||
|
@ -1046,9 +1046,7 @@ static void coresight_fixup_device_conns(struct coresight_device *csdev)
|
||||
struct coresight_connection *conn = &csdev->pdata->conns[i];
|
||||
struct device *dev = NULL;
|
||||
|
||||
dev = bus_find_device(&coresight_bustype, NULL,
|
||||
(void *)conn->child_fwnode,
|
||||
coresight_device_fwnode_match);
|
||||
dev = bus_find_device_by_fwnode(&coresight_bustype, conn->child_fwnode);
|
||||
if (dev) {
|
||||
conn->child_dev = to_coresight_device(dev);
|
||||
/* and put reference from 'bus_find_device()' */
|
||||
|
@ -789,12 +789,6 @@ static int intel_th_populate(struct intel_th *th)
|
||||
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)
|
||||
{
|
||||
const struct file_operations *fops;
|
||||
@ -802,9 +796,7 @@ static int intel_th_output_open(struct inode *inode, struct file *file)
|
||||
struct device *dev;
|
||||
int err;
|
||||
|
||||
dev = bus_find_device(&intel_th_bus, NULL,
|
||||
(void *)(unsigned long)inode->i_rdev,
|
||||
match_devt);
|
||||
dev = bus_find_device_by_devt(&intel_th_bus, inode->i_rdev);
|
||||
if (!dev || !dev->driver)
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -89,13 +89,6 @@ static struct class stm_class = {
|
||||
.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
|
||||
* @buf: character buffer containing the name
|
||||
@ -116,7 +109,7 @@ struct stm_device *stm_find_device(const char *buf)
|
||||
if (!stm_core_up)
|
||||
return NULL;
|
||||
|
||||
dev = class_find_device(&stm_class, NULL, buf, stm_dev_match);
|
||||
dev = class_find_device_by_name(&stm_class, buf);
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
|
@ -457,18 +457,12 @@ static struct 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 device *dev;
|
||||
struct pci_dev *pci_dev;
|
||||
|
||||
dev = driver_find_device(&amd_mp2_pci_driver.driver, NULL, NULL,
|
||||
amd_mp2_device_match);
|
||||
dev = driver_find_next_device(&amd_mp2_pci_driver.driver, NULL);
|
||||
if (!dev)
|
||||
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;
|
||||
}
|
||||
|
||||
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 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;
|
||||
}
|
||||
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;
|
||||
|
||||
dev = bus_find_device(&i2c_bus_type, NULL, adev,
|
||||
i2c_acpi_find_match_device);
|
||||
dev = bus_find_device_by_acpi_dev(&i2c_bus_type, adev);
|
||||
return dev ? i2c_verify_client(dev) : NULL;
|
||||
}
|
||||
|
||||
|
@ -113,11 +113,6 @@ void of_i2c_register_devices(struct i2c_adapter *adap)
|
||||
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)
|
||||
{
|
||||
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 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)
|
||||
return NULL;
|
||||
|
||||
|
@ -4499,19 +4499,13 @@ static const struct acpi_device_id 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
|
||||
platform_device *hns_roce_find_pdev(struct fwnode_handle *fwnode)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
/* get the 'device' corresponding to the matching 'fwnode' */
|
||||
dev = bus_find_device(&platform_bus_type, NULL,
|
||||
fwnode, hns_roce_node_match);
|
||||
dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
|
||||
/* get the platform device */
|
||||
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 int arm_smmu_match_node(struct device *dev, const void *data)
|
||||
{
|
||||
return dev->fwnode == data;
|
||||
}
|
||||
|
||||
static
|
||||
struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
|
||||
{
|
||||
struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
|
||||
fwnode, arm_smmu_match_node);
|
||||
struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
|
||||
fwnode);
|
||||
put_device(dev);
|
||||
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
|
||||
struct arm_smmu_device *arm_smmu_get_by_fwnode(struct fwnode_handle *fwnode)
|
||||
{
|
||||
struct device *dev = driver_find_device(&arm_smmu_driver.driver, NULL,
|
||||
fwnode, arm_smmu_match_node);
|
||||
struct device *dev = driver_find_device_by_fwnode(&arm_smmu_driver.driver,
|
||||
fwnode);
|
||||
put_device(dev);
|
||||
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 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,
|
||||
size_t len)
|
||||
{
|
||||
@ -231,7 +224,7 @@ static int led_classdev_next_name(const char *init_name, char *name,
|
||||
strlcpy(name, init_name, 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);
|
||||
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,
|
||||
};
|
||||
|
||||
/**
|
||||
* 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
|
||||
* 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)
|
||||
return ERR_PTR(-ENODEV);
|
||||
|
||||
dev = driver_find_device(&altr_sysmgr_driver.driver, NULL,
|
||||
(void *)sysmgr_np, sysmgr_match_phandle);
|
||||
dev = driver_find_device_by_of_node(&altr_sysmgr_driver.driver,
|
||||
(void *)sysmgr_np);
|
||||
of_node_put(sysmgr_np);
|
||||
if (!dev)
|
||||
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 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.
|
||||
*
|
||||
@ -880,7 +873,7 @@ void mei_set_devstate(struct mei_device *dev, enum mei_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) {
|
||||
sysfs_notify(&clsdev->kobj, NULL, "dev_state");
|
||||
put_device(clsdev);
|
||||
|
@ -405,17 +405,12 @@ int mux_control_deselect(struct mux_control *mux)
|
||||
}
|
||||
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. */
|
||||
static struct mux_chip *of_find_mux_chip_by_node(struct device_node *np)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -754,17 +754,11 @@ struct dsaf_misc_op *hns_misc_op_get(struct dsaf_device *dsaf_dev)
|
||||
return (void *)misc_op;
|
||||
}
|
||||
|
||||
static int hns_dsaf_dev_match(struct device *dev, const void *fwnode)
|
||||
{
|
||||
return dev->fwnode == fwnode;
|
||||
}
|
||||
|
||||
struct
|
||||
platform_device *hns_dsaf_find_platform_device(struct fwnode_handle *fwnode)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = bus_find_device(&platform_bus_type, NULL,
|
||||
fwnode, hns_dsaf_dev_match);
|
||||
dev = bus_find_device_by_fwnode(&platform_bus_type, fwnode);
|
||||
return dev ? to_platform_device(dev) : NULL;
|
||||
}
|
||||
|
@ -262,11 +262,6 @@ static struct class mdio_bus_class = {
|
||||
};
|
||||
|
||||
#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.
|
||||
* @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)
|
||||
return NULL;
|
||||
|
||||
d = class_find_device(&mdio_bus_class, NULL, mdio_bus_np,
|
||||
of_mdio_bus_match);
|
||||
|
||||
d = class_find_device_by_of_node(&mdio_bus_class, mdio_bus_np);
|
||||
return d ? to_mii_bus(d) : NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(of_mdio_find_bus);
|
||||
|
@ -76,11 +76,6 @@ static struct bus_type nvmem_bus_type = {
|
||||
.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)
|
||||
{
|
||||
struct device *d;
|
||||
@ -88,7 +83,7 @@ static struct nvmem_device *of_nvmem_find(struct device_node *nvmem_np)
|
||||
if (!nvmem_np)
|
||||
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)
|
||||
return NULL;
|
||||
|
@ -280,12 +280,6 @@ unregister:
|
||||
}
|
||||
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
|
||||
* @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)
|
||||
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) {
|
||||
mdiodev = to_mdio_device(d);
|
||||
if (mdiodev->flags & MDIO_DEVICE_FLAG_PHY)
|
||||
|
@ -37,11 +37,6 @@ static const struct of_device_id of_skipped_node_table[] = {
|
||||
{} /* 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
|
||||
* @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;
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
static int find_anything(struct device *dev, const void *data)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Some device drivers need know if PCI is initiated.
|
||||
* Basically, we think PCI is not initiated when there
|
||||
@ -79,7 +74,7 @@ int no_pci_devices(void)
|
||||
struct device *dev;
|
||||
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);
|
||||
put_device(dev);
|
||||
return no_devices;
|
||||
|
@ -460,16 +460,11 @@ error:
|
||||
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 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;
|
||||
}
|
||||
|
@ -663,21 +663,12 @@ void rtc_update_irq(struct rtc_device *rtc,
|
||||
}
|
||||
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 device *dev;
|
||||
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)
|
||||
rtc = to_rtc_device(dev);
|
||||
|
||||
|
@ -581,11 +581,6 @@ int ccwgroup_driver_register(struct ccwgroup_driver *cdriver)
|
||||
}
|
||||
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
|
||||
* @cdriver: driver to be deregistered
|
||||
@ -597,8 +592,7 @@ void ccwgroup_driver_unregister(struct ccwgroup_driver *cdriver)
|
||||
struct device *dev;
|
||||
|
||||
/* We don't want ccwgroup devices to live longer than their driver. */
|
||||
while ((dev = driver_find_device(&cdriver->driver, NULL, NULL,
|
||||
__ccwgroup_match_all))) {
|
||||
while ((dev = driver_find_next_device(&cdriver->driver, NULL))) {
|
||||
struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
|
||||
|
||||
ccwgroup_ungroup(gdev);
|
||||
@ -608,13 +602,6 @@ void ccwgroup_driver_unregister(struct ccwgroup_driver *cdriver)
|
||||
}
|
||||
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
|
||||
* @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;
|
||||
|
||||
dev = driver_find_device(&gdrv->driver, NULL, bus_id,
|
||||
__ccwgroupdev_check_busid);
|
||||
dev = driver_find_device_by_name(&gdrv->driver, bus_id);
|
||||
|
||||
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);
|
||||
#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
|
||||
* @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;
|
||||
|
||||
dev = driver_find_device(&cdrv->driver, NULL, (void *)bus_id,
|
||||
__ccwdev_check_busid);
|
||||
dev = driver_find_device_by_name(&cdrv->driver, bus_id);
|
||||
|
||||
return dev ? to_ccwdev(dev) : NULL;
|
||||
}
|
||||
|
@ -133,18 +133,6 @@ struct zcdn_device {
|
||||
static int zcdn_create(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.
|
||||
* 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)
|
||||
{
|
||||
struct device *dev =
|
||||
class_find_device(zcrypt_class, NULL,
|
||||
(void *) name,
|
||||
__match_zcdn_name);
|
||||
struct device *dev = class_find_device_by_name(zcrypt_class, name);
|
||||
|
||||
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)
|
||||
{
|
||||
struct device *dev =
|
||||
class_find_device(zcrypt_class, NULL,
|
||||
(void *) &devt,
|
||||
__match_zcdn_devt);
|
||||
struct device *dev = class_find_device_by_devt(zcrypt_class, devt);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
static int always_match(struct device *dev, const void *data)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline struct device *next_scsi_device(struct device *start)
|
||||
{
|
||||
struct device *next = bus_find_device(&scsi_bus_type, start, NULL,
|
||||
always_match);
|
||||
struct device *next = bus_find_next_device(&scsi_bus_type, start);
|
||||
|
||||
put_device(start);
|
||||
return next;
|
||||
}
|
||||
|
@ -3652,37 +3652,25 @@ EXPORT_SYMBOL_GPL(spi_write_then_read);
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
#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 */
|
||||
struct spi_device *of_find_spi_device_by_node(struct device_node *node)
|
||||
{
|
||||
struct device *dev = bus_find_device(&spi_bus_type, NULL, node,
|
||||
__spi_of_device_match);
|
||||
struct device *dev = bus_find_device_by_of_node(&spi_bus_type, node);
|
||||
|
||||
return dev ? to_spi_device(dev) : NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_find_spi_device_by_node);
|
||||
#endif /* IS_ENABLED(CONFIG_OF) */
|
||||
|
||||
#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 */
|
||||
static struct spi_controller *of_find_spi_controller_by_node(struct device_node *node)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = class_find_device(&spi_master_class, NULL, node,
|
||||
__spi_of_controller_match);
|
||||
dev = class_find_device_by_of_node(&spi_master_class, node);
|
||||
if (!dev && IS_ENABLED(CONFIG_SPI_SLAVE))
|
||||
dev = class_find_device(&spi_slave_class, NULL, node,
|
||||
__spi_of_controller_match);
|
||||
dev = class_find_device_by_of_node(&spi_slave_class, node);
|
||||
if (!dev)
|
||||
return NULL;
|
||||
|
||||
@ -3753,11 +3741,6 @@ static int spi_acpi_controller_match(struct device *dev, const void *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)
|
||||
{
|
||||
struct device *dev;
|
||||
@ -3777,8 +3760,7 @@ static struct spi_device *acpi_spi_find_device_by_adev(struct acpi_device *adev)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -2952,17 +2952,11 @@ void do_SAK(struct tty_struct *tty)
|
||||
|
||||
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! */
|
||||
static struct device *tty_get_device(struct tty_struct *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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
struct device *dev;
|
||||
|
||||
dev = bus_find_device(&usb_bus_type, NULL,
|
||||
(void *) (unsigned long) devt, match_devt);
|
||||
dev = bus_find_device_by_devt(&usb_bus_type, devt);
|
||||
if (!dev)
|
||||
return NULL;
|
||||
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);
|
||||
|
||||
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,
|
||||
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))
|
||||
return NULL;
|
||||
|
||||
dev = class_find_device(role_class, NULL, con->fwnode,
|
||||
switch_fwnode_match);
|
||||
dev = class_find_device_by_fwnode(role_class, con->fwnode);
|
||||
} else {
|
||||
dev = class_find_device(role_class, NULL, con->endpoint[ep],
|
||||
switch_name_match);
|
||||
dev = class_find_device_by_name(role_class, con->endpoint[ep]);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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.
|
||||
*/
|
||||
if (con->fwnode)
|
||||
return class_find_device(typec_class, NULL, con->fwnode,
|
||||
typec_port_fwnode_match);
|
||||
return class_find_device_by_fwnode(typec_class, con->fwnode);
|
||||
|
||||
dev = class_find_device(typec_class, NULL, con->endpoint[ep],
|
||||
typec_port_name_match);
|
||||
dev = class_find_device_by_name(typec_class, con->endpoint[ep]);
|
||||
|
||||
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);
|
||||
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_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 (*fn)(struct device *dev, void *data));
|
||||
struct device *bus_find_device(struct bus_type *bus, struct device *start,
|
||||
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,
|
||||
const char *name);
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
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 *hint);
|
||||
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,
|
||||
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);
|
||||
int driver_deferred_probe_check_state(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,
|
||||
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 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 struct resource *platform_get_resource(struct platform_device *,
|
||||
unsigned int, unsigned int);
|
||||
extern struct device *
|
||||
platform_find_device_by_driver(struct device *start,
|
||||
const struct device_driver *drv);
|
||||
extern void __iomem *
|
||||
devm_platform_ioremap_resource(struct platform_device *pdev,
|
||||
unsigned int index);
|
||||
|
@ -23,11 +23,6 @@
|
||||
LIST_HEAD(cfg802154_rdev_list);
|
||||
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 device *dev;
|
||||
@ -35,7 +30,7 @@ struct wpan_phy *wpan_phy_find(const char *str)
|
||||
if (WARN_ON(!str))
|
||||
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)
|
||||
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)
|
||||
{
|
||||
struct device *dev;
|
||||
@ -438,8 +433,8 @@ static int rockchip_sound_codec_node_match(struct device_node *np_codec)
|
||||
continue;
|
||||
|
||||
if (dailink_match[i].bus_type) {
|
||||
dev = bus_find_device(dailink_match[i].bus_type, NULL,
|
||||
np_codec, of_dev_node_match);
|
||||
dev = bus_find_device_by_of_node(dailink_match[i].bus_type,
|
||||
np_codec);
|
||||
if (!dev)
|
||||
continue;
|
||||
put_device(dev);
|
||||
|
Loading…
Reference in New Issue
Block a user