/* Supported resolutions */
enum {
+ MT9M114_RES_QCIF,
MT9M114_RES_QVGA,
MT9M114_RES_VGA,
MT9M114_RES_720P,
#define MT9M114_RES_VGA_SIZE_V 480
#define MT9M114_RES_QVGA_SIZE_H 320
#define MT9M114_RES_QVGA_SIZE_V 240
-
+#define MT9M114_RES_QCIF_SIZE_H 176
+#define MT9M114_RES_QCIF_SIZE_V 144
/*
* struct misensor_reg - MI sensor register format
* @length: length of the register
*/
static struct mt9m114_res_struct mt9m114_res[] = {
{
+ .desc = "QCIF",
+ .res = MT9M114_RES_QCIF,
+ .width = 176,
+ .height = 144,
+ .fps = 30,
+ .used = 0,
+ .regs = NULL,
+ },
+ {
.desc = "QVGA",
.res = MT9M114_RES_QVGA,
.width = 320,
{MISENSOR_TOK_TERM, 0, 0}
};
+static struct misensor_reg const mt9m114_chgstat_reg[] = {
+ {MISENSOR_16BIT, 0x098E, 0xDC00},
+ {MISENSOR_8BIT, 0xDC00, 0x28},
+ {MISENSOR_16BIT, 0x0080, 0x8002},
+ {MISENSOR_TOK_TERM, 0, 0}
+};
+static struct misensor_reg const mt9m114_qcif_init[] = {
+
+ {MISENSOR_16BIT, 0x98E, 0x1000},
+ {MISENSOR_16BIT, 0xC800, 0x0034},
+ {MISENSOR_16BIT, 0xC802, 0x0074},
+ {MISENSOR_16BIT, 0xC804, 0x039B},
+ {MISENSOR_16BIT, 0xC806, 0x049B},
+ {MISENSOR_32BIT, 0xC808, 0x2DC6C00},
+ {MISENSOR_16BIT, 0xC80C, 0x0001},
+ {MISENSOR_16BIT, 0xC80E, 0x00DB},
+ {MISENSOR_16BIT, 0xC810, 0x04D1},
+ {MISENSOR_16BIT, 0xC812, 0x0495},
+ {MISENSOR_16BIT, 0xC814, 0x0554},
+ {MISENSOR_16BIT, 0xC816, 0x0060},
+ {MISENSOR_16BIT, 0xC818, 0x0363},
+ {MISENSOR_16BIT, 0xC826, 0x0020},
+ {MISENSOR_16BIT | MISENSOR_TOK_RMW, 0xC834, 0x0330, 0},
+ {MISENSOR_16BIT, 0xC854, 0x0000},
+ {MISENSOR_16BIT, 0xC856, 0x0000},
+ {MISENSOR_16BIT, 0xC858, 0x0420},
+ {MISENSOR_16BIT, 0xC85A, 0x0360},
+ {MISENSOR_8BIT, 0xC85C, 0x03},
+ {MISENSOR_16BIT, 0xC868, 0x00B0},
+ {MISENSOR_16BIT, 0xC86A, 0x0090},
+ {MISENSOR_8BIT, 0xC878, 0x0E},
+ {MISENSOR_16BIT, 0xC88C, 0x1E00},
+ {MISENSOR_16BIT, 0xC88E, 0x1E00},
+ {MISENSOR_16BIT, 0xC914, 0x0000},
+ {MISENSOR_16BIT, 0xC916, 0x0000},
+ {MISENSOR_16BIT, 0xC918, 0x00AF},
+ {MISENSOR_16BIT, 0xC91A, 0x008F},
+ {MISENSOR_16BIT, 0xC91C, 0x0000},
+ {MISENSOR_16BIT, 0xC91E, 0x0000},
+ {MISENSOR_16BIT, 0xC920, 0x0022},
+ {MISENSOR_16BIT, 0xC922, 0x001B},
+ {MISENSOR_TOK_TERM, 0, 0}
+};
+
static struct misensor_reg const mt9m114_qvga_init[] = {
- {MISENSOR_16BIT, 0x301A, 0x0234},
{MISENSOR_16BIT, 0x98E, 0x1000},
- {MISENSOR_8BIT, 0xC97E, 0x01},
- {MISENSOR_16BIT, 0xC980, 0x0128},
- {MISENSOR_16BIT, 0xC982, 0x0700},
- {MISENSOR_16BIT, 0xC984, 0x8041},
{MISENSOR_16BIT, 0xC800, 0x0000},
{MISENSOR_16BIT, 0xC802, 0x0000},
{MISENSOR_16BIT, 0xC804, 0x03CD},
{MISENSOR_16BIT, 0xC816, 0x0060},
{MISENSOR_16BIT, 0xC818, 0x01E3},
{MISENSOR_16BIT, 0xC826, 0x0020},
+ {MISENSOR_16BIT | MISENSOR_TOK_RMW, 0xC834, 0x0330, 0x11},
{MISENSOR_16BIT, 0xC854, 0x0000},
{MISENSOR_16BIT, 0xC856, 0x0000},
{MISENSOR_16BIT, 0xC858, 0x0280},
{MISENSOR_8BIT, 0xC85C, 0x03},
{MISENSOR_16BIT, 0xC868, 0x0140},
{MISENSOR_16BIT, 0xC86A, 0x00F0},
- {MISENSOR_8BIT, 0xC878, 0x0},
+ {MISENSOR_8BIT, 0xC878, 0xE},
{MISENSOR_16BIT, 0xC88C, 0x1E03},
{MISENSOR_16BIT, 0xC88E, 0x1E03},
{MISENSOR_16BIT, 0xC914, 0x0000},
{MISENSOR_16BIT, 0xC91E, 0x0000},
{MISENSOR_16BIT, 0xC920, 0x003F},
{MISENSOR_16BIT, 0xC922, 0x002F},
- {MISENSOR_8BIT, 0xE801, 0x00},
{MISENSOR_TOK_TERM, 0, 0}
};
static struct misensor_reg const mt9m114_720p_init[] = {
- {MISENSOR_16BIT, 0x301A, 0x0234},
- {MISENSOR_16BIT, 0x98E0, 0x0000},
- {MISENSOR_8BIT, 0xC97E, 0x01},
- {MISENSOR_16BIT, 0xC980, 0x0128},
- {MISENSOR_16BIT, 0xC982, 0x0700},
- {MISENSOR_16BIT, 0x98E0, 0x0000},
+ {MISENSOR_16BIT, 0x98E, 0x1000},
{MISENSOR_16BIT, 0xC800, 0x007C},
{MISENSOR_16BIT, 0xC802, 0x0004},
{MISENSOR_16BIT, 0xC804, 0x0353},
{MISENSOR_16BIT, 0xC816, 0x0060},
{MISENSOR_16BIT, 0xC818, 0x02D3},
{MISENSOR_16BIT, 0xC826, 0x0020},
-
-
+ {MISENSOR_16BIT | MISENSOR_TOK_RMW, 0xC834, 0x0330, 0},
{MISENSOR_16BIT, 0xC854, 0x0000},
{MISENSOR_16BIT, 0xC856, 0x0000},
{MISENSOR_16BIT, 0xC858, 0x0500},
{MISENSOR_16BIT, 0xC91E, 0x0000},
{MISENSOR_16BIT, 0xC920, 0x00FF},
{MISENSOR_16BIT, 0xC922, 0x008F},
- {MISENSOR_8BIT, 0xE801, 0x00},
{MISENSOR_TOK_TERM, 0, 0}
};
static struct misensor_reg const mt9m114_vga_init[] = {
- {MISENSOR_16BIT, 0x301A, 0x0234},
{MISENSOR_16BIT, 0x98E, 0x1000},
- {MISENSOR_8BIT, 0xC97E, 0x01},
- {MISENSOR_16BIT, 0xC980, 0x0128},
- {MISENSOR_16BIT, 0xC982, 0x0700},
- {MISENSOR_16BIT, 0xC984, 0x8001},
- {MISENSOR_16BIT, 0xC988, 0x0F00},
- {MISENSOR_16BIT, 0xC98A, 0x0B07},
- {MISENSOR_16BIT, 0xC98C, 0x0D01},
- {MISENSOR_16BIT, 0xC98E, 0x071D},
- {MISENSOR_16BIT, 0xC990, 0x0006},
- {MISENSOR_16BIT, 0xC992, 0x0A0C},
{MISENSOR_16BIT, 0xC800, 0x0000},
{MISENSOR_16BIT, 0xC802, 0x0000},
{MISENSOR_16BIT, 0xC804, 0x03CD},
{MISENSOR_16BIT, 0xC816, 0x00E0},
{MISENSOR_16BIT, 0xC818, 0x01E3},
{MISENSOR_16BIT, 0xC826, 0x0020},
+ {MISENSOR_16BIT | MISENSOR_TOK_RMW, 0xC834, 0x0330, 0x33},
{MISENSOR_16BIT, 0xC854, 0x0000},
{MISENSOR_16BIT, 0xC856, 0x0000},
{MISENSOR_16BIT, 0xC858, 0x0280},
{MISENSOR_8BIT, 0xC85C, 0x03},
{MISENSOR_16BIT, 0xC868, 0x0280},
{MISENSOR_16BIT, 0xC86A, 0x01E0},
- {MISENSOR_8BIT, 0xC878, 0x00},
+ {MISENSOR_8BIT, 0xC878, 0x0E},
{MISENSOR_16BIT, 0xC88C, 0x1E04},
{MISENSOR_16BIT, 0xC88E, 0x1E04},
{MISENSOR_16BIT, 0xC914, 0x0000},
{MISENSOR_16BIT, 0xC91E, 0x0000},
{MISENSOR_16BIT, 0xC920, 0x007F},
{MISENSOR_16BIT, 0xC922, 0x005F},
- {MISENSOR_8BIT, 0xE801, 0x00},
{MISENSOR_TOK_TERM, 0, 0}
};
static struct misensor_reg const mt9m114_960P_init[] = {
{MISENSOR_16BIT, 0x98E, 0x1000},
- {MISENSOR_8BIT, 0xC97E, 0x01},
- {MISENSOR_16BIT, 0xC980, 0x0128},
- {MISENSOR_16BIT, 0xC982, 0x0700},
{MISENSOR_16BIT, 0xC800, 0x0004},
{MISENSOR_16BIT, 0xC802, 0x0004},
{MISENSOR_16BIT, 0xC804, 0x03CB},
{MISENSOR_16BIT, 0xC816, 0x0060},
{MISENSOR_16BIT, 0xC818, 0x03C3},
{MISENSOR_16BIT, 0xC826, 0x0020},
+ {MISENSOR_16BIT | MISENSOR_TOK_RMW, 0xC834, 0x0330, 0},
{MISENSOR_16BIT, 0xC854, 0x0000},
{MISENSOR_16BIT, 0xC856, 0x0000},
{MISENSOR_16BIT, 0xC858, 0x0500},
{MISENSOR_8BIT, 0xC85C, 0x03},
{MISENSOR_16BIT, 0xC868, 0x0500},
{MISENSOR_16BIT, 0xC86A, 0x03C0},
- {MISENSOR_8BIT, 0xC878, 0x00},
+ {MISENSOR_8BIT, 0xC878, 0x0E},
{MISENSOR_16BIT, 0xC88C, 0x0F00},
{MISENSOR_16BIT, 0xC88E, 0x0F00},
{MISENSOR_16BIT, 0xC914, 0x0000},
static struct misensor_reg const mt9m114_common[] = {
- /*Step8-Features*/
- {MISENSOR_16BIT, 0x98E0, 0x0000},
- {MISENSOR_16BIT, 0xC984, 0x8040},
- {MISENSOR_16BIT, 0x001E, 0x0777},
- /*MIPI settings for MT9M114*/
- {MISENSOR_16BIT, 0xC984, 0x8041},
- {MISENSOR_16BIT, 0xC988, 0x0F00},
- {MISENSOR_16BIT, 0xC98A, 0x0B07},
- {MISENSOR_16BIT, 0xC98C, 0x0D01},
- {MISENSOR_16BIT, 0xC98E, 0x071D},
- {MISENSOR_16BIT, 0xC990, 0x0006},
- {MISENSOR_16BIT, 0xC992, 0x0A0C},
- {MISENSOR_16BIT, 0x098E, 0xDC00},
- {MISENSOR_8BIT, 0xDC00, 0x28},
- {MISENSOR_16BIT, 0x0080, 0x8002},
- {MISENSOR_TOK_TERM, 0, 0}
+ /* reset */
+ {MISENSOR_16BIT, 0x301A, 0x0234},
+ /* pll settings for MT9M114 */
+ {MISENSOR_16BIT, 0x98E, 0x1000},
+ {MISENSOR_8BIT, 0xC97E, 0x01},
+ {MISENSOR_16BIT, 0xC980, 0x0128},
+ {MISENSOR_16BIT, 0xC982, 0x0700},
+ /*MIPI settings for MT9M114*/
+ {MISENSOR_16BIT, 0xC984, 0x8041},
+ {MISENSOR_16BIT, 0xC988, 0x0F00},
+ {MISENSOR_16BIT, 0xC98A, 0x0B07},
+ {MISENSOR_16BIT, 0xC98C, 0x0D01},
+ {MISENSOR_16BIT, 0xC98E, 0x071D},
+ {MISENSOR_16BIT, 0xC990, 0x0006},
+ {MISENSOR_16BIT, 0xC992, 0x0A0C},
+ {MISENSOR_TOK_TERM, 0, 0}
};
static struct misensor_reg const mt9m114_antiflicker_50hz[] = {
{MISENSOR_16BIT, 0xC87C, 0x005A},
{MISENSOR_8BIT, 0xB42A, 0x05},
{MISENSOR_8BIT, 0xA80A, 0x20},
+
+ /* Speed up AE/AWB */
+ {MISENSOR_16BIT, 0x098E, 0x2802},
+ {MISENSOR_16BIT, 0xA802, 0x0008},
+ {MISENSOR_8BIT, 0xC908, 0x01},
+ {MISENSOR_8BIT, 0xC879, 0x01},
+ {MISENSOR_8BIT, 0xC909, 0x02},
+ {MISENSOR_8BIT, 0xA80A, 0x18},
+ {MISENSOR_8BIT, 0xA80B, 0x18},
+ {MISENSOR_8BIT, 0xAC16, 0x18},
+ {MISENSOR_8BIT, 0xC878, 0x0E},
+
{MISENSOR_TOK_TERM, 0, 0}
};