Skip to content

Commit

Permalink
[media] atmel-isi: support RGB565 output when sensor output YUV formats
Browse files Browse the repository at this point in the history
This patch enable Atmel ISI preview path to convert the YUV to RGB format.

Signed-off-by: Josh Wu <[email protected]>
[[email protected]: removed superfluous parentheses]
Signed-off-by: Guennadi Liakhovetski <[email protected]>

Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
JoshWu authored and mchehab committed Nov 17, 2015
1 parent 7393de6 commit 05645a4
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions drivers/media/platform/soc_camera/atmel-isi.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,10 @@ static void configure_geometry(struct atmel_isi *isi, u32 width,
u32 height, const struct soc_camera_format_xlate *xlate)
{
u32 cfg2, psize;
u32 fourcc = xlate->host_fmt->fourcc;

isi->enable_preview_path = fourcc == V4L2_PIX_FMT_RGB565 ||
fourcc == V4L2_PIX_FMT_RGB32;

/* According to sensor's output format to set cfg2 */
switch (xlate->code) {
Expand Down Expand Up @@ -195,8 +199,9 @@ static bool is_supported(struct soc_camera_device *icd,
case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_YVYU:
case V4L2_PIX_FMT_VYUY:
/* RGB */
case V4L2_PIX_FMT_RGB565:
return true;
/* RGB, TODO */
default:
return false;
}
Expand Down Expand Up @@ -686,6 +691,14 @@ static const struct soc_mbus_pixelfmt isi_camera_formats[] = {
.order = SOC_MBUS_ORDER_LE,
.layout = SOC_MBUS_LAYOUT_PACKED,
},
{
.fourcc = V4L2_PIX_FMT_RGB565,
.name = "RGB565",
.bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_LE,
.layout = SOC_MBUS_LAYOUT_PACKED,
},
};

/* This will be corrected as we get more formats */
Expand Down Expand Up @@ -742,7 +755,7 @@ static int isi_camera_get_formats(struct soc_camera_device *icd,
struct soc_camera_format_xlate *xlate)
{
struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
int formats = 0, ret;
int formats = 0, ret, i, n;
/* sensor format */
struct v4l2_subdev_mbus_code_enum code = {
.which = V4L2_SUBDEV_FORMAT_ACTIVE,
Expand Down Expand Up @@ -776,11 +789,11 @@ static int isi_camera_get_formats(struct soc_camera_device *icd,
case MEDIA_BUS_FMT_VYUY8_2X8:
case MEDIA_BUS_FMT_YUYV8_2X8:
case MEDIA_BUS_FMT_YVYU8_2X8:
formats++;
if (xlate) {
xlate->host_fmt = &isi_camera_formats[0];
n = ARRAY_SIZE(isi_camera_formats);
formats += n;
for (i = 0; xlate && i < n; i++, xlate++) {
xlate->host_fmt = &isi_camera_formats[i];
xlate->code = code.code;
xlate++;
dev_dbg(icd->parent, "Providing format %s using code %d\n",
isi_camera_formats[0].name, code.code);
}
Expand Down

0 comments on commit 05645a4

Please sign in to comment.