I2C update for 2.6.7-rc1
Subsystems (2)
PATCH 1/1 I2C update for 2.6.7-rc1
Hi,
Here are some i2c driver fixes for 2.6.7-rc1. There is also a new i2c chip driver in here. The majority of these patches have been in the past few -mm releases.
Please pull from: bk://kernel.bkbits.net/gregkh/linux/i2c-2.6
Individual patches will follow, sent to the sensors and linux-kernel lists.
thanks,
greg k-h
drivers/i2c/busses/Kconfig | 8 drivers/i2c/busses/i2c-ibm_iic.c | 48 +++- drivers/i2c/busses/i2c-parport.h | 14 + drivers/i2c/chips/Kconfig | 10 + drivers/i2c/chips/Makefile | 1 drivers/i2c/chips/eeprom.c | 5 drivers/i2c/chips/max1619.c | 378 +++++++++++++++++++++++++++++++++++++++ drivers/i2c/i2c-core.c | 21 +- 8 files changed, 457 insertions(+), 28 deletions(-)
-----
<faikuygur:tnn.net>:
o I2C: use idr_get_new to allocate a bus id in drivers/i2c/i2c-core.c
<fishor:gmx.net>:
o I2C: add max1619 driver
Eugene Surovegin:
o I2C PPC4xx IIC driver: 0-length transaction temporary fix
o I2C PPC4xx IIC driver: fix debug build with gcc3
o I2C PPC4xx IIC driver: Kconfig cleanup
o I2C PPC4xx IIC driver: upgrade to new OCP infrastructre
Jean Delvare:
o I2C: i2c-parport: support the ADM1031 evaluation board
o I2C: Incomplete AT24RF08 corruption prevention in i2c eeprom
PATCH 1/1 I2C update for 2.6.7-rc1
ChangeSet 1.1717.6.23, 2004/05/19 00:24:54-07:00, [email protected]
[PATCH] I2C: use idr_get_new to allocate a bus id in drivers/i2c/i2c-core.c
drivers/i2c/i2c-core.c | 21 +++++++++++++++++---- 1 files changed, 17 insertions(+), 4 deletions(-)
drivers/i2c/i2c-core.c +17 -4
@@ -28,6 +28,7 @@#include <linux/slab.h> #include <linux/i2c.h> #include <linux/init.h> +#include <linux/idr.h> #include <linux/seq_file.h> #include <asm/uaccess.h>
@@ -35,6 +36,7 @@static LIST_HEAD (adapters);static LIST_HEAD (drivers);static DECLARE_MUTEX (core_lists); +static DEFINE_IDR (i2c_adapter_idr);int i2c_device_probe (struct device *dev) {
@@ -113,13 +115,19 @@*/ int i2c_add_adapter (struct i2c_adapter *adap) { -static int nr =0 ; +int id, res =0 ;struct list_head *item;struct i2c_driver *driver;down (&core_lists); - adap->nr = nr++; +if (idr_pre_get (&i2c_adapter_idr,GFP_KERNEL ) ==0 ) { + res = -ENOMEM ; + goto out_unlock; + } + + id =idr_get_new (&i2c_adapter_idr,NULL ); + adap->nr = id &MAX_ID_MASK ;init_MUTEX (&adap->bus_lock);init_MUTEX (&adap->clist_lock);list_add_tail (&adap->list,&adapters);
@@ -151,10 +159,12 @@/* We ignore the return code; if it fails, too bad */ driver->attach_adapter (adap); } -up (&core_lists);dev_dbg (&adap->dev,"registered as adapter #%d\n" , adap->nr); -return 0 ; + + out_unlock: +up (&core_lists); +return res; }
@@ -207,6 +217,9 @@/* wait for sysfs to drop all references */ wait_for_completion (&adap->dev_released);wait_for_completion (&adap->class_dev_released); + +/* free dynamically allocated bus id */ +idr_remove (&i2c_adapter_idr, adap->nr);dev_dbg (&adap->dev,"adapter unregistered\n" );
ChangeSet 1.1717.6.24, 2004/05/19 00:25:14-07:00, [email protected]
[PATCH] I2C: Incomplete AT24RF08 corruption prevention in i2c eeprom
The AT24RF08 corruption prevention trick that is found in the i2c eeprom driver is not correct. The prevention is activated only conditionally, while it should be done all the time.
drivers/i2c/chips/eeprom.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/i2c/chips/eeprom.c +3 -2
@@ -203,11 +203,12 @@ new_client->driver = &eeprom_driver; new_client->flags =0 ; +/* prevent 24RF08 corruption */ +i2c_smbus_write_quick (new_client,0 ); +/* Now, we do the remaining detection. It is not there, unless you force the checksum to work out. */ if (checksum) { -/* prevent 24RF08 corruption */ -i2c_smbus_write_quick (new_client,0 ); cs =0 ;for (i =0 ; i <=0x3e ; i++) cs +=i2c_smbus_read_byte_data (new_client, i);
ChangeSet 1.1717.6.25, 2004/05/19 00:25:35-07:00, [email protected]
[PATCH] I2C PPC4xx IIC driver: upgrade to new OCP infrastructre
this patch changes IBM PPC4xx IIC driver to support new PPC OCP infrastructure recently added to 2.6 kernel.
drivers/i2c/busses/i2c-ibm_iic.c | 30 +++++++++++++++++------------- 1 files changed, 17 insertions(+), 13 deletions(-)
drivers/i2c/busses/i2c-ibm_iic.c +17 -13
@@ -3,7 +3,7 @@* * Support for the IIC peripheral on IBM PPC 4xx * -* Copyright (c) 2003 Zultys Technologies. +* Copyright (c) 2003, 2004 Zultys Technologies. * Eugene Surovegin <[email protected]> or <[email protected]> * * Based on original work by
@@ -45,7 +45,7 @@#include "i2c-ibm_iic.h" -#define DRIVER_VERSION "2.0" +#define DRIVER_VERSION "2.01"MODULE_DESCRIPTION ("IBM IIC driver v" DRIVER_VERSION );MODULE_LICENSE ("GPL" );
@@ -549,19 +549,24 @@struct ibm_iic_private * dev;struct i2c_adapter * adap; +struct ocp_func_iic_data * iic_data = ocp->def->additions;int ret; -bd_t * bd = (bd_t *)&__res; +if (!iic_data) +printk (KERN_WARNING "ibm-iic%d: missing additional data!\n" , + ocp->def->index); +if (!(dev =kmalloc (sizeof (*dev),GFP_KERNEL ))){ -printk (KERN_CRIT "ibm-iic: failed to allocate device data\n" ); +printk (KERN_CRIT "ibm-iic%d: failed to allocate device data\n" , + ocp->def->index);return -ENOMEM ; }memset (dev,0 ,sizeof (*dev)); - dev->idx = ocp->num; + dev->idx = ocp->def->index;ocp_set_drvdata (ocp, dev); -if (!(dev->vaddr =ioremap (ocp->paddr,sizeof (struct iic_regs )))){ +if (!(dev->vaddr =ioremap (ocp->def->paddr,sizeof (struct iic_regs )))){printk (KERN_CRIT "ibm-iic%d: failed to ioremap device registers\n" , dev->idx); ret = -ENXIO ;
@@ -570,7 +575,7 @@init_waitqueue_head (&dev->wq); - dev->irq = iic_force_poll ?-1 : ocp->irq; + dev->irq = iic_force_poll ?-1 : ocp->def->irq;if (dev->irq >=0 ){/* Disable interrupts until we finish intialization, assumes level-sensitive IRQ setup...
@@ -589,13 +594,12 @@ dev->idx);/* Board specific settings */ -BUG_ON (dev->idx >=sizeof (bd->bi_iic_fast) /sizeof (bd->bi_iic_fast[0 ])); - dev->fast_mode = iic_force_fast ?1 : bd->bi_iic_fast[dev->idx]; + dev->fast_mode = iic_force_fast ?1 : (iic_data ? iic_data->fast_mode :0 );/* clckdiv is the same for *all* IIC interfaces, * but I'd rather make a copy than introduce another global. --ebs */ - dev->clckdiv =iic_clckdiv (bd->bi_opb_busfreq); + dev->clckdiv =iic_clckdiv (ocp_sys_info.opb_bus_freq);DBG ("%d: clckdiv = %d\n" , dev->idx, dev->clckdiv);/* Initialize IIC interface */
@@ -664,7 +668,7 @@static struct ocp_device_id ibm_iic_ids[]__devinitdata = { - { .vendor =OCP_VENDOR_IBM , .device =OCP_FUNC_IIC }, + { .vendor =OCP_VENDOR_IBM , .function =OCP_FUNC_IIC }, { .vendor =OCP_VENDOR_INVALID } };
@@ -672,7 +676,7 @@static struct ocp_driver ibm_iic_driver = { - .name ="ocp_iic" , + .name ="iic" , .id_table = ibm_iic_ids, .probe = iic_probe, .remove =__devexit_p (iic_remove),
@@ -685,7 +689,7 @@static int __init iic_init (void ) {printk (KERN_INFO "IBM IIC driver v" DRIVER_VERSION "\n" ); -return ocp_module_init (&ibm_iic_driver); +return ocp_register_driver (&ibm_iic_driver); } static void __exit iic_exit(void)
ChangeSet 1.1717.6.26, 2004/05/19 00:25:54-07:00, [email protected]
[PATCH] I2C PPC4xx IIC driver: Kconfig cleanup
this patch renames Kconfig entry for PPC4xx IIC driver making it more clear and also adds a help text.
drivers/i2c/busses/Kconfig | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-)
drivers/i2c/busses/Kconfig +7 -1
@@ -118,8 +118,14 @@ will be called i2c-i810. config I2C_IBM_IIC - tristate "IBM IIC I2C" + tristate "IBM PPC 4xx on-chip I2C interface" depends on IBM_OCP && I2C + help + Say Y here if you want to use IIC peripheral found on + embedded IBM PPC 4xx based systems. + + This driver can also be built as a module. If so, the module + will be called i2c-ibm_iic. config I2C_IOP3XX tristate "Intel XScale IOP3xx on-chip I2C interface"
ChangeSet 1.1717.6.27, 2004/05/19 00:26:13-07:00, [email protected]
[PATCH] I2C PPC4xx IIC driver: fix debug build with gcc3
this patch fixes PPC4xx IIC driver debug mode build with gcc 3.x compiler. Noticed by Evgenij Polyakov.
drivers/i2c/busses/i2c-ibm_iic.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/i2c/busses/i2c-ibm_iic.c +4 -4
@@ -69,14 +69,14 @@#endif #if DBG_LEVEL >0 -# define DBG(x...) printk(KERN_DEBUG "ibm-iic" ##x) +# define DBG(f,x...) printk(KERN_DEBUG "ibm-iic" f, ##x)#else -# define DBG(x...) ((void)0) +# define DBG(f,x...) ((void)0)#endif #if DBG_LEVEL >1 -# define DBG2(x...) DBG( ##x ) +# define DBG2(f,x...) DBG(f, ##x)#else -# define DBG2(x...) ((void)0) +# define DBG2(f,x...) ((void)0)#endif #if DBG_LEVEL >2 static void dump_iic_regs (const char * header,struct ibm_iic_private * dev)
ChangeSet 1.1717.6.28, 2004/05/19 00:26:34-07:00, [email protected]
[PATCH] I2C PPC4xx IIC driver: 0-length transaction temporary fix
this patch adds temporary fix for 0-length requests (e.g. SMBUS_QUICK) to PPC4xx IIC driver. This i2c controller doesn't support such transactions and this patch just restores previous driver version behavior making SMBUS_QUICK-based bus scan at least partially usable. This is temporary kludge until correct bit-banging emulation is implemented.
drivers/i2c/busses/i2c-ibm_iic.c | 10 ++++++++++ 1 files changed, 10 insertions(+)
drivers/i2c/busses/i2c-ibm_iic.c +10 -0
@@ -455,6 +455,16 @@ }for (i =0 ; i < num; ++i){if (unlikely (msgs[i].len <=0 )){ +if (num ==1 && !msgs[0 ].len){ +/* Special case for I2C_SMBUS_QUICK emulation. +* Although this logic is FAR FROM PERFECT, this +* is what previous driver version did. +* IBM IIC doesn't support 0-length transactions +* (except bit-banging through IICx_DIRECTCNTL). +*/ +DBG ("%d: zero-length msg kludge\n" , dev->idx); +return 0 ; + }DBG ("%d: invalid len %d in msg[%d]\n" , dev->idx, msgs[i].len, i);return -EINVAL ;
ChangeSet 1.1717.6.29, 2004/05/28 13:47:51-07:00, [email protected]
[PATCH] I2C: i2c-parport: support the ADM1031 evaluation board
The following patch adds support for the ADM1030 and ADM1031 evaluation boards to the i2c-parport and i2c-parport-light drivers. They are almost compatible with the already supported ADM1025 and ADM1032 boards, except that the ADM1032 board needs some pins to be set high to draw its power, while the same pins power up heating resistors on the ADM1031 board. I considered it was a bit dangerous to do that by default, so I ended up with two different device definitions, one with powering pins set, and one with these pins cleared.
drivers/i2c/busses/i2c-parport.h | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-)
drivers/i2c/busses/i2c-parport.h +10 -4
@@ -67,13 +67,18 @@ .getsda = { 0x40, STAT, 1 }, .getscl = { 0x08, STAT, 1 }, }, - /* type 4: ADM1025 and ADM1032 evaluation boards */ + /* type 4: ADM1032 evaluation board */ + { + .setsda = { 0x02, DATA, 1 }, + .setscl = { 0x01, DATA, 1 }, + .getsda = { 0x10, STAT, 1 }, + .init = { 0xf0, DATA, 0 }, + }, + /* type 5: ADM1025, ADM1030 and ADM1031 evaluation boards */ { .setsda = { 0x02, DATA, 1 }, .setscl = { 0x01, DATA, 1 }, .getsda = { 0x10, STAT, 1 }, - .init = { 0xf0, DATA, 0 }, /* ADM1025 doesn't need this, - but it doesn't hurt */ }, };
@@ -85,4 +90,5 @@" 1 = home brew teletext adapter\n" " 2 = Velleman K8000 adapter\n" " 3 = ELV adapter\n" - " 4 = ADM1025 and ADM1032 evaluation boards\n"); +" 4 = ADM1032 evaluation board\n" + " 5 = ADM1025, ADM1030 and ADM1031 evaluation boards\n");
ChangeSet 1.1717.6.30, 2004/05/28 13:48:49-07:00, [email protected]
[PATCH] I2C: add max1619 driver
This is a driver for "Remote/Local Temperature Sensor with Dual-Alarm Outputs and SMBus Serial Interface" MAX1619. I found this chip an my Laptop SAMSUNG NV5000. Daryng I use Linux cooling didn't worked at all, naw with this driwer it's working. I hope this will be usefool for ather too.
I didn't hade any expiriens with programming, but i didn't wont to wait wann some body make it vor me. Jean halped me correrct any mysteiks wich i made. Thanks Jaen :)
drivers/i2c/chips/Kconfig | 10 + drivers/i2c/chips/Makefile | 1 drivers/i2c/chips/max1619.c | 378 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 389 insertions(+)
drivers/i2c/chips/Kconfig +10 -0
@@ -145,6 +145,16 @@ This driver can also be built as a module. If so, the module will be called lm90. +config SENSORS_MAX1619 + tristate "Maxim MAX1619 sensor chip" + depends on I2C && EXPERIMENTAL + select I2C_SENSOR + help + If you say yes here you get support for MAX1619 sensor chip. + + This driver can also be built as a module. If so, the module + will be called max1619. + config SENSORS_VIA686A tristate "VIA686A" depends on I2C && EXPERIMENTAL
drivers/i2c/chips/Makefile +1 -0
@@ -19,6 +19,7 @@ obj-$(CONFIG_SENSORS_LM83) += lm83.o obj-$(CONFIG_SENSORS_LM85) += lm85.o obj-$(CONFIG_SENSORS_LM90) += lm90.o +obj-$(CONFIG_SENSORS_MAX1619) += max1619.o obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o obj-$(CONFIG_SENSORS_RTC8564) += rtc8564.o
drivers/i2c/chips/max1619.c new file +378 -0
378 lines not on this page · raw message