aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/imx074.c17
-rw-r--r--drivers/media/video/mt9m001.c39
-rw-r--r--drivers/media/video/mt9m111.c24
-rw-r--r--drivers/media/video/mt9t031.c22
-rw-r--r--drivers/media/video/mt9t112.c45
-rw-r--r--drivers/media/video/mt9v022.c44
-rw-r--r--drivers/media/video/ov2640.c27
-rw-r--r--drivers/media/video/ov5642.c17
-rw-r--r--drivers/media/video/ov6650.c20
-rw-r--r--drivers/media/video/ov772x.c31
-rw-r--r--drivers/media/video/ov9640.c21
-rw-r--r--drivers/media/video/ov9740.c21
-rw-r--r--drivers/media/video/rj54n1cb0c.c27
-rw-r--r--drivers/media/video/tw9910.c32
-rw-r--r--include/media/soc_camera.h25
15 files changed, 126 insertions, 286 deletions
diff --git a/drivers/media/video/imx074.c b/drivers/media/video/imx074.c
index 3f5d4de8b91b..4f3ce7fa87df 100644
--- a/drivers/media/video/imx074.c
+++ b/drivers/media/video/imx074.c
@@ -298,8 +298,7 @@ static struct v4l2_subdev_ops imx074_subdev_ops = {
298 .video = &imx074_subdev_video_ops, 298 .video = &imx074_subdev_video_ops,
299}; 299};
300 300
301static int imx074_video_probe(struct soc_camera_device *icd, 301static int imx074_video_probe(struct i2c_client *client)
302 struct i2c_client *client)
303{ 302{
304 int ret; 303 int ret;
305 u16 id; 304 u16 id;
@@ -409,17 +408,10 @@ static int imx074_probe(struct i2c_client *client,
409 const struct i2c_device_id *did) 408 const struct i2c_device_id *did)
410{ 409{
411 struct imx074 *priv; 410 struct imx074 *priv;
412 struct soc_camera_device *icd = client->dev.platform_data;
413 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 411 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
414 struct soc_camera_link *icl; 412 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
415 int ret; 413 int ret;
416 414
417 if (!icd) {
418 dev_err(&client->dev, "IMX074: missing soc-camera data!\n");
419 return -EINVAL;
420 }
421
422 icl = to_soc_camera_link(icd);
423 if (!icl) { 415 if (!icl) {
424 dev_err(&client->dev, "IMX074: missing platform data!\n"); 416 dev_err(&client->dev, "IMX074: missing platform data!\n");
425 return -EINVAL; 417 return -EINVAL;
@@ -439,7 +431,7 @@ static int imx074_probe(struct i2c_client *client,
439 431
440 priv->fmt = &imx074_colour_fmts[0]; 432 priv->fmt = &imx074_colour_fmts[0];
441 433
442 ret = imx074_video_probe(icd, client); 434 ret = imx074_video_probe(client);
443 if (ret < 0) { 435 if (ret < 0) {
444 kfree(priv); 436 kfree(priv);
445 return ret; 437 return ret;
@@ -451,8 +443,7 @@ static int imx074_probe(struct i2c_client *client,
451static int imx074_remove(struct i2c_client *client) 443static int imx074_remove(struct i2c_client *client)
452{ 444{
453 struct imx074 *priv = to_imx074(client); 445 struct imx074 *priv = to_imx074(client);
454 struct soc_camera_device *icd = client->dev.platform_data; 446 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
455 struct soc_camera_link *icl = to_soc_camera_link(icd);
456 447
457 if (icl->free_bus) 448 if (icl->free_bus)
458 icl->free_bus(icl); 449 icl->free_bus(icl);
diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c
index 42bb3c89cfe6..58cdcedf53de 100644
--- a/drivers/media/video/mt9m001.c
+++ b/drivers/media/video/mt9m001.c
@@ -205,7 +205,7 @@ static int mt9m001_s_crop(struct v4l2_subdev *sd, struct v4l2_crop *a)
205 205
206 /* 206 /*
207 * The caller provides a supported format, as verified per 207 * The caller provides a supported format, as verified per
208 * call to icd->try_fmt() 208 * call to .try_mbus_fmt()
209 */ 209 */
210 if (!ret) 210 if (!ret)
211 ret = reg_write(client, MT9M001_COLUMN_START, rect.left); 211 ret = reg_write(client, MT9M001_COLUMN_START, rect.left);
@@ -474,19 +474,14 @@ static int mt9m001_s_ctrl(struct v4l2_ctrl *ctrl)
474 * Interface active, can use i2c. If it fails, it can indeed mean, that 474 * Interface active, can use i2c. If it fails, it can indeed mean, that
475 * this wasn't our capture interface, so, we wait for the right one 475 * this wasn't our capture interface, so, we wait for the right one
476 */ 476 */
477static int mt9m001_video_probe(struct soc_camera_device *icd, 477static int mt9m001_video_probe(struct soc_camera_link *icl,
478 struct i2c_client *client) 478 struct i2c_client *client)
479{ 479{
480 struct mt9m001 *mt9m001 = to_mt9m001(client); 480 struct mt9m001 *mt9m001 = to_mt9m001(client);
481 struct soc_camera_link *icl = to_soc_camera_link(icd);
482 s32 data; 481 s32 data;
483 unsigned long flags; 482 unsigned long flags;
484 int ret; 483 int ret;
485 484
486 /* We must have a parent by now. And it cannot be a wrong one. */
487 BUG_ON(!icd->parent ||
488 to_soc_camera_host(icd->parent)->nr != icd->iface);
489
490 /* Enable the chip */ 485 /* Enable the chip */
491 data = reg_write(client, MT9M001_CHIP_ENABLE, 1); 486 data = reg_write(client, MT9M001_CHIP_ENABLE, 1);
492 dev_dbg(&client->dev, "write: %d\n", data); 487 dev_dbg(&client->dev, "write: %d\n", data);
@@ -544,12 +539,8 @@ static int mt9m001_video_probe(struct soc_camera_device *icd,
544 return v4l2_ctrl_handler_setup(&mt9m001->hdl); 539 return v4l2_ctrl_handler_setup(&mt9m001->hdl);
545} 540}
546 541
547static void mt9m001_video_remove(struct soc_camera_device *icd) 542static void mt9m001_video_remove(struct soc_camera_link *icl)
548{ 543{
549 struct soc_camera_link *icl = to_soc_camera_link(icd);
550
551 dev_dbg(icd->pdev, "Video removed: %p, %p\n",
552 icd->parent, icd->vdev);
553 if (icl->free_bus) 544 if (icl->free_bus)
554 icl->free_bus(icl); 545 icl->free_bus(icl);
555} 546}
@@ -594,8 +585,7 @@ static int mt9m001_g_mbus_config(struct v4l2_subdev *sd,
594 struct v4l2_mbus_config *cfg) 585 struct v4l2_mbus_config *cfg)
595{ 586{
596 struct i2c_client *client = v4l2_get_subdevdata(sd); 587 struct i2c_client *client = v4l2_get_subdevdata(sd);
597 struct soc_camera_device *icd = client->dev.platform_data; 588 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
598 struct soc_camera_link *icl = to_soc_camera_link(icd);
599 589
600 /* MT9M001 has all capture_format parameters fixed */ 590 /* MT9M001 has all capture_format parameters fixed */
601 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_FALLING | 591 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_FALLING |
@@ -610,9 +600,9 @@ static int mt9m001_g_mbus_config(struct v4l2_subdev *sd,
610static int mt9m001_s_mbus_config(struct v4l2_subdev *sd, 600static int mt9m001_s_mbus_config(struct v4l2_subdev *sd,
611 const struct v4l2_mbus_config *cfg) 601 const struct v4l2_mbus_config *cfg)
612{ 602{
613 struct i2c_client *client = v4l2_get_subdevdata(sd); 603 const struct i2c_client *client = v4l2_get_subdevdata(sd);
614 struct soc_camera_device *icd = client->dev.platform_data; 604 struct soc_camera_device *icd = soc_camera_from_i2c(client);
615 struct soc_camera_link *icl = to_soc_camera_link(icd); 605 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
616 /* 606 /*
617 * Cannot use icd->current_fmt->host_fmt->bits_per_sample, because that 607 * Cannot use icd->current_fmt->host_fmt->bits_per_sample, because that
618 * is the number of bits, that the host has to sample, not the number of 608 * is the number of bits, that the host has to sample, not the number of
@@ -658,17 +648,10 @@ static int mt9m001_probe(struct i2c_client *client,
658 const struct i2c_device_id *did) 648 const struct i2c_device_id *did)
659{ 649{
660 struct mt9m001 *mt9m001; 650 struct mt9m001 *mt9m001;
661 struct soc_camera_device *icd = client->dev.platform_data;
662 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 651 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
663 struct soc_camera_link *icl; 652 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
664 int ret; 653 int ret;
665 654
666 if (!icd) {
667 dev_err(&client->dev, "MT9M001: missing soc-camera data!\n");
668 return -EINVAL;
669 }
670
671 icl = to_soc_camera_link(icd);
672 if (!icl) { 655 if (!icl) {
673 dev_err(&client->dev, "MT9M001 driver needs platform data\n"); 656 dev_err(&client->dev, "MT9M001 driver needs platform data\n");
674 return -EINVAL; 657 return -EINVAL;
@@ -716,7 +699,7 @@ static int mt9m001_probe(struct i2c_client *client,
716 mt9m001->rect.width = MT9M001_MAX_WIDTH; 699 mt9m001->rect.width = MT9M001_MAX_WIDTH;
717 mt9m001->rect.height = MT9M001_MAX_HEIGHT; 700 mt9m001->rect.height = MT9M001_MAX_HEIGHT;
718 701
719 ret = mt9m001_video_probe(icd, client); 702 ret = mt9m001_video_probe(icl, client);
720 if (ret) { 703 if (ret) {
721 v4l2_ctrl_handler_free(&mt9m001->hdl); 704 v4l2_ctrl_handler_free(&mt9m001->hdl);
722 kfree(mt9m001); 705 kfree(mt9m001);
@@ -728,11 +711,11 @@ static int mt9m001_probe(struct i2c_client *client,
728static int mt9m001_remove(struct i2c_client *client) 711static int mt9m001_remove(struct i2c_client *client)
729{ 712{
730 struct mt9m001 *mt9m001 = to_mt9m001(client); 713 struct mt9m001 *mt9m001 = to_mt9m001(client);
731 struct soc_camera_device *icd = client->dev.platform_data; 714 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
732 715
733 v4l2_device_unregister_subdev(&mt9m001->subdev); 716 v4l2_device_unregister_subdev(&mt9m001->subdev);
734 v4l2_ctrl_handler_free(&mt9m001->hdl); 717 v4l2_ctrl_handler_free(&mt9m001->hdl);
735 mt9m001_video_remove(icd); 718 mt9m001_video_remove(icl);
736 kfree(mt9m001); 719 kfree(mt9m001);
737 720
738 return 0; 721 return 0;
diff --git a/drivers/media/video/mt9m111.c b/drivers/media/video/mt9m111.c
index 8cacbf016848..9feeb0cb6722 100644
--- a/drivers/media/video/mt9m111.c
+++ b/drivers/media/video/mt9m111.c
@@ -784,19 +784,12 @@ static int mt9m111_init(struct mt9m111 *mt9m111)
784 * Interface active, can use i2c. If it fails, it can indeed mean, that 784 * Interface active, can use i2c. If it fails, it can indeed mean, that
785 * this wasn't our capture interface, so, we wait for the right one 785 * this wasn't our capture interface, so, we wait for the right one
786 */ 786 */
787static int mt9m111_video_probe(struct soc_camera_device *icd, 787static int mt9m111_video_probe(struct i2c_client *client)
788 struct i2c_client *client)
789{ 788{
790 struct mt9m111 *mt9m111 = to_mt9m111(client); 789 struct mt9m111 *mt9m111 = to_mt9m111(client);
791 s32 data; 790 s32 data;
792 int ret; 791 int ret;
793 792
794 /* We must have a parent by now. And it cannot be a wrong one. */
795 BUG_ON(!icd->parent ||
796 to_soc_camera_host(icd->parent)->nr != icd->iface);
797
798 mt9m111->lastpage = -1;
799
800 data = reg_read(CHIP_VERSION); 793 data = reg_read(CHIP_VERSION);
801 794
802 switch (data) { 795 switch (data) {
@@ -883,8 +876,7 @@ static int mt9m111_g_mbus_config(struct v4l2_subdev *sd,
883 struct v4l2_mbus_config *cfg) 876 struct v4l2_mbus_config *cfg)
884{ 877{
885 struct i2c_client *client = v4l2_get_subdevdata(sd); 878 struct i2c_client *client = v4l2_get_subdevdata(sd);
886 struct soc_camera_device *icd = client->dev.platform_data; 879 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
887 struct soc_camera_link *icl = to_soc_camera_link(icd);
888 880
889 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING | 881 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING |
890 V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_HIGH | 882 V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_HIGH |
@@ -915,17 +907,10 @@ static int mt9m111_probe(struct i2c_client *client,
915 const struct i2c_device_id *did) 907 const struct i2c_device_id *did)
916{ 908{
917 struct mt9m111 *mt9m111; 909 struct mt9m111 *mt9m111;
918 struct soc_camera_device *icd = client->dev.platform_data;
919 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 910 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
920 struct soc_camera_link *icl; 911 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
921 int ret; 912 int ret;
922 913
923 if (!icd) {
924 dev_err(&client->dev, "mt9m111: soc-camera data missing!\n");
925 return -EINVAL;
926 }
927
928 icl = to_soc_camera_link(icd);
929 if (!icl) { 914 if (!icl) {
930 dev_err(&client->dev, "mt9m111: driver needs platform data\n"); 915 dev_err(&client->dev, "mt9m111: driver needs platform data\n");
931 return -EINVAL; 916 return -EINVAL;
@@ -968,8 +953,9 @@ static int mt9m111_probe(struct i2c_client *client,
968 mt9m111->rect.width = MT9M111_MAX_WIDTH; 953 mt9m111->rect.width = MT9M111_MAX_WIDTH;
969 mt9m111->rect.height = MT9M111_MAX_HEIGHT; 954 mt9m111->rect.height = MT9M111_MAX_HEIGHT;
970 mt9m111->fmt = &mt9m111_colour_fmts[0]; 955 mt9m111->fmt = &mt9m111_colour_fmts[0];
956 mt9m111->lastpage = -1;
971 957
972 ret = mt9m111_video_probe(icd, client); 958 ret = mt9m111_video_probe(client);
973 if (ret) { 959 if (ret) {
974 v4l2_ctrl_handler_free(&mt9m111->hdl); 960 v4l2_ctrl_handler_free(&mt9m111->hdl);
975 kfree(mt9m111); 961 kfree(mt9m111);
diff --git a/drivers/media/video/mt9t031.c b/drivers/media/video/mt9t031.c
index 7ce37990a446..95cd602ae4ec 100644
--- a/drivers/media/video/mt9t031.c
+++ b/drivers/media/video/mt9t031.c
@@ -265,7 +265,7 @@ static int mt9t031_set_params(struct i2c_client *client,
265 265
266 /* 266 /*
267 * The caller provides a supported format, as guaranteed by 267 * The caller provides a supported format, as guaranteed by
268 * icd->try_fmt_cap(), soc_camera_s_crop() and soc_camera_cropcap() 268 * .try_mbus_fmt(), soc_camera_s_crop() and soc_camera_cropcap()
269 */ 269 */
270 if (ret >= 0) 270 if (ret >= 0)
271 ret = reg_write(client, MT9T031_COLUMN_START, rect->left); 271 ret = reg_write(client, MT9T031_COLUMN_START, rect->left);
@@ -573,8 +573,7 @@ static int mt9t031_runtime_suspend(struct device *dev)
573static int mt9t031_runtime_resume(struct device *dev) 573static int mt9t031_runtime_resume(struct device *dev)
574{ 574{
575 struct video_device *vdev = to_video_device(dev); 575 struct video_device *vdev = to_video_device(dev);
576 struct soc_camera_device *icd = dev_get_drvdata(vdev->parent); 576 struct v4l2_subdev *sd = soc_camera_vdev_to_subdev(vdev);
577 struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
578 struct i2c_client *client = v4l2_get_subdevdata(sd); 577 struct i2c_client *client = v4l2_get_subdevdata(sd);
579 struct mt9t031 *mt9t031 = to_mt9t031(client); 578 struct mt9t031 *mt9t031 = to_mt9t031(client);
580 579
@@ -684,8 +683,7 @@ static int mt9t031_g_mbus_config(struct v4l2_subdev *sd,
684 struct v4l2_mbus_config *cfg) 683 struct v4l2_mbus_config *cfg)
685{ 684{
686 struct i2c_client *client = v4l2_get_subdevdata(sd); 685 struct i2c_client *client = v4l2_get_subdevdata(sd);
687 struct soc_camera_device *icd = client->dev.platform_data; 686 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
688 struct soc_camera_link *icl = to_soc_camera_link(icd);
689 687
690 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING | 688 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING |
691 V4L2_MBUS_PCLK_SAMPLE_FALLING | V4L2_MBUS_HSYNC_ACTIVE_HIGH | 689 V4L2_MBUS_PCLK_SAMPLE_FALLING | V4L2_MBUS_HSYNC_ACTIVE_HIGH |
@@ -700,8 +698,7 @@ static int mt9t031_s_mbus_config(struct v4l2_subdev *sd,
700 const struct v4l2_mbus_config *cfg) 698 const struct v4l2_mbus_config *cfg)
701{ 699{
702 struct i2c_client *client = v4l2_get_subdevdata(sd); 700 struct i2c_client *client = v4l2_get_subdevdata(sd);
703 struct soc_camera_device *icd = client->dev.platform_data; 701 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
704 struct soc_camera_link *icl = to_soc_camera_link(icd);
705 702
706 if (soc_camera_apply_board_flags(icl, cfg) & 703 if (soc_camera_apply_board_flags(icl, cfg) &
707 V4L2_MBUS_PCLK_SAMPLE_FALLING) 704 V4L2_MBUS_PCLK_SAMPLE_FALLING)
@@ -737,16 +734,13 @@ static int mt9t031_probe(struct i2c_client *client,
737 const struct i2c_device_id *did) 734 const struct i2c_device_id *did)
738{ 735{
739 struct mt9t031 *mt9t031; 736 struct mt9t031 *mt9t031;
740 struct soc_camera_device *icd = client->dev.platform_data; 737 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
741 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 738 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
742 int ret; 739 int ret;
743 740
744 if (icd) { 741 if (!icl) {
745 struct soc_camera_link *icl = to_soc_camera_link(icd); 742 dev_err(&client->dev, "MT9T031 driver needs platform data\n");
746 if (!icl) { 743 return -EINVAL;
747 dev_err(&client->dev, "MT9T031 driver needs platform data\n");
748 return -EINVAL;
749 }
750 } 744 }
751 745
752 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) { 746 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
diff --git a/drivers/media/video/mt9t112.c b/drivers/media/video/mt9t112.c
index b8da7fe9a6bd..5b045a1097c6 100644
--- a/drivers/media/video/mt9t112.c
+++ b/drivers/media/video/mt9t112.c
@@ -89,7 +89,6 @@ struct mt9t112_priv {
89 struct v4l2_subdev subdev; 89 struct v4l2_subdev subdev;
90 struct mt9t112_camera_info *info; 90 struct mt9t112_camera_info *info;
91 struct i2c_client *client; 91 struct i2c_client *client;
92 struct soc_camera_device icd;
93 struct v4l2_rect frame; 92 struct v4l2_rect frame;
94 const struct mt9t112_format *format; 93 const struct mt9t112_format *format;
95 int model; 94 int model;
@@ -306,38 +305,38 @@ static int mt9t112_clock_info(const struct i2c_client *client, u32 ext)
306 n = (n >> 8) & 0x003f; 305 n = (n >> 8) & 0x003f;
307 306
308 enable = ((6000 > ext) || (54000 < ext)) ? "X" : ""; 307 enable = ((6000 > ext) || (54000 < ext)) ? "X" : "";
309 dev_info(&client->dev, "EXTCLK : %10u K %s\n", ext, enable); 308 dev_dbg(&client->dev, "EXTCLK : %10u K %s\n", ext, enable);
310 309
311 vco = 2 * m * ext / (n+1); 310 vco = 2 * m * ext / (n+1);
312 enable = ((384000 > vco) || (768000 < vco)) ? "X" : ""; 311 enable = ((384000 > vco) || (768000 < vco)) ? "X" : "";
313 dev_info(&client->dev, "VCO : %10u K %s\n", vco, enable); 312 dev_dbg(&client->dev, "VCO : %10u K %s\n", vco, enable);
314 313
315 clk = vco / (p1+1) / (p2+1); 314 clk = vco / (p1+1) / (p2+1);
316 enable = (96000 < clk) ? "X" : ""; 315 enable = (96000 < clk) ? "X" : "";
317 dev_info(&client->dev, "PIXCLK : %10u K %s\n", clk, enable); 316 dev_dbg(&client->dev, "PIXCLK : %10u K %s\n", clk, enable);
318 317
319 clk = vco / (p3+1); 318 clk = vco / (p3+1);
320 enable = (768000 < clk) ? "X" : ""; 319 enable = (768000 < clk) ? "X" : "";
321 dev_info(&client->dev, "MIPICLK : %10u K %s\n", clk, enable); 320 dev_dbg(&client->dev, "MIPICLK : %10u K %s\n", clk, enable);
322 321
323 clk = vco / (p6+1); 322 clk = vco / (p6+1);
324 enable = (96000 < clk) ? "X" : ""; 323 enable = (96000 < clk) ? "X" : "";
325 dev_info(&client->dev, "MCU CLK : %10u K %s\n", clk, enable); 324 dev_dbg(&client->dev, "MCU CLK : %10u K %s\n", clk, enable);
326 325
327 clk = vco / (p5+1); 326 clk = vco / (p5+1);
328 enable = (54000 < clk) ? "X" : ""; 327 enable = (54000 < clk) ? "X" : "";
329 dev_info(&client->dev, "SOC CLK : %10u K %s\n", clk, enable); 328 dev_dbg(&client->dev, "SOC CLK : %10u K %s\n", clk, enable);
330 329
331 clk = vco / (p4+1); 330 clk = vco / (p4+1);
332 enable = (70000 < clk) ? "X" : ""; 331 enable = (70000 < clk) ? "X" : "";
333 dev_info(&client->dev, "Sensor CLK : %10u K %s\n", clk, enable); 332 dev_dbg(&client->dev, "Sensor CLK : %10u K %s\n", clk, enable);
334 333
335 clk = vco / (p7+1); 334 clk = vco / (p7+1);
336 dev_info(&client->dev, "External sensor : %10u K\n", clk); 335 dev_dbg(&client->dev, "External sensor : %10u K\n", clk);
337 336
338 clk = ext / (n+1); 337 clk = ext / (n+1);
339 enable = ((2000 > clk) || (24000 < clk)) ? "X" : ""; 338 enable = ((2000 > clk) || (24000 < clk)) ? "X" : "";
340 dev_info(&client->dev, "PFD : %10u K %s\n", clk, enable); 339 dev_dbg(&client->dev, "PFD : %10u K %s\n", clk, enable);
341 340
342 return 0; 341 return 0;
343} 342}
@@ -982,8 +981,7 @@ static int mt9t112_g_mbus_config(struct v4l2_subdev *sd,
982 struct v4l2_mbus_config *cfg) 981 struct v4l2_mbus_config *cfg)
983{ 982{
984 struct i2c_client *client = v4l2_get_subdevdata(sd); 983 struct i2c_client *client = v4l2_get_subdevdata(sd);
985 struct soc_camera_device *icd = client->dev.platform_data; 984 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
986 struct soc_camera_link *icl = to_soc_camera_link(icd);
987 985
988 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_VSYNC_ACTIVE_HIGH | 986 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_VSYNC_ACTIVE_HIGH |
989 V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_DATA_ACTIVE_HIGH | 987 V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_DATA_ACTIVE_HIGH |
@@ -998,8 +996,7 @@ static int mt9t112_s_mbus_config(struct v4l2_subdev *sd,
998 const struct v4l2_mbus_config *cfg) 996 const struct v4l2_mbus_config *cfg)
999{ 997{
1000 struct i2c_client *client = v4l2_get_subdevdata(sd); 998 struct i2c_client *client = v4l2_get_subdevdata(sd);
1001 struct soc_camera_device *icd = client->dev.platform_data; 999 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1002 struct soc_camera_link *icl = to_soc_camera_link(icd);
1003 struct mt9t112_priv *priv = to_mt9t112(client); 1000 struct mt9t112_priv *priv = to_mt9t112(client);
1004 1001
1005 if (soc_camera_apply_board_flags(icl, cfg) & V4L2_MBUS_PCLK_SAMPLE_RISING) 1002 if (soc_camera_apply_board_flags(icl, cfg) & V4L2_MBUS_PCLK_SAMPLE_RISING)
@@ -1029,17 +1026,12 @@ static struct v4l2_subdev_ops mt9t112_subdev_ops = {
1029 .video = &mt9t112_subdev_video_ops, 1026 .video = &mt9t112_subdev_video_ops,
1030}; 1027};
1031 1028
1032static int mt9t112_camera_probe(struct soc_camera_device *icd, 1029static int mt9t112_camera_probe(struct i2c_client *client)
1033 struct i2c_client *client)
1034{ 1030{
1035 struct mt9t112_priv *priv = to_mt9t112(client); 1031 struct mt9t112_priv *priv = to_mt9t112(client);
1036 const char *devname; 1032 const char *devname;
1037 int chipid; 1033 int chipid;
1038 1034
1039 /* We must have a parent by now. And it cannot be a wrong one. */
1040 BUG_ON(!icd->parent ||
1041 to_soc_camera_host(icd->parent)->nr != icd->iface);
1042
1043 /* 1035 /*
1044 * check and show chip ID 1036 * check and show chip ID
1045 */ 1037 */
@@ -1068,8 +1060,7 @@ static int mt9t112_probe(struct i2c_client *client,
1068 const struct i2c_device_id *did) 1060 const struct i2c_device_id *did)
1069{ 1061{
1070 struct mt9t112_priv *priv; 1062 struct mt9t112_priv *priv;
1071 struct soc_camera_device *icd = client->dev.platform_data; 1063 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1072 struct soc_camera_link *icl;
1073 struct v4l2_rect rect = { 1064 struct v4l2_rect rect = {
1074 .width = VGA_WIDTH, 1065 .width = VGA_WIDTH,
1075 .height = VGA_HEIGHT, 1066 .height = VGA_HEIGHT,
@@ -1078,15 +1069,11 @@ static int mt9t112_probe(struct i2c_client *client,
1078 }; 1069 };
1079 int ret; 1070 int ret;
1080 1071
1081 if (!icd) { 1072 if (!icl || !icl->priv) {
1082 dev_err(&client->dev, "mt9t112: missing soc-camera data!\n"); 1073 dev_err(&client->dev, "mt9t112: missing platform data!\n");
1083 return -EINVAL; 1074 return -EINVAL;
1084 } 1075 }
1085 1076
1086 icl = to_soc_camera_link(icd);
1087 if (!icl || !icl->priv)
1088 return -EINVAL;
1089
1090 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 1077 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1091 if (!priv) 1078 if (!priv)
1092 return -ENOMEM; 1079 return -ENOMEM;
@@ -1095,7 +1082,7 @@ static int mt9t112_probe(struct i2c_client *client,
1095 1082
1096 v4l2_i2c_subdev_init(&priv->subdev, client, &mt9t112_subdev_ops); 1083 v4l2_i2c_subdev_init(&priv->subdev, client, &mt9t112_subdev_ops);
1097 1084
1098 ret = mt9t112_camera_probe(icd, client); 1085 ret = mt9t112_camera_probe(client);
1099 if (ret) 1086 if (ret)
1100 kfree(priv); 1087 kfree(priv);
1101 1088
diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c
index 7e2aeda21752..72b179b2ad6c 100644
--- a/drivers/media/video/mt9v022.c
+++ b/drivers/media/video/mt9v022.c
@@ -332,7 +332,7 @@ static int mt9v022_s_fmt(struct v4l2_subdev *sd,
332 332
333 /* 333 /*
334 * The caller provides a supported format, as verified per call to 334 * The caller provides a supported format, as verified per call to
335 * icd->try_fmt(), datawidth is from our supported format list 335 * .try_mbus_fmt(), datawidth is from our supported format list
336 */ 336 */
337 switch (mf->code) { 337 switch (mf->code) {
338 case V4L2_MBUS_FMT_Y8_1X8: 338 case V4L2_MBUS_FMT_Y8_1X8:
@@ -562,19 +562,14 @@ static int mt9v022_s_ctrl(struct v4l2_ctrl *ctrl)
562 * Interface active, can use i2c. If it fails, it can indeed mean, that 562 * Interface active, can use i2c. If it fails, it can indeed mean, that
563 * this wasn't our capture interface, so, we wait for the right one 563 * this wasn't our capture interface, so, we wait for the right one
564 */ 564 */
565static int mt9v022_video_probe(struct soc_camera_device *icd, 565static int mt9v022_video_probe(struct i2c_client *client)
566 struct i2c_client *client)
567{ 566{
568 struct mt9v022 *mt9v022 = to_mt9v022(client); 567 struct mt9v022 *mt9v022 = to_mt9v022(client);
569 struct soc_camera_link *icl = to_soc_camera_link(icd); 568 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
570 s32 data; 569 s32 data;
571 int ret; 570 int ret;
572 unsigned long flags; 571 unsigned long flags;
573 572
574 /* We must have a parent by now. And it cannot be a wrong one. */
575 BUG_ON(!icd->parent ||
576 to_soc_camera_host(icd->parent)->nr != icd->iface);
577
578 /* Read out the chip version register */ 573 /* Read out the chip version register */
579 data = reg_read(client, MT9V022_CHIP_VERSION); 574 data = reg_read(client, MT9V022_CHIP_VERSION);
580 575
@@ -648,16 +643,6 @@ ei2c:
648 return ret; 643 return ret;
649} 644}
650 645
651static void mt9v022_video_remove(struct soc_camera_device *icd)
652{
653 struct soc_camera_link *icl = to_soc_camera_link(icd);
654
655 dev_dbg(icd->pdev, "Video removed: %p, %p\n",
656 icd->parent, icd->vdev);
657 if (icl->free_bus)
658 icl->free_bus(icl);
659}
660
661static int mt9v022_g_skip_top_lines(struct v4l2_subdev *sd, u32 *lines) 646static int mt9v022_g_skip_top_lines(struct v4l2_subdev *sd, u32 *lines)
662{ 647{
663 struct i2c_client *client = v4l2_get_subdevdata(sd); 648 struct i2c_client *client = v4l2_get_subdevdata(sd);
@@ -698,8 +683,7 @@ static int mt9v022_g_mbus_config(struct v4l2_subdev *sd,
698 struct v4l2_mbus_config *cfg) 683 struct v4l2_mbus_config *cfg)
699{ 684{
700 struct i2c_client *client = v4l2_get_subdevdata(sd); 685 struct i2c_client *client = v4l2_get_subdevdata(sd);
701 struct soc_camera_device *icd = client->dev.platform_data; 686 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
702 struct soc_camera_link *icl = to_soc_camera_link(icd);
703 687
704 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_SLAVE | 688 cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_SLAVE |
705 V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING | 689 V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING |
@@ -730,8 +714,8 @@ static int mt9v022_s_mbus_config(struct v4l2_subdev *sd,
730 int ret; 714 int ret;
731 u16 pixclk = 0; 715 u16 pixclk = 0;
732 716
733 dev_info(icd->pdev, "set %d: %s, %dbps\n", icd->current_fmt->code, 717 dev_dbg(icd->pdev, "set %d: %s, %dbps\n", icd->current_fmt->code,
734 icd->current_fmt->host_fmt->name, bps); 718 icd->current_fmt->host_fmt->name, bps);
735 719
736 if (icl->set_bus_param) { 720 if (icl->set_bus_param) {
737 ret = icl->set_bus_param(icl, 1 << (bps - 1)); 721 ret = icl->set_bus_param(icl, 1 << (bps - 1));
@@ -798,17 +782,10 @@ static int mt9v022_probe(struct i2c_client *client,
798 const struct i2c_device_id *did) 782 const struct i2c_device_id *did)
799{ 783{
800 struct mt9v022 *mt9v022; 784 struct mt9v022 *mt9v022;
801 struct soc_camera_device *icd = client->dev.platform_data; 785 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
802 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 786 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
803 struct soc_camera_link *icl;
804 int ret; 787 int ret;
805 788
806 if (!icd) {
807 dev_err(&client->dev, "MT9V022: missing soc-camera data!\n");
808 return -EINVAL;
809 }
810
811 icl = to_soc_camera_link(icd);
812 if (!icl) { 789 if (!icl) {
813 dev_err(&client->dev, "MT9V022 driver needs platform data\n"); 790 dev_err(&client->dev, "MT9V022 driver needs platform data\n");
814 return -EINVAL; 791 return -EINVAL;
@@ -868,7 +845,7 @@ static int mt9v022_probe(struct i2c_client *client,
868 mt9v022->rect.width = MT9V022_MAX_WIDTH; 845 mt9v022->rect.width = MT9V022_MAX_WIDTH;
869 mt9v022->rect.height = MT9V022_MAX_HEIGHT; 846 mt9v022->rect.height = MT9V022_MAX_HEIGHT;
870 847
871 ret = mt9v022_video_probe(icd, client); 848 ret = mt9v022_video_probe(client);
872 if (ret) { 849 if (ret) {
873 v4l2_ctrl_handler_free(&mt9v022->hdl); 850 v4l2_ctrl_handler_free(&mt9v022->hdl);
874 kfree(mt9v022); 851 kfree(mt9v022);
@@ -880,10 +857,11 @@ static int mt9v022_probe(struct i2c_client *client,
880static int mt9v022_remove(struct i2c_client *client) 857static int mt9v022_remove(struct i2c_client *client)
881{ 858{
882 struct mt9v022 *mt9v022 = to_mt9v022(client); 859 struct mt9v022 *mt9v022 = to_mt9v022(client);
883 struct soc_camera_device *icd = client->dev.platform_data; 860 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
884 861
885 v4l2_device_unregister_subdev(&mt9v022->subdev); 862 v4l2_device_unregister_subdev(&mt9v022->subdev);
886 mt9v022_video_remove(icd); 863 if (icl->free_bus)
864 icl->free_bus(icl);
887 v4l2_ctrl_handler_free(&mt9v022->hdl); 865 v4l2_ctrl_handler_free(&mt9v022->hdl);
888 kfree(mt9v022); 866 kfree(mt9v022);
889 867
diff --git a/drivers/media/video/ov2640.c b/drivers/media/video/ov2640.c
index 981767f2d8ea..d37a5cceebb6 100644
--- a/drivers/media/video/ov2640.c
+++ b/drivers/media/video/ov2640.c
@@ -942,18 +942,13 @@ static int ov2640_cropcap(struct v4l2_subdev *sd, struct v4l2_cropcap *a)
942 return 0; 942 return 0;
943} 943}
944 944
945static int ov2640_video_probe(struct soc_camera_device *icd, 945static int ov2640_video_probe(struct i2c_client *client)
946 struct i2c_client *client)
947{ 946{
948 struct ov2640_priv *priv = to_ov2640(client); 947 struct ov2640_priv *priv = to_ov2640(client);
949 u8 pid, ver, midh, midl; 948 u8 pid, ver, midh, midl;
950 const char *devname; 949 const char *devname;
951 int ret; 950 int ret;
952 951
953 /* We must have a parent by now. And it cannot be a wrong one. */
954 BUG_ON(!icd->parent ||
955 to_soc_camera_host(icd->parent)->nr != icd->iface);
956
957 /* 952 /*
958 * check and show product ID and manufacturer ID 953 * check and show product ID and manufacturer ID
959 */ 954 */
@@ -1001,8 +996,7 @@ static int ov2640_g_mbus_config(struct v4l2_subdev *sd,
1001 struct v4l2_mbus_config *cfg) 996 struct v4l2_mbus_config *cfg)
1002{ 997{
1003 struct i2c_client *client = v4l2_get_subdevdata(sd); 998 struct i2c_client *client = v4l2_get_subdevdata(sd);
1004 struct soc_camera_device *icd = client->dev.platform_data; 999 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1005 struct soc_camera_link *icl = to_soc_camera_link(icd);
1006 1000
1007 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER | 1001 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER |
1008 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH | 1002 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH |
@@ -1035,18 +1029,11 @@ static struct v4l2_subdev_ops ov2640_subdev_ops = {
1035static int ov2640_probe(struct i2c_client *client, 1029static int ov2640_probe(struct i2c_client *client,
1036 const struct i2c_device_id *did) 1030 const struct i2c_device_id *did)
1037{ 1031{
1038 struct ov2640_priv *priv; 1032 struct ov2640_priv *priv;
1039 struct soc_camera_device *icd = client->dev.platform_data; 1033 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1040 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 1034 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
1041 struct soc_camera_link *icl; 1035 int ret;
1042 int ret;
1043
1044 if (!icd) {
1045 dev_err(&adapter->dev, "OV2640: missing soc-camera data!\n");
1046 return -EINVAL;
1047 }
1048 1036
1049 icl = to_soc_camera_link(icd);
1050 if (!icl) { 1037 if (!icl) {
1051 dev_err(&adapter->dev, 1038 dev_err(&adapter->dev,
1052 "OV2640: Missing platform_data for driver\n"); 1039 "OV2640: Missing platform_data for driver\n");
@@ -1080,7 +1067,7 @@ static int ov2640_probe(struct i2c_client *client,
1080 return err; 1067 return err;
1081 } 1068 }
1082 1069
1083 ret = ov2640_video_probe(icd, client); 1070 ret = ov2640_video_probe(client);
1084 if (ret) { 1071 if (ret) {
1085 v4l2_ctrl_handler_free(&priv->hdl); 1072 v4l2_ctrl_handler_free(&priv->hdl);
1086 kfree(priv); 1073 kfree(priv);
diff --git a/drivers/media/video/ov5642.c b/drivers/media/video/ov5642.c
index 163a6f7ff8ef..2a26602fc86d 100644
--- a/drivers/media/video/ov5642.c
+++ b/drivers/media/video/ov5642.c
@@ -889,8 +889,7 @@ static struct v4l2_subdev_ops ov5642_subdev_ops = {
889 .video = &ov5642_subdev_video_ops, 889 .video = &ov5642_subdev_video_ops,
890}; 890};
891 891
892static int ov5642_video_probe(struct soc_camera_device *icd, 892static int ov5642_video_probe(struct i2c_client *client)
893 struct i2c_client *client)
894{ 893{
895 int ret; 894 int ret;
896 u8 id_high, id_low; 895 u8 id_high, id_low;
@@ -921,16 +920,9 @@ static int ov5642_probe(struct i2c_client *client,
921 const struct i2c_device_id *did) 920 const struct i2c_device_id *did)
922{ 921{
923 struct ov5642 *priv; 922 struct ov5642 *priv;
924 struct soc_camera_device *icd = client->dev.platform_data; 923 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
925 struct soc_camera_link *icl;
926 int ret; 924 int ret;
927 925
928 if (!icd) {
929 dev_err(&client->dev, "OV5642: missing soc-camera data!\n");
930 return -EINVAL;
931 }
932
933 icl = to_soc_camera_link(icd);
934 if (!icl) { 926 if (!icl) {
935 dev_err(&client->dev, "OV5642: missing platform data!\n"); 927 dev_err(&client->dev, "OV5642: missing platform data!\n");
936 return -EINVAL; 928 return -EINVAL;
@@ -944,7 +936,7 @@ static int ov5642_probe(struct i2c_client *client,
944 936
945 priv->fmt = &ov5642_colour_fmts[0]; 937 priv->fmt = &ov5642_colour_fmts[0];
946 938
947 ret = ov5642_video_probe(icd, client); 939 ret = ov5642_video_probe(client);
948 if (ret < 0) 940 if (ret < 0)
949 goto error; 941 goto error;
950 942
@@ -958,8 +950,7 @@ error:
958static int ov5642_remove(struct i2c_client *client) 950static int ov5642_remove(struct i2c_client *client)
959{ 951{
960 struct ov5642 *priv = to_ov5642(client); 952 struct ov5642 *priv = to_ov5642(client);
961 struct soc_camera_device *icd = client->dev.platform_data; 953 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
962 struct soc_camera_link *icl = to_soc_camera_link(icd);
963 954
964 if (icl->free_bus) 955 if (icl->free_bus)
965 icl->free_bus(icl); 956 icl->free_bus(icl);
diff --git a/drivers/media/video/ov6650.c b/drivers/media/video/ov6650.c
index efa45132c992..f060eaaf916f 100644
--- a/drivers/media/video/ov6650.c
+++ b/drivers/media/video/ov6650.c
@@ -820,8 +820,7 @@ static int ov6650_prog_dflt(struct i2c_client *client)
820 return ret; 820 return ret;
821} 821}
822 822
823static int ov6650_video_probe(struct soc_camera_device *icd, 823static int ov6650_video_probe(struct i2c_client *client)
824 struct i2c_client *client)
825{ 824{
826 u8 pidh, pidl, midh, midl; 825 u8 pidh, pidl, midh, midl;
827 int ret = 0; 826 int ret = 0;
@@ -875,8 +874,7 @@ static int ov6650_g_mbus_config(struct v4l2_subdev *sd,
875 struct v4l2_mbus_config *cfg) 874 struct v4l2_mbus_config *cfg)
876{ 875{
877 struct i2c_client *client = v4l2_get_subdevdata(sd); 876 struct i2c_client *client = v4l2_get_subdevdata(sd);
878 struct soc_camera_device *icd = client->dev.platform_data; 877 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
879 struct soc_camera_link *icl = to_soc_camera_link(icd);
880 878
881 cfg->flags = V4L2_MBUS_MASTER | 879 cfg->flags = V4L2_MBUS_MASTER |
882 V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING | 880 V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING |
@@ -894,8 +892,7 @@ static int ov6650_s_mbus_config(struct v4l2_subdev *sd,
894 const struct v4l2_mbus_config *cfg) 892 const struct v4l2_mbus_config *cfg)
895{ 893{
896 struct i2c_client *client = v4l2_get_subdevdata(sd); 894 struct i2c_client *client = v4l2_get_subdevdata(sd);
897 struct soc_camera_device *icd = client->dev.platform_data; 895 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
898 struct soc_camera_link *icl = to_soc_camera_link(icd);
899 unsigned long flags = soc_camera_apply_board_flags(icl, cfg); 896 unsigned long flags = soc_camera_apply_board_flags(icl, cfg);
900 int ret; 897 int ret;
901 898
@@ -948,16 +945,9 @@ static int ov6650_probe(struct i2c_client *client,
948 const struct i2c_device_id *did) 945 const struct i2c_device_id *did)
949{ 946{
950 struct ov6650 *priv; 947 struct ov6650 *priv;
951 struct soc_camera_device *icd = client->dev.platform_data; 948 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
952 struct soc_camera_link *icl;
953 int ret; 949 int ret;
954 950
955 if (!icd) {
956 dev_err(&client->dev, "Missing soc-camera data!\n");
957 return -EINVAL;
958 }
959
960 icl = to_soc_camera_link(icd);
961 if (!icl) { 951 if (!icl) {
962 dev_err(&client->dev, "Missing platform_data for driver\n"); 952 dev_err(&client->dev, "Missing platform_data for driver\n");
963 return -EINVAL; 953 return -EINVAL;
@@ -1020,7 +1010,7 @@ static int ov6650_probe(struct i2c_client *client,
1020 priv->code = V4L2_MBUS_FMT_YUYV8_2X8; 1010 priv->code = V4L2_MBUS_FMT_YUYV8_2X8;
1021 priv->colorspace = V4L2_COLORSPACE_JPEG; 1011 priv->colorspace = V4L2_COLORSPACE_JPEG;
1022 1012
1023 ret = ov6650_video_probe(icd, client); 1013 ret = ov6650_video_probe(client);
1024 if (!ret) 1014 if (!ret)
1025 ret = v4l2_ctrl_handler_setup(&priv->hdl); 1015 ret = v4l2_ctrl_handler_setup(&priv->hdl);
1026 1016
diff --git a/drivers/media/video/ov772x.c b/drivers/media/video/ov772x.c
index 9b540421e2cb..a2146c30771e 100644
--- a/drivers/media/video/ov772x.c
+++ b/drivers/media/video/ov772x.c
@@ -953,17 +953,12 @@ static int ov772x_try_fmt(struct v4l2_subdev *sd,
953 return 0; 953 return 0;
954} 954}
955 955
956static int ov772x_video_probe(struct soc_camera_device *icd, 956static int ov772x_video_probe(struct i2c_client *client)
957 struct i2c_client *client)
958{ 957{
959 struct ov772x_priv *priv = to_ov772x(client); 958 struct ov772x_priv *priv = to_ov772x(client);
960 u8 pid, ver; 959 u8 pid, ver;
961 const char *devname; 960 const char *devname;
962 961
963 /* We must have a parent by now. And it cannot be a wrong one. */
964 BUG_ON(!icd->parent ||
965 to_soc_camera_host(icd->parent)->nr != icd->iface);
966
967 /* 962 /*
968 * check and show product ID and manufacturer ID 963 * check and show product ID and manufacturer ID
969 */ 964 */
@@ -1021,8 +1016,7 @@ static int ov772x_g_mbus_config(struct v4l2_subdev *sd,
1021 struct v4l2_mbus_config *cfg) 1016 struct v4l2_mbus_config *cfg)
1022{ 1017{
1023 struct i2c_client *client = v4l2_get_subdevdata(sd); 1018 struct i2c_client *client = v4l2_get_subdevdata(sd);
1024 struct soc_camera_device *icd = client->dev.platform_data; 1019 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1025 struct soc_camera_link *icl = to_soc_camera_link(icd);
1026 1020
1027 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER | 1021 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER |
1028 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH | 1022 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH |
@@ -1056,20 +1050,15 @@ static struct v4l2_subdev_ops ov772x_subdev_ops = {
1056static int ov772x_probe(struct i2c_client *client, 1050static int ov772x_probe(struct i2c_client *client,
1057 const struct i2c_device_id *did) 1051 const struct i2c_device_id *did)
1058{ 1052{
1059 struct ov772x_priv *priv; 1053 struct ov772x_priv *priv;
1060 struct soc_camera_device *icd = client->dev.platform_data; 1054 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1061 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 1055 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
1062 struct soc_camera_link *icl; 1056 int ret;
1063 int ret;
1064
1065 if (!icd) {
1066 dev_err(&client->dev, "OV772X: missing soc-camera data!\n");
1067 return -EINVAL;
1068 }
1069 1057
1070 icl = to_soc_camera_link(icd); 1058 if (!icl || !icl->priv) {
1071 if (!icl || !icl->priv) 1059 dev_err(&client->dev, "OV772X: missing platform data!\n");
1072 return -EINVAL; 1060 return -EINVAL;
1061 }
1073 1062
1074 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { 1063 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1075 dev_err(&adapter->dev, 1064 dev_err(&adapter->dev,
@@ -1100,7 +1089,7 @@ static int ov772x_probe(struct i2c_client *client,
1100 return err; 1089 return err;
1101 } 1090 }
1102 1091
1103 ret = ov772x_video_probe(icd, client); 1092 ret = ov772x_video_probe(client);
1104 if (ret) { 1093 if (ret) {
1105 v4l2_ctrl_handler_free(&priv->hdl); 1094 v4l2_ctrl_handler_free(&priv->hdl);
1106 kfree(priv); 1095 kfree(priv);
diff --git a/drivers/media/video/ov9640.c b/drivers/media/video/ov9640.c
index 12d33a9c07b0..f9babf39d802 100644
--- a/drivers/media/video/ov9640.c
+++ b/drivers/media/video/ov9640.c
@@ -578,8 +578,7 @@ static int ov9640_cropcap(struct v4l2_subdev *sd, struct v4l2_cropcap *a)
578 return 0; 578 return 0;
579} 579}
580 580
581static int ov9640_video_probe(struct soc_camera_device *icd, 581static int ov9640_video_probe(struct i2c_client *client)
582 struct i2c_client *client)
583{ 582{
584 struct v4l2_subdev *sd = i2c_get_clientdata(client); 583 struct v4l2_subdev *sd = i2c_get_clientdata(client);
585 struct ov9640_priv *priv = to_ov9640_sensor(sd); 584 struct ov9640_priv *priv = to_ov9640_sensor(sd);
@@ -587,10 +586,6 @@ static int ov9640_video_probe(struct soc_camera_device *icd,
587 const char *devname; 586 const char *devname;
588 int ret = 0; 587 int ret = 0;
589 588
590 /* We must have a parent by now. And it cannot be a wrong one. */
591 BUG_ON(!icd->parent ||
592 to_soc_camera_host(icd->parent)->nr != icd->iface);
593
594 /* 589 /*
595 * check and show product ID and manufacturer ID 590 * check and show product ID and manufacturer ID
596 */ 591 */
@@ -644,8 +639,7 @@ static int ov9640_g_mbus_config(struct v4l2_subdev *sd,
644 struct v4l2_mbus_config *cfg) 639 struct v4l2_mbus_config *cfg)
645{ 640{
646 struct i2c_client *client = v4l2_get_subdevdata(sd); 641 struct i2c_client *client = v4l2_get_subdevdata(sd);
647 struct soc_camera_device *icd = client->dev.platform_data; 642 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
648 struct soc_camera_link *icl = to_soc_camera_link(icd);
649 643
650 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER | 644 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER |
651 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH | 645 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH |
@@ -678,16 +672,9 @@ static int ov9640_probe(struct i2c_client *client,
678 const struct i2c_device_id *did) 672 const struct i2c_device_id *did)
679{ 673{
680 struct ov9640_priv *priv; 674 struct ov9640_priv *priv;
681 struct soc_camera_device *icd = client->dev.platform_data; 675 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
682 struct soc_camera_link *icl;
683 int ret; 676 int ret;
684 677
685 if (!icd) {
686 dev_err(&client->dev, "Missing soc-camera data!\n");
687 return -EINVAL;
688 }
689
690 icl = to_soc_camera_link(icd);
691 if (!icl) { 678 if (!icl) {
692 dev_err(&client->dev, "Missing platform_data for driver\n"); 679 dev_err(&client->dev, "Missing platform_data for driver\n");
693 return -EINVAL; 680 return -EINVAL;
@@ -715,7 +702,7 @@ static int ov9640_probe(struct i2c_client *client,
715 return err; 702 return err;
716 } 703 }
717 704
718 ret = ov9640_video_probe(icd, client); 705 ret = ov9640_video_probe(client);
719 706
720 if (ret) { 707 if (ret) {
721 v4l2_ctrl_handler_free(&priv->hdl); 708 v4l2_ctrl_handler_free(&priv->hdl);
diff --git a/drivers/media/video/ov9740.c b/drivers/media/video/ov9740.c
index 3dd910dcc5b8..9558aca86818 100644
--- a/drivers/media/video/ov9740.c
+++ b/drivers/media/video/ov9740.c
@@ -836,18 +836,13 @@ static int ov9740_set_register(struct v4l2_subdev *sd,
836} 836}
837#endif 837#endif
838 838
839static int ov9740_video_probe(struct soc_camera_device *icd, 839static int ov9740_video_probe(struct i2c_client *client)
840 struct i2c_client *client)
841{ 840{
842 struct v4l2_subdev *sd = i2c_get_clientdata(client); 841 struct v4l2_subdev *sd = i2c_get_clientdata(client);
843 struct ov9740_priv *priv = to_ov9740(sd); 842 struct ov9740_priv *priv = to_ov9740(sd);
844 u8 modelhi, modello; 843 u8 modelhi, modello;
845 int ret; 844 int ret;
846 845
847 /* We must have a parent by now. And it cannot be a wrong one. */
848 BUG_ON(!icd->parent ||
849 to_soc_camera_host(icd->parent)->nr != icd->iface);
850
851 /* 846 /*
852 * check and show product ID and manufacturer ID 847 * check and show product ID and manufacturer ID
853 */ 848 */
@@ -893,8 +888,7 @@ static int ov9740_g_mbus_config(struct v4l2_subdev *sd,
893 struct v4l2_mbus_config *cfg) 888 struct v4l2_mbus_config *cfg)
894{ 889{
895 struct i2c_client *client = v4l2_get_subdevdata(sd); 890 struct i2c_client *client = v4l2_get_subdevdata(sd);
896 struct soc_camera_device *icd = client->dev.platform_data; 891 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
897 struct soc_camera_link *icl = to_soc_camera_link(icd);
898 892
899 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER | 893 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER |
900 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH | 894 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_HSYNC_ACTIVE_HIGH |
@@ -940,16 +934,9 @@ static int ov9740_probe(struct i2c_client *client,
940 const struct i2c_device_id *did) 934 const struct i2c_device_id *did)
941{ 935{
942 struct ov9740_priv *priv; 936 struct ov9740_priv *priv;
943 struct soc_camera_device *icd = client->dev.platform_data; 937 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
944 struct soc_camera_link *icl;
945 int ret; 938 int ret;
946 939
947 if (!icd) {
948 dev_err(&client->dev, "Missing soc-camera data!\n");
949 return -EINVAL;
950 }
951
952 icl = to_soc_camera_link(icd);
953 if (!icl) { 940 if (!icl) {
954 dev_err(&client->dev, "Missing platform_data for driver\n"); 941 dev_err(&client->dev, "Missing platform_data for driver\n");
955 return -EINVAL; 942 return -EINVAL;
@@ -975,7 +962,7 @@ static int ov9740_probe(struct i2c_client *client,
975 return err; 962 return err;
976 } 963 }
977 964
978 ret = ov9740_video_probe(icd, client); 965 ret = ov9740_video_probe(client);
979 if (!ret) 966 if (!ret)
980 ret = v4l2_ctrl_handler_setup(&priv->hdl); 967 ret = v4l2_ctrl_handler_setup(&priv->hdl);
981 if (ret < 0) { 968 if (ret < 0) {
diff --git a/drivers/media/video/rj54n1cb0c.c b/drivers/media/video/rj54n1cb0c.c
index 9a871537d233..fcb14d93a24c 100644
--- a/drivers/media/video/rj54n1cb0c.c
+++ b/drivers/media/video/rj54n1cb0c.c
@@ -1235,8 +1235,7 @@ static int rj54n1_g_mbus_config(struct v4l2_subdev *sd,
1235 struct v4l2_mbus_config *cfg) 1235 struct v4l2_mbus_config *cfg)
1236{ 1236{
1237 struct i2c_client *client = v4l2_get_subdevdata(sd); 1237 struct i2c_client *client = v4l2_get_subdevdata(sd);
1238 struct soc_camera_device *icd = client->dev.platform_data; 1238 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1239 struct soc_camera_link *icl = to_soc_camera_link(icd);
1240 1239
1241 cfg->flags = 1240 cfg->flags =
1242 V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING | 1241 V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_PCLK_SAMPLE_FALLING |
@@ -1252,8 +1251,7 @@ static int rj54n1_s_mbus_config(struct v4l2_subdev *sd,
1252 const struct v4l2_mbus_config *cfg) 1251 const struct v4l2_mbus_config *cfg)
1253{ 1252{
1254 struct i2c_client *client = v4l2_get_subdevdata(sd); 1253 struct i2c_client *client = v4l2_get_subdevdata(sd);
1255 struct soc_camera_device *icd = client->dev.platform_data; 1254 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1256 struct soc_camera_link *icl = to_soc_camera_link(icd);
1257 1255
1258 /* Figures 2.5-1 to 2.5-3 - default falling pixclk edge */ 1256 /* Figures 2.5-1 to 2.5-3 - default falling pixclk edge */
1259 if (soc_camera_apply_board_flags(icl, cfg) & 1257 if (soc_camera_apply_board_flags(icl, cfg) &
@@ -1285,17 +1283,12 @@ static struct v4l2_subdev_ops rj54n1_subdev_ops = {
1285 * Interface active, can use i2c. If it fails, it can indeed mean, that 1283 * Interface active, can use i2c. If it fails, it can indeed mean, that
1286 * this wasn't our capture interface, so, we wait for the right one 1284 * this wasn't our capture interface, so, we wait for the right one
1287 */ 1285 */
1288static int rj54n1_video_probe(struct soc_camera_device *icd, 1286static int rj54n1_video_probe(struct i2c_client *client,
1289 struct i2c_client *client,
1290 struct rj54n1_pdata *priv) 1287 struct rj54n1_pdata *priv)
1291{ 1288{
1292 int data1, data2; 1289 int data1, data2;
1293 int ret; 1290 int ret;
1294 1291
1295 /* We must have a parent by now. And it cannot be a wrong one. */
1296 BUG_ON(!icd->parent ||
1297 to_soc_camera_host(icd->parent)->nr != icd->iface);
1298
1299 /* Read out the chip version register */ 1292 /* Read out the chip version register */
1300 data1 = reg_read(client, RJ54N1_DEV_CODE); 1293 data1 = reg_read(client, RJ54N1_DEV_CODE);
1301 data2 = reg_read(client, RJ54N1_DEV_CODE2); 1294 data2 = reg_read(client, RJ54N1_DEV_CODE2);
@@ -1323,18 +1316,11 @@ static int rj54n1_probe(struct i2c_client *client,
1323 const struct i2c_device_id *did) 1316 const struct i2c_device_id *did)
1324{ 1317{
1325 struct rj54n1 *rj54n1; 1318 struct rj54n1 *rj54n1;
1326 struct soc_camera_device *icd = client->dev.platform_data; 1319 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1327 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 1320 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
1328 struct soc_camera_link *icl;
1329 struct rj54n1_pdata *rj54n1_priv; 1321 struct rj54n1_pdata *rj54n1_priv;
1330 int ret; 1322 int ret;
1331 1323
1332 if (!icd) {
1333 dev_err(&client->dev, "RJ54N1CB0C: missing soc-camera data!\n");
1334 return -EINVAL;
1335 }
1336
1337 icl = to_soc_camera_link(icd);
1338 if (!icl || !icl->priv) { 1324 if (!icl || !icl->priv) {
1339 dev_err(&client->dev, "RJ54N1CB0C: missing platform data!\n"); 1325 dev_err(&client->dev, "RJ54N1CB0C: missing platform data!\n");
1340 return -EINVAL; 1326 return -EINVAL;
@@ -1382,7 +1368,7 @@ static int rj54n1_probe(struct i2c_client *client,
1382 rj54n1->tgclk_mhz = (rj54n1_priv->mclk_freq / PLL_L * PLL_N) / 1368 rj54n1->tgclk_mhz = (rj54n1_priv->mclk_freq / PLL_L * PLL_N) /
1383 (clk_div.ratio_tg + 1) / (clk_div.ratio_t + 1); 1369 (clk_div.ratio_tg + 1) / (clk_div.ratio_t + 1);
1384 1370
1385 ret = rj54n1_video_probe(icd, client, rj54n1_priv); 1371 ret = rj54n1_video_probe(client, rj54n1_priv);
1386 if (ret < 0) { 1372 if (ret < 0) {
1387 v4l2_ctrl_handler_free(&rj54n1->hdl); 1373 v4l2_ctrl_handler_free(&rj54n1->hdl);
1388 kfree(rj54n1); 1374 kfree(rj54n1);
@@ -1394,8 +1380,7 @@ static int rj54n1_probe(struct i2c_client *client,
1394static int rj54n1_remove(struct i2c_client *client) 1380static int rj54n1_remove(struct i2c_client *client)
1395{ 1381{
1396 struct rj54n1 *rj54n1 = to_rj54n1(client); 1382 struct rj54n1 *rj54n1 = to_rj54n1(client);
1397 struct soc_camera_device *icd = client->dev.platform_data; 1383 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
1398 struct soc_camera_link *icl = to_soc_camera_link(icd);
1399 1384
1400 v4l2_device_unregister_subdev(&rj54n1->subdev); 1385 v4l2_device_unregister_subdev(&rj54n1->subdev);
1401 if (icl->free_bus) 1386 if (icl->free_bus)
diff --git a/drivers/media/video/tw9910.c b/drivers/media/video/tw9910.c
index 2fddd1fbe529..5a3722b756c7 100644
--- a/drivers/media/video/tw9910.c
+++ b/drivers/media/video/tw9910.c
@@ -764,10 +764,6 @@ static int tw9910_video_probe(struct soc_camera_device *icd,
764 struct tw9910_priv *priv = to_tw9910(client); 764 struct tw9910_priv *priv = to_tw9910(client);
765 s32 id; 765 s32 id;
766 766
767 /* We must have a parent by now. And it cannot be a wrong one. */
768 BUG_ON(!icd->parent ||
769 to_soc_camera_host(icd->parent)->nr != icd->iface);
770
771 /* 767 /*
772 * tw9910 only use 8 or 16 bit bus width 768 * tw9910 only use 8 or 16 bit bus width
773 */ 769 */
@@ -825,8 +821,7 @@ static int tw9910_g_mbus_config(struct v4l2_subdev *sd,
825 struct v4l2_mbus_config *cfg) 821 struct v4l2_mbus_config *cfg)
826{ 822{
827 struct i2c_client *client = v4l2_get_subdevdata(sd); 823 struct i2c_client *client = v4l2_get_subdevdata(sd);
828 struct soc_camera_device *icd = client->dev.platform_data; 824 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
829 struct soc_camera_link *icl = to_soc_camera_link(icd);
830 825
831 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER | 826 cfg->flags = V4L2_MBUS_PCLK_SAMPLE_RISING | V4L2_MBUS_MASTER |
832 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_LOW | 827 V4L2_MBUS_VSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_LOW |
@@ -842,8 +837,7 @@ static int tw9910_s_mbus_config(struct v4l2_subdev *sd,
842 const struct v4l2_mbus_config *cfg) 837 const struct v4l2_mbus_config *cfg)
843{ 838{
844 struct i2c_client *client = v4l2_get_subdevdata(sd); 839 struct i2c_client *client = v4l2_get_subdevdata(sd);
845 struct soc_camera_device *icd = client->dev.platform_data; 840 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
846 struct soc_camera_link *icl = to_soc_camera_link(icd);
847 u8 val = VSSL_VVALID | HSSL_DVALID; 841 u8 val = VSSL_VVALID | HSSL_DVALID;
848 unsigned long flags = soc_camera_apply_board_flags(icl, cfg); 842 unsigned long flags = soc_camera_apply_board_flags(icl, cfg);
849 843
@@ -887,23 +881,19 @@ static int tw9910_probe(struct i2c_client *client,
887 const struct i2c_device_id *did) 881 const struct i2c_device_id *did)
888 882
889{ 883{
890 struct tw9910_priv *priv; 884 struct tw9910_priv *priv;
891 struct tw9910_video_info *info; 885 struct tw9910_video_info *info;
892 struct soc_camera_device *icd = client->dev.platform_data; 886 struct soc_camera_device *icd = client->dev.platform_data;
893 struct i2c_adapter *adapter = 887 struct i2c_adapter *adapter =
894 to_i2c_adapter(client->dev.parent); 888 to_i2c_adapter(client->dev.parent);
895 struct soc_camera_link *icl; 889 struct soc_camera_link *icl = soc_camera_i2c_to_link(client);
896 int ret; 890 int ret;
897 891
898 if (!icd) { 892 if (!icl || !icl->priv) {
899 dev_err(&client->dev, "TW9910: missing soc-camera data!\n"); 893 dev_err(&client->dev, "TW9910: missing platform data!\n");
900 return -EINVAL; 894 return -EINVAL;
901 } 895 }
902 896
903 icl = to_soc_camera_link(icd);
904 if (!icl || !icl->priv)
905 return -EINVAL;
906
907 info = icl->priv; 897 info = icl->priv;
908 898
909 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { 899 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
@@ -921,8 +911,6 @@ static int tw9910_probe(struct i2c_client *client,
921 911
922 v4l2_i2c_subdev_init(&priv->subdev, client, &tw9910_subdev_ops); 912 v4l2_i2c_subdev_init(&priv->subdev, client, &tw9910_subdev_ops);
923 913
924 icd->iface = icl->bus_id;
925
926 ret = tw9910_video_probe(icd, client); 914 ret = tw9910_video_probe(icd, client);
927 if (ret) 915 if (ret)
928 kfree(priv); 916 kfree(priv);
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h
index 6398ff0f08ab..67a52c729eff 100644
--- a/include/media/soc_camera.h
+++ b/include/media/soc_camera.h
@@ -251,18 +251,35 @@ unsigned long soc_camera_apply_board_flags(struct soc_camera_link *icl,
251 251
252/* This is only temporary here - until v4l2-subdev begins to link to video_device */ 252/* This is only temporary here - until v4l2-subdev begins to link to video_device */
253#include <linux/i2c.h> 253#include <linux/i2c.h>
254static inline struct video_device *soc_camera_i2c_to_vdev(struct i2c_client *client) 254static inline struct video_device *soc_camera_i2c_to_vdev(const struct i2c_client *client)
255{ 255{
256 struct soc_camera_device *icd = client->dev.platform_data; 256 struct soc_camera_device *icd = client->dev.platform_data;
257 return icd->vdev; 257 return icd ? icd->vdev : NULL;
258} 258}
259 259
260static inline struct soc_camera_device *soc_camera_from_vb2q(struct vb2_queue *vq) 260static inline struct soc_camera_link *soc_camera_i2c_to_link(const struct i2c_client *client)
261{
262 struct soc_camera_device *icd = client->dev.platform_data;
263 return icd ? to_soc_camera_link(icd) : NULL;
264}
265
266static inline struct v4l2_subdev *soc_camera_vdev_to_subdev(const struct video_device *vdev)
267{
268 struct soc_camera_device *icd = dev_get_drvdata(vdev->parent);
269 return soc_camera_to_subdev(icd);
270}
271
272static inline struct soc_camera_device *soc_camera_from_i2c(const struct i2c_client *client)
273{
274 return client->dev.platform_data;
275}
276
277static inline struct soc_camera_device *soc_camera_from_vb2q(const struct vb2_queue *vq)
261{ 278{
262 return container_of(vq, struct soc_camera_device, vb2_vidq); 279 return container_of(vq, struct soc_camera_device, vb2_vidq);
263} 280}
264 281
265static inline struct soc_camera_device *soc_camera_from_vbq(struct videobuf_queue *vq) 282static inline struct soc_camera_device *soc_camera_from_vbq(const struct videobuf_queue *vq)
266{ 283{
267 return container_of(vq, struct soc_camera_device, vb_vidq); 284 return container_of(vq, struct soc_camera_device, vb_vidq);
268} 285}