aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Andrén <erik.andren@gmail.com>2008-11-20 01:59:02 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-12-30 06:39:47 -0500
commit7b9f246738869e6a55bf180441598e8daa72a99e (patch)
tree7a220246f13aeb101ffc2d26ec96e61f6a299403
parente07b14e80be3d93807a6dc01edb80e0cc38040ad (diff)
V4L/DVB (10004): m5602: Cleanup the po1030 sensor error handling
Signed-off-by: Erik Andrén <erik.andren@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/gspca/m5602/m5602_po1030.c51
1 files changed, 30 insertions, 21 deletions
diff --git a/drivers/media/video/gspca/m5602/m5602_po1030.c b/drivers/media/video/gspca/m5602/m5602_po1030.c
index d17ac52566e6..739f2df55e0d 100644
--- a/drivers/media/video/gspca/m5602/m5602_po1030.c
+++ b/drivers/media/video/gspca/m5602/m5602_po1030.c
@@ -73,19 +73,28 @@ int po1030_read_sensor(struct sd *sd, const u8 address,
73 err = m5602_read_bridge(sd, M5602_XB_I2C_STATUS, i2c_data); 73 err = m5602_read_bridge(sd, M5602_XB_I2C_STATUS, i2c_data);
74 } while ((*i2c_data & I2C_BUSY) && !err); 74 } while ((*i2c_data & I2C_BUSY) && !err);
75 75
76 m5602_write_bridge(sd, M5602_XB_I2C_DEV_ADDR, 76 err = m5602_write_bridge(sd, M5602_XB_I2C_DEV_ADDR,
77 sd->sensor->i2c_slave_id); 77 sd->sensor->i2c_slave_id);
78 m5602_write_bridge(sd, M5602_XB_I2C_REG_ADDR, address); 78 if (err < 0)
79 m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x10 + len); 79 goto out;
80 m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x08); 80 err = m5602_write_bridge(sd, M5602_XB_I2C_REG_ADDR, address);
81 if (err < 0)
82 goto out;
83 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x10 + len);
84 if (err < 0)
85 goto out;
86 err = m5602_write_bridge(sd, M5602_XB_I2C_CTRL, 0x08);
87 if (err < 0)
88 goto out;
81 89
82 for (i = 0; i < len; i++) { 90 for (i = 0; (i < len) && !err; i++) {
83 err = m5602_read_bridge(sd, M5602_XB_I2C_DATA, &(i2c_data[i])); 91 err = m5602_read_bridge(sd, M5602_XB_I2C_DATA, &(i2c_data[i]));
84 92
85 PDEBUG(D_CONF, "Reading sensor register " 93 PDEBUG(D_CONF, "Reading sensor register "
86 "0x%x containing 0x%x ", address, *i2c_data); 94 "0x%x containing 0x%x ", address, *i2c_data);
87 } 95 }
88 return (err < 0) ? err : 0; 96out:
97 return err;
89} 98}
90 99
91int po1030_write_sensor(struct sd *sd, const u8 address, 100int po1030_write_sensor(struct sd *sd, const u8 address,
@@ -135,7 +144,7 @@ int po1030_init(struct sd *sd)
135 int i, err = 0; 144 int i, err = 0;
136 145
137 /* Init the sensor */ 146 /* Init the sensor */
138 for (i = 0; i < ARRAY_SIZE(init_po1030); i++) { 147 for (i = 0; i < ARRAY_SIZE(init_po1030) && !err; i++) {
139 u8 data[2] = {0x00, 0x00}; 148 u8 data[2] = {0x00, 0x00};
140 149
141 switch (init_po1030[i][0]) { 150 switch (init_po1030[i][0]) {
@@ -166,7 +175,7 @@ int po1030_init(struct sd *sd)
166 if (dump_sensor) 175 if (dump_sensor)
167 po1030_dump_registers(sd); 176 po1030_dump_registers(sd);
168 177
169 return (err < 0) ? err : 0; 178 return err;
170} 179}
171 180
172int po1030_get_exposure(struct gspca_dev *gspca_dev, __s32 *val) 181int po1030_get_exposure(struct gspca_dev *gspca_dev, __s32 *val)
@@ -187,7 +196,7 @@ int po1030_get_exposure(struct gspca_dev *gspca_dev, __s32 *val)
187 196
188 PDEBUG(D_V4L2, "Exposure read as %d", *val); 197 PDEBUG(D_V4L2, "Exposure read as %d", *val);
189out: 198out:
190 return (err < 0) ? err : 0; 199 return err;
191} 200}
192 201
193int po1030_set_exposure(struct gspca_dev *gspca_dev, __s32 val) 202int po1030_set_exposure(struct gspca_dev *gspca_dev, __s32 val)
@@ -214,7 +223,7 @@ int po1030_set_exposure(struct gspca_dev *gspca_dev, __s32 val)
214 &i2c_data, 1); 223 &i2c_data, 1);
215 224
216out: 225out:
217 return (err < 0) ? err : 0; 226 return err;
218} 227}
219 228
220int po1030_get_gain(struct gspca_dev *gspca_dev, __s32 *val) 229int po1030_get_gain(struct gspca_dev *gspca_dev, __s32 *val)
@@ -228,7 +237,7 @@ int po1030_get_gain(struct gspca_dev *gspca_dev, __s32 *val)
228 *val = i2c_data; 237 *val = i2c_data;
229 PDEBUG(D_V4L2, "Read global gain %d", *val); 238 PDEBUG(D_V4L2, "Read global gain %d", *val);
230 239
231 return (err < 0) ? err : 0; 240 return err;
232} 241}
233 242
234int po1030_get_hflip(struct gspca_dev *gspca_dev, __s32 *val) 243int po1030_get_hflip(struct gspca_dev *gspca_dev, __s32 *val)
@@ -244,7 +253,7 @@ int po1030_get_hflip(struct gspca_dev *gspca_dev, __s32 *val)
244 253
245 PDEBUG(D_V4L2, "Read hflip %d", *val); 254 PDEBUG(D_V4L2, "Read hflip %d", *val);
246 255
247 return (err < 0) ? err : 0; 256 return err;
248} 257}
249 258
250int po1030_set_hflip(struct gspca_dev *gspca_dev, __s32 val) 259int po1030_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
@@ -260,7 +269,7 @@ int po1030_set_hflip(struct gspca_dev *gspca_dev, __s32 val)
260 err = po1030_write_sensor(sd, PO1030_REG_CONTROL2, 269 err = po1030_write_sensor(sd, PO1030_REG_CONTROL2,
261 &i2c_data, 1); 270 &i2c_data, 1);
262 271
263 return (err < 0) ? err : 0; 272 return err;
264} 273}
265 274
266int po1030_get_vflip(struct gspca_dev *gspca_dev, __s32 *val) 275int po1030_get_vflip(struct gspca_dev *gspca_dev, __s32 *val)
@@ -276,7 +285,7 @@ int po1030_get_vflip(struct gspca_dev *gspca_dev, __s32 *val)
276 285
277 PDEBUG(D_V4L2, "Read vflip %d", *val); 286 PDEBUG(D_V4L2, "Read vflip %d", *val);
278 287
279 return (err < 0) ? err : 0; 288 return err;
280} 289}
281 290
282int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val) 291int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
@@ -292,7 +301,7 @@ int po1030_set_vflip(struct gspca_dev *gspca_dev, __s32 val)
292 err = po1030_write_sensor(sd, PO1030_REG_CONTROL2, 301 err = po1030_write_sensor(sd, PO1030_REG_CONTROL2,
293 &i2c_data, 1); 302 &i2c_data, 1);
294 303
295 return (err < 0) ? err : 0; 304 return err;
296} 305}
297 306
298int po1030_set_gain(struct gspca_dev *gspca_dev, __s32 val) 307int po1030_set_gain(struct gspca_dev *gspca_dev, __s32 val)
@@ -305,7 +314,7 @@ int po1030_set_gain(struct gspca_dev *gspca_dev, __s32 val)
305 PDEBUG(D_V4L2, "Set global gain to %d", i2c_data); 314 PDEBUG(D_V4L2, "Set global gain to %d", i2c_data);
306 err = po1030_write_sensor(sd, PO1030_REG_GLOBALGAIN, 315 err = po1030_write_sensor(sd, PO1030_REG_GLOBALGAIN,
307 &i2c_data, 1); 316 &i2c_data, 1);
308 return (err < 0) ? err : 0; 317 return err;
309} 318}
310 319
311int po1030_get_red_balance(struct gspca_dev *gspca_dev, __s32 *val) 320int po1030_get_red_balance(struct gspca_dev *gspca_dev, __s32 *val)
@@ -318,7 +327,7 @@ int po1030_get_red_balance(struct gspca_dev *gspca_dev, __s32 *val)
318 &i2c_data, 1); 327 &i2c_data, 1);
319 *val = i2c_data; 328 *val = i2c_data;
320 PDEBUG(D_V4L2, "Read red gain %d", *val); 329 PDEBUG(D_V4L2, "Read red gain %d", *val);
321 return (err < 0) ? err : 0; 330 return err;
322} 331}
323 332
324int po1030_set_red_balance(struct gspca_dev *gspca_dev, __s32 val) 333int po1030_set_red_balance(struct gspca_dev *gspca_dev, __s32 val)
@@ -331,7 +340,7 @@ int po1030_set_red_balance(struct gspca_dev *gspca_dev, __s32 val)
331 PDEBUG(D_V4L2, "Set red gain to %d", i2c_data); 340 PDEBUG(D_V4L2, "Set red gain to %d", i2c_data);
332 err = po1030_write_sensor(sd, PO1030_REG_RED_GAIN, 341 err = po1030_write_sensor(sd, PO1030_REG_RED_GAIN,
333 &i2c_data, 1); 342 &i2c_data, 1);
334 return (err < 0) ? err : 0; 343 return err;
335} 344}
336 345
337int po1030_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val) 346int po1030_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val)
@@ -345,7 +354,7 @@ int po1030_get_blue_balance(struct gspca_dev *gspca_dev, __s32 *val)
345 *val = i2c_data; 354 *val = i2c_data;
346 PDEBUG(D_V4L2, "Read blue gain %d", *val); 355 PDEBUG(D_V4L2, "Read blue gain %d", *val);
347 356
348 return (err < 0) ? err : 0; 357 return err;
349} 358}
350 359
351int po1030_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val) 360int po1030_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val)
@@ -358,7 +367,7 @@ int po1030_set_blue_balance(struct gspca_dev *gspca_dev, __s32 val)
358 err = po1030_write_sensor(sd, PO1030_REG_BLUE_GAIN, 367 err = po1030_write_sensor(sd, PO1030_REG_BLUE_GAIN,
359 &i2c_data, 1); 368 &i2c_data, 1);
360 369
361 return (err < 0) ? err : 0; 370 return err;
362} 371}
363 372
364int po1030_power_down(struct sd *sd) 373int po1030_power_down(struct sd *sd)