summaryrefslogtreecommitdiffstats
path: root/drivers/media/i2c/ov7640.c
diff options
context:
space:
mode:
authorMoses Christopher Bollavarapu <mosescb.dev@gmail.com>2022-03-17 14:47:14 +0000
committerMauro Carvalho Chehab <mchehab@kernel.org>2022-04-24 08:25:08 +0100
commit378a0e4ba89892f78fcab64f03f57f99714a1914 (patch)
treecdbbf1492af4ec10d3984ae1cca7af59c85f09c5 /drivers/media/i2c/ov7640.c
parent7dd0f93a31af03cba81c684c4c361bba510ffe71 (diff)
downloadlinux-stable-378a0e4ba89892f78fcab64f03f57f99714a1914.tar.gz
linux-stable-378a0e4ba89892f78fcab64f03f57f99714a1914.tar.bz2
linux-stable-378a0e4ba89892f78fcab64f03f57f99714a1914.zip
media: ov7640: Use ARRAY_SIZE instead of manual checking
Currently, the driver ends the reg-val list with a 0xFF as a check to stop the loop. Instead an array of reg-vals can be used to avoid this check, by using the ARRAY_SIZE(arr) macro to obtain the length of the array and iterate over it. Signed-off-by: Moses Christopher Bollavarapu <mosescb.dev@gmail.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Diffstat (limited to 'drivers/media/i2c/ov7640.c')
-rw-r--r--drivers/media/i2c/ov7640.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/drivers/media/i2c/ov7640.c b/drivers/media/i2c/ov7640.c
index 010803d58ce8..977cd2d8ad33 100644
--- a/drivers/media/i2c/ov7640.c
+++ b/drivers/media/i2c/ov7640.c
@@ -13,23 +13,28 @@
MODULE_DESCRIPTION("OmniVision ov7640 sensor driver");
MODULE_LICENSE("GPL v2");
-static const u8 initial_registers[] = {
- 0x12, 0x80,
- 0x12, 0x54,
- 0x14, 0x24,
- 0x15, 0x01,
- 0x28, 0x20,
- 0x75, 0x82,
- 0xFF, 0xFF, /* Terminator (reg 0xFF is unused) */
+struct reg_val {
+ u8 reg;
+ u8 val;
};
-static int write_regs(struct i2c_client *client, const u8 *regs)
-{
- int i;
+static const struct reg_val regval_init[] = {
+ {0x12, 0x80},
+ {0x12, 0x54},
+ {0x14, 0x24},
+ {0x15, 0x01},
+ {0x28, 0x20},
+ {0x75, 0x82},
+};
- for (i = 0; regs[i] != 0xFF; i += 2)
- if (i2c_smbus_write_byte_data(client, regs[i], regs[i + 1]) < 0)
+static int write_regs(struct i2c_client *client,
+ const struct reg_val *rv, int len)
+{
+ while (--len >= 0) {
+ if (i2c_smbus_write_byte_data(client, rv->reg, rv->val) < 0)
return -1;
+ rv++;
+ }
return 0;
}
@@ -56,7 +61,7 @@ static int ov7640_probe(struct i2c_client *client,
v4l_info(client, "chip found @ 0x%02x (%s)\n",
client->addr << 1, client->adapter->name);
- if (write_regs(client, initial_registers) < 0) {
+ if (write_regs(client, regval_init, ARRAY_SIZE(regval_init)) < 0) {
v4l_err(client, "error initializing OV7640\n");
return -ENODEV;
}