aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2011-10-07 06:40:00 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-11-24 18:02:39 -0500
commit5cbf6f16ecc07e9f73107c1adf95013bce9f2cf6 (patch)
treeb15023fd8ef27844c5414bd0abdd4fb0c52822ef /drivers/media
parent2c1bb62e217f4f2eb6fa9734dcb331bc09c7768e (diff)
[media] s5p-fimc: Allow probe() to succeed with null platform data
The "s5p-fimc-md" platform device platform_data is used to pass attached camera sensor data. Not allowing device probe() to succeed when it's null prevents using FIMC as a mem-to-mem device only. Fix this by removing the platform_data check against null and registering sensors only if platform_data is specified. Also add logging of the information which /dev/video is assigned to which device during probe(). Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/s5p-fimc/fimc-mdevice.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/drivers/media/video/s5p-fimc/fimc-mdevice.c b/drivers/media/video/s5p-fimc/fimc-mdevice.c
index d558ae79e32..fc81f6faa39 100644
--- a/drivers/media/video/s5p-fimc/fimc-mdevice.c
+++ b/drivers/media/video/s5p-fimc/fimc-mdevice.c
@@ -385,20 +385,28 @@ static void fimc_md_unregister_entities(struct fimc_md *fmd)
385 385
386static int fimc_md_register_video_nodes(struct fimc_md *fmd) 386static int fimc_md_register_video_nodes(struct fimc_md *fmd)
387{ 387{
388 struct video_device *vdev;
388 int i, ret = 0; 389 int i, ret = 0;
389 390
390 for (i = 0; i < FIMC_MAX_DEVS && !ret; i++) { 391 for (i = 0; i < FIMC_MAX_DEVS && !ret; i++) {
391 if (!fmd->fimc[i]) 392 if (!fmd->fimc[i])
392 continue; 393 continue;
393 394
394 if (fmd->fimc[i]->m2m.vfd) 395 vdev = fmd->fimc[i]->m2m.vfd;
395 ret = video_register_device(fmd->fimc[i]->m2m.vfd, 396 if (vdev) {
396 VFL_TYPE_GRABBER, -1); 397 ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1);
397 if (ret) 398 if (ret)
398 break; 399 break;
399 if (fmd->fimc[i]->vid_cap.vfd) 400 v4l2_info(&fmd->v4l2_dev, "Registered %s as /dev/%s\n",
400 ret = video_register_device(fmd->fimc[i]->vid_cap.vfd, 401 vdev->name, video_device_node_name(vdev));
401 VFL_TYPE_GRABBER, -1); 402 }
403
404 vdev = fmd->fimc[i]->vid_cap.vfd;
405 if (vdev == NULL)
406 continue;
407 ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1);
408 v4l2_info(&fmd->v4l2_dev, "Registered %s as /dev/%s\n",
409 vdev->name, video_device_node_name(vdev));
402 } 410 }
403 411
404 return ret; 412 return ret;
@@ -746,9 +754,6 @@ static int __devinit fimc_md_probe(struct platform_device *pdev)
746 struct fimc_md *fmd; 754 struct fimc_md *fmd;
747 int ret; 755 int ret;
748 756
749 if (WARN(!pdev->dev.platform_data, "Platform data not specified!\n"))
750 return -EINVAL;
751
752 fmd = kzalloc(sizeof(struct fimc_md), GFP_KERNEL); 757 fmd = kzalloc(sizeof(struct fimc_md), GFP_KERNEL);
753 if (!fmd) 758 if (!fmd)
754 return -ENOMEM; 759 return -ENOMEM;
@@ -786,9 +791,11 @@ static int __devinit fimc_md_probe(struct platform_device *pdev)
786 if (ret) 791 if (ret)
787 goto err3; 792 goto err3;
788 793
789 ret = fimc_md_register_sensor_entities(fmd); 794 if (pdev->dev.platform_data) {
790 if (ret) 795 ret = fimc_md_register_sensor_entities(fmd);
791 goto err3; 796 if (ret)
797 goto err3;
798 }
792 ret = fimc_md_create_links(fmd); 799 ret = fimc_md_create_links(fmd);
793 if (ret) 800 if (ret)
794 goto err3; 801 goto err3;