media: i2c: ov9282: Split registers into common and mode specific
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Fri, 28 Oct 2022 16:08:48 +0000 (17:08 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 25 Nov 2022 06:50:00 +0000 (06:50 +0000)
Currently only one mode is supported, so all registers were
dropped in one list.
In preparation for adding more modes, split out the common registers
from those which configure the mode.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/i2c/ov9282.c

index 0c60405..6999ce8 100644 (file)
@@ -147,8 +147,8 @@ static const s64 link_freq[] = {
        OV9282_LINK_FREQ,
 };
 
-/* Sensor mode registers */
-static const struct ov9282_reg mode_1280x720_regs[] = {
+/* Common registers */
+static const struct ov9282_reg common_regs[] = {
        {0x0302, 0x32},
        {0x030d, 0x50},
        {0x030e, 0x02},
@@ -179,13 +179,49 @@ static const struct ov9282_reg mode_1280x720_regs[] = {
        {0x372d, 0x22},
        {0x3731, 0x80},
        {0x3732, 0x30},
-       {0x3778, 0x00},
        {0x377d, 0x22},
        {0x3788, 0x02},
        {0x3789, 0xa4},
        {0x378a, 0x00},
        {0x378b, 0x4a},
        {0x3799, 0x20},
+       {0x3881, 0x42},
+       {0x38a8, 0x02},
+       {0x38a9, 0x80},
+       {0x38b1, 0x00},
+       {0x38c4, 0x00},
+       {0x38c5, 0xc0},
+       {0x38c6, 0x04},
+       {0x38c7, 0x80},
+       {0x3920, 0xff},
+       {0x4010, 0x40},
+       {0x4043, 0x40},
+       {0x4307, 0x30},
+       {0x4317, 0x00},
+       {0x4501, 0x00},
+       {0x450a, 0x08},
+       {0x4601, 0x04},
+       {0x470f, 0x00},
+       {0x4f07, 0x00},
+       {0x4800, 0x20},
+       {0x5000, 0x9f},
+       {0x5001, 0x00},
+       {0x5e00, 0x00},
+       {0x5d00, 0x07},
+       {0x5d01, 0x00},
+       {0x0101, 0x01},
+       {0x1000, 0x03},
+       {0x5a08, 0x84},
+};
+
+struct ov9282_reg_list common_regs_list = {
+       .num_of_regs = ARRAY_SIZE(common_regs),
+       .regs = common_regs,
+};
+
+/* Sensor mode registers */
+static const struct ov9282_reg mode_1280x720_regs[] = {
+       {0x3778, 0x00},
        {0x3800, 0x00},
        {0x3801, 0x00},
        {0x3802, 0x00},
@@ -208,40 +244,13 @@ static const struct ov9282_reg mode_1280x720_regs[] = {
        {0x3815, 0x11},
        {0x3820, 0x3c},
        {0x3821, 0x84},
-       {0x3881, 0x42},
-       {0x38a8, 0x02},
-       {0x38a9, 0x80},
-       {0x38b1, 0x00},
-       {0x38c4, 0x00},
-       {0x38c5, 0xc0},
-       {0x38c6, 0x04},
-       {0x38c7, 0x80},
-       {0x3920, 0xff},
        {0x4003, 0x40},
        {0x4008, 0x02},
        {0x4009, 0x05},
        {0x400c, 0x00},
        {0x400d, 0x03},
-       {0x4010, 0x40},
-       {0x4043, 0x40},
-       {0x4307, 0x30},
-       {0x4317, 0x00},
-       {0x4501, 0x00},
        {0x4507, 0x00},
        {0x4509, 0x80},
-       {0x450a, 0x08},
-       {0x4601, 0x04},
-       {0x470f, 0x00},
-       {0x4f07, 0x00},
-       {0x4800, 0x20},
-       {0x5000, 0x9f},
-       {0x5001, 0x00},
-       {0x5e00, 0x00},
-       {0x5d00, 0x07},
-       {0x5d01, 0x00},
-       {0x0101, 0x01},
-       {0x1000, 0x03},
-       {0x5a08, 0x84},
 };
 
 /* Supported sensor mode configurations */
@@ -653,6 +662,14 @@ static int ov9282_start_streaming(struct ov9282 *ov9282)
        const struct ov9282_reg_list *reg_list;
        int ret;
 
+       /* Write common registers */
+       ret = ov9282_write_regs(ov9282, common_regs_list.regs,
+                               common_regs_list.num_of_regs);
+       if (ret) {
+               dev_err(ov9282->dev, "fail to write common registers");
+               return ret;
+       }
+
        /* Write sensor mode registers */
        reg_list = &ov9282->cur_mode->reg_list;
        ret = ov9282_write_regs(ov9282, reg_list->regs, reg_list->num_of_regs);