aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/usbvision/usbvision-i2c.c27
-rw-r--r--drivers/media/video/usbvision/usbvision.h23
2 files changed, 4 insertions, 46 deletions
diff --git a/drivers/media/video/usbvision/usbvision-i2c.c b/drivers/media/video/usbvision/usbvision-i2c.c
index 9540bd048345..efcd25bc1615 100644
--- a/drivers/media/video/usbvision/usbvision-i2c.c
+++ b/drivers/media/video/usbvision/usbvision-i2c.c
@@ -58,7 +58,6 @@ static int usbvision_i2c_read(void *data, unsigned char addr, char *buf,
58static inline int try_write_address(struct i2c_adapter *i2c_adap, 58static inline int try_write_address(struct i2c_adapter *i2c_adap,
59 unsigned char addr, int retries) 59 unsigned char addr, int retries)
60{ 60{
61 struct i2c_algo_usb_data *adap = i2c_adap->algo_data;
62 void *data; 61 void *data;
63 int i, ret = -1; 62 int i, ret = -1;
64 char buf[4]; 63 char buf[4];
@@ -69,10 +68,10 @@ static inline int try_write_address(struct i2c_adapter *i2c_adap,
69 ret = (usbvision_i2c_write(data, addr, buf, 1)); 68 ret = (usbvision_i2c_write(data, addr, buf, 1));
70 if (ret == 1) 69 if (ret == 1)
71 break; /* success! */ 70 break; /* success! */
72 udelay(5 /*adap->udelay */ ); 71 udelay(5);
73 if (i == retries) /* no success */ 72 if (i == retries) /* no success */
74 break; 73 break;
75 udelay(adap->udelay); 74 udelay(10);
76 } 75 }
77 if (i) { 76 if (i) {
78 PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr); 77 PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr);
@@ -84,7 +83,6 @@ static inline int try_write_address(struct i2c_adapter *i2c_adap,
84static inline int try_read_address(struct i2c_adapter *i2c_adap, 83static inline int try_read_address(struct i2c_adapter *i2c_adap,
85 unsigned char addr, int retries) 84 unsigned char addr, int retries)
86{ 85{
87 struct i2c_algo_usb_data *adap = i2c_adap->algo_data;
88 void *data; 86 void *data;
89 int i, ret = -1; 87 int i, ret = -1;
90 char buf[4]; 88 char buf[4];
@@ -94,10 +92,10 @@ static inline int try_read_address(struct i2c_adapter *i2c_adap,
94 ret = (usbvision_i2c_read(data, addr, buf, 1)); 92 ret = (usbvision_i2c_read(data, addr, buf, 1));
95 if (ret == 1) 93 if (ret == 1)
96 break; /* success! */ 94 break; /* success! */
97 udelay(5 /*adap->udelay */ ); 95 udelay(5);
98 if (i == retries) /* no success */ 96 if (i == retries) /* no success */
99 break; 97 break;
100 udelay(adap->udelay); 98 udelay(10);
101 } 99 }
102 if (i) { 100 if (i) {
103 PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr); 101 PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr);
@@ -248,15 +246,12 @@ int usbvision_i2c_usb_del_bus(struct i2c_adapter *adap)
248/* usbvision specific I2C functions */ 246/* usbvision specific I2C functions */
249/* ----------------------------------------------------------------------- */ 247/* ----------------------------------------------------------------------- */
250static struct i2c_adapter i2c_adap_template; 248static struct i2c_adapter i2c_adap_template;
251static struct i2c_algo_usb_data i2c_algo_template;
252static struct i2c_client i2c_client_template; 249static struct i2c_client i2c_client_template;
253 250
254int usbvision_init_i2c(struct usb_usbvision *usbvision) 251int usbvision_init_i2c(struct usb_usbvision *usbvision)
255{ 252{
256 memcpy(&usbvision->i2c_adap, &i2c_adap_template, 253 memcpy(&usbvision->i2c_adap, &i2c_adap_template,
257 sizeof(struct i2c_adapter)); 254 sizeof(struct i2c_adapter));
258 memcpy(&usbvision->i2c_algo, &i2c_algo_template,
259 sizeof(struct i2c_algo_usb_data));
260 memcpy(&usbvision->i2c_client, &i2c_client_template, 255 memcpy(&usbvision->i2c_client, &i2c_client_template,
261 sizeof(struct i2c_client)); 256 sizeof(struct i2c_client));
262 257
@@ -266,9 +261,7 @@ int usbvision_init_i2c(struct usb_usbvision *usbvision)
266 261
267 i2c_set_adapdata(&usbvision->i2c_adap, usbvision); 262 i2c_set_adapdata(&usbvision->i2c_adap, usbvision);
268 i2c_set_clientdata(&usbvision->i2c_client, usbvision); 263 i2c_set_clientdata(&usbvision->i2c_client, usbvision);
269 i2c_set_algo_usb_data(&usbvision->i2c_algo, usbvision);
270 264
271 usbvision->i2c_adap.algo_data = &usbvision->i2c_algo;
272 usbvision->i2c_client.adapter = &usbvision->i2c_adap; 265 usbvision->i2c_client.adapter = &usbvision->i2c_adap;
273 266
274 if (usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_IIC_LRNACK) < 0) { 267 if (usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_IIC_LRNACK) < 0) {
@@ -297,7 +290,6 @@ int usbvision_init_i2c(struct usb_usbvision *usbvision)
297void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd, 290void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,
298 void *arg) 291 void *arg)
299{ 292{
300 BUG_ON(NULL == usbvision->i2c_adap.algo_data);
301 i2c_clients_command(&usbvision->i2c_adap, cmd, arg); 293 i2c_clients_command(&usbvision->i2c_adap, cmd, arg);
302} 294}
303 295
@@ -531,21 +523,10 @@ static int usbvision_i2c_read(void *data, unsigned char addr, char *buf,
531 return rdcount; 523 return rdcount;
532} 524}
533 525
534static struct i2c_algo_usb_data i2c_algo_template = {
535 .data = NULL,
536 .inb = usbvision_i2c_read,
537 .outb = usbvision_i2c_write,
538 .udelay = 10,
539 .mdelay = 10,
540 .timeout = 100,
541};
542
543static struct i2c_adapter i2c_adap_template = { 526static struct i2c_adapter i2c_adap_template = {
544 .owner = THIS_MODULE, 527 .owner = THIS_MODULE,
545 .name = "usbvision", 528 .name = "usbvision",
546 .id = I2C_HW_B_BT848, /* FIXME */ 529 .id = I2C_HW_B_BT848, /* FIXME */
547 .algo = NULL,
548 .algo_data = NULL,
549 .client_register = attach_inform, 530 .client_register = attach_inform,
550 .client_unregister = detach_inform, 531 .client_unregister = detach_inform,
551#ifdef I2C_ADAP_CLASS_TV_ANALOG 532#ifdef I2C_ADAP_CLASS_TV_ANALOG
diff --git a/drivers/media/video/usbvision/usbvision.h b/drivers/media/video/usbvision/usbvision.h
index 5ad07f8a9d9b..b1645f9e572d 100644
--- a/drivers/media/video/usbvision/usbvision.h
+++ b/drivers/media/video/usbvision/usbvision.h
@@ -219,18 +219,6 @@ enum {
219 ((udevice)->last_error == 0) && \ 219 ((udevice)->last_error == 0) && \
220 (!(udevice)->remove_pending)) 220 (!(udevice)->remove_pending))
221 221
222/* I2C structures */
223struct i2c_algo_usb_data {
224 void *data; /* private data for lowlevel routines */
225 int (*inb) (void *data, unsigned char addr, char *buf, short len);
226 int (*outb) (void *data, unsigned char addr, char *buf, short len);
227
228 /* local settings */
229 int udelay;
230 int mdelay;
231 int timeout;
232};
233
234#define I2C_USB_ADAP_MAX 16 222#define I2C_USB_ADAP_MAX 16
235 223
236/* ----------------------------------------------------------------- */ 224/* ----------------------------------------------------------------- */
@@ -383,7 +371,6 @@ struct usb_usbvision {
383 371
384 /* i2c Declaration Section*/ 372 /* i2c Declaration Section*/
385 struct i2c_adapter i2c_adap; 373 struct i2c_adapter i2c_adap;
386 struct i2c_algo_usb_data i2c_algo;
387 struct i2c_client i2c_client; 374 struct i2c_client i2c_client;
388 375
389 struct urb *ctrlUrb; 376 struct urb *ctrlUrb;
@@ -491,16 +478,6 @@ struct usb_usbvision {
491 478
492int usbvision_i2c_usb_del_bus(struct i2c_adapter *); 479int usbvision_i2c_usb_del_bus(struct i2c_adapter *);
493 480
494static inline void *i2c_get_algo_usb_data (struct i2c_algo_usb_data *dev)
495{
496 return dev->data;
497}
498
499static inline void i2c_set_algo_usb_data (struct i2c_algo_usb_data *dev, void *data)
500{
501 dev->data = data;
502}
503
504 481
505/* ----------------------------------------------------------------------- */ 482/* ----------------------------------------------------------------------- */
506/* usbvision specific I2C functions */ 483/* usbvision specific I2C functions */