|
@@ -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) {
|
|
@@ -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;
|
|
|
}
|
|
@@ -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 */
|
|
@@ -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,
|
|
@@ -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);
|
|
|
}
|