|
@@ -1097,6 +1097,13 @@ static int default_s_crop(struct soc_camera_device *icd, struct v4l2_crop *a)
|
|
|
return v4l2_subdev_call(sd, video, s_crop, a);
|
|
|
}
|
|
|
|
|
|
+static void soc_camera_device_init(struct device *dev, void *pdata)
|
|
|
+{
|
|
|
+ dev->platform_data = pdata;
|
|
|
+ dev->bus = &soc_camera_bus_type;
|
|
|
+ dev->release = dummy_release;
|
|
|
+}
|
|
|
+
|
|
|
int soc_camera_host_register(struct soc_camera_host *ici)
|
|
|
{
|
|
|
struct soc_camera_host *ix;
|
|
@@ -1158,6 +1165,7 @@ void soc_camera_host_unregister(struct soc_camera_host *ici)
|
|
|
|
|
|
list_for_each_entry(icd, &devices, list) {
|
|
|
if (icd->iface == ici->nr) {
|
|
|
+ void *pdata = icd->dev.platform_data;
|
|
|
/* The bus->remove will be called */
|
|
|
device_unregister(&icd->dev);
|
|
|
/*
|
|
@@ -1169,6 +1177,7 @@ void soc_camera_host_unregister(struct soc_camera_host *ici)
|
|
|
* device private data.
|
|
|
*/
|
|
|
memset(&icd->dev, 0, sizeof(icd->dev));
|
|
|
+ soc_camera_device_init(&icd->dev, pdata);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1200,10 +1209,7 @@ static int soc_camera_device_register(struct soc_camera_device *icd)
|
|
|
* man, stay reasonable... */
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- icd->devnum = num;
|
|
|
- icd->dev.bus = &soc_camera_bus_type;
|
|
|
-
|
|
|
- icd->dev.release = dummy_release;
|
|
|
+ icd->devnum = num;
|
|
|
icd->use_count = 0;
|
|
|
icd->host_priv = NULL;
|
|
|
mutex_init(&icd->video_lock);
|
|
@@ -1311,12 +1317,13 @@ static int __devinit soc_camera_pdrv_probe(struct platform_device *pdev)
|
|
|
icd->iface = icl->bus_id;
|
|
|
icd->pdev = &pdev->dev;
|
|
|
platform_set_drvdata(pdev, icd);
|
|
|
- icd->dev.platform_data = icl;
|
|
|
|
|
|
ret = soc_camera_device_register(icd);
|
|
|
if (ret < 0)
|
|
|
goto escdevreg;
|
|
|
|
|
|
+ soc_camera_device_init(&icd->dev, icl);
|
|
|
+
|
|
|
icd->user_width = DEFAULT_WIDTH;
|
|
|
icd->user_height = DEFAULT_HEIGHT;
|
|
|
|