[media] soc_camera: rcar_vin: Add ARGB8888 caputre format support

This patch adds ARGB8888 capture format support for R-Car Gen3.

Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
Signed-off-by: Yoshihiro Kaneko <ykaneko0929@gmail.com>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
Koji Matsuoka 2016-01-24 14:13:29 -02:00 committed by Mauro Carvalho Chehab
parent 5d8d8db851
commit c54ae8fea6
1 changed files with 29 additions and 10 deletions

View File

@ -124,7 +124,7 @@
#define VNDMR_EXRGB (1 << 8) #define VNDMR_EXRGB (1 << 8)
#define VNDMR_BPSM (1 << 4) #define VNDMR_BPSM (1 << 4)
#define VNDMR_DTMD_YCSEP (1 << 1) #define VNDMR_DTMD_YCSEP (1 << 1)
#define VNDMR_DTMD_ARGB1555 (1 << 0) #define VNDMR_DTMD_ARGB (1 << 0)
/* Video n Data Mode Register 2 bits */ /* Video n Data Mode Register 2 bits */
#define VNDMR2_VPS (1 << 30) #define VNDMR2_VPS (1 << 30)
@ -643,21 +643,26 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
output_is_yuv = true; output_is_yuv = true;
break; break;
case V4L2_PIX_FMT_RGB555X: case V4L2_PIX_FMT_RGB555X:
dmr = VNDMR_DTMD_ARGB1555; dmr = VNDMR_DTMD_ARGB;
break; break;
case V4L2_PIX_FMT_RGB565: case V4L2_PIX_FMT_RGB565:
dmr = 0; dmr = 0;
break; break;
case V4L2_PIX_FMT_RGB32: case V4L2_PIX_FMT_RGB32:
if (priv->chip == RCAR_GEN2 || priv->chip == RCAR_H1 || if (priv->chip != RCAR_GEN2 && priv->chip != RCAR_H1 &&
priv->chip == RCAR_E1) { priv->chip != RCAR_E1)
goto e_format;
dmr = VNDMR_EXRGB; dmr = VNDMR_EXRGB;
break; break;
} case V4L2_PIX_FMT_ARGB32:
if (priv->chip != RCAR_GEN3)
goto e_format;
dmr = VNDMR_EXRGB | VNDMR_DTMD_ARGB;
break;
default: default:
dev_warn(icd->parent, "Invalid fourcc format (0x%x)\n", goto e_format;
icd->current_fmt->host_fmt->fourcc);
return -EINVAL;
} }
/* Always update on field change */ /* Always update on field change */
@ -679,6 +684,11 @@ static int rcar_vin_setup(struct rcar_vin_priv *priv)
iowrite32(vnmc | VNMC_ME, priv->base + VNMC_REG); iowrite32(vnmc | VNMC_ME, priv->base + VNMC_REG);
return 0; return 0;
e_format:
dev_warn(icd->parent, "Invalid fourcc format (0x%x)\n",
icd->current_fmt->host_fmt->fourcc);
return -EINVAL;
} }
static void rcar_vin_capture(struct rcar_vin_priv *priv) static void rcar_vin_capture(struct rcar_vin_priv *priv)
@ -1304,6 +1314,14 @@ static const struct soc_mbus_pixelfmt rcar_vin_formats[] = {
.order = SOC_MBUS_ORDER_LE, .order = SOC_MBUS_ORDER_LE,
.layout = SOC_MBUS_LAYOUT_PACKED, .layout = SOC_MBUS_LAYOUT_PACKED,
}, },
{
.fourcc = V4L2_PIX_FMT_ARGB32,
.name = "ARGB8888",
.bits_per_sample = 32,
.packing = SOC_MBUS_PACKING_NONE,
.order = SOC_MBUS_ORDER_LE,
.layout = SOC_MBUS_LAYOUT_PACKED,
},
}; };
static int rcar_vin_get_formats(struct soc_camera_device *icd, unsigned int idx, static int rcar_vin_get_formats(struct soc_camera_device *icd, unsigned int idx,
@ -1611,6 +1629,7 @@ static int rcar_vin_set_fmt(struct soc_camera_device *icd,
case V4L2_PIX_FMT_RGB32: case V4L2_PIX_FMT_RGB32:
can_scale = priv->chip != RCAR_E1; can_scale = priv->chip != RCAR_E1;
break; break;
case V4L2_PIX_FMT_ARGB32:
case V4L2_PIX_FMT_UYVY: case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_YUYV: case V4L2_PIX_FMT_YUYV:
case V4L2_PIX_FMT_RGB565: case V4L2_PIX_FMT_RGB565: