aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/vivi.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/media/video/vivi.c b/drivers/media/video/vivi.c
index 2a6ebc126c09..2fddba6d5b39 100644
--- a/drivers/media/video/vivi.c
+++ b/drivers/media/video/vivi.c
@@ -139,6 +139,16 @@ static struct vivi_fmt formats[] = {
139 .fourcc = V4L2_PIX_FMT_UYVY, 139 .fourcc = V4L2_PIX_FMT_UYVY,
140 .depth = 16, 140 .depth = 16,
141 }, 141 },
142 {
143 .name = "RGB565 (LE)",
144 .fourcc = V4L2_PIX_FMT_RGB565, /* gggbbbbb rrrrrggg */
145 .depth = 16,
146 },
147 {
148 .name = "RGB565 (BE)",
149 .fourcc = V4L2_PIX_FMT_RGB565X, /* rrrrrggg gggbbbbb */
150 .depth = 16,
151 },
142}; 152};
143 153
144static struct vivi_fmt *get_format(struct v4l2_format *f) 154static struct vivi_fmt *get_format(struct v4l2_format *f)
@@ -301,6 +311,30 @@ static void gen_twopix(struct vivi_fh *fh, unsigned char *buf, int colorpos)
301 break; 311 break;
302 } 312 }
303 break; 313 break;
314 case V4L2_PIX_FMT_RGB565:
315 switch (color) {
316 case 0:
317 case 2:
318 *p = (g_u << 5) | b_v;
319 break;
320 case 1:
321 case 3:
322 *p = (r_y << 3) | (g_u >> 3);
323 break;
324 }
325 break;
326 case V4L2_PIX_FMT_RGB565X:
327 switch (color) {
328 case 0:
329 case 2:
330 *p = (r_y << 3) | (g_u >> 3);
331 break;
332 case 1:
333 case 3:
334 *p = (g_u << 5) | b_v;
335 break;
336 }
337 break;
304 } 338 }
305 } 339 }
306} 340}
@@ -778,6 +812,12 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
778 case V4L2_PIX_FMT_UYVY: 812 case V4L2_PIX_FMT_UYVY:
779 is_yuv = 1; 813 is_yuv = 1;
780 break; 814 break;
815 case V4L2_PIX_FMT_RGB565:
816 case V4L2_PIX_FMT_RGB565X:
817 r >>= 3;
818 g >>= 2;
819 b >>= 3;
820 break;
781 } 821 }
782 822
783 if (is_yuv) { 823 if (is_yuv) {