diff options
Diffstat (limited to 'packages/linux/linux-2.6.22+2.6.23-rc5/ts72xx/ep93xx-i2c-bus.diff')
-rw-r--r-- | packages/linux/linux-2.6.22+2.6.23-rc5/ts72xx/ep93xx-i2c-bus.diff | 220 |
1 files changed, 0 insertions, 220 deletions
diff --git a/packages/linux/linux-2.6.22+2.6.23-rc5/ts72xx/ep93xx-i2c-bus.diff b/packages/linux/linux-2.6.22+2.6.23-rc5/ts72xx/ep93xx-i2c-bus.diff deleted file mode 100644 index efdbf42a45..0000000000 --- a/packages/linux/linux-2.6.22+2.6.23-rc5/ts72xx/ep93xx-i2c-bus.diff +++ /dev/null @@ -1,220 +0,0 @@ - -I2C bus driver using ep93xx GPIOs. - -Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org> - -Index: linux-2.6.23-rc5/drivers/i2c/busses/Kconfig -=================================================================== ---- linux-2.6.23-rc5.orig/drivers/i2c/busses/Kconfig 2007-09-04 02:25:36.000000000 +0200 -+++ linux-2.6.23-rc5/drivers/i2c/busses/Kconfig 2007-09-04 02:26:20.000000000 +0200 -@@ -654,4 +654,16 @@ - This driver can also be built as module. If so, the module - will be called i2c-pmcmsp. - -+config I2C_EP93XX -+ tristate "Cirrus Logic EP93XX GPIO-based I2C interface" -+ depends on I2C && ARCH_EP93XX -+ select I2C_ALGOBIT -+ help -+ Say Y here if you have an Cirrus Logic EP93XX based -+ system and are using GPIO lines for an I2C bus. -+ -+ This support is also available as a module. If so, the module -+ will be called i2c-ep93xx. -+ -+ - endmenu -Index: linux-2.6.23-rc5/drivers/i2c/busses/Makefile -=================================================================== ---- linux-2.6.23-rc5.orig/drivers/i2c/busses/Makefile 2007-09-04 02:25:36.000000000 +0200 -+++ linux-2.6.23-rc5/drivers/i2c/busses/Makefile 2007-09-04 02:26:20.000000000 +0200 -@@ -52,6 +52,7 @@ - obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o - obj-$(CONFIG_SCx200_ACB) += scx200_acb.o - obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o -+obj-$(CONFIG_I2C_EP93XX) += i2c-ep93xx.o - - ifeq ($(CONFIG_I2C_DEBUG_BUS),y) - EXTRA_CFLAGS += -DDEBUG -Index: linux-2.6.23-rc5/drivers/i2c/busses/i2c-ep93xx.c -=================================================================== ---- /dev/null 1970-01-01 00:00:00.000000000 +0000 -+++ linux-2.6.23-rc5/drivers/i2c/busses/i2c-ep93xx.c 2007-09-04 02:26:20.000000000 +0200 -@@ -0,0 +1,159 @@ -+/* -+ * EP93XX I2C bus driver. -+ * Copyright (C) 2007 Lennert Buytenhek <buytenh@wantstofly.org> -+ * -+ * An I2C bus driver for the Cirrus Logic EP93xx SoC. -+ * -+ * Based on an earlier version by Alessandro Zummo. -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/platform_device.h> -+#include <linux/module.h> -+#include <linux/i2c.h> -+#include <linux/i2c-algo-bit.h> -+#include <asm/hardware.h> -+#include <asm/arch/gpio.h> -+ -+struct ep93xx_i2c_priv { -+ struct ep93xx_i2c_data *data; -+ struct i2c_adapter adapter; -+ struct i2c_algo_bit_data algo_data; -+ int sda; -+ int scl; -+}; -+ -+ -+static void ep93xx_bit_setsda(void *cookie, int val) -+{ -+ struct ep93xx_i2c_priv *priv = cookie; -+ -+ if (val) { -+ gpio_line_config(priv->data->sda_pin, GPIO_IN); -+ if (priv->scl && !priv->sda && priv->data->stop != NULL) -+ priv->data->stop(priv->data->cookie); -+ priv->sda = 1; -+ } else { -+ if (priv->scl && priv->sda && priv->data->start != NULL) -+ priv->data->start(priv->data->cookie); -+ gpio_line_config(priv->data->sda_pin, GPIO_OUT); -+ gpio_line_set(priv->data->sda_pin, 0); -+ priv->sda = 0; -+ } -+} -+ -+static void ep93xx_bit_setscl(void *cookie, int val) -+{ -+ struct ep93xx_i2c_priv *priv = cookie; -+ -+ if (val) { -+ gpio_line_config(priv->data->scl_pin, GPIO_IN); -+ priv->scl = 1; -+ } else { -+ gpio_line_config(priv->data->scl_pin, GPIO_OUT); -+ gpio_line_set(priv->data->scl_pin, 0); -+ priv->scl = 0; -+ } -+} -+ -+static int ep93xx_bit_getsda(void *cookie) -+{ -+ struct ep93xx_i2c_priv *priv = cookie; -+ -+ if (priv->sda == 0) -+ BUG(); -+ -+ return gpio_line_get(priv->data->sda_pin); -+} -+ -+static int ep93xx_bit_getscl(void *cookie) -+{ -+ struct ep93xx_i2c_priv *priv = cookie; -+ -+ if (priv->scl == 0) -+ BUG(); -+ -+ return gpio_line_get(priv->data->scl_pin); -+} -+ -+ -+static int ep93xx_i2c_probe(struct platform_device *pdev) -+{ -+ struct ep93xx_i2c_priv *priv; -+ int err; -+ -+ priv = kzalloc(sizeof(struct ep93xx_i2c_priv), GFP_KERNEL); -+ if (priv == NULL) -+ return -ENOMEM; -+ -+ priv->data = pdev->dev.platform_data; -+ -+ strlcpy(priv->adapter.name, pdev->dev.driver->name, I2C_NAME_SIZE); -+ priv->adapter.algo_data = &priv->algo_data; -+ priv->adapter.class = I2C_CLASS_ALL; -+ priv->adapter.dev.parent = &pdev->dev; -+ -+ priv->algo_data.data = priv; -+ priv->algo_data.setsda = ep93xx_bit_setsda; -+ priv->algo_data.setscl = ep93xx_bit_setscl; -+ priv->algo_data.getsda = ep93xx_bit_getsda; -+ priv->algo_data.getscl = ep93xx_bit_getscl; -+ priv->algo_data.udelay = 10; -+ priv->algo_data.timeout = 100; -+ -+ priv->sda = 1; -+ gpio_line_config(priv->data->sda_pin, GPIO_IN); -+ -+ priv->scl = 1; -+ gpio_line_config(priv->data->scl_pin, GPIO_IN); -+ -+ err = i2c_bit_add_bus(&priv->adapter); -+ if (err) { -+ printk(KERN_ERR "ERROR: Could not install %s\n", -+ pdev->dev.bus_id); -+ kfree(priv); -+ return err; -+ } -+ -+ platform_set_drvdata(pdev, priv); -+ -+ return 0; -+} -+ -+static int ep93xx_i2c_remove(struct platform_device *pdev) -+{ -+ struct ep93xx_i2c_priv *priv; -+ -+ priv = platform_get_drvdata(pdev); -+ i2c_del_adapter(&priv->adapter); -+ platform_set_drvdata(pdev, NULL); -+ kfree(priv); -+ -+ return 0; -+} -+ -+static struct platform_driver ep93xx_i2c_driver = { -+ .probe = ep93xx_i2c_probe, -+ .remove = ep93xx_i2c_remove, -+ .driver = { -+ .name = "ep93xx-i2c", -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init ep93xx_i2c_init(void) -+{ -+ return platform_driver_register(&ep93xx_i2c_driver); -+} -+ -+static void __exit ep93xx_i2c_exit(void) -+{ -+ platform_driver_unregister(&ep93xx_i2c_driver); -+} -+ -+module_init(ep93xx_i2c_init); -+module_exit(ep93xx_i2c_exit); -+ -+MODULE_AUTHOR("Lennert Buytenhek <buytenh@wantstofly.org>"); -+MODULE_DESCRIPTION("GPIO-based I2C adapter for EP93XX systems"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.23-rc5/include/asm-arm/arch-ep93xx/platform.h -=================================================================== ---- linux-2.6.23-rc5.orig/include/asm-arm/arch-ep93xx/platform.h 2007-09-04 02:25:36.000000000 +0200 -+++ linux-2.6.23-rc5/include/asm-arm/arch-ep93xx/platform.h 2007-09-04 02:28:19.000000000 +0200 -@@ -16,5 +16,13 @@ - unsigned char phy_id; - }; - -+struct ep93xx_i2c_data { -+ int sda_pin; -+ int scl_pin; -+ void *cookie; -+ void (*start)(void *); -+ void (*stop)(void *); -+}; -+ - - #endif |