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:
Dave Stevenson
2024-05-01 09:24:24 -06:00
committed by Hans Verkuil
parent 67b5a3606d
commit 186f4056ac

View File

@@ -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);