From: 柯飞雄 Date: Wed, 12 May 2010 09:57:29 +0000 (+0000) Subject: mod i2c X-Git-Tag: firefly_0821_release~11562 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e276a7a9d6f0320c5006faf4882f2e98a02293e1;p=firefly-linux-kernel-4.4.55.git mod i2c --- diff --git a/arch/arm/mach-rk2818/board-midsdk.c b/arch/arm/mach-rk2818/board-midsdk.c index 27edba489a3d..bc6e3c340b06 100644 --- a/arch/arm/mach-rk2818/board-midsdk.c +++ b/arch/arm/mach-rk2818/board-midsdk.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include @@ -140,6 +139,119 @@ static struct map_desc rk2818_io_desc[] __initdata = { }, }; +/***************************************************************************************** + * I2C devices + *author: kfx + *****************************************************************************************/ +static struct rk2818_i2c_platform_data default_i2c0_data __initdata = { + .bus_num = 0, + .flags = 0, + .slave_addr = 0xff, + .scl_rate = 400*1000, + .clk_id = "i2c0", +}; +static struct rk2818_i2c_platform_data default_i2c1_data __initdata = { + .bus_num = 1, + .flags = 0, + .slave_addr = 0xff, + .scl_rate = 400*1000, + .clk_id = "i2c1", +}; + +static struct i2c_board_info __initdata board_i2c0_devices[] = { +#if defined (CONFIG_RK1000_CONTROL) + { + .type = "rk1000_control", + .addr = 0x40, + .flags = 0, + }, +#endif + +#if defined (CONFIG_RK1000_TVOUT) + { + .type = "rk1000_tvout", + .addr = 0x42, + .flags = 0, + }, +#endif +#if defined (CONFIG_SND_SOC_RK1000) + { + .type = "rk1000_i2c_codec", + .addr = 0x60, + .flags = 0, + }, +#endif + {} +}; +static struct i2c_board_info __initdata board_i2c1_devices[] = { +#if defined (CONFIG_RTC_HYM8563) + { + .type = "rtc_hym8563", + .addr = 0x51, + .flags = 0, + }, +#endif +#if defined (CONFIG_FM_QN8006) + { + .type = "fm_qn8006", + .addr = 0x2b, + .flags = 0, + }, +#endif + {} +}; + +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 @@ -179,6 +291,7 @@ static void __init machine_rk2818_init_irq(void) static void __init machine_rk2818_board_init(void) { + rk2818_i2c_board_init(); 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 diff --git a/arch/arm/mach-rk2818/i2c.c b/arch/arm/mach-rk2818/i2c.c deleted file mode 100755 index 2a6a438f9877..000000000000 --- a/arch/arm/mach-rk2818/i2c.c +++ /dev/null @@ -1,135 +0,0 @@ -/* arch/arm/mach-rk2818/i2c.c - * - * Copyright (C) 2010 ROCKCHIP, Inc. - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include -#include -#include - -#include -#include "devices.h" - -/* i2c0 */ -static struct rk2818_i2c_platform_data default_i2c0_data __initdata = { - .bus_num = 0, - .flags = 0, - .slave_addr = 0xff, - .scl_rate = 400*1000, - .clk_id = "i2c0", -}; -/* i2c1 */ -static struct rk2818_i2c_platform_data default_i2c1_data __initdata = { - .bus_num = 1, - .flags = 0, - .slave_addr = 0xff, - .scl_rate = 400*1000, - .clk_id = "i2c1", -}; - -static struct i2c_board_info __initdata board_i2c0_devices[] = { -#if defined (CONFIG_RK1000_CONTROL) - { - .type = "rk1000_control", - .addr = 0x40, - .flags = 0, - }, -#endif - -#if defined (CONFIG_RK1000_TVOUT) - { - .type = "rk1000_tvout", - .addr = 0x42, - .flags = 0, - }, -#endif -#if defined (CONFIG_SND_SOC_RK1000) - { - .type = "rk1000_i2c_codec", - .addr = 0x60, - .flags = 0, - }, -#endif - {} -}; -static struct i2c_board_info __initdata board_i2c1_devices[] = { -#if defined (CONFIG_RTC_HYM8563) - { - .type = "rtc_hym8563", - .addr = 0x51, - .flags = 0, - }, -#endif -#if defined (CONFIG_FM_QN8006) - { - .type = "fm_qn8006", - .addr = 0x2b, - .flags = 0, - }, -#endif - {} -}; - -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; -} - -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)); -}