Commit bfe06aee authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab
Browse files

media: atomisp: gc0310: Remove GC0310_TOK_*



Remove the ability to have special tokens in a reg-list,
GC0310_TOK_DELAY is not used and GC0310_TOK_TERM can be replaced
with ARRAY_SIZE, simplifying the code.

Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 8b6afba5
Loading
Loading
Loading
Loading
+19 −28
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ static int gc0310_write_reg(struct i2c_client *client, u16 data_length,
 * gc0310_write_reg_array - Initializes a list of GC0310 registers
 * @client: i2c driver client structure
 * @reglist: list of registers to be written
 * @count: number of register, value pairs in the list
 *
 * This function initializes a list of registers. When consecutive addresses
 * are found in a row on the list, this function creates a buffer and sends
@@ -202,40 +203,29 @@ static int __gc0310_write_reg_is_consecutive(struct i2c_client *client,
}

static int gc0310_write_reg_array(struct i2c_client *client,
				  const struct gc0310_reg *reglist)
				  const struct gc0310_reg *reglist, int count)
{
	const struct gc0310_reg *next = reglist;
	struct gc0310_write_ctrl ctrl;
	int err;
	int i, err;

	ctrl.index = 0;
	for (; next->type != GC0310_TOK_TERM; next++) {
		switch (next->type & GC0310_TOK_MASK) {
		case GC0310_TOK_DELAY:
			err = __gc0310_flush_reg_array(client, &ctrl);
			if (err)
				return err;
			msleep(next->val);
			break;
		default:
	for (i = 0; i < count; i++) {
		/*
		 * If next address is not consecutive, data needs to be
		 * flushed before proceed.
		 */
		if (!__gc0310_write_reg_is_consecutive(client, &ctrl,
							       next)) {
						       &reglist[i])) {
			err = __gc0310_flush_reg_array(client, &ctrl);
			if (err)
				return err;
		}
			err = __gc0310_buf_reg_array(client, &ctrl, next);
		err = __gc0310_buf_reg_array(client, &ctrl, &reglist[i]);
		if (err) {
			dev_err(&client->dev, "%s: write error, aborted\n",
				__func__);
			return err;
		}
			break;
		}
	}

	return __gc0310_flush_reg_array(client, &ctrl);
@@ -478,7 +468,8 @@ static int gc0310_init(struct v4l2_subdev *sd)
	mutex_lock(&dev->input_lock);

	/* set initial registers */
	ret  = gc0310_write_reg_array(client, gc0310_reset_register);
	ret = gc0310_write_reg_array(client, gc0310_reset_register,
				     ARRAY_SIZE(gc0310_reset_register));

	/* restore settings */
	gc0310_res = gc0310_res_preview;
@@ -648,7 +639,7 @@ static int startup(struct v4l2_subdev *sd)
	struct i2c_client *client = v4l2_get_subdevdata(sd);
	int ret = 0;

	ret = gc0310_write_reg_array(client, dev->res->regs);
	ret = gc0310_write_reg_array(client, dev->res->regs, dev->res->reg_count);
	if (ret) {
		dev_err(&client->dev, "gc0310 write register err.\n");
		return ret;
+2 −7
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@
struct gc0310_resolution {
	u8 *desc;
	const struct gc0310_reg *regs;
	int reg_count;
	int res;
	int width;
	int height;
@@ -139,9 +140,6 @@ struct gc0310_device {

enum gc0310_tok_type {
	GC0310_8BIT  = 0x0001,
	GC0310_TOK_TERM   = 0xf000,	/* terminating token for reg list */
	GC0310_TOK_DELAY  = 0xfe00,	/* delay token for reg list */
	GC0310_TOK_MASK = 0xfff0
};

/**
@@ -330,8 +328,6 @@ static const struct gc0310_reg gc0310_reset_register[] = {
	{GC0310_8BIT, 0x48, 0x03}, //sun mode
	{GC0310_8BIT, 0x4f, 0x60}, //sun_clamp
	{GC0310_8BIT, 0xfe, 0x00},

	{GC0310_TOK_TERM, 0, 0},
};

static struct gc0310_reg const gc0310_VGA_30fps[] = {
@@ -356,8 +352,6 @@ static struct gc0310_reg const gc0310_VGA_30fps[] = {
	{GC0310_8BIT, 0x13, 0x02},//05 //05 //LWC[15:8]

	{GC0310_8BIT, 0xfe, 0x00},

	{GC0310_TOK_TERM, 0, 0},
};

static struct gc0310_resolution gc0310_res_preview[] = {
@@ -374,6 +368,7 @@ static struct gc0310_resolution gc0310_res_preview[] = {
#endif
		.skip_frames = 2,
		.regs = gc0310_VGA_30fps,
		.reg_count = ARRAY_SIZE(gc0310_VGA_30fps),
	},
};