[media] V4L: omap1-camera: fix huge lookup array

Since V4L2_MBUS_FMT_* codes have become large and sparse, they cannot
be used as array indices anymore.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Guennadi Liakhovetski 2011-05-13 13:11:38 -03:00 committed by Mauro Carvalho Chehab
parent 93f116d595
commit e9ceeced6f
1 changed files with 30 additions and 11 deletions

View File

@ -990,63 +990,80 @@ static void omap1_cam_remove_device(struct soc_camera_device *icd)
} }
/* Duplicate standard formats based on host capability of byte swapping */ /* Duplicate standard formats based on host capability of byte swapping */
static const struct soc_mbus_pixelfmt omap1_cam_formats[] = { static const struct soc_mbus_lookup omap1_cam_formats[] = {
[V4L2_MBUS_FMT_UYVY8_2X8] = { {
.code = V4L2_MBUS_FMT_UYVY8_2X8,
.fmt = {
.fourcc = V4L2_PIX_FMT_YUYV, .fourcc = V4L2_PIX_FMT_YUYV,
.name = "YUYV", .name = "YUYV",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
[V4L2_MBUS_FMT_VYUY8_2X8] = { }, {
.code = V4L2_MBUS_FMT_VYUY8_2X8,
.fmt = {
.fourcc = V4L2_PIX_FMT_YVYU, .fourcc = V4L2_PIX_FMT_YVYU,
.name = "YVYU", .name = "YVYU",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
[V4L2_MBUS_FMT_YUYV8_2X8] = { }, {
.code = V4L2_MBUS_FMT_YUYV8_2X8,
.fmt = {
.fourcc = V4L2_PIX_FMT_UYVY, .fourcc = V4L2_PIX_FMT_UYVY,
.name = "UYVY", .name = "UYVY",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
[V4L2_MBUS_FMT_YVYU8_2X8] = { }, {
.code = V4L2_MBUS_FMT_YVYU8_2X8,
.fmt = {
.fourcc = V4L2_PIX_FMT_VYUY, .fourcc = V4L2_PIX_FMT_VYUY,
.name = "VYUY", .name = "VYUY",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
[V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE] = { }, {
.code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
.fmt = {
.fourcc = V4L2_PIX_FMT_RGB555, .fourcc = V4L2_PIX_FMT_RGB555,
.name = "RGB555", .name = "RGB555",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
[V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE] = { }, {
.code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
.fmt = {
.fourcc = V4L2_PIX_FMT_RGB555X, .fourcc = V4L2_PIX_FMT_RGB555X,
.name = "RGB555X", .name = "RGB555X",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
[V4L2_MBUS_FMT_RGB565_2X8_BE] = { }, {
.code = V4L2_MBUS_FMT_RGB565_2X8_BE,
.fmt = {
.fourcc = V4L2_PIX_FMT_RGB565, .fourcc = V4L2_PIX_FMT_RGB565,
.name = "RGB565", .name = "RGB565",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
[V4L2_MBUS_FMT_RGB565_2X8_LE] = { }, {
.code = V4L2_MBUS_FMT_RGB565_2X8_LE,
.fmt = {
.fourcc = V4L2_PIX_FMT_RGB565X, .fourcc = V4L2_PIX_FMT_RGB565X,
.name = "RGB565X", .name = "RGB565X",
.bits_per_sample = 8, .bits_per_sample = 8,
.packing = SOC_MBUS_PACKING_2X8_PADHI, .packing = SOC_MBUS_PACKING_2X8_PADHI,
.order = SOC_MBUS_ORDER_BE, .order = SOC_MBUS_ORDER_BE,
}, },
},
}; };
static int omap1_cam_get_formats(struct soc_camera_device *icd, static int omap1_cam_get_formats(struct soc_camera_device *icd,
@ -1085,12 +1102,14 @@ static int omap1_cam_get_formats(struct soc_camera_device *icd,
case V4L2_MBUS_FMT_RGB565_2X8_LE: case V4L2_MBUS_FMT_RGB565_2X8_LE:
formats++; formats++;
if (xlate) { if (xlate) {
xlate->host_fmt = &omap1_cam_formats[code]; xlate->host_fmt = soc_mbus_find_fmtdesc(code,
omap1_cam_formats,
ARRAY_SIZE(omap1_cam_formats));
xlate->code = code; xlate->code = code;
xlate++; xlate++;
dev_dbg(dev, dev_dbg(dev,
"%s: providing format %s as byte swapped code #%d\n", "%s: providing format %s as byte swapped code #%d\n",
__func__, omap1_cam_formats[code].name, code); __func__, xlate->host_fmt->name, code);
} }
default: default:
if (xlate) if (xlate)