diff options
Diffstat (limited to 'drivers/media/video')
-rwxr-xr-x | drivers/media/video/s5k4ecgx.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/media/video/s5k4ecgx.c b/drivers/media/video/s5k4ecgx.c index a185834..b036716 100755 --- a/drivers/media/video/s5k4ecgx.c +++ b/drivers/media/video/s5k4ecgx.c @@ -1987,7 +1987,7 @@ static int s5k4ecgx_get_iso(struct v4l2_subdev *sd, struct v4l2_control *ctrl) /* restore write mode */ s5k4ecgx_i2c_write_twobyte(client, 0x0028, 0x7000); - read_value = read_value1 * read_value2 / 0x100 / 2; + read_value = read_value1 * read_value2 / 384; if (read_value > 0x400) ctrl->value = ISO_400; @@ -2011,16 +2011,20 @@ static int s5k4ecgx_get_shutterspeed(struct v4l2_subdev *sd, struct i2c_client *client = v4l2_get_subdevdata(sd); struct s5k4ecgx_state *state = container_of(sd, struct s5k4ecgx_state, sd); - u16 read_value = 0; + u16 read_value_1; + u16 read_value_2; + u32 read_value; err = s5k4ecgx_set_from_table(sd, "get shutterspeed", &state->regs->get_shutterspeed, 1, 0); - err |= s5k4ecgx_i2c_read_twobyte(client, 0x0F12, &read_value); + err |= s5k4ecgx_i2c_read_twobyte(client, 0x0F12, &read_value_1); + err |= s5k4ecgx_i2c_read_twobyte(client, 0x0F12, &read_value_2); + read_value = (read_value_2 << 16) | (read_value_1 & 0xffff); /* restore write mode */ s5k4ecgx_i2c_write_twobyte(client, 0x0028, 0x7000); - ctrl->value = read_value / 400; + ctrl->value = read_value * 1000 / 400; dev_dbg(&client->dev, "%s: get shutterspeed == %d\n", __func__, ctrl->value); |