#define MT9M001_CHIP_ENABLE 0xF1
static const struct soc_camera_data_format mt9m001_colour_formats[] = {
+ /* Order important: first natively supported,
+ * second supported with a GPIO extender */
{
- .name = "RGB Bayer (sRGB)",
- .depth = 16,
+ .name = "Bayer (sRGB) 10 bit",
+ .depth = 10,
+ .fourcc = V4L2_PIX_FMT_SBGGR16,
+ .colorspace = V4L2_COLORSPACE_SRGB,
+ }, {
+ .name = "Bayer (sRGB) 8 bit",
+ .depth = 8,
.fourcc = V4L2_PIX_FMT_SBGGR8,
.colorspace = V4L2_COLORSPACE_SRGB,
}
};
static const struct soc_camera_data_format mt9m001_monochrome_formats[] = {
+ /* Order important - see above */
{
.name = "Monochrome 10 bit",
.depth = 10,
case 0x8421:
mt9m001->model = V4L2_IDENT_MT9M001C12ST;
mt9m001_ops.formats = mt9m001_colour_formats;
- mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_colour_formats);
+ if (mt9m001->client->dev.platform_data)
+ mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_colour_formats);
+ else
+ mt9m001_ops.num_formats = 1;
break;
case 0x8431:
mt9m001->model = V4L2_IDENT_MT9M001C12STM;
/* Progressive scan, master, defaults */
#define MT9V022_CHIP_CONTROL_DEFAULT 0x188
-static const struct soc_camera_data_format mt9v022_formats[] = {
+static const struct soc_camera_data_format mt9v022_colour_formats[] = {
+ /* Order important: first natively supported,
+ * second supported with a GPIO extender */
{
- .name = "RGB Bayer (sRGB)",
- .depth = 8,
- .fourcc = V4L2_PIX_FMT_SBGGR8,
- .colorspace = V4L2_COLORSPACE_SRGB,
- }, {
- .name = "RGB Bayer (sRGB)",
+ .name = "Bayer (sRGB) 10 bit",
.depth = 10,
.fourcc = V4L2_PIX_FMT_SBGGR16,
.colorspace = V4L2_COLORSPACE_SRGB,
}, {
+ .name = "Bayer (sRGB) 8 bit",
+ .depth = 8,
+ .fourcc = V4L2_PIX_FMT_SBGGR8,
+ .colorspace = V4L2_COLORSPACE_SRGB,
+ }
+};
+
+static const struct soc_camera_data_format mt9v022_monochrome_formats[] = {
+ /* Order important - see above */
+ {
.name = "Monochrome 10 bit",
.depth = 10,
.fourcc = V4L2_PIX_FMT_Y16,
.stop_capture = mt9v022_stop_capture,
.set_capture_format = mt9v022_set_capture_format,
.try_fmt_cap = mt9v022_try_fmt_cap,
- .formats = mt9v022_formats,
- .num_formats = ARRAY_SIZE(mt9v022_formats),
+ .formats = NULL, /* Filled in later depending on the */
+ .num_formats = 0, /* sensor type and data widths */
.get_datawidth = mt9v022_get_datawidth,
.controls = mt9v022_controls,
.num_controls = ARRAY_SIZE(mt9v022_controls),
!strcmp("color", sensor_type))) {
ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 4 | 0x11);
mt9v022->model = V4L2_IDENT_MT9V022IX7ATC;
+ mt9v022_ops.formats = mt9v022_colour_formats;
+ if (mt9v022->client->dev.platform_data)
+ mt9v022_ops.num_formats = ARRAY_SIZE(mt9v022_colour_formats);
+ else
+ mt9v022_ops.num_formats = 1;
} else {
ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 0x11);
mt9v022->model = V4L2_IDENT_MT9V022IX7ATM;
+ mt9v022_ops.formats = mt9v022_monochrome_formats;
+ if (mt9v022->client->dev.platform_data)
+ mt9v022_ops.num_formats = ARRAY_SIZE(mt9v022_monochrome_formats);
+ else
+ mt9v022_ops.num_formats = 1;
}
if (ret >= 0)