diff options
author | Moses Christopher Bollavarapu <mosescb.dev@gmail.com> | 2022-03-17 14:47:14 +0000 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@kernel.org> | 2022-04-24 08:25:08 +0100 |
commit | 378a0e4ba89892f78fcab64f03f57f99714a1914 (patch) | |
tree | cdbbf1492af4ec10d3984ae1cca7af59c85f09c5 /drivers | |
parent | 7dd0f93a31af03cba81c684c4c361bba510ffe71 (diff) | |
download | linux-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')
-rw-r--r-- | drivers/media/i2c/ov7640.c | 33 |
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; } |