2 * Generic i2c interface for linux
4 * (c) 1998 Gerd Knorr <kraxel@cs.tu-berlin.de>
8 #include <linux/config.h>
9 #include <linux/module.h>
10 #include <linux/kernel.h>
11 #include <linux/errno.h>
12 #include <linux/types.h>
13 #include <linux/string.h>
14 #include <linux/delay.h>
15 #include <linux/locks.h>
16 #include <linux/sched.h>
17 #include <linux/malloc.h>
18 #include <linux/i2c-old.h>
20 #define REGPRINT(x) if (verbose) (x)
21 #define I2C_DEBUG(x) if (i2c_debug) (x)
24 static int verbose
= 0;
25 static int i2c_debug
= 0;
27 #if LINUX_VERSION_CODE >= 0x020117
28 MODULE_PARM(scan
,"i");
29 MODULE_PARM(verbose
,"i");
30 MODULE_PARM(i2c_debug
,"i");
33 /* ----------------------------------------------------------------------- */
35 static struct i2c_bus
*busses
[I2C_BUS_MAX
];
36 static struct i2c_driver
*drivers
[I2C_DRIVER_MAX
];
37 static int bus_count
= 0, driver_count
= 0;
39 #ifdef CONFIG_VIDEO_BT848
40 extern int i2c_tuner_init(void);
41 extern int msp3400c_init(void);
43 #ifdef CONFIG_VIDEO_BUZ
44 extern int saa7111_init(void);
45 extern int saa7185_init(void);
47 #ifdef CONFIG_VIDEO_LML33
48 extern int bt819_init(void);
49 extern int bt856_init(void);
54 printk(KERN_INFO
"i2c: initialized%s\n",
55 scan
? " (i2c bus scan enabled)" : "");
56 /* anything to do here ? */
57 #ifdef CONFIG_VIDEO_BT848
61 #ifdef CONFIG_VIDEO_BUZ
65 #ifdef CONFIG_VIDEO_LML33
72 /* ----------------------------------------------------------------------- */
74 static void i2c_attach_device(struct i2c_bus
*bus
, struct i2c_driver
*driver
)
76 struct i2c_device
*device
;
81 /* probe for device */
83 for (addr
= driver
->addr_l
; addr
<= driver
->addr_h
; addr
+= 2)
86 ack
= i2c_sendbyte(bus
,addr
,0);
96 for (i
= 0; i
< I2C_DEVICE_MAX
; i
++)
97 if (NULL
== driver
->devices
[i
])
99 if (I2C_DEVICE_MAX
== i
)
102 for (j
= 0; j
< I2C_DEVICE_MAX
; j
++)
103 if (NULL
== bus
->devices
[j
])
105 if (I2C_DEVICE_MAX
== j
)
108 if (NULL
== (device
= kmalloc(sizeof(struct i2c_device
),GFP_KERNEL
)))
111 device
->driver
= driver
;
116 if (driver
->attach(device
)!=0)
121 driver
->devices
[i
] = device
;
123 bus
->devices
[j
] = device
;
126 if (bus
->attach_inform
)
127 bus
->attach_inform(bus
,driver
->id
);
128 REGPRINT(printk("i2c: device attached: %s (addr=0x%02x, bus=%s, driver=%s)\n",device
->name
,addr
,bus
->name
,driver
->name
));
131 static void i2c_detach_device(struct i2c_device
*device
)
135 if (device
->bus
->detach_inform
)
136 device
->bus
->detach_inform(device
->bus
,device
->driver
->id
);
137 device
->driver
->detach(device
);
139 for (i
= 0; i
< I2C_DEVICE_MAX
; i
++)
140 if (device
== device
->driver
->devices
[i
])
142 if (I2C_DEVICE_MAX
== i
)
144 printk(KERN_WARNING
"i2c: detach_device #1: device not found: %s\n",
148 device
->driver
->devices
[i
] = NULL
;
149 device
->driver
->devcount
--;
151 for (i
= 0; i
< I2C_DEVICE_MAX
; i
++)
152 if (device
== device
->bus
->devices
[i
])
154 if (I2C_DEVICE_MAX
== i
)
156 printk(KERN_WARNING
"i2c: detach_device #2: device not found: %s\n",
160 device
->bus
->devices
[i
] = NULL
;
161 device
->bus
->devcount
--;
163 REGPRINT(printk("i2c: device detached: %s (addr=0x%02x, bus=%s, driver=%s)\n",device
->name
,device
->addr
,device
->bus
->name
,device
->driver
->name
));
167 /* ----------------------------------------------------------------------- */
169 int i2c_register_bus(struct i2c_bus
*bus
)
174 memset(bus
->devices
,0,sizeof(bus
->devices
));
177 for (i
= 0; i
< I2C_BUS_MAX
; i
++)
178 if (NULL
== busses
[i
])
180 if (I2C_BUS_MAX
== i
)
185 REGPRINT(printk("i2c: bus registered: %s\n",bus
->name
));
191 /* scan whole i2c bus */
193 for (i
= 0; i
< 256; i
+=2)
196 ack
= i2c_sendbyte(bus
,i
,0);
200 printk(KERN_INFO
"i2c: scanning bus %s: found device at addr=0x%02x\n",
207 /* probe available drivers */
208 for (i
= 0; i
< I2C_DRIVER_MAX
; i
++)
210 i2c_attach_device(bus
,drivers
[i
]);
214 int i2c_unregister_bus(struct i2c_bus
*bus
)
219 for (i
= 0; i
< I2C_DEVICE_MAX
; i
++)
221 i2c_detach_device(bus
->devices
[i
]);
223 for (i
= 0; i
< I2C_BUS_MAX
; i
++)
224 if (bus
== busses
[i
])
226 if (I2C_BUS_MAX
== i
)
228 printk(KERN_WARNING
"i2c: unregister_bus #1: bus not found: %s\n",
237 REGPRINT(printk("i2c: bus unregistered: %s\n",bus
->name
));
242 /* ----------------------------------------------------------------------- */
244 int i2c_register_driver(struct i2c_driver
*driver
)
248 memset(driver
->devices
,0,sizeof(driver
->devices
));
249 driver
->devcount
= 0;
251 for (i
= 0; i
< I2C_DRIVER_MAX
; i
++)
252 if (NULL
== drivers
[i
])
254 if (I2C_DRIVER_MAX
== i
)
262 REGPRINT(printk("i2c: driver registered: %s\n",driver
->name
));
264 /* Probe available busses */
265 for (i
= 0; i
< I2C_BUS_MAX
; i
++)
267 i2c_attach_device(busses
[i
],driver
);
272 int i2c_unregister_driver(struct i2c_driver
*driver
)
277 for (i
= 0; i
< I2C_DEVICE_MAX
; i
++)
278 if (driver
->devices
[i
])
279 i2c_detach_device(driver
->devices
[i
]);
281 for (i
= 0; i
< I2C_DRIVER_MAX
; i
++)
282 if (driver
== drivers
[i
])
284 if (I2C_DRIVER_MAX
== i
)
286 printk(KERN_WARNING
"i2c: unregister_driver: driver not found: %s\n",
295 REGPRINT(printk("i2c: driver unregistered: %s\n",driver
->name
));
300 /* ----------------------------------------------------------------------- */
302 int i2c_control_device(struct i2c_bus
*bus
, int id
,
303 unsigned int cmd
, void *arg
)
307 for (i
= 0; i
< I2C_DEVICE_MAX
; i
++)
308 if (bus
->devices
[i
] && bus
->devices
[i
]->driver
->id
== id
)
310 if (i
== I2C_DEVICE_MAX
)
312 if (NULL
== bus
->devices
[i
]->driver
->command
)
314 return bus
->devices
[i
]->driver
->command(bus
->devices
[i
],cmd
,arg
);
317 /* ----------------------------------------------------------------------- */
319 #define I2C_SET(bus,ctrl,data) (bus->i2c_setlines(bus,ctrl,data))
320 #define I2C_GET(bus) (bus->i2c_getdataline(bus))
322 void i2c_start(struct i2c_bus
*bus
)
328 I2C_DEBUG(printk("%s: < ",bus
->name
));
331 void i2c_stop(struct i2c_bus
*bus
)
336 I2C_DEBUG(printk(">\n"));
339 void i2c_one(struct i2c_bus
*bus
)
346 void i2c_zero(struct i2c_bus
*bus
)
353 int i2c_ack(struct i2c_bus
*bus
)
364 int i2c_sendbyte(struct i2c_bus
*bus
,unsigned char data
,int wait_for_ack
)
370 (data
&(1<<i
)) ? i2c_one(bus
) : i2c_zero(bus
);
372 udelay(wait_for_ack
);
374 I2C_DEBUG(printk("%02x%c ",(int)data
,ack
?'-':'+'));
378 unsigned char i2c_readbyte(struct i2c_bus
*bus
,int last
)
381 unsigned char data
=0;
391 last
? i2c_one(bus
) : i2c_zero(bus
);
392 I2C_DEBUG(printk("=%02x%c ",(int)data
,last
?'-':'+'));
396 /* ----------------------------------------------------------------------- */
398 int i2c_read(struct i2c_bus
*bus
, unsigned char addr
)
403 return bus
->i2c_read(bus
, addr
);
406 i2c_sendbyte(bus
,addr
,0);
407 ret
= i2c_readbyte(bus
,1);
412 int i2c_write(struct i2c_bus
*bus
, unsigned char addr
,
413 unsigned char data1
, unsigned char data2
, int both
)
418 return bus
->i2c_write(bus
, addr
, data1
, data2
, both
);
421 i2c_sendbyte(bus
,addr
,0);
422 ack
= i2c_sendbyte(bus
,data1
,0);
424 ack
= i2c_sendbyte(bus
,data2
,0);
426 return ack
? -1 : 0 ;
429 /* ----------------------------------------------------------------------- */
433 #if LINUX_VERSION_CODE >= 0x020100
434 EXPORT_SYMBOL(i2c_register_bus
);
435 EXPORT_SYMBOL(i2c_unregister_bus
);
436 EXPORT_SYMBOL(i2c_register_driver
);
437 EXPORT_SYMBOL(i2c_unregister_driver
);
438 EXPORT_SYMBOL(i2c_control_device
);
439 EXPORT_SYMBOL(i2c_start
);
440 EXPORT_SYMBOL(i2c_stop
);
441 EXPORT_SYMBOL(i2c_one
);
442 EXPORT_SYMBOL(i2c_zero
);
443 EXPORT_SYMBOL(i2c_ack
);
444 EXPORT_SYMBOL(i2c_sendbyte
);
445 EXPORT_SYMBOL(i2c_readbyte
);
446 EXPORT_SYMBOL(i2c_read
);
447 EXPORT_SYMBOL(i2c_write
);
450 int init_module(void)
455 void cleanup_module(void)