aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Schaefer <fschaefer.oss@googlemail.com>2017-04-16 13:35:46 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2017-04-19 08:01:43 -0400
commitd72b196f96e2afad1656c9332da7ffe3b07e17cb (patch)
tree05e5c7cc21705733df3529badae77c0f42937fed
parent7f140fc2064bcd23e0490d8210650e2ef21c1c89 (diff)
[media] ov2640: add support for MEDIA_BUS_FMT_YVYU8_2X8 and MEDIA_BUS_FMT_VYUY8_2X8
Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r--drivers/media/i2c/ov2640.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/media/i2c/ov2640.c b/drivers/media/i2c/ov2640.c
index 6709e4de12ca..4a2ae24f8722 100644
--- a/drivers/media/i2c/ov2640.c
+++ b/drivers/media/i2c/ov2640.c
@@ -634,6 +634,8 @@ static const struct regval_list ov2640_rgb565_le_regs[] = {
634static u32 ov2640_codes[] = { 634static u32 ov2640_codes[] = {
635 MEDIA_BUS_FMT_YUYV8_2X8, 635 MEDIA_BUS_FMT_YUYV8_2X8,
636 MEDIA_BUS_FMT_UYVY8_2X8, 636 MEDIA_BUS_FMT_UYVY8_2X8,
637 MEDIA_BUS_FMT_YVYU8_2X8,
638 MEDIA_BUS_FMT_VYUY8_2X8,
637 MEDIA_BUS_FMT_RGB565_2X8_BE, 639 MEDIA_BUS_FMT_RGB565_2X8_BE,
638 MEDIA_BUS_FMT_RGB565_2X8_LE, 640 MEDIA_BUS_FMT_RGB565_2X8_LE,
639}; 641};
@@ -798,6 +800,7 @@ static int ov2640_set_params(struct i2c_client *client,
798{ 800{
799 struct ov2640_priv *priv = to_ov2640(client); 801 struct ov2640_priv *priv = to_ov2640(client);
800 const struct regval_list *selected_cfmt_regs; 802 const struct regval_list *selected_cfmt_regs;
803 u8 val;
801 int ret; 804 int ret;
802 805
803 /* select win */ 806 /* select win */
@@ -823,6 +826,14 @@ static int ov2640_set_params(struct i2c_client *client,
823 dev_dbg(&client->dev, "%s: Selected cfmt UYVY", __func__); 826 dev_dbg(&client->dev, "%s: Selected cfmt UYVY", __func__);
824 selected_cfmt_regs = ov2640_uyvy_regs; 827 selected_cfmt_regs = ov2640_uyvy_regs;
825 break; 828 break;
829 case MEDIA_BUS_FMT_YVYU8_2X8:
830 dev_dbg(&client->dev, "%s: Selected cfmt YVYU", __func__);
831 selected_cfmt_regs = ov2640_yuyv_regs;
832 break;
833 case MEDIA_BUS_FMT_VYUY8_2X8:
834 dev_dbg(&client->dev, "%s: Selected cfmt VYUY", __func__);
835 selected_cfmt_regs = ov2640_uyvy_regs;
836 break;
826 } 837 }
827 838
828 /* reset hardware */ 839 /* reset hardware */
@@ -855,6 +866,11 @@ static int ov2640_set_params(struct i2c_client *client,
855 ret = ov2640_write_array(client, selected_cfmt_regs); 866 ret = ov2640_write_array(client, selected_cfmt_regs);
856 if (ret < 0) 867 if (ret < 0)
857 goto err; 868 goto err;
869 val = (code == MEDIA_BUS_FMT_YVYU8_2X8)
870 || (code == MEDIA_BUS_FMT_VYUY8_2X8) ? CTRL0_VFIRST : 0x00;
871 ret = ov2640_mask_set(client, CTRL0, CTRL0_VFIRST, val);
872 if (ret < 0)
873 goto err;
858 874
859 priv->cfmt_code = code; 875 priv->cfmt_code = code;
860 876
@@ -917,6 +933,8 @@ static int ov2640_set_fmt(struct v4l2_subdev *sd,
917 case MEDIA_BUS_FMT_RGB565_2X8_LE: 933 case MEDIA_BUS_FMT_RGB565_2X8_LE:
918 case MEDIA_BUS_FMT_YUYV8_2X8: 934 case MEDIA_BUS_FMT_YUYV8_2X8:
919 case MEDIA_BUS_FMT_UYVY8_2X8: 935 case MEDIA_BUS_FMT_UYVY8_2X8:
936 case MEDIA_BUS_FMT_YVYU8_2X8:
937 case MEDIA_BUS_FMT_VYUY8_2X8:
920 break; 938 break;
921 default: 939 default:
922 mf->code = MEDIA_BUS_FMT_UYVY8_2X8; 940 mf->code = MEDIA_BUS_FMT_UYVY8_2X8;