diff options
author | Jean-François Moine <moinejf@free.fr> | 2012-03-24 08:23:56 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-03 14:29:55 -0400 |
commit | c4407fe86d3856f60ec711e025bbe9a0159354a3 (patch) | |
tree | f21ecb7f4e0fc4c986c1a2fea14773c6f13e8ae8 /drivers | |
parent | dae1de645e41a5d7f36686ebcb62987545f95e94 (diff) |
[media] gspca - sn9c20x: Set the i2c interface speed
The i2c interface speed was set to 400 Kb/s while it is 100 Kb/s
for most sensors.
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/gspca/sn9c20x.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c index 0958a93e0b82..c5b42e4ac9b4 100644 --- a/drivers/media/video/gspca/sn9c20x.c +++ b/drivers/media/video/gspca/sn9c20x.c | |||
@@ -105,6 +105,7 @@ struct sd { | |||
105 | u8 exposure_step; | 105 | u8 exposure_step; |
106 | 106 | ||
107 | u8 i2c_addr; | 107 | u8 i2c_addr; |
108 | u8 i2c_intf; | ||
108 | u8 sensor; | 109 | u8 sensor; |
109 | u8 hstart; | 110 | u8 hstart; |
110 | u8 vstart; | 111 | u8 vstart; |
@@ -1168,7 +1169,7 @@ static void i2c_w1(struct gspca_dev *gspca_dev, u8 reg, u8 val) | |||
1168 | * from the point of view of the bridge, the length | 1169 | * from the point of view of the bridge, the length |
1169 | * includes the address | 1170 | * includes the address |
1170 | */ | 1171 | */ |
1171 | row[0] = 0x81 | (2 << 4); | 1172 | row[0] = sd->i2c_intf | (2 << 4); |
1172 | row[1] = sd->i2c_addr; | 1173 | row[1] = sd->i2c_addr; |
1173 | row[2] = reg; | 1174 | row[2] = reg; |
1174 | row[3] = val; | 1175 | row[3] = val; |
@@ -1198,7 +1199,7 @@ static void i2c_w2(struct gspca_dev *gspca_dev, u8 reg, u16 val) | |||
1198 | * from the point of view of the bridge, the length | 1199 | * from the point of view of the bridge, the length |
1199 | * includes the address | 1200 | * includes the address |
1200 | */ | 1201 | */ |
1201 | row[0] = 0x81 | (3 << 4); | 1202 | row[0] = sd->i2c_intf | (3 << 4); |
1202 | row[1] = sd->i2c_addr; | 1203 | row[1] = sd->i2c_addr; |
1203 | row[2] = reg; | 1204 | row[2] = reg; |
1204 | row[3] = val >> 8; | 1205 | row[3] = val >> 8; |
@@ -1224,7 +1225,7 @@ static void i2c_r1(struct gspca_dev *gspca_dev, u8 reg, u8 *val) | |||
1224 | struct sd *sd = (struct sd *) gspca_dev; | 1225 | struct sd *sd = (struct sd *) gspca_dev; |
1225 | u8 row[8]; | 1226 | u8 row[8]; |
1226 | 1227 | ||
1227 | row[0] = 0x81 | (1 << 4); | 1228 | row[0] = sd->i2c_intf | (1 << 4); |
1228 | row[1] = sd->i2c_addr; | 1229 | row[1] = sd->i2c_addr; |
1229 | row[2] = reg; | 1230 | row[2] = reg; |
1230 | row[3] = 0; | 1231 | row[3] = 0; |
@@ -1233,7 +1234,7 @@ static void i2c_r1(struct gspca_dev *gspca_dev, u8 reg, u8 *val) | |||
1233 | row[6] = 0; | 1234 | row[6] = 0; |
1234 | row[7] = 0x10; | 1235 | row[7] = 0x10; |
1235 | i2c_w(gspca_dev, row); | 1236 | i2c_w(gspca_dev, row); |
1236 | row[0] = 0x81 | (1 << 4) | 0x02; | 1237 | row[0] = sd->i2c_intf | (1 << 4) | 0x02; |
1237 | row[2] = 0; | 1238 | row[2] = 0; |
1238 | i2c_w(gspca_dev, row); | 1239 | i2c_w(gspca_dev, row); |
1239 | reg_r(gspca_dev, 0x10c2, 5); | 1240 | reg_r(gspca_dev, 0x10c2, 5); |
@@ -1245,7 +1246,7 @@ static void i2c_r2(struct gspca_dev *gspca_dev, u8 reg, u16 *val) | |||
1245 | struct sd *sd = (struct sd *) gspca_dev; | 1246 | struct sd *sd = (struct sd *) gspca_dev; |
1246 | u8 row[8]; | 1247 | u8 row[8]; |
1247 | 1248 | ||
1248 | row[0] = 0x81 | (1 << 4); | 1249 | row[0] = sd->i2c_intf | (1 << 4); |
1249 | row[1] = sd->i2c_addr; | 1250 | row[1] = sd->i2c_addr; |
1250 | row[2] = reg; | 1251 | row[2] = reg; |
1251 | row[3] = 0; | 1252 | row[3] = 0; |
@@ -1254,7 +1255,7 @@ static void i2c_r2(struct gspca_dev *gspca_dev, u8 reg, u16 *val) | |||
1254 | row[6] = 0; | 1255 | row[6] = 0; |
1255 | row[7] = 0x10; | 1256 | row[7] = 0x10; |
1256 | i2c_w(gspca_dev, row); | 1257 | i2c_w(gspca_dev, row); |
1257 | row[0] = 0x81 | (2 << 4) | 0x02; | 1258 | row[0] = sd->i2c_intf | (2 << 4) | 0x02; |
1258 | row[2] = 0; | 1259 | row[2] = 0; |
1259 | i2c_w(gspca_dev, row); | 1260 | i2c_w(gspca_dev, row); |
1260 | reg_r(gspca_dev, 0x10c2, 5); | 1261 | reg_r(gspca_dev, 0x10c2, 5); |
@@ -1642,7 +1643,8 @@ static void set_hvflip(struct gspca_dev *gspca_dev) | |||
1642 | static void set_exposure(struct gspca_dev *gspca_dev) | 1643 | static void set_exposure(struct gspca_dev *gspca_dev) |
1643 | { | 1644 | { |
1644 | struct sd *sd = (struct sd *) gspca_dev; | 1645 | struct sd *sd = (struct sd *) gspca_dev; |
1645 | u8 exp[8] = {0x81, sd->i2c_addr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e}; | 1646 | u8 exp[8] = {sd->i2c_intf, sd->i2c_addr, |
1647 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e}; | ||
1646 | int expo; | 1648 | int expo; |
1647 | 1649 | ||
1648 | expo = sd->ctrls[EXPOSURE].val; | 1650 | expo = sd->ctrls[EXPOSURE].val; |
@@ -1680,7 +1682,8 @@ static void set_exposure(struct gspca_dev *gspca_dev) | |||
1680 | static void set_gain(struct gspca_dev *gspca_dev) | 1682 | static void set_gain(struct gspca_dev *gspca_dev) |
1681 | { | 1683 | { |
1682 | struct sd *sd = (struct sd *) gspca_dev; | 1684 | struct sd *sd = (struct sd *) gspca_dev; |
1683 | u8 gain[8] = {0x81, sd->i2c_addr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d}; | 1685 | u8 gain[8] = {sd->i2c_intf, sd->i2c_addr, |
1686 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d}; | ||
1684 | int g; | 1687 | int g; |
1685 | 1688 | ||
1686 | g = sd->ctrls[GAIN].val; | 1689 | g = sd->ctrls[GAIN].val; |
@@ -1828,6 +1831,7 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
1828 | sd->sensor = id->driver_info >> 8; | 1831 | sd->sensor = id->driver_info >> 8; |
1829 | sd->i2c_addr = id->driver_info; | 1832 | sd->i2c_addr = id->driver_info; |
1830 | sd->flags = id->driver_info >> 16; | 1833 | sd->flags = id->driver_info >> 16; |
1834 | sd->i2c_intf = 0x80; /* i2c 100 Kb/s */ | ||
1831 | 1835 | ||
1832 | switch (sd->sensor) { | 1836 | switch (sd->sensor) { |
1833 | case SENSOR_MT9M112: | 1837 | case SENSOR_MT9M112: |
@@ -1841,6 +1845,9 @@ static int sd_config(struct gspca_dev *gspca_dev, | |||
1841 | cam->cam_mode = mono_mode; | 1845 | cam->cam_mode = mono_mode; |
1842 | cam->nmodes = ARRAY_SIZE(mono_mode); | 1846 | cam->nmodes = ARRAY_SIZE(mono_mode); |
1843 | break; | 1847 | break; |
1848 | case SENSOR_HV7131R: | ||
1849 | sd->i2c_intf = 0x81; /* i2c 400 Kb/s */ | ||
1850 | /* fall thru */ | ||
1844 | default: | 1851 | default: |
1845 | cam->cam_mode = vga_mode; | 1852 | cam->cam_mode = vga_mode; |
1846 | cam->nmodes = ARRAY_SIZE(vga_mode); | 1853 | cam->nmodes = ARRAY_SIZE(vga_mode); |