mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
media: i2c: change sc3338 gain times from 1000 to 128
Signed-off-by: Su Yuefu <yuefu.su@rock-chips.com> Change-Id: I7bc0aa6bea913a4d5c64aec5a595d9c0960b83cf
This commit is contained in:
@@ -417,54 +417,55 @@ static int sc3338_set_gain_reg(struct sc3338 *sc3338, u32 gain)
|
||||
{
|
||||
struct i2c_client *client = sc3338->client;
|
||||
u32 coarse_again = 0, coarse_dgain = 0, fine_dgain = 0;
|
||||
int ret = 0;
|
||||
int ret = 0, gain_factor;
|
||||
|
||||
if (gain < 128)
|
||||
gain = 128;
|
||||
else if (gain > SC3338_GAIN_MAX)
|
||||
gain = SC3338_GAIN_MAX;
|
||||
|
||||
if (gain < 1520) {
|
||||
gain_factor = gain * 1000 / 128;
|
||||
if (gain_factor < 1520) {
|
||||
coarse_again = 0x00;
|
||||
coarse_dgain = 0x00;
|
||||
fine_dgain = gain * 128 / 1000;
|
||||
} else if (gain < 3040) {
|
||||
fine_dgain = gain_factor * 128 / 1000;
|
||||
} else if (gain_factor < 3040) {
|
||||
coarse_again = 0x40;
|
||||
coarse_dgain = 0x00;
|
||||
fine_dgain = gain * 128 / 1520;
|
||||
} else if (gain < 6080) {
|
||||
fine_dgain = gain_factor * 128 / 1520;
|
||||
} else if (gain_factor < 6080) {
|
||||
coarse_again = 0x48;
|
||||
coarse_dgain = 0x00;
|
||||
fine_dgain = gain * 128 / 3040;
|
||||
} else if (gain < 12160) {
|
||||
fine_dgain = gain_factor * 128 / 3040;
|
||||
} else if (gain_factor < 12160) {
|
||||
coarse_again = 0x49;
|
||||
coarse_dgain = 0x00;
|
||||
fine_dgain = gain * 128 / 6080;
|
||||
} else if (gain < 24320) {
|
||||
fine_dgain = gain_factor * 128 / 6080;
|
||||
} else if (gain_factor < 24320) {
|
||||
coarse_again = 0x4b;
|
||||
coarse_dgain = 0x00;
|
||||
fine_dgain = gain * 128 / 12160;
|
||||
} else if (gain < 48640) {
|
||||
fine_dgain = gain_factor * 128 / 12160;
|
||||
} else if (gain_factor < 48640) {
|
||||
coarse_again = 0x4f;
|
||||
coarse_dgain = 0x00;
|
||||
fine_dgain = gain * 128 / 24320;
|
||||
} else if (gain < 48640 * 2) {
|
||||
fine_dgain = gain_factor * 128 / 24320;
|
||||
} else if (gain_factor < 48640 * 2) {
|
||||
//open dgain begin max digital gain 4X
|
||||
coarse_again = 0x5f;
|
||||
coarse_dgain = 0x00;
|
||||
fine_dgain = gain * 128 / 48640;
|
||||
} else if (gain < 48640 * 4) {
|
||||
fine_dgain = gain_factor * 128 / 48640;
|
||||
} else if (gain_factor < 48640 * 4) {
|
||||
coarse_again = 0x5f;
|
||||
coarse_dgain = 0x01;
|
||||
fine_dgain = gain * 128 / 48640 / 2;
|
||||
} else if (gain < 48640 * 8) {
|
||||
fine_dgain = gain_factor * 128 / 48640 / 2;
|
||||
} else if (gain_factor < 48640 * 8) {
|
||||
coarse_again = 0x5f;
|
||||
coarse_dgain = 0x03;
|
||||
fine_dgain = gain * 128 / 48640 / 4;
|
||||
} else if (gain < 48640 * 16) {
|
||||
fine_dgain = gain_factor * 128 / 48640 / 4;
|
||||
} else if (gain_factor < 48640 * 16) {
|
||||
coarse_again = 0x5f;
|
||||
coarse_dgain = 0x07;
|
||||
fine_dgain = gain * 128 / 48640 / 8;
|
||||
fine_dgain = gain_factor * 128 / 48640 / 8;
|
||||
}
|
||||
dev_dbg(&client->dev, "c_again: 0x%x, c_dgain: 0x%x, f_dgain: 0x%0x\n",
|
||||
coarse_again, coarse_dgain, fine_dgain);
|
||||
|
||||
Reference in New Issue
Block a user