Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c3f9fd8 authored by Andreas Regel's avatar Andreas Regel Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (13980): [STV6110x] Added function stv6110x_write_regs



The function stv6110x_write_regs is used to write several registers at once.

Signed-off-by: default avatarAndreas Regel <andreas.regel@gmx.de>
Signed-off-by: default avatarManu Abraham <manu@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f91e59cb
Loading
Loading
Loading
Loading
+24 −10
Original line number Diff line number Diff line
@@ -58,12 +58,23 @@ static int stv6110x_read_reg(struct stv6110x_state *stv6110x, u8 reg, u8 *data)
	return 0;
}

static int stv6110x_write_reg(struct stv6110x_state *stv6110x, u8 reg, u8 data)
static int stv6110x_write_regs(struct stv6110x_state *stv6110x, int start, u8 data[], int len)
{
	int ret;
	const struct stv6110x_config *config = stv6110x->config;
	u8 buf[] = { reg, data };
	struct i2c_msg msg = { .addr = config->addr, .flags = 0, . buf = buf, .len = 2 };
	u8 buf[len + 1];
	struct i2c_msg msg = {
		.addr = config->addr,
		.flags = 0,
		.buf = buf,
		.len = len + 1
	};

	if (start + len > 8)
		return -EINVAL;

	buf[0] = start;
	memcpy(&buf[1], data, len);

	ret = i2c_transfer(stv6110x->i2c, &msg, 1);
	if (ret != 1) {
@@ -74,19 +85,22 @@ static int stv6110x_write_reg(struct stv6110x_state *stv6110x, u8 reg, u8 data)
	return 0;
}

static int stv6110x_write_reg(struct stv6110x_state *stv6110x, u8 reg, u8 data)
{
	return stv6110x_write_regs(stv6110x, reg, &data, 1);
}

static int stv6110x_init(struct dvb_frontend *fe)
{
	struct stv6110x_state *stv6110x = fe->tuner_priv;
	int ret;
	u8 i;

	for (i = 0; i < ARRAY_SIZE(stv6110x_regs); i++) {
		ret = stv6110x_write_reg(stv6110x, i, stv6110x_regs[i]);
	ret = stv6110x_write_regs(stv6110x, 0, stv6110x_regs,
				  ARRAY_SIZE(stv6110x_regs));
	if (ret < 0) {
		dprintk(FE_ERROR, 1, "Initialization failed");
		return -1;
	}
	}

	return 0;
}