Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / i2c / busses / i2c-ixp2000.c
index 21cd54d..cd6f45d 100644 (file)
  * 'enabled' to drive the GPIOs.
  */
 
-#include <linux/config.h>
-#ifdef CONFIG_I2C_DEBUG_BUS
-#define DEBUG  1
-#endif
-
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
 
-#include <asm/hardware.h>      /* Pick up IXP42000-specific bits */
+#include <asm/hardware.h>      /* Pick up IXP2000-specific bits */
+#include <asm/arch/gpio.h>
 
 static inline int ixp2000_scl_pin(void *data)
 {
@@ -88,12 +84,11 @@ struct ixp2000_i2c_data {
        struct i2c_algo_bit_data algo_data;
 };
 
-static int ixp2000_i2c_remove(struct device *dev)
+static int ixp2000_i2c_remove(struct platform_device *plat_dev)
 {
-       struct platform_device *plat_dev = to_platform_device(dev);
-       struct ixp2000_i2c_data *drv_data = dev_get_drvdata(&plat_dev->dev);
+       struct ixp2000_i2c_data *drv_data = platform_get_drvdata(plat_dev);
 
-       dev_set_drvdata(&plat_dev->dev, NULL);
+       platform_set_drvdata(plat_dev, NULL);
 
        i2c_bit_del_bus(&drv_data->adapter);
 
@@ -102,17 +97,15 @@ static int ixp2000_i2c_remove(struct device *dev)
        return 0;
 }
 
-static int ixp2000_i2c_probe(struct device *dev)
+static int ixp2000_i2c_probe(struct platform_device *plat_dev)
 {
        int err;
-       struct platform_device *plat_dev = to_platform_device(dev);
        struct ixp2000_i2c_pins *gpio = plat_dev->dev.platform_data;
        struct ixp2000_i2c_data *drv_data = 
-               kmalloc(sizeof(struct ixp2000_i2c_data), GFP_KERNEL);
+               kzalloc(sizeof(struct ixp2000_i2c_data), GFP_KERNEL);
 
        if (!drv_data)
                return -ENOMEM;
-       memzero(drv_data, sizeof(*drv_data));
        drv_data->gpio_pins = gpio;
 
        drv_data->algo_data.data = gpio;
@@ -125,6 +118,8 @@ static int ixp2000_i2c_probe(struct device *dev)
        drv_data->algo_data.timeout = 100;
 
        drv_data->adapter.id = I2C_HW_B_IXP2000,
+       strlcpy(drv_data->adapter.name, plat_dev->dev.driver->name,
+               I2C_NAME_SIZE);
        drv_data->adapter.algo_data = &drv_data->algo_data,
 
        drv_data->adapter.dev.parent = &plat_dev->dev;
@@ -135,31 +130,33 @@ static int ixp2000_i2c_probe(struct device *dev)
        gpio_line_set(gpio->sda_pin, 0);
 
        if ((err = i2c_bit_add_bus(&drv_data->adapter)) != 0) {
-               dev_err(dev, "Could not install, error %d\n", err);
+               dev_err(&plat_dev->dev, "Could not install, error %d\n", err);
                kfree(drv_data);
                return err;
        } 
 
-       dev_set_drvdata(&plat_dev->dev, drv_data);
+       platform_set_drvdata(plat_dev, drv_data);
 
        return 0;
 }
 
-static struct device_driver ixp2000_i2c_driver = {
-       .name           = "IXP2000-I2C",
-       .bus            = &platform_bus_type,
+static struct platform_driver ixp2000_i2c_driver = {
        .probe          = ixp2000_i2c_probe,
        .remove         = ixp2000_i2c_remove,
+       .driver         = {
+               .name   = "IXP2000-I2C",
+               .owner  = THIS_MODULE,
+       },
 };
 
 static int __init ixp2000_i2c_init(void)
 {
-       return driver_register(&ixp2000_i2c_driver);
+       return platform_driver_register(&ixp2000_i2c_driver);
 }
 
 static void __exit ixp2000_i2c_exit(void)
 {
-       driver_unregister(&ixp2000_i2c_driver);
+       platform_driver_unregister(&ixp2000_i2c_driver);
 }
 
 module_init(ixp2000_i2c_init);