Jelajahi Sumber

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>
Guennadi Liakhovetski 17 tahun lalu
induk
melakukan
3cfdc7f25b
1 mengubah file dengan 0 tambahan dan 16 penghapusan
  1. 0 16
      drivers/media/video/soc_camera.c

+ 0 - 16
drivers/media/video/soc_camera.c

@@ -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);
 }
 }