Hi John Sheu, Thanks for the patch. Please find the review comments inline. On Wed, Mar 12, 2014 at 4:22 AM, John Sheu <sheu@xxxxxxxxxx> wrote: > Explicitly specify sampling period for subsampled chroma formats, so > stride and image size are properly reported through VIDIOC_{S,G}_FMT. > > Signed-off-by: John Sheu <sheu@xxxxxxxxxx> > --- > drivers/media/platform/exynos-gsc/gsc-core.c | 154 +++++++++++++++------------ > drivers/media/platform/exynos-gsc/gsc-core.h | 16 +-- > drivers/media/platform/exynos-gsc/gsc-regs.c | 40 +++---- > drivers/media/platform/exynos-gsc/gsc-regs.h | 4 +- > 4 files changed, 116 insertions(+), 98 deletions(-) > > diff --git a/drivers/media/platform/exynos-gsc/gsc-core.c b/drivers/media/platform/exynos-gsc/gsc-core.c > index 9d0cc04d..c02addef 100644 > --- a/drivers/media/platform/exynos-gsc/gsc-core.c > +++ b/drivers/media/platform/exynos-gsc/gsc-core.c > @@ -34,167 +34,185 @@ static const struct gsc_fmt gsc_formats[] = { > { > .name = "RGB565", > .pixelformat = V4L2_PIX_FMT_RGB565X, > - .depth = { 16 }, > .color = GSC_RGB, > .num_planes = 1, > .num_comp = 1, > + .depth = { 16 }, > + .sampling = { { 1, 1 } }, > }, { > .name = "XRGB-8-8-8-8, 32 bpp", > .pixelformat = V4L2_PIX_FMT_RGB32, > - .depth = { 32 }, > .color = GSC_RGB, > .num_planes = 1, > .num_comp = 1, > + .depth = { 32 }, > + .sampling = { { 1, 1 } }, > }, { > .name = "YUV 4:2:2 packed, YCbYCr", > .pixelformat = V4L2_PIX_FMT_YUYV, > - .depth = { 16 }, > .color = GSC_YUV422, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 1, > .num_comp = 1, > + .depth = { 16 }, > + .sampling = { { 1, 1 } }, > .mbus_code = V4L2_MBUS_FMT_YUYV8_2X8, > }, { > .name = "YUV 4:2:2 packed, CbYCrY", > .pixelformat = V4L2_PIX_FMT_UYVY, > - .depth = { 16 }, > .color = GSC_YUV422, > .yorder = GSC_LSB_C, > .corder = GSC_CBCR, > .num_planes = 1, > .num_comp = 1, > + .depth = { 16 }, > + .sampling = { { 1, 1 } }, > .mbus_code = V4L2_MBUS_FMT_UYVY8_2X8, > }, { > .name = "YUV 4:2:2 packed, CrYCbY", > .pixelformat = V4L2_PIX_FMT_VYUY, > - .depth = { 16 }, > .color = GSC_YUV422, > .yorder = GSC_LSB_C, > .corder = GSC_CRCB, > .num_planes = 1, > .num_comp = 1, > + .depth = { 16 }, > + .sampling = { { 1, 1 } }, > .mbus_code = V4L2_MBUS_FMT_VYUY8_2X8, > }, { > .name = "YUV 4:2:2 packed, YCrYCb", > .pixelformat = V4L2_PIX_FMT_YVYU, > - .depth = { 16 }, > .color = GSC_YUV422, > .yorder = GSC_LSB_Y, > .corder = GSC_CRCB, > .num_planes = 1, > .num_comp = 1, > + .depth = { 16 }, > + .sampling = { { 1, 1 } }, > .mbus_code = V4L2_MBUS_FMT_YVYU8_2X8, > }, { > .name = "YUV 4:4:4 planar, YCbYCr", > .pixelformat = V4L2_PIX_FMT_YUV32, > - .depth = { 32 }, > .color = GSC_YUV444, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 1, > .num_comp = 1, > + .depth = { 32 }, > + .sampling = { { 1, 1 } }, > }, { > .name = "YUV 4:2:2 planar, Y/Cb/Cr", > .pixelformat = V4L2_PIX_FMT_YUV422P, > - .depth = { 16 }, > .color = GSC_YUV422, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 1, > .num_comp = 3, > + .depth = { 8, 8, 8 }, > + .sampling = { { 1, 1 }, { 2, 1 }, { 2, 1 } }, > }, { > .name = "YUV 4:2:2 planar, Y/CbCr", > .pixelformat = V4L2_PIX_FMT_NV16, > - .depth = { 16 }, > .color = GSC_YUV422, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 1, > .num_comp = 2, > + .depth = { 8, 16 }, > + .sampling = { { 1, 1 }, { 2, 1 } }, > }, { > .name = "YUV 4:2:2 planar, Y/CrCb", > .pixelformat = V4L2_PIX_FMT_NV61, > - .depth = { 16 }, > .color = GSC_YUV422, > .yorder = GSC_LSB_Y, > .corder = GSC_CRCB, > .num_planes = 1, > .num_comp = 2, > + .depth = { 8, 16 }, > + .sampling = { { 1, 1 }, { 2, 1 } }, > }, { > .name = "YUV 4:2:0 planar, YCbCr", > .pixelformat = V4L2_PIX_FMT_YUV420, > - .depth = { 12 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 1, > .num_comp = 3, > + .depth = { 8, 8, 8 }, > + .sampling = { { 1, 1 }, { 2, 2 }, { 2, 2 } }, > }, { > .name = "YUV 4:2:0 planar, YCrCb", > .pixelformat = V4L2_PIX_FMT_YVU420, > - .depth = { 12 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CRCB, > .num_planes = 1, > .num_comp = 3, > - > + .depth = { 8, 8, 8 }, > + .sampling = { { 1, 1 }, { 2, 2 }, { 2, 2 } }, > }, { > .name = "YUV 4:2:0 planar, Y/CbCr", > .pixelformat = V4L2_PIX_FMT_NV12, > - .depth = { 12 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 1, > .num_comp = 2, > + .depth = { 8, 16 }, > + .sampling = { { 1, 1 }, { 2, 2 } }, > }, { > .name = "YUV 4:2:0 planar, Y/CrCb", > .pixelformat = V4L2_PIX_FMT_NV21, > - .depth = { 12 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CRCB, > .num_planes = 1, > .num_comp = 2, > + .depth = { 8, 16 }, > + .sampling = { { 1, 1 }, { 2, 2 } }, > }, { > - .name = "YUV 4:2:0 non-contig. 2p, Y/CbCr", > + .name = "YUV 4:2:0 non-contiguous 2-planar, Y/CbCr", > .pixelformat = V4L2_PIX_FMT_NV12M, > - .depth = { 8, 4 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 2, > .num_comp = 2, > + .depth = { 8, 16 }, > + .sampling = { { 1, 1 }, { 2, 2 } }, > }, { > - .name = "YUV 4:2:0 non-contig. 3p, Y/Cb/Cr", > + .name = "YUV 4:2:0 non-contiguous 3-planar, Y/Cb/Cr", > .pixelformat = V4L2_PIX_FMT_YUV420M, > - .depth = { 8, 2, 2 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 3, > .num_comp = 3, > + .depth = { 8, 8, 8 }, > + .sampling = { { 1, 1 }, { 2, 2 }, { 2, 2 } }, > }, { > - .name = "YUV 4:2:0 non-contig. 3p, Y/Cr/Cb", > + .name = "YUV 4:2:0 non-contiguous 3-planar, Y/Cr/Cb", > .pixelformat = V4L2_PIX_FMT_YVU420M, > - .depth = { 8, 2, 2 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CRCB, > .num_planes = 3, > .num_comp = 3, > + .depth = { 8, 8, 8 }, > + .sampling = { { 1, 1 }, { 2, 2 }, { 2, 2 } }, > }, { > - .name = "YUV 4:2:0 n.c. 2p, Y/CbCr tiled", > + .name = > + "YUV 4:2:0 non-contiguous 2-planar, Y/CbCr, tiled", > .pixelformat = V4L2_PIX_FMT_NV12MT_16X16, > - .depth = { 8, 4 }, > .color = GSC_YUV420, > .yorder = GSC_LSB_Y, > .corder = GSC_CBCR, > .num_planes = 2, > .num_comp = 2, > - } > + .depth = { 8, 16 }, > + .sampling = { { 1, 1 }, { 2, 2 } }, > + }, > }; > > const struct gsc_fmt *get_format(int index) > @@ -384,6 +402,14 @@ void gsc_set_prefbuf(struct gsc_dev *gsc, struct gsc_frame *frm) > f_chk_addr, f_chk_len, s_chk_addr, s_chk_len); > } > > +static void get_format_size(__u32 width, __u32 height, > + const struct gsc_fmt *fmt, int plane, > + __u16 *bytesperline, __u32 *sizeimage) { > + __u16 bpl = ((width * fmt->depth[plane]) / fmt->sampling[plane][0]) / 8; > + *bytesperline = bpl; > + *sizeimage = (height * bpl) / fmt->sampling[plane][0]; should use the height sampling instead ?? *sizeimage = (height * bpl) / fmt->sampling[plane][1]; > +} > + > int gsc_try_fmt_mplane(struct gsc_ctx *ctx, struct v4l2_format *f) > { > struct gsc_dev *gsc = ctx->gsc_dev; > @@ -448,14 +474,16 @@ int gsc_try_fmt_mplane(struct gsc_ctx *ctx, struct v4l2_format *f) > else /* SD */ > pix_mp->colorspace = V4L2_COLORSPACE_SMPTE170M; > > - > + /* V4L2 specifies for contiguous planar formats that bytesperline and > + sizeimage are set to values appropriate for the first plane. */ > for (i = 0; i < pix_mp->num_planes; ++i) { > - int bpl = (pix_mp->width * fmt->depth[i]) >> 3; > - pix_mp->plane_fmt[i].bytesperline = bpl; > - pix_mp->plane_fmt[i].sizeimage = bpl * pix_mp->height; > + get_format_size(pix_mp->width, pix_mp->height, fmt, i, > + &pix_mp->plane_fmt[i].bytesperline, > + &pix_mp->plane_fmt[i].sizeimage); > > pr_debug("[%d]: bpl: %d, sizeimage: %d", > - i, bpl, pix_mp->plane_fmt[i].sizeimage); > + i, pix_mp->plane_fmt[i].bytesperline, > + pix_mp->plane_fmt[i].sizeimage); > } > > return 0; > @@ -465,26 +493,27 @@ int gsc_g_fmt_mplane(struct gsc_ctx *ctx, struct v4l2_format *f) > { > struct gsc_frame *frame; > struct v4l2_pix_format_mplane *pix_mp; > + const struct gsc_fmt *fmt; > int i; > > frame = ctx_get_frame(ctx, f->type); > if (IS_ERR(frame)) > return PTR_ERR(frame); > + fmt = frame->fmt; > > pix_mp = &f->fmt.pix_mp; > > pix_mp->width = frame->f_width; > pix_mp->height = frame->f_height; > pix_mp->field = V4L2_FIELD_NONE; > - pix_mp->pixelformat = frame->fmt->pixelformat; > + pix_mp->pixelformat = fmt->pixelformat; > pix_mp->colorspace = V4L2_COLORSPACE_REC709; > - pix_mp->num_planes = frame->fmt->num_planes; > + pix_mp->num_planes = fmt->num_planes; > > for (i = 0; i < pix_mp->num_planes; ++i) { > - pix_mp->plane_fmt[i].bytesperline = (frame->f_width * > - frame->fmt->depth[i]) / 8; > - pix_mp->plane_fmt[i].sizeimage = > - pix_mp->plane_fmt[i].bytesperline * frame->f_height; > + get_format_size(pix_mp->width, pix_mp->height, fmt, i, > + &pix_mp->plane_fmt[i].bytesperline, > + &pix_mp->plane_fmt[i].sizeimage); > } > > return 0; > @@ -794,11 +823,12 @@ void gsc_ctrls_delete(struct gsc_ctx *ctx) > } > } > > -/* The color format (num_comp, num_planes) must be already configured. */ > +/* The color format (num_planes, num_comp) must be already configured. */ > int gsc_prepare_addr(struct gsc_ctx *ctx, struct vb2_buffer *vb, > struct gsc_frame *frame, struct gsc_addr *addr) > { > int ret = 0; > + const struct gsc_fmt *fmt = frame->fmt; > u32 pix_size; > > if ((vb == NULL) || (frame == NULL)) > @@ -810,46 +840,30 @@ int gsc_prepare_addr(struct gsc_ctx *ctx, struct vb2_buffer *vb, > frame->fmt->num_planes, frame->fmt->num_comp, pix_size); > > addr->y = vb2_dma_contig_plane_dma_addr(vb, 0); > - > - if (frame->fmt->num_planes == 1) { > - switch (frame->fmt->num_comp) { > - case 1: > - addr->cb = 0; > - addr->cr = 0; > - break; > - case 2: > - /* decompose Y into Y/Cb */ > - addr->cb = (dma_addr_t)(addr->y + pix_size); > - addr->cr = 0; > - break; > - case 3: > - /* decompose Y into Y/Cb/Cr */ > - addr->cb = (dma_addr_t)(addr->y + pix_size); > - if (GSC_YUV420 == frame->fmt->color) > - addr->cr = (dma_addr_t)(addr->cb > - + (pix_size >> 2)); > - else /* 422 */ > - addr->cr = (dma_addr_t)(addr->cb > - + (pix_size >> 1)); > - break; > - default: > - pr_err("Invalid the number of color planes"); > - return -EINVAL; > + addr->cb = 0; > + addr->cr = 0; > + > + if (fmt->num_planes == 1) { > + if (fmt->num_comp >= 2) { > + addr->cb = (dma_addr_t)(addr->y + > + ((pix_size * fmt->depth[0]) / > + (fmt->sampling[0][0] * > + fmt->sampling[0][1]) / 8)); > + } > + if (fmt->num_comp >= 3) { > + addr->cr = (dma_addr_t)(addr->cb + > + ((pix_size * fmt->depth[1]) / > + (fmt->sampling[1][0] * > + fmt->sampling[1][1]) / 8)); > } > } else { > - if (frame->fmt->num_planes >= 2) > + if (fmt->num_comp >= 2) > addr->cb = vb2_dma_contig_plane_dma_addr(vb, 1); > - > - if (frame->fmt->num_planes == 3) > + if (fmt->num_comp == 3) > addr->cr = vb2_dma_contig_plane_dma_addr(vb, 2); > } > > - if ((frame->fmt->pixelformat == V4L2_PIX_FMT_VYUY) || > - (frame->fmt->pixelformat == V4L2_PIX_FMT_YVYU) || > - (frame->fmt->pixelformat == V4L2_PIX_FMT_NV61) || > - (frame->fmt->pixelformat == V4L2_PIX_FMT_YVU420) || > - (frame->fmt->pixelformat == V4L2_PIX_FMT_NV21) || > - (frame->fmt->pixelformat == V4L2_PIX_FMT_YVU420M)) > + if (fmt->corder == GSC_CRCB) if ((fmt->corder == GSC_CRCB) && (fmt->num_planes == 3)) I think it shoud only applicable to 3 component formats. for example, Incase of two component formats like V4L2_PIX_FMT_NV61, chroma base address becomes zero. Regards, Shaik Ameer Basha > swap(addr->cb, addr->cr); > > pr_debug("ADDR: y= 0x%X cb= 0x%X cr= 0x%X ret= %d", > diff --git a/drivers/media/platform/exynos-gsc/gsc-core.h b/drivers/media/platform/exynos-gsc/gsc-core.h > index ef0a6564..8fb07e0d 100644 > --- a/drivers/media/platform/exynos-gsc/gsc-core.h > +++ b/drivers/media/platform/exynos-gsc/gsc-core.h > @@ -106,27 +106,27 @@ enum gsc_yuv_fmt { > container_of((__ctrl)->handler, struct gsc_ctx, ctrl_handler) > /** > * struct gsc_fmt - the driver's internal color format data > - * @mbus_code: Media Bus pixel code, -1 if not applicable > * @name: format description > * @pixelformat: the fourcc code for this format, 0 if not applicable > * @yorder: Y/C order > * @corder: Chrominance order control > * @num_planes: number of physically non-contiguous data planes > - * @nr_comp: number of physically contiguous data planes > - * @depth: per plane driver's private 'number of bits per pixel' > - * @flags: flags indicating which operation mode format applies to > + * @num_comp: number of physically contiguous data planes > + * @depth: bit depth of each component > + * @sampling: sampling frequency of each components, X and Y > + * @mbus_code: Media Bus pixel code, -1 if not applicable > */ > struct gsc_fmt { > - enum v4l2_mbus_pixelcode mbus_code; > char *name; > u32 pixelformat; > u32 color; > u32 yorder; > u32 corder; > - u16 num_planes; > - u16 num_comp; > + u8 num_planes; > + u8 num_comp; > u8 depth[VIDEO_MAX_PLANES]; > - u32 flags; > + u8 sampling[VIDEO_MAX_PLANES][2]; > + enum v4l2_mbus_pixelcode mbus_code; > }; > > /** > diff --git a/drivers/media/platform/exynos-gsc/gsc-regs.c b/drivers/media/platform/exynos-gsc/gsc-regs.c > index e22d147a..a8d6c90b 100644 > --- a/drivers/media/platform/exynos-gsc/gsc-regs.c > +++ b/drivers/media/platform/exynos-gsc/gsc-regs.c > @@ -167,6 +167,7 @@ void gsc_hw_set_in_image_format(struct gsc_ctx *ctx) > { > struct gsc_dev *dev = ctx->gsc_dev; > struct gsc_frame *frame = &ctx->s_frame; > + const struct gsc_fmt *fmt = frame->fmt; > u32 i, depth = 0; > u32 cfg; > > @@ -176,21 +177,22 @@ void gsc_hw_set_in_image_format(struct gsc_ctx *ctx) > GSC_IN_TILE_TYPE_MASK | GSC_IN_TILE_MODE); > writel(cfg, dev->regs + GSC_IN_CON); > > - if (is_rgb(frame->fmt->color)) { > + if (is_rgb(fmt->color)) { > gsc_hw_set_in_image_rgb(ctx); > return; > } > - for (i = 0; i < frame->fmt->num_planes; i++) > - depth += frame->fmt->depth[i]; > + for (i = 0; i < fmt->num_comp; i++) > + depth += fmt->depth[i] / > + (fmt->sampling[i][0] * fmt->sampling[i][1]); > > - switch (frame->fmt->num_comp) { > + switch (fmt->num_comp) { > case 1: > cfg |= GSC_IN_YUV422_1P; > - if (frame->fmt->yorder == GSC_LSB_Y) > + if (fmt->yorder == GSC_LSB_Y) > cfg |= GSC_IN_YUV422_1P_ORDER_LSB_Y; > else > - cfg |= GSC_IN_YUV422_1P_OEDER_LSB_C; > - if (frame->fmt->corder == GSC_CBCR) > + cfg |= GSC_IN_YUV422_1P_ORDER_LSB_C; > + if (fmt->corder == GSC_CBCR) > cfg |= GSC_IN_CHROMA_ORDER_CBCR; > else > cfg |= GSC_IN_CHROMA_ORDER_CRCB; > @@ -200,7 +202,7 @@ void gsc_hw_set_in_image_format(struct gsc_ctx *ctx) > cfg |= GSC_IN_YUV420_2P; > else > cfg |= GSC_IN_YUV422_2P; > - if (frame->fmt->corder == GSC_CBCR) > + if (fmt->corder == GSC_CBCR) > cfg |= GSC_IN_CHROMA_ORDER_CBCR; > else > cfg |= GSC_IN_CHROMA_ORDER_CRCB; > @@ -213,7 +215,7 @@ void gsc_hw_set_in_image_format(struct gsc_ctx *ctx) > break; > } > > - if (is_tiled(frame->fmt)) > + if (is_tiled(fmt)) > cfg |= GSC_IN_TILE_C_16x8 | GSC_IN_TILE_MODE; > > writel(cfg, dev->regs + GSC_IN_CON); > @@ -287,6 +289,7 @@ void gsc_hw_set_out_image_format(struct gsc_ctx *ctx) > { > struct gsc_dev *dev = ctx->gsc_dev; > struct gsc_frame *frame = &ctx->d_frame; > + const struct gsc_fmt *fmt = frame->fmt; > u32 i, depth = 0; > u32 cfg; > > @@ -296,7 +299,7 @@ void gsc_hw_set_out_image_format(struct gsc_ctx *ctx) > GSC_OUT_TILE_TYPE_MASK | GSC_OUT_TILE_MODE); > writel(cfg, dev->regs + GSC_OUT_CON); > > - if (is_rgb(frame->fmt->color)) { > + if (is_rgb(fmt->color)) { > gsc_hw_set_out_image_rgb(ctx); > return; > } > @@ -306,17 +309,18 @@ void gsc_hw_set_out_image_format(struct gsc_ctx *ctx) > goto end_set; > } > > - for (i = 0; i < frame->fmt->num_planes; i++) > - depth += frame->fmt->depth[i]; > + for (i = 0; i < fmt->num_comp; i++) > + depth += fmt->depth[i] / > + (fmt->sampling[i][0] * fmt->sampling[i][1]); > > - switch (frame->fmt->num_comp) { > + switch (fmt->num_comp) { > case 1: > cfg |= GSC_OUT_YUV422_1P; > - if (frame->fmt->yorder == GSC_LSB_Y) > + if (fmt->yorder == GSC_LSB_Y) > cfg |= GSC_OUT_YUV422_1P_ORDER_LSB_Y; > else > - cfg |= GSC_OUT_YUV422_1P_OEDER_LSB_C; > - if (frame->fmt->corder == GSC_CBCR) > + cfg |= GSC_OUT_YUV422_1P_ORDER_LSB_C; > + if (fmt->corder == GSC_CBCR) > cfg |= GSC_OUT_CHROMA_ORDER_CBCR; > else > cfg |= GSC_OUT_CHROMA_ORDER_CRCB; > @@ -326,7 +330,7 @@ void gsc_hw_set_out_image_format(struct gsc_ctx *ctx) > cfg |= GSC_OUT_YUV420_2P; > else > cfg |= GSC_OUT_YUV422_2P; > - if (frame->fmt->corder == GSC_CBCR) > + if (fmt->corder == GSC_CBCR) > cfg |= GSC_OUT_CHROMA_ORDER_CBCR; > else > cfg |= GSC_OUT_CHROMA_ORDER_CRCB; > @@ -336,7 +340,7 @@ void gsc_hw_set_out_image_format(struct gsc_ctx *ctx) > break; > } > > - if (is_tiled(frame->fmt)) > + if (is_tiled(fmt)) > cfg |= GSC_OUT_TILE_C_16x8 | GSC_OUT_TILE_MODE; > > end_set: > diff --git a/drivers/media/platform/exynos-gsc/gsc-regs.h b/drivers/media/platform/exynos-gsc/gsc-regs.h > index 4678f9a6..b03401dc 100644 > --- a/drivers/media/platform/exynos-gsc/gsc-regs.h > +++ b/drivers/media/platform/exynos-gsc/gsc-regs.h > @@ -46,7 +46,7 @@ > #define GSC_IN_RGB_SD_WIDE (0 << 14) > #define GSC_IN_YUV422_1P_ORDER_MASK (1 << 13) > #define GSC_IN_YUV422_1P_ORDER_LSB_Y (0 << 13) > -#define GSC_IN_YUV422_1P_OEDER_LSB_C (1 << 13) > +#define GSC_IN_YUV422_1P_ORDER_LSB_C (1 << 13) > #define GSC_IN_CHROMA_ORDER_MASK (1 << 12) > #define GSC_IN_CHROMA_ORDER_CBCR (0 << 12) > #define GSC_IN_CHROMA_ORDER_CRCB (1 << 12) > @@ -91,7 +91,7 @@ > #define GSC_OUT_RGB_SD_NARROW (0 << 10) > #define GSC_OUT_YUV422_1P_ORDER_MASK (1 << 9) > #define GSC_OUT_YUV422_1P_ORDER_LSB_Y (0 << 9) > -#define GSC_OUT_YUV422_1P_OEDER_LSB_C (1 << 9) > +#define GSC_OUT_YUV422_1P_ORDER_LSB_C (1 << 9) > #define GSC_OUT_CHROMA_ORDER_MASK (1 << 8) > #define GSC_OUT_CHROMA_ORDER_CBCR (0 << 8) > #define GSC_OUT_CHROMA_ORDER_CRCB (1 << 8) > -- > 1.9.0.279.gdc9e3eb > > -- > To unsubscribe from this list: send the line "unsubscribe linux-media" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html