Commit 91f7b5c4 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6

* 'i2c-for-linus' of git://jdelvare.pck.nerim.net/jdelvare-2.6:
  i2c/m41t00: Do not forget to write year
  i2c-mv64xxx: Fix random oops at boot
  i2c: Migration aids for i2c_adapter.dev removal
  i2c-pnx: Add entry to MAINTAINERS
  i2c-pnx: Fix interrupt handler, get rid of EARLY config option
parents af3e095a 81ffbc04
...@@ -226,6 +226,23 @@ Who: Jean Delvare <khali@linux-fr.org> ...@@ -226,6 +226,23 @@ Who: Jean Delvare <khali@linux-fr.org>
--------------------------- ---------------------------
What: i2c_adapter.dev
i2c_adapter.list
When: July 2007
Why: Superfluous, given i2c_adapter.class_dev:
* The "dev" was a stand-in for the physical device node that legacy
drivers would not have; but now it's almost always present. Any
remaining legacy drivers must upgrade (they now trigger warnings).
* The "list" duplicates class device children.
The delay in removing this is so upgraded lm_sensors and libsensors
can get deployed. (Removal causes minor changes in the sysfs layout,
notably the location of the adapter type name and parenting the i2c
client hardware directly from their controller.)
Who: Jean Delvare <khali@linux-fr.org>,
David Brownell <dbrownell@users.sourceforge.net>
---------------------------
What: IPv4 only connection tracking/NAT/helpers What: IPv4 only connection tracking/NAT/helpers
When: 2.6.22 When: 2.6.22
Why: The new layer 3 independant connection tracking replaces the old Why: The new layer 3 independant connection tracking replaces the old
......
...@@ -2579,6 +2579,12 @@ P: Adam Belay ...@@ -2579,6 +2579,12 @@ P: Adam Belay
M: ambx1@neo.rr.com M: ambx1@neo.rr.com
S: Maintained S: Maintained
PNXxxxx I2C DRIVER
P: Vitaly Wool
M: vitalywool@gmail.com
L: i2c@lm-sensors.org
S: Maintained
PPP PROTOCOL DRIVERS AND COMPRESSORS PPP PROTOCOL DRIVERS AND COMPRESSORS
P: Paul Mackerras P: Paul Mackerras
M: paulus@samba.org M: paulus@samba.org
......
...@@ -564,13 +564,4 @@ config I2C_PNX ...@@ -564,13 +564,4 @@ config I2C_PNX
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called i2c-pnx. will be called i2c-pnx.
config I2C_PNX_EARLY
bool "Early initialization for I2C on PNXxxxx"
depends on I2C_PNX=y
help
Under certain circumstances one may need to make sure I2C on PNXxxxx
is initialized earlier than some other driver that depends on it
(for instance, that might be USB in case of PNX4008). With this
option turned on you can guarantee that.
endmenu endmenu
...@@ -529,6 +529,8 @@ mv64xxx_i2c_probe(struct platform_device *pd) ...@@ -529,6 +529,8 @@ mv64xxx_i2c_probe(struct platform_device *pd)
platform_set_drvdata(pd, drv_data); platform_set_drvdata(pd, drv_data);
i2c_set_adapdata(&drv_data->adapter, drv_data); i2c_set_adapdata(&drv_data->adapter, drv_data);
mv64xxx_i2c_hw_init(drv_data);
if (request_irq(drv_data->irq, mv64xxx_i2c_intr, 0, if (request_irq(drv_data->irq, mv64xxx_i2c_intr, 0,
MV64XXX_I2C_CTLR_NAME, drv_data)) { MV64XXX_I2C_CTLR_NAME, drv_data)) {
dev_err(&drv_data->adapter.dev, dev_err(&drv_data->adapter.dev,
...@@ -542,8 +544,6 @@ mv64xxx_i2c_probe(struct platform_device *pd) ...@@ -542,8 +544,6 @@ mv64xxx_i2c_probe(struct platform_device *pd)
goto exit_free_irq; goto exit_free_irq;
} }
mv64xxx_i2c_hw_init(drv_data);
return 0; return 0;
exit_free_irq: exit_free_irq:
......
...@@ -305,8 +305,7 @@ static int i2c_pnx_master_rcv(struct i2c_adapter *adap) ...@@ -305,8 +305,7 @@ static int i2c_pnx_master_rcv(struct i2c_adapter *adap)
return 0; return 0;
} }
static irqreturn_t static irqreturn_t i2c_pnx_interrupt(int irq, void *dev_id)
i2c_pnx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{ {
u32 stat, ctl; u32 stat, ctl;
struct i2c_adapter *adap = dev_id; struct i2c_adapter *adap = dev_id;
...@@ -699,10 +698,6 @@ MODULE_AUTHOR("Vitaly Wool, Dennis Kovalev <source@mvista.com>"); ...@@ -699,10 +698,6 @@ MODULE_AUTHOR("Vitaly Wool, Dennis Kovalev <source@mvista.com>");
MODULE_DESCRIPTION("I2C driver for Philips IP3204-based I2C busses"); MODULE_DESCRIPTION("I2C driver for Philips IP3204-based I2C busses");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
#ifdef CONFIG_I2C_PNX_EARLY
/* We need to make sure I2C is initialized before USB */ /* We need to make sure I2C is initialized before USB */
subsys_initcall(i2c_adap_pnx_init); subsys_initcall(i2c_adap_pnx_init);
#else
mudule_init(i2c_adap_pnx_init);
#endif
module_exit(i2c_adap_pnx_exit); module_exit(i2c_adap_pnx_exit);
...@@ -209,6 +209,7 @@ m41t00_set(void *arg) ...@@ -209,6 +209,7 @@ m41t00_set(void *arg)
buf[m41t00_chip->hour] = (buf[m41t00_chip->hour] & ~0x3f) | (hour& 0x3f); buf[m41t00_chip->hour] = (buf[m41t00_chip->hour] & ~0x3f) | (hour& 0x3f);
buf[m41t00_chip->day] = (buf[m41t00_chip->day] & ~0x3f) | (day & 0x3f); buf[m41t00_chip->day] = (buf[m41t00_chip->day] & ~0x3f) | (day & 0x3f);
buf[m41t00_chip->mon] = (buf[m41t00_chip->mon] & ~0x1f) | (mon & 0x1f); buf[m41t00_chip->mon] = (buf[m41t00_chip->mon] & ~0x1f) | (mon & 0x1f);
buf[m41t00_chip->year] = year;
if (i2c_master_send(save_client, wbuf, 9) < 0) if (i2c_master_send(save_client, wbuf, 9) < 0)
dev_err(&save_client->dev, "m41t00_set: Write error\n"); dev_err(&save_client->dev, "m41t00_set: Write error\n");
......
...@@ -95,16 +95,32 @@ struct device_driver i2c_adapter_driver = { ...@@ -95,16 +95,32 @@ struct device_driver i2c_adapter_driver = {
.bus = &i2c_bus_type, .bus = &i2c_bus_type,
}; };
/* ------------------------------------------------------------------------- */
/* I2C bus adapters -- one roots each I2C or SMBUS segment */
static void i2c_adapter_class_dev_release(struct class_device *dev) static void i2c_adapter_class_dev_release(struct class_device *dev)
{ {
struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev); struct i2c_adapter *adap = class_dev_to_i2c_adapter(dev);
complete(&adap->class_dev_released); complete(&adap->class_dev_released);
} }
static ssize_t i2c_adapter_show_name(struct class_device *cdev, char *buf)
{
struct i2c_adapter *adap = class_dev_to_i2c_adapter(cdev);
return sprintf(buf, "%s\n", adap->name);
}
static struct class_device_attribute i2c_adapter_attrs[] = {
__ATTR(name, S_IRUGO, i2c_adapter_show_name, NULL),
{ },
};
struct class i2c_adapter_class = { struct class i2c_adapter_class = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.name = "i2c-adapter", .name = "i2c-adapter",
.release = &i2c_adapter_class_dev_release, .class_dev_attrs = i2c_adapter_attrs,
.release = &i2c_adapter_class_dev_release,
}; };
static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf) static ssize_t show_adapter_name(struct device *dev, struct device_attribute *attr, char *buf)
...@@ -175,8 +191,12 @@ int i2c_add_adapter(struct i2c_adapter *adap) ...@@ -175,8 +191,12 @@ int i2c_add_adapter(struct i2c_adapter *adap)
* If the parent pointer is not set up, * If the parent pointer is not set up,
* we add this adapter to the host bus. * we add this adapter to the host bus.
*/ */
if (adap->dev.parent == NULL) if (adap->dev.parent == NULL) {
adap->dev.parent = &platform_bus; adap->dev.parent = &platform_bus;
printk(KERN_WARNING "**WARNING** I2C adapter driver [%s] "
"forgot to specify physical device; fix it!\n",
adap->name);
}
sprintf(adap->dev.bus_id, "i2c-%d", adap->nr); sprintf(adap->dev.bus_id, "i2c-%d", adap->nr);
adap->dev.driver = &i2c_adapter_driver; adap->dev.driver = &i2c_adapter_driver;
adap->dev.release = &i2c_adapter_dev_release; adap->dev.release = &i2c_adapter_dev_release;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment