diff options
author | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2011-10-07 06:40:00 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-11-24 18:02:39 -0500 |
commit | 5cbf6f16ecc07e9f73107c1adf95013bce9f2cf6 (patch) | |
tree | b15023fd8ef27844c5414bd0abdd4fb0c52822ef /drivers/media | |
parent | 2c1bb62e217f4f2eb6fa9734dcb331bc09c7768e (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.c | 35 |
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 | ||
386 | static int fimc_md_register_video_nodes(struct fimc_md *fmd) | 386 | static 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; |