Commit 3cfdc7f2 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by Mauro Carvalho Chehab

V4L/DVB (8040): soc-camera: remove soc_camera_host_class class

Devices can either be class devices or bus devices, not both at the
same time. Soc-camera host devices usually have a platform device as
their parent. Trying to also register them with a class crashes the
kernel, when linked statically. Interestingly, it works when built
as a module. Thanks to Paulius Zaleckas for reporting.
Signed-off-by: default avatarGuennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 02da4659
...@@ -763,15 +763,6 @@ static struct device_driver ic_drv = { ...@@ -763,15 +763,6 @@ static struct device_driver ic_drv = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
}; };
/*
* Image capture host - this is a host device, not a bus device, so,
* no bus reference, no probing.
*/
static struct class soc_camera_host_class = {
.owner = THIS_MODULE,
.name = "camera_host",
};
static void dummy_release(struct device *dev) static void dummy_release(struct device *dev)
{ {
} }
...@@ -801,7 +792,6 @@ int soc_camera_host_register(struct soc_camera_host *ici) ...@@ -801,7 +792,6 @@ int soc_camera_host_register(struct soc_camera_host *ici)
/* Number might be equal to the platform device ID */ /* Number might be equal to the platform device ID */
sprintf(ici->dev.bus_id, "camera_host%d", ici->nr); sprintf(ici->dev.bus_id, "camera_host%d", ici->nr);
ici->dev.class = &soc_camera_host_class;
mutex_lock(&list_lock); mutex_lock(&list_lock);
list_for_each_entry(ix, &hosts, list) { list_for_each_entry(ix, &hosts, list) {
...@@ -1003,14 +993,9 @@ static int __init soc_camera_init(void) ...@@ -1003,14 +993,9 @@ static int __init soc_camera_init(void)
ret = driver_register(&ic_drv); ret = driver_register(&ic_drv);
if (ret) if (ret)
goto edrvr; goto edrvr;
ret = class_register(&soc_camera_host_class);
if (ret)
goto eclr;
return 0; return 0;
eclr:
driver_unregister(&ic_drv);
edrvr: edrvr:
bus_unregister(&soc_camera_bus_type); bus_unregister(&soc_camera_bus_type);
return ret; return ret;
...@@ -1018,7 +1003,6 @@ static int __init soc_camera_init(void) ...@@ -1018,7 +1003,6 @@ static int __init soc_camera_init(void)
static void __exit soc_camera_exit(void) static void __exit soc_camera_exit(void)
{ {
class_unregister(&soc_camera_host_class);
driver_unregister(&ic_drv); driver_unregister(&ic_drv);
bus_unregister(&soc_camera_bus_type); bus_unregister(&soc_camera_bus_type);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment