mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 20:32:04 +09:00
mod i2c
This commit is contained in:
@@ -150,20 +150,35 @@ static struct map_desc rk2818_io_desc[] __initdata = {
|
||||
/*****************************************************************************************
|
||||
* 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[] = {
|
||||
@@ -209,57 +224,7 @@ static struct i2c_board_info __initdata board_i2c1_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
|
||||
@@ -286,8 +251,12 @@ static struct spi_board_info board_spi_devices[] = {
|
||||
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,
|
||||
};
|
||||
|
||||
@@ -302,7 +271,14 @@ static void __init machine_rk2818_init_irq(void)
|
||||
|
||||
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
|
||||
|
||||
@@ -107,12 +107,18 @@ struct platform_device rk2818_device_i2c0 = {
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(resources_i2c0),
|
||||
.resource = resources_i2c0,
|
||||
.dev = {
|
||||
.platform_data = &default_i2c0_data,
|
||||
},
|
||||
};
|
||||
struct platform_device rk2818_device_i2c1 = {
|
||||
.name = "rk2818_i2c",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(resources_i2c1),
|
||||
.resource = resources_i2c1,
|
||||
.dev = {
|
||||
.platform_data = &default_i2c1_data,
|
||||
},
|
||||
};
|
||||
|
||||
struct platform_device rk2818_device_uart0 = {
|
||||
|
||||
@@ -23,6 +23,8 @@ extern struct platform_device rk2818_device_uart3;
|
||||
extern struct platform_device rk2818_device_spim;
|
||||
extern struct platform_device rk2818_device_i2c0;
|
||||
extern struct platform_device rk2818_device_i2c1;
|
||||
extern struct rk2818_i2c_platform_data default_i2c0_data;
|
||||
extern struct rk2818_i2c_platform_data default_i2c1_data;
|
||||
extern struct platform_device rk2818_device_dm9k;
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user