diff options
author | Frank Schaefer <fschaefer.oss@googlemail.com> | 2017-04-16 13:35:46 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-04-19 08:01:43 -0400 |
commit | d72b196f96e2afad1656c9332da7ffe3b07e17cb (patch) | |
tree | 05e5c7cc21705733df3529badae77c0f42937fed | |
parent | 7f140fc2064bcd23e0490d8210650e2ef21c1c89 (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.c | 18 |
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[] = { | |||
634 | static u32 ov2640_codes[] = { | 634 | static 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; |