Commit 378a0e4b authored by Moses Christopher Bollavarapu's avatar Moses Christopher Bollavarapu Committed by Mauro Carvalho Chehab
Browse files

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: default avatarMoses Christopher Bollavarapu <mosescb.dev@gmail.com>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 7dd0f93a
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -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;
	}