platform: Add platform_find_device_by_driver() helper
Provide a helper to lookup platform devices by matching device driver in order to avoid drivers trying to use platform bus internals. Cc: Eric Anholt <eric@anholt.net> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: "Heiko Stübner" <heiko@sntech.de> Cc: Inki Dae <inki.dae@samsung.com> Cc: "Rafael J. Wysocki" <rafael@kernel.org> Cc: Sandy Huang <hjc@rock-chips.com> Cc: Seung-Woo Kim <sw0312.kim@samsung.com> Tested-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> Link: https://lore.kernel.org/r/20190723221838.12024-8-suzuki.poulose@arm.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									6bf85ba9e5
								
							
						
					
					
						commit
						36f3313d6b
					
				| @ -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; | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user