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

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
...@@ -134,6 +134,7 @@ static int gc0310_write_reg(struct i2c_client *client, u16 data_length, ...@@ -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 * gc0310_write_reg_array - Initializes a list of GC0310 registers
* @client: i2c driver client structure * @client: i2c driver client structure
* @reglist: list of registers to be written * @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 * 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 * 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, ...@@ -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, 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; struct gc0310_write_ctrl ctrl;
int err; int i, err;
ctrl.index = 0; ctrl.index = 0;
for (; next->type != GC0310_TOK_TERM; next++) { for (i = 0; i < count; i++) {
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:
/* /*
* If next address is not consecutive, data needs to be * If next address is not consecutive, data needs to be
* flushed before proceed. * flushed before proceed.
*/ */
if (!__gc0310_write_reg_is_consecutive(client, &ctrl, if (!__gc0310_write_reg_is_consecutive(client, &ctrl,
next)) { &reglist[i])) {
err = __gc0310_flush_reg_array(client, &ctrl); err = __gc0310_flush_reg_array(client, &ctrl);
if (err) if (err)
return err; return err;
} }
err = __gc0310_buf_reg_array(client, &ctrl, next); err = __gc0310_buf_reg_array(client, &ctrl, &reglist[i]);
if (err) { if (err) {
dev_err(&client->dev, "%s: write error, aborted\n", dev_err(&client->dev, "%s: write error, aborted\n",
__func__); __func__);
return err; return err;
} }
break;
}
} }
return __gc0310_flush_reg_array(client, &ctrl); return __gc0310_flush_reg_array(client, &ctrl);
...@@ -478,7 +468,8 @@ static int gc0310_init(struct v4l2_subdev *sd) ...@@ -478,7 +468,8 @@ static int gc0310_init(struct v4l2_subdev *sd)
mutex_lock(&dev->input_lock); mutex_lock(&dev->input_lock);
/* set initial registers */ /* 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 */ /* restore settings */
gc0310_res = gc0310_res_preview; gc0310_res = gc0310_res_preview;
...@@ -648,7 +639,7 @@ static int startup(struct v4l2_subdev *sd) ...@@ -648,7 +639,7 @@ static int startup(struct v4l2_subdev *sd)
struct i2c_client *client = v4l2_get_subdevdata(sd); struct i2c_client *client = v4l2_get_subdevdata(sd);
int ret = 0; 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) { if (ret) {
dev_err(&client->dev, "gc0310 write register err.\n"); dev_err(&client->dev, "gc0310 write register err.\n");
return ret; return ret;
......
...@@ -110,6 +110,7 @@ ...@@ -110,6 +110,7 @@
struct gc0310_resolution { struct gc0310_resolution {
u8 *desc; u8 *desc;
const struct gc0310_reg *regs; const struct gc0310_reg *regs;
int reg_count;
int res; int res;
int width; int width;
int height; int height;
...@@ -139,9 +140,6 @@ struct gc0310_device { ...@@ -139,9 +140,6 @@ struct gc0310_device {
enum gc0310_tok_type { enum gc0310_tok_type {
GC0310_8BIT = 0x0001, 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[] = { ...@@ -330,8 +328,6 @@ static const struct gc0310_reg gc0310_reset_register[] = {
{GC0310_8BIT, 0x48, 0x03}, //sun mode {GC0310_8BIT, 0x48, 0x03}, //sun mode
{GC0310_8BIT, 0x4f, 0x60}, //sun_clamp {GC0310_8BIT, 0x4f, 0x60}, //sun_clamp
{GC0310_8BIT, 0xfe, 0x00}, {GC0310_8BIT, 0xfe, 0x00},
{GC0310_TOK_TERM, 0, 0},
}; };
static struct gc0310_reg const gc0310_VGA_30fps[] = { static struct gc0310_reg const gc0310_VGA_30fps[] = {
...@@ -356,8 +352,6 @@ 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, 0x13, 0x02},//05 //05 //LWC[15:8]
{GC0310_8BIT, 0xfe, 0x00}, {GC0310_8BIT, 0xfe, 0x00},
{GC0310_TOK_TERM, 0, 0},
}; };
static struct gc0310_resolution gc0310_res_preview[] = { static struct gc0310_resolution gc0310_res_preview[] = {
...@@ -374,6 +368,7 @@ static struct gc0310_resolution gc0310_res_preview[] = { ...@@ -374,6 +368,7 @@ static struct gc0310_resolution gc0310_res_preview[] = {
#endif #endif
.skip_frames = 2, .skip_frames = 2,
.regs = gc0310_VGA_30fps, .regs = gc0310_VGA_30fps,
.reg_count = ARRAY_SIZE(gc0310_VGA_30fps),
}, },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment