mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 06:49:29 -04:00
media: i2c: imx258: Split out common registers from the mode based ones
Out of all the registers that are defined for each mode, only around 10 differ between the modes. Split the table into common and mode specific ones. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Signed-off-by: Luis Garcia <git@luigi311.com> Reviewed-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
committed by
Hans Verkuil
parent
67b5a3606d
commit
186f4056ac
@@ -151,7 +151,7 @@ static const struct imx258_reg mipi_data_rate_640mbps[] = {
|
||||
{ 0x0823, 0x00 },
|
||||
};
|
||||
|
||||
static const struct imx258_reg mode_4208x3120_regs[] = {
|
||||
static const struct imx258_reg mode_common_regs[] = {
|
||||
{ 0x0136, 0x13 },
|
||||
{ 0x0137, 0x33 },
|
||||
{ 0x3051, 0x00 },
|
||||
@@ -216,284 +216,83 @@ static const struct imx258_reg mode_4208x3120_regs[] = {
|
||||
{ 0x0383, 0x01 },
|
||||
{ 0x0385, 0x01 },
|
||||
{ 0x0387, 0x01 },
|
||||
{ 0x0900, 0x00 },
|
||||
{ 0x0901, 0x11 },
|
||||
{ 0x0401, 0x00 },
|
||||
{ 0x0404, 0x00 },
|
||||
{ 0x0405, 0x10 },
|
||||
{ 0x0408, 0x00 },
|
||||
{ 0x0409, 0x00 },
|
||||
{ 0x040A, 0x00 },
|
||||
{ 0x040B, 0x00 },
|
||||
{ 0x040C, 0x10 },
|
||||
{ 0x040D, 0x70 },
|
||||
{ 0x040E, 0x0C },
|
||||
{ 0x040F, 0x30 },
|
||||
{ 0x3038, 0x00 },
|
||||
{ 0x303A, 0x00 },
|
||||
{ 0x303B, 0x10 },
|
||||
{ 0x300D, 0x00 },
|
||||
{ 0x0350, 0x01 },
|
||||
{ 0x0204, 0x00 },
|
||||
{ 0x0205, 0x00 },
|
||||
{ 0x020E, 0x01 },
|
||||
{ 0x020F, 0x00 },
|
||||
{ 0x0210, 0x01 },
|
||||
{ 0x0211, 0x00 },
|
||||
{ 0x0212, 0x01 },
|
||||
{ 0x0213, 0x00 },
|
||||
{ 0x0214, 0x01 },
|
||||
{ 0x0215, 0x00 },
|
||||
{ 0x7BCD, 0x00 },
|
||||
{ 0x94DC, 0x20 },
|
||||
{ 0x94DD, 0x20 },
|
||||
{ 0x94DE, 0x20 },
|
||||
{ 0x95DC, 0x20 },
|
||||
{ 0x95DD, 0x20 },
|
||||
{ 0x95DE, 0x20 },
|
||||
{ 0x7FB0, 0x00 },
|
||||
{ 0x9010, 0x3E },
|
||||
{ 0x9419, 0x50 },
|
||||
{ 0x941B, 0x50 },
|
||||
{ 0x9519, 0x50 },
|
||||
{ 0x951B, 0x50 },
|
||||
{ 0x3030, 0x00 },
|
||||
{ 0x3032, 0x00 },
|
||||
{ 0x0220, 0x00 },
|
||||
};
|
||||
|
||||
static const struct imx258_reg mode_4208x3120_regs[] = {
|
||||
{ 0x0900, 0x00 },
|
||||
{ 0x0901, 0x11 },
|
||||
{ 0x0401, 0x00 },
|
||||
{ 0x0405, 0x10 },
|
||||
{ 0x040E, 0x0C },
|
||||
{ 0x040F, 0x30 },
|
||||
{ 0x034C, 0x10 },
|
||||
{ 0x034D, 0x70 },
|
||||
{ 0x034E, 0x0C },
|
||||
{ 0x034F, 0x30 },
|
||||
{ 0x0350, 0x01 },
|
||||
{ 0x0204, 0x00 },
|
||||
{ 0x0205, 0x00 },
|
||||
{ 0x020E, 0x01 },
|
||||
{ 0x020F, 0x00 },
|
||||
{ 0x0210, 0x01 },
|
||||
{ 0x0211, 0x00 },
|
||||
{ 0x0212, 0x01 },
|
||||
{ 0x0213, 0x00 },
|
||||
{ 0x0214, 0x01 },
|
||||
{ 0x0215, 0x00 },
|
||||
{ 0x7BCD, 0x00 },
|
||||
{ 0x94DC, 0x20 },
|
||||
{ 0x94DD, 0x20 },
|
||||
{ 0x94DE, 0x20 },
|
||||
{ 0x95DC, 0x20 },
|
||||
{ 0x95DD, 0x20 },
|
||||
{ 0x95DE, 0x20 },
|
||||
{ 0x7FB0, 0x00 },
|
||||
{ 0x9010, 0x3E },
|
||||
{ 0x9419, 0x50 },
|
||||
{ 0x941B, 0x50 },
|
||||
{ 0x9519, 0x50 },
|
||||
{ 0x951B, 0x50 },
|
||||
{ 0x3030, 0x00 },
|
||||
{ 0x3032, 0x00 },
|
||||
{ 0x0220, 0x00 },
|
||||
};
|
||||
|
||||
static const struct imx258_reg mode_2104_1560_regs[] = {
|
||||
{ 0x0136, 0x13 },
|
||||
{ 0x0137, 0x33 },
|
||||
{ 0x3051, 0x00 },
|
||||
{ 0x3052, 0x00 },
|
||||
{ 0x4E21, 0x14 },
|
||||
{ 0x6B11, 0xCF },
|
||||
{ 0x7FF0, 0x08 },
|
||||
{ 0x7FF1, 0x0F },
|
||||
{ 0x7FF2, 0x08 },
|
||||
{ 0x7FF3, 0x1B },
|
||||
{ 0x7FF4, 0x23 },
|
||||
{ 0x7FF5, 0x60 },
|
||||
{ 0x7FF6, 0x00 },
|
||||
{ 0x7FF7, 0x01 },
|
||||
{ 0x7FF8, 0x00 },
|
||||
{ 0x7FF9, 0x78 },
|
||||
{ 0x7FFA, 0x00 },
|
||||
{ 0x7FFB, 0x00 },
|
||||
{ 0x7FFC, 0x00 },
|
||||
{ 0x7FFD, 0x00 },
|
||||
{ 0x7FFE, 0x00 },
|
||||
{ 0x7FFF, 0x03 },
|
||||
{ 0x7F76, 0x03 },
|
||||
{ 0x7F77, 0xFE },
|
||||
{ 0x7FA8, 0x03 },
|
||||
{ 0x7FA9, 0xFE },
|
||||
{ 0x7B24, 0x81 },
|
||||
{ 0x7B25, 0x00 },
|
||||
{ 0x6564, 0x07 },
|
||||
{ 0x6B0D, 0x41 },
|
||||
{ 0x653D, 0x04 },
|
||||
{ 0x6B05, 0x8C },
|
||||
{ 0x6B06, 0xF9 },
|
||||
{ 0x6B08, 0x65 },
|
||||
{ 0x6B09, 0xFC },
|
||||
{ 0x6B0A, 0xCF },
|
||||
{ 0x6B0B, 0xD2 },
|
||||
{ 0x6700, 0x0E },
|
||||
{ 0x6707, 0x0E },
|
||||
{ 0x9104, 0x00 },
|
||||
{ 0x4648, 0x7F },
|
||||
{ 0x7420, 0x00 },
|
||||
{ 0x7421, 0x1C },
|
||||
{ 0x7422, 0x00 },
|
||||
{ 0x7423, 0xD7 },
|
||||
{ 0x5F04, 0x00 },
|
||||
{ 0x5F05, 0xED },
|
||||
{ 0x0112, 0x0A },
|
||||
{ 0x0113, 0x0A },
|
||||
{ 0x0114, 0x03 },
|
||||
{ 0x0342, 0x14 },
|
||||
{ 0x0343, 0xE8 },
|
||||
{ 0x0344, 0x00 },
|
||||
{ 0x0345, 0x00 },
|
||||
{ 0x0346, 0x00 },
|
||||
{ 0x0347, 0x00 },
|
||||
{ 0x0348, 0x10 },
|
||||
{ 0x0349, 0x6F },
|
||||
{ 0x034A, 0x0C },
|
||||
{ 0x034B, 0x2F },
|
||||
{ 0x0381, 0x01 },
|
||||
{ 0x0383, 0x01 },
|
||||
{ 0x0385, 0x01 },
|
||||
{ 0x0387, 0x01 },
|
||||
{ 0x0900, 0x01 },
|
||||
{ 0x0901, 0x12 },
|
||||
{ 0x0401, 0x01 },
|
||||
{ 0x0404, 0x00 },
|
||||
{ 0x0405, 0x20 },
|
||||
{ 0x0408, 0x00 },
|
||||
{ 0x0409, 0x00 },
|
||||
{ 0x040A, 0x00 },
|
||||
{ 0x040B, 0x00 },
|
||||
{ 0x040C, 0x10 },
|
||||
{ 0x040D, 0x70 },
|
||||
{ 0x040E, 0x06 },
|
||||
{ 0x040F, 0x18 },
|
||||
{ 0x3038, 0x00 },
|
||||
{ 0x303A, 0x00 },
|
||||
{ 0x303B, 0x10 },
|
||||
{ 0x300D, 0x00 },
|
||||
{ 0x034C, 0x08 },
|
||||
{ 0x034D, 0x38 },
|
||||
{ 0x034E, 0x06 },
|
||||
{ 0x034F, 0x18 },
|
||||
{ 0x0350, 0x01 },
|
||||
{ 0x0204, 0x00 },
|
||||
{ 0x0205, 0x00 },
|
||||
{ 0x020E, 0x01 },
|
||||
{ 0x020F, 0x00 },
|
||||
{ 0x0210, 0x01 },
|
||||
{ 0x0211, 0x00 },
|
||||
{ 0x0212, 0x01 },
|
||||
{ 0x0213, 0x00 },
|
||||
{ 0x0214, 0x01 },
|
||||
{ 0x0215, 0x00 },
|
||||
{ 0x7BCD, 0x01 },
|
||||
{ 0x94DC, 0x20 },
|
||||
{ 0x94DD, 0x20 },
|
||||
{ 0x94DE, 0x20 },
|
||||
{ 0x95DC, 0x20 },
|
||||
{ 0x95DD, 0x20 },
|
||||
{ 0x95DE, 0x20 },
|
||||
{ 0x7FB0, 0x00 },
|
||||
{ 0x9010, 0x3E },
|
||||
{ 0x9419, 0x50 },
|
||||
{ 0x941B, 0x50 },
|
||||
{ 0x9519, 0x50 },
|
||||
{ 0x951B, 0x50 },
|
||||
{ 0x3030, 0x00 },
|
||||
{ 0x3032, 0x00 },
|
||||
{ 0x0220, 0x00 },
|
||||
};
|
||||
|
||||
static const struct imx258_reg mode_1048_780_regs[] = {
|
||||
{ 0x0136, 0x13 },
|
||||
{ 0x0137, 0x33 },
|
||||
{ 0x3051, 0x00 },
|
||||
{ 0x3052, 0x00 },
|
||||
{ 0x4E21, 0x14 },
|
||||
{ 0x6B11, 0xCF },
|
||||
{ 0x7FF0, 0x08 },
|
||||
{ 0x7FF1, 0x0F },
|
||||
{ 0x7FF2, 0x08 },
|
||||
{ 0x7FF3, 0x1B },
|
||||
{ 0x7FF4, 0x23 },
|
||||
{ 0x7FF5, 0x60 },
|
||||
{ 0x7FF6, 0x00 },
|
||||
{ 0x7FF7, 0x01 },
|
||||
{ 0x7FF8, 0x00 },
|
||||
{ 0x7FF9, 0x78 },
|
||||
{ 0x7FFA, 0x00 },
|
||||
{ 0x7FFB, 0x00 },
|
||||
{ 0x7FFC, 0x00 },
|
||||
{ 0x7FFD, 0x00 },
|
||||
{ 0x7FFE, 0x00 },
|
||||
{ 0x7FFF, 0x03 },
|
||||
{ 0x7F76, 0x03 },
|
||||
{ 0x7F77, 0xFE },
|
||||
{ 0x7FA8, 0x03 },
|
||||
{ 0x7FA9, 0xFE },
|
||||
{ 0x7B24, 0x81 },
|
||||
{ 0x7B25, 0x00 },
|
||||
{ 0x6564, 0x07 },
|
||||
{ 0x6B0D, 0x41 },
|
||||
{ 0x653D, 0x04 },
|
||||
{ 0x6B05, 0x8C },
|
||||
{ 0x6B06, 0xF9 },
|
||||
{ 0x6B08, 0x65 },
|
||||
{ 0x6B09, 0xFC },
|
||||
{ 0x6B0A, 0xCF },
|
||||
{ 0x6B0B, 0xD2 },
|
||||
{ 0x6700, 0x0E },
|
||||
{ 0x6707, 0x0E },
|
||||
{ 0x9104, 0x00 },
|
||||
{ 0x4648, 0x7F },
|
||||
{ 0x7420, 0x00 },
|
||||
{ 0x7421, 0x1C },
|
||||
{ 0x7422, 0x00 },
|
||||
{ 0x7423, 0xD7 },
|
||||
{ 0x5F04, 0x00 },
|
||||
{ 0x5F05, 0xED },
|
||||
{ 0x0112, 0x0A },
|
||||
{ 0x0113, 0x0A },
|
||||
{ 0x0114, 0x03 },
|
||||
{ 0x0342, 0x14 },
|
||||
{ 0x0343, 0xE8 },
|
||||
{ 0x0344, 0x00 },
|
||||
{ 0x0345, 0x00 },
|
||||
{ 0x0346, 0x00 },
|
||||
{ 0x0347, 0x00 },
|
||||
{ 0x0348, 0x10 },
|
||||
{ 0x0349, 0x6F },
|
||||
{ 0x034A, 0x0C },
|
||||
{ 0x034B, 0x2F },
|
||||
{ 0x0381, 0x01 },
|
||||
{ 0x0383, 0x01 },
|
||||
{ 0x0385, 0x01 },
|
||||
{ 0x0387, 0x01 },
|
||||
{ 0x0900, 0x01 },
|
||||
{ 0x0901, 0x14 },
|
||||
{ 0x0401, 0x01 },
|
||||
{ 0x0404, 0x00 },
|
||||
{ 0x0405, 0x40 },
|
||||
{ 0x0408, 0x00 },
|
||||
{ 0x0409, 0x00 },
|
||||
{ 0x040A, 0x00 },
|
||||
{ 0x040B, 0x00 },
|
||||
{ 0x040C, 0x10 },
|
||||
{ 0x040D, 0x70 },
|
||||
{ 0x040E, 0x03 },
|
||||
{ 0x040F, 0x0C },
|
||||
{ 0x3038, 0x00 },
|
||||
{ 0x303A, 0x00 },
|
||||
{ 0x303B, 0x10 },
|
||||
{ 0x300D, 0x00 },
|
||||
{ 0x034C, 0x04 },
|
||||
{ 0x034D, 0x18 },
|
||||
{ 0x034E, 0x03 },
|
||||
{ 0x034F, 0x0C },
|
||||
{ 0x0350, 0x01 },
|
||||
{ 0x0204, 0x00 },
|
||||
{ 0x0205, 0x00 },
|
||||
{ 0x020E, 0x01 },
|
||||
{ 0x020F, 0x00 },
|
||||
{ 0x0210, 0x01 },
|
||||
{ 0x0211, 0x00 },
|
||||
{ 0x0212, 0x01 },
|
||||
{ 0x0213, 0x00 },
|
||||
{ 0x0214, 0x01 },
|
||||
{ 0x0215, 0x00 },
|
||||
{ 0x7BCD, 0x00 },
|
||||
{ 0x94DC, 0x20 },
|
||||
{ 0x94DD, 0x20 },
|
||||
{ 0x94DE, 0x20 },
|
||||
{ 0x95DC, 0x20 },
|
||||
{ 0x95DD, 0x20 },
|
||||
{ 0x95DE, 0x20 },
|
||||
{ 0x7FB0, 0x00 },
|
||||
{ 0x9010, 0x3E },
|
||||
{ 0x9419, 0x50 },
|
||||
{ 0x941B, 0x50 },
|
||||
{ 0x9519, 0x50 },
|
||||
{ 0x951B, 0x50 },
|
||||
{ 0x3030, 0x00 },
|
||||
{ 0x3032, 0x00 },
|
||||
{ 0x0220, 0x00 },
|
||||
};
|
||||
|
||||
static const char * const imx258_test_pattern_menu[] = {
|
||||
@@ -955,6 +754,13 @@ static int imx258_start_streaming(struct imx258 *imx258)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = imx258_write_regs(imx258, mode_common_regs,
|
||||
ARRAY_SIZE(mode_common_regs));
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "%s failed to set common regs\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Apply default values of current mode */
|
||||
reg_list = &imx258->cur_mode->reg_list;
|
||||
ret = imx258_write_regs(imx258, reg_list->regs, reg_list->num_of_regs);
|
||||
|
||||
Reference in New Issue
Block a user