/*****************************************************************************************
* I2C devices
*author: kfx
- *****************************************************************************************/
-static struct rk2818_i2c_platform_data default_i2c0_data __initdata = {
+*****************************************************************************************/
+ void rk2818_i2c0_cfg_gpio(struct platform_device *dev)
+{
+ rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0);
+}
+
+void rk2818_i2c1_cfg_gpio(struct platform_device *dev)
+{
+ rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, IOMUXA_I2C1);
+}
+struct rk2818_i2c_platform_data default_i2c0_data __initdata = {
.bus_num = 0,
.flags = 0,
.slave_addr = 0xff,
.scl_rate = 400*1000,
.clk_id = "i2c0",
+ .cfg_gpio = rk2818_i2c0_cfg_gpio,
};
-static struct rk2818_i2c_platform_data default_i2c1_data __initdata = {
+struct rk2818_i2c_platform_data default_i2c1_data __initdata = {
+#ifdef CONFIG_I2C0_RK2818
.bus_num = 1,
+#else
+ .bus_num = 0,
+#endif
.flags = 0,
.slave_addr = 0xff,
.scl_rate = 400*1000,
.clk_id = "i2c1",
+ .cfg_gpio = rk2818_i2c1_cfg_gpio,
};
static struct i2c_board_info __initdata board_i2c0_devices[] = {
{}
};
-static void rk2818_i2c0_cfg_gpio(struct platform_device *dev)
-{
- rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, IOMUXA_I2C0);
-}
-
-static void rk2818_i2c1_cfg_gpio(struct platform_device *dev)
-{
- rk2818_mux_api_set(GPIOE_U1IR_I2C1_NAME, IOMUXA_I2C1);
-}
-
-
-static void __init rk2818_i2c0_set_platdata(struct rk2818_i2c_platform_data *pd)
-{
- struct rk2818_i2c_platform_data *npd;
-
- if (!pd)
- pd = &default_i2c0_data;
-
- npd = kmemdup(pd, sizeof(struct rk2818_i2c_platform_data), GFP_KERNEL);
- if (!npd)
- printk(KERN_ERR "%s: no memory for platform data\n", __func__);
- else if (!npd->cfg_gpio)
- npd->cfg_gpio = rk2818_i2c0_cfg_gpio;
-
- rk2818_device_i2c0.dev.platform_data = npd;
-}
-static void __init rk2818_i2c1_set_platdata(struct rk2818_i2c_platform_data *pd)
-{
- struct rk2818_i2c_platform_data *npd;
-
- if (!pd)
- pd = &default_i2c1_data;
-
- npd = kmemdup(pd, sizeof(struct rk2818_i2c_platform_data), GFP_KERNEL);
- if (!npd)
- printk(KERN_ERR "%s: no memory for platform data\n", __func__);
- else if (!npd->cfg_gpio)
- npd->cfg_gpio = rk2818_i2c1_cfg_gpio;
- rk2818_device_i2c1.dev.platform_data = npd;
-}
-
-static void __init rk2818_i2c_board_init(void)
-{
- rk2818_i2c0_set_platdata(NULL);
- rk2818_i2c1_set_platdata(NULL);
- i2c_register_board_info(0, board_i2c0_devices,
- ARRAY_SIZE(board_i2c0_devices));
- i2c_register_board_info(1, board_i2c1_devices,
- ARRAY_SIZE(board_i2c1_devices));
-}
/*****************************************************************************************
* SPI devices
*author: lhh
static struct platform_device *devices[] __initdata = {
&rk2818_device_uart1,
&rk2818_device_dm9k,
+#ifdef CONFIG_I2C0_RK2818
&rk2818_device_i2c0,
+#endif
+#ifdef CONFIG_I2C1_RK2818
&rk2818_device_i2c1,
+#endif
&rk2818_device_spim,
};
static void __init machine_rk2818_board_init(void)
{
- rk2818_i2c_board_init();
+#ifdef CONFIG_I2C0_RK2818
+ i2c_register_board_info(default_i2c0_data.bus_num, board_i2c0_devices,
+ ARRAY_SIZE(board_i2c0_devices));
+#endif
+#ifdef CONFIG_I2C1_RK2818
+ i2c_register_board_info(default_i2c1_data.bus_num, board_i2c1_devices,
+ ARRAY_SIZE(board_i2c1_devices));
+#endif
platform_add_devices(devices, ARRAY_SIZE(devices));
spi_register_board_info(board_spi_devices, ARRAY_SIZE(board_spi_devices));
rk2818_mux_api_set(GPIOB4_SPI0CS0_MMC0D4_NAME,IOMUXA_GPIO0_B4); //IOMUXA_SPI0_CSN0);//use for gpio SPI CS0