#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
+#include <linux/i2c-gpio.h>
#include "devices.h"
#include "../../../drivers/input/touchscreen/xpt2046_cbn_ts.h"
*****************************************************************************************/
static int rk29_i2c0_io_init(void)
{
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_I2C0_SCL);
rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_I2C0_SDA);
+#else
+ rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_GPIO2B7);
+ rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_GPIO2B6);
+#endif
return 0;
}
static int rk29_i2c1_io_init(void)
{
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_I2C1_SCL);
rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_I2C1_SDA);
+#else
+ rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_GPIO1A7);
+ rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_GPIO1A6);
+#endif
return 0;
}
static int rk29_i2c2_io_init(void)
{
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_I2C2_SCL);
rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_I2C2_SDA);
+#else
+ rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_GPIO5D4);
+ rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_GPIO5D3);
+#endif
return 0;
}
static int rk29_i2c3_io_init(void)
{
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_I2C3_SCL);
rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_I2C3_SDA);
+#else
+ rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_GPIO2B5);
+ rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_GPIO2B4);
+#endif
return 0;
}
-
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
struct rk29_i2c_platform_data default_i2c0_data = {
.bus_num = 0,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c0_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c0_data = {
+ .sda_pin = RK29_PIN2_PB6,
+ .scl_pin = RK29_PIN2_PB7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 0,
+ .io_init = rk29_i2c0_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
struct rk29_i2c_platform_data default_i2c1_data = {
.bus_num = 1,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c1_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c1_data = {
+ .sda_pin = RK29_PIN1_PA6,
+ .scl_pin = RK29_PIN1_PA7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 1,
+ .io_init = rk29_i2c1_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
struct rk29_i2c_platform_data default_i2c2_data = {
.bus_num = 2,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c2_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c2_data = {
+ .sda_pin = RK29_PIN5_PD3,
+ .scl_pin = RK29_PIN5_PD4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 2,
+ .io_init = rk29_i2c2_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
struct rk29_i2c_platform_data default_i2c3_data = {
.bus_num = 3,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c3_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c3_data = {
+ .sda_pin = RK29_PIN5_PB5,
+ .scl_pin = RK29_PIN5_PB4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 3,
+ .io_init = rk29_i2c3_io_init,
+};
+#endif
#ifdef CONFIG_I2C0_RK29
static struct i2c_board_info __initdata board_i2c0_devices[] = {
#if defined (CONFIG_RK1000_CONTROL)
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
+#include <linux/i2c-gpio.h>
#include "devices.h"
*****************************************************************************************/
static int rk29_i2c0_io_init(void)
{
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_I2C0_SCL);
rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_I2C0_SDA);
+#else
+ rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_GPIO2B7);
+ rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_GPIO2B6);
+#endif
return 0;
}
static int rk29_i2c1_io_init(void)
{
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_I2C1_SCL);
rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_I2C1_SDA);
+#else
+ rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_GPIO1A7);
+ rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_GPIO1A6);
+#endif
return 0;
}
static int rk29_i2c2_io_init(void)
{
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_I2C2_SCL);
rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_I2C2_SDA);
+#else
+ rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_GPIO5D4);
+ rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_GPIO5D3);
+#endif
return 0;
}
static int rk29_i2c3_io_init(void)
{
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_I2C3_SCL);
rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_I2C3_SDA);
+#else
+ rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_GPIO2B5);
+ rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_GPIO2B4);
+#endif
return 0;
}
-
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
struct rk29_i2c_platform_data default_i2c0_data = {
.bus_num = 0,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c0_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c0_data = {
+ .sda_pin = RK29_PIN2_PB6,
+ .scl_pin = RK29_PIN2_PB7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 0,
+ .io_init = rk29_i2c0_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
struct rk29_i2c_platform_data default_i2c1_data = {
.bus_num = 1,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c1_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c1_data = {
+ .sda_pin = RK29_PIN1_PA6,
+ .scl_pin = RK29_PIN1_PA7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 1,
+ .io_init = rk29_i2c1_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
struct rk29_i2c_platform_data default_i2c2_data = {
.bus_num = 2,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c2_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c2_data = {
+ .sda_pin = RK29_PIN5_PD3,
+ .scl_pin = RK29_PIN5_PD4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 2,
+ .io_init = rk29_i2c2_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
struct rk29_i2c_platform_data default_i2c3_data = {
.bus_num = 3,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c3_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c3_data = {
+ .sda_pin = RK29_PIN5_PB5,
+ .scl_pin = RK29_PIN5_PB4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 3,
+ .io_init = rk29_i2c3_io_init,
+};
+#endif
#ifdef CONFIG_I2C0_RK29
static struct i2c_board_info __initdata board_i2c0_devices[] = {
#if defined (CONFIG_RK1000_CONTROL)
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
+#include <linux/i2c-gpio.h>
#include "devices.h"
#if defined(CONFIG_MU509)
*****************************************************************************************/
static int rk29_i2c0_io_init(void)
{
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_I2C0_SCL);
rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_I2C0_SDA);
+#else
+ rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_GPIO2B7);
+ rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_GPIO2B6);
+#endif
return 0;
}
static int rk29_i2c1_io_init(void)
{
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_I2C1_SCL);
rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_I2C1_SDA);
+#else
+ rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_GPIO1A7);
+ rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_GPIO1A6);
+#endif
return 0;
}
static int rk29_i2c2_io_init(void)
{
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_I2C2_SCL);
rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_I2C2_SDA);
+#else
+ rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_GPIO5D4);
+ rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_GPIO5D3);
+#endif
return 0;
}
static int rk29_i2c3_io_init(void)
{
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_I2C3_SCL);
rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_I2C3_SDA);
+#else
+ rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_GPIO2B5);
+ rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_GPIO2B4);
+#endif
return 0;
}
-
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
struct rk29_i2c_platform_data default_i2c0_data = {
.bus_num = 0,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c0_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c0_data = {
+ .sda_pin = RK29_PIN2_PB6,
+ .scl_pin = RK29_PIN2_PB7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 0,
+ .io_init = rk29_i2c0_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
struct rk29_i2c_platform_data default_i2c1_data = {
.bus_num = 1,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c1_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c1_data = {
+ .sda_pin = RK29_PIN1_PA6,
+ .scl_pin = RK29_PIN1_PA7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 1,
+ .io_init = rk29_i2c1_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
struct rk29_i2c_platform_data default_i2c2_data = {
.bus_num = 2,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c2_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c2_data = {
+ .sda_pin = RK29_PIN5_PD3,
+ .scl_pin = RK29_PIN5_PD4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 2,
+ .io_init = rk29_i2c2_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
struct rk29_i2c_platform_data default_i2c3_data = {
.bus_num = 3,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c3_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c3_data = {
+ .sda_pin = RK29_PIN5_PB5,
+ .scl_pin = RK29_PIN5_PB4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 3,
+ .io_init = rk29_i2c3_io_init,
+};
+#endif
#ifdef CONFIG_I2C0_RK29
static struct i2c_board_info __initdata board_i2c0_devices[] = {
#if defined (CONFIG_RK1000_CONTROL)
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
+#include <linux/i2c-gpio.h>
#include "devices.h"
#include "../../../drivers/input/touchscreen/xpt2046_cbn_ts.h"
*****************************************************************************************/
static int rk29_i2c0_io_init(void)
{
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_I2C0_SCL);
rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_I2C0_SDA);
+#else
+ rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_GPIO2B7);
+ rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_GPIO2B6);
+#endif
return 0;
}
static int rk29_i2c1_io_init(void)
{
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_I2C1_SCL);
rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_I2C1_SDA);
+#else
+ rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_GPIO1A7);
+ rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_GPIO1A6);
+#endif
return 0;
}
static int rk29_i2c2_io_init(void)
{
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_I2C2_SCL);
rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_I2C2_SDA);
+#else
+ rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_GPIO5D4);
+ rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_GPIO5D3);
+#endif
return 0;
}
static int rk29_i2c3_io_init(void)
{
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_I2C3_SCL);
rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_I2C3_SDA);
+#else
+ rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_GPIO2B5);
+ rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_GPIO2B4);
+#endif
return 0;
}
-
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
struct rk29_i2c_platform_data default_i2c0_data = {
.bus_num = 0,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c0_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c0_data = {
+ .sda_pin = RK29_PIN2_PB6,
+ .scl_pin = RK29_PIN2_PB7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 0,
+ .io_init = rk29_i2c0_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
struct rk29_i2c_platform_data default_i2c1_data = {
.bus_num = 1,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c1_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c1_data = {
+ .sda_pin = RK29_PIN1_PA6,
+ .scl_pin = RK29_PIN1_PA7,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 1,
+ .io_init = rk29_i2c1_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
struct rk29_i2c_platform_data default_i2c2_data = {
.bus_num = 2,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c2_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c2_data = {
+ .sda_pin = RK29_PIN5_PD3,
+ .scl_pin = RK29_PIN5_PD4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 2,
+ .io_init = rk29_i2c2_io_init,
+};
+#endif
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
struct rk29_i2c_platform_data default_i2c3_data = {
.bus_num = 3,
.flags = 0,
.mode = I2C_MODE_IRQ,
.io_init = rk29_i2c3_io_init,
};
-
+#else
+struct i2c_gpio_platform_data default_i2c3_data = {
+ .sda_pin = RK29_PIN5_PB5,
+ .scl_pin = RK29_PIN5_PB4,
+ .udelay = 5, // clk = 500/udelay = 100Khz
+ .timeout = 100,//msecs_to_jiffies(200),
+ .bus_num = 3,
+ .io_init = rk29_i2c3_io_init,
+};
+#endif
#ifdef CONFIG_I2C0_RK29
static struct i2c_board_info __initdata board_i2c0_devices[] = {
#if defined (CONFIG_RK1000_CONTROL)
#endif
#ifdef CONFIG_I2C_RK29
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
static struct resource resources_i2c0[] = {
{
.start = IRQ_I2C0,
.flags = IORESOURCE_MEM,
},
};
+#endif
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
static struct resource resources_i2c1[] = {
{
.start = IRQ_I2C1,
.flags = IORESOURCE_MEM,
},
};
+#endif
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
static struct resource resources_i2c2[] = {
{
.start = IRQ_I2C2,
.flags = IORESOURCE_MEM,
},
};
+#endif
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
static struct resource resources_i2c3[] = {
{
.start = IRQ_I2C3,
.flags = IORESOURCE_MEM,
},
};
-
+#endif
struct platform_device rk29_device_i2c0 = {
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
.name = "rk29_i2c",
.id = 0,
.num_resources = ARRAY_SIZE(resources_i2c0),
.dev = {
.platform_data = &default_i2c0_data,
},
+#else
+ .name = "i2c-gpio",
+ .id = 0,
+ .dev = {
+ .platform_data = &default_i2c0_data,
+ },
+#endif
};
struct platform_device rk29_device_i2c1 = {
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
.name = "rk29_i2c",
.id = 1,
.num_resources = ARRAY_SIZE(resources_i2c1),
.dev = {
.platform_data = &default_i2c1_data,
},
+#else
+ .name = "i2c-gpio",
+ .id = 1,
+ .dev = {
+ .platform_data = &default_i2c1_data,
+ },
+#endif
};
struct platform_device rk29_device_i2c2 = {
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
.name = "rk29_i2c",
.id = 2,
.num_resources = ARRAY_SIZE(resources_i2c2),
.dev = {
.platform_data = &default_i2c2_data,
},
+#else
+ .name = "i2c-gpio",
+ .id = 2,
+ .dev = {
+ .platform_data = &default_i2c2_data,
+ },
+#endif
};
struct platform_device rk29_device_i2c3 = {
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
.name = "rk29_i2c",
.id = 3,
.num_resources = ARRAY_SIZE(resources_i2c3),
.dev = {
.platform_data = &default_i2c3_data,
},
+#else
+ .name = "i2c-gpio",
+ .id = 3,
+ .dev = {
+ .platform_data = &default_i2c3_data,
+ },
+#endif
};
#endif
#define __ARCH_ARM_MACH_RK29_DEVICES_H
extern struct rk29_nand_platform_data rk29_nand_data;
-
+#ifdef CONFIG_RK29_I2C0_CONTROLLER
extern struct rk29_i2c_platform_data default_i2c0_data;
+#else
+extern struct i2c_gpio_platform_data default_i2c0_data;
+#endif
+#ifdef CONFIG_RK29_I2C1_CONTROLLER
extern struct rk29_i2c_platform_data default_i2c1_data;
+#else
+extern struct i2c_gpio_platform_data default_i2c1_data;
+#endif
+#ifdef CONFIG_RK29_I2C2_CONTROLLER
extern struct rk29_i2c_platform_data default_i2c2_data;
+#else
+extern struct i2c_gpio_platform_data default_i2c2_data;
+#endif
+#ifdef CONFIG_RK29_I2C3_CONTROLLER
extern struct rk29_i2c_platform_data default_i2c3_data;
+#else
+extern struct i2c_gpio_platform_data default_i2c3_data;
+#endif
extern struct platform_device rk29_device_i2c0;
extern struct platform_device rk29_device_i2c1;
# Makefile for the i2c algorithms
#
-obj-$(CONFIG_I2C_ALGOBIT) += i2c-algo-bit.o
+#obj-$(CONFIG_I2C_ALGOBIT) += i2c-algo-bit.o
+obj-y += i2c-algo-bit.o
obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o
obj-$(CONFIG_I2C_ALGOPCA) += i2c-algo-pca.o
* the SMBus PEC was wrong.
*/
} else if (retval == 0) {
- dev_err(&i2c_adap->dev, "sendbytes: NAK bailout.\n");
+ dev_err(&i2c_adap->dev, "sendbytes: NAK bailout, addr is 0x%x.\n", msg->addr);
return -EIO;
/* Timeout; or (someday) lost arbitration
* to know or care about this ... it is *NOT* an error.
*/
} else {
- dev_err(&i2c_adap->dev, "sendbytes: error %d\n",
- retval);
+ dev_err(&i2c_adap->dev, "sendbytes: error %d, addr is 0x%x.\n",
+ retval, msg->addr);
return retval;
}
}
unsigned short nak_ok;
bit_dbg(3, &i2c_adap->dev, "emitting start condition\n");
+ adap->udelay = 500 * 1000/msgs[0].scl_rate + 1;
i2c_start(adap);
for (i = 0; i < num; i++) {
pmsg = &msgs[i];
depends on ARCH_RK29
help
This supports the use of the I2C0 interface on rk29 processors.
-
+ if I2C0_RK29
+ choice
+ prompt "I2C transfer mode select"
+ config RK29_I2C0_CONTROLLER
+ bool "With i2c controller"
+ config RK29_I2C0_GPIO
+ bool "Simulation with GPIO"
+ endchoice
+ endif
config I2C1_RK29
bool "RK29 I2C1 interface support"
default y
depends on ARCH_RK29
help
This supports the use of the I2C1 interface on rk29 processors.
+ if I2C1_RK29
+ choice
+ prompt "I2C transfer mode select"
+ config RK29_I2C1_CONTROLLER
+ bool "With i2c controller"
+ config RK29_I2C1_GPIO
+ bool "Simulation with GPIO"
+ endchoice
+ endif
config I2C2_RK29
bool "RK29 I2C2 interface support"
depends on ARCH_RK29
help
This supports the use of the I2C2 interface on rk29 processors.
+ if I2C2_RK29
+ choice
+ prompt "I2C transfer mode select"
+ config RK29_I2C2_CONTROLLER
+ bool "With i2c controller"
+ config RK29_I2C2_GPIO
+ bool "Simulation with GPIO"
+ endchoice
+ endif
config I2C3_RK29
bool "RK29 I2C3 interface support"
depends on ARCH_RK29 && !UART3_CTS_RTS_RK29
help
This supports the use of the I2C3 interface on rk29 processors.
+ if I2C3_RK29
+ choice
+ prompt "I2C transfer mode select"
+ config RK29_I2C3_CONTROLLER
+ bool "With i2c controller"
+ config RK29_I2C3_GPIO
+ bool "Simulation with GPIO"
+ endchoice
+ endif
endif
config I2C_DEV_RK29
tristate "RK29 I2C device interface support"
obj-$(CONFIG_I2C_RK2818) += i2c-rk2818.o
obj-$(CONFIG_I2C_RK29) += i2c-rk29.o
obj-$(CONFIG_I2C_DEV_RK29) += i2c-dev-rk29.o
-
+obj-y += i2c-gpio.o
ifeq ($(CONFIG_I2C_DEBUG_BUS),y)
EXTRA_CFLAGS += -DDEBUG
pdata = pdev->dev.platform_data;
if (!pdata)
return -ENXIO;
-
+ if(pdata->io_init)
+ pdata->io_init();
ret = -ENOMEM;
adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL);
if (!adap)
return ret;
}
-module_init(i2c_gpio_init);
+subsys_initcall(i2c_gpio_init);
static void __exit i2c_gpio_exit(void)
{
unsigned int sda_is_open_drain:1;
unsigned int scl_is_open_drain:1;
unsigned int scl_is_output_only:1;
+ int bus_num;
+ int (*io_init)(void);
};
#endif /* _LINUX_I2C_GPIO_H */