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: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
02da465945
commit
3cfdc7f25b
@ -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)
|
|||||||
|
|
||||||
/* 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)
|
|||||||
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 @@ edrvr:
|
|||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user