fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / i2c / busses / i2c-powermac.c
index df786eb..648d555 100644 (file)
@@ -20,7 +20,6 @@
 
 */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
@@ -149,8 +148,6 @@ static int i2c_powermac_master_xfer(        struct i2c_adapter *adap,
        int                     read;
        int                     addrdir;
 
-       if (num != 1)
-               return -EINVAL;
        if (msgs->flags & I2C_M_TEN)
                return -EINVAL;
        read = (msgs->flags & I2C_M_RD) != 0;
@@ -167,7 +164,7 @@ static int i2c_powermac_master_xfer(        struct i2c_adapter *adap,
        rc = pmac_i2c_xfer(bus, addrdir, 0, 0, msgs->buf, msgs->len);
  bail:
        pmac_i2c_close(bus);
-       return rc < 0 ? rc : msgs->len;
+       return rc < 0 ? rc : 1;
 }
 
 static u32 i2c_powermac_func(struct i2c_adapter * adapter)
@@ -178,16 +175,16 @@ static u32 i2c_powermac_func(struct i2c_adapter * adapter)
 }
 
 /* For now, we only handle smbus */
-static struct i2c_algorithm i2c_powermac_algorithm = {
+static const struct i2c_algorithm i2c_powermac_algorithm = {
        .smbus_xfer     = i2c_powermac_smbus_xfer,
        .master_xfer    = i2c_powermac_master_xfer,
        .functionality  = i2c_powermac_func,
 };
 
 
-static int i2c_powermac_remove(struct device *dev)
+static int i2c_powermac_remove(struct platform_device *dev)
 {
-       struct i2c_adapter      *adapter = dev_get_drvdata(dev);
+       struct i2c_adapter      *adapter = platform_get_drvdata(dev);
        struct pmac_i2c_bus     *bus = i2c_get_adapdata(adapter);
        int                     rc;
 
@@ -198,19 +195,20 @@ static int i2c_powermac_remove(struct device *dev)
        if (rc)
                printk("i2c-powermac.c: Failed to remove bus %s !\n",
                       adapter->name);
-       dev_set_drvdata(dev, NULL);
+       platform_set_drvdata(dev, NULL);
        kfree(adapter);
 
        return 0;
 }
 
 
-static int i2c_powermac_probe(struct device *dev)
+static int __devexit i2c_powermac_probe(struct platform_device *dev)
 {
-       struct pmac_i2c_bus *bus = dev->platform_data;
+       struct pmac_i2c_bus *bus = dev->dev.platform_data;
        struct device_node *parent = NULL;
        struct i2c_adapter *adapter;
-       char name[32], *basename;
+       char name[32];
+       const char *basename;
        int rc;
 
        if (bus == NULL)
@@ -248,11 +246,11 @@ static int i2c_powermac_probe(struct device *dev)
                printk(KERN_ERR "i2c-powermac: can't allocate inteface !\n");
                return -ENOMEM;
        }
-       dev_set_drvdata(dev, adapter);
+       platform_set_drvdata(dev, adapter);
        strcpy(adapter->name, name);
        adapter->algo = &i2c_powermac_algorithm;
        i2c_set_adapdata(adapter, bus);
-       adapter->dev.parent = dev;
+       adapter->dev.parent = &dev->dev;
        pmac_i2c_attach_adapter(bus, adapter);
        rc = i2c_add_adapter(adapter);
        if (rc) {
@@ -267,23 +265,25 @@ static int i2c_powermac_probe(struct device *dev)
 }
 
 
-static struct device_driver i2c_powermac_driver = {
-       .name = "i2c-powermac",
-       .bus = &platform_bus_type,
+static struct platform_driver i2c_powermac_driver = {
        .probe = i2c_powermac_probe,
-       .remove = i2c_powermac_remove,
+       .remove = __devexit_p(i2c_powermac_remove),
+       .driver = {
+               .name = "i2c-powermac",
+               .bus = &platform_bus_type,
+       },
 };
 
 static int __init i2c_powermac_init(void)
 {
-       driver_register(&i2c_powermac_driver);
+       platform_driver_register(&i2c_powermac_driver);
        return 0;
 }
 
 
 static void __exit i2c_powermac_cleanup(void)
 {
-       driver_unregister(&i2c_powermac_driver);
+       platform_driver_unregister(&i2c_powermac_driver);
 }
 
 module_init(i2c_powermac_init);