Message ID | 20120924173407.GH28835@atomide.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Tony, On 09/24/2012 08:34 PM, Tony Lindgren wrote: > * Tony Lindgren <tony@atomide.com> [120924 08:44]: >> * Peter Ujfalusi <peter.ujfalusi@ti.com> [120924 02:24]: >>> On OMAP4 the i2c1 bus is dedicated for the PMIC and audio related devices. >>> Manufacturers can opt to use different codec than twl6040 and also can add >>> audio related IC to the bus (external amplifier for example on SDP4430). >>> >>> Make it possible to add different set of additional devices to i2c1 bus on >>> OMAP4 boards. >>> >>> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> >>> --- >>> Hi Tony, >>> >>> I have refreshed the patch on top of arm-soc/for-next branch. Would it be >>> possible to queue this patch via arm-soc so it will be in 3.7-rc1 already? >>> Originally this patch was sent for 3.6... >> >> Yes sorry the platform code has been been badly ignored >> lately.. Let's see if we can still get it in now that there's >> -rc7 tagged. > > I've updated this for the sparse IRQ changes that remove irqs.h. > Updated patch below. Looks good to me. Thank you, Péter > > Tony > > > From: Peter Ujfalusi <peter.ujfalusi@ti.com> > Date: Mon, 24 Sep 2012 12:24:48 +0300 > Subject: [PATCH] ARM: OMAP4: twl-common: Support for additional devices on > i2c1 bus > > On OMAP4 the i2c1 bus is dedicated for the PMIC and audio related devices. > Manufacturers can opt to use different codec than twl6040 and also can add > audio related IC to the bus (external amplifier for example on SDP4430). > > Make it possible to add different set of additional devices to i2c1 bus on > OMAP4 boards. > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> > [tony@atomide.com: updated for removal of irqs.h] > Signed-off-by: Tony Lindgren <tony@atomide.com> > > diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c > index e82098f..749ce96 100644 > --- a/arch/arm/mach-omap2/board-4430sdp.c > +++ b/arch/arm/mach-omap2/board-4430sdp.c > @@ -545,6 +545,14 @@ static struct twl6040_platform_data twl6040_data = { > .audpwron_gpio = 127, > }; > > +static struct i2c_board_info __initdata sdp4430_i2c_1_boardinfo[] = { > + { > + I2C_BOARD_INFO("twl6040", 0x4b), > + .irq = 119 + OMAP44XX_IRQ_GIC_START, > + .platform_data = &twl6040_data, > + }, > +}; > + > static struct twl4030_platform_data sdp4430_twldata = { > /* Regulators */ > .vusim = &sdp4430_vusim, > @@ -578,8 +586,8 @@ static int __init omap4_i2c_init(void) > TWL_COMMON_REGULATOR_CLK32KG | > TWL_COMMON_REGULATOR_V1V8 | > TWL_COMMON_REGULATOR_V2V1); > - omap4_pmic_init("twl6030", &sdp4430_twldata, > - &twl6040_data, 119 + OMAP44XX_IRQ_GIC_START); > + omap4_pmic_init("twl6030", &sdp4430_twldata, sdp4430_i2c_1_boardinfo, > + ARRAY_SIZE(sdp4430_i2c_1_boardinfo)); > omap_register_i2c_bus(2, 400, NULL, 0); > omap_register_i2c_bus(3, 400, sdp4430_i2c_3_boardinfo, > ARRAY_SIZE(sdp4430_i2c_3_boardinfo)); > diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c > index 45fe2d3..7b592d3 100644 > --- a/arch/arm/mach-omap2/board-omap4panda.c > +++ b/arch/arm/mach-omap2/board-omap4panda.c > @@ -264,6 +264,14 @@ static struct twl6040_platform_data twl6040_data = { > .audpwron_gpio = 127, > }; > > +static struct i2c_board_info __initdata panda_i2c_1_boardinfo[] = { > + { > + I2C_BOARD_INFO("twl6040", 0x4b), > + .irq = 119 + OMAP44XX_IRQ_GIC_START, > + .platform_data = &twl6040_data, > + }, > +}; > + > /* Panda board uses the common PMIC configuration */ > static struct twl4030_platform_data omap4_panda_twldata; > > @@ -291,8 +299,8 @@ static int __init omap4_panda_i2c_init(void) > TWL_COMMON_REGULATOR_CLK32KG | > TWL_COMMON_REGULATOR_V1V8 | > TWL_COMMON_REGULATOR_V2V1); > - omap4_pmic_init("twl6030", &omap4_panda_twldata, > - &twl6040_data, 119 + OMAP44XX_IRQ_GIC_START); > + omap4_pmic_init("twl6030", &omap4_panda_twldata, panda_i2c_1_boardinfo, > + ARRAY_SIZE(panda_i2c_1_boardinfo)); > omap_register_i2c_bus(2, 400, NULL, 0); > /* > * Bus 3 is attached to the DVI port where devices like the pico DLP > diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c > index 99be94e..af93acc 100644 > --- a/arch/arm/mach-omap2/twl-common.c > +++ b/arch/arm/mach-omap2/twl-common.c > @@ -40,16 +40,6 @@ static struct i2c_board_info __initdata pmic_i2c_board_info = { > .flags = I2C_CLIENT_WAKE, > }; > > -static struct i2c_board_info __initdata omap4_i2c1_board_info[] = { > - { > - .addr = 0x48, > - .flags = I2C_CLIENT_WAKE, > - }, > - { > - I2C_BOARD_INFO("twl6040", 0x4b), > - }, > -}; > - > #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) > static int twl_set_voltage(void *data, int target_uV) > { > @@ -79,30 +69,25 @@ void __init omap_pmic_init(int bus, u32 clkrate, > > void __init omap4_pmic_init(const char *pmic_type, > struct twl4030_platform_data *pmic_data, > - struct twl6040_platform_data *twl6040_data, int twl6040_irq) > + struct i2c_board_info *devices, int nr_devices) > { > /* PMIC part*/ > omap_mux_init_signal("sys_nirq1", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); > - strncpy(omap4_i2c1_board_info[0].type, pmic_type, > - sizeof(omap4_i2c1_board_info[0].type)); > - omap4_i2c1_board_info[0].irq = 7 + OMAP44XX_IRQ_GIC_START; > - omap4_i2c1_board_info[0].platform_data = pmic_data; > - > - /* TWL6040 audio IC part */ > - omap4_i2c1_board_info[1].irq = twl6040_irq; > - omap4_i2c1_board_info[1].platform_data = twl6040_data; > - > - omap_register_i2c_bus(1, 400, omap4_i2c1_board_info, 2); > + omap_pmic_init(1, 400, pmic_type, 7 + OMAP44XX_IRQ_GIC_START, pmic_data); > > + /* Register additional devices on i2c1 bus if needed */ > + if (devices) > + i2c_register_board_info(1, devices, nr_devices); > } > > void __init omap_pmic_late_init(void) > { > - /* Init the OMAP TWL parameters (if PMIC has been registered) */ > - if (pmic_i2c_board_info.irq) > - omap3_twl_init(); > - if (omap4_i2c1_board_info[0].irq) > - omap4_twl_init(); > + /* Init the OMAP TWL parameters (if PMIC has been registerd) */ > + if (!pmic_i2c_board_info.irq) > + return; > + > + omap3_twl_init(); > + omap4_twl_init(); > } > > #if defined(CONFIG_ARCH_OMAP3) > diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h > index d109c09..2256efe 100644 > --- a/arch/arm/mach-omap2/twl-common.h > +++ b/arch/arm/mach-omap2/twl-common.h > @@ -32,6 +32,7 @@ > > struct twl4030_platform_data; > struct twl6040_platform_data; > +struct i2c_board_info; > > void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq, > struct twl4030_platform_data *pmic_data); > @@ -51,7 +52,7 @@ static inline void omap3_pmic_init(const char *pmic_type, > > void omap4_pmic_init(const char *pmic_type, > struct twl4030_platform_data *pmic_data, > - struct twl6040_platform_data *audio_data, int twl6040_irq); > + struct i2c_board_info *devices, int nr_devices); > > void omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, > u32 pdata_flags, u32 regulators_flags); > -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index e82098f..749ce96 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -545,6 +545,14 @@ static struct twl6040_platform_data twl6040_data = { .audpwron_gpio = 127, }; +static struct i2c_board_info __initdata sdp4430_i2c_1_boardinfo[] = { + { + I2C_BOARD_INFO("twl6040", 0x4b), + .irq = 119 + OMAP44XX_IRQ_GIC_START, + .platform_data = &twl6040_data, + }, +}; + static struct twl4030_platform_data sdp4430_twldata = { /* Regulators */ .vusim = &sdp4430_vusim, @@ -578,8 +586,8 @@ static int __init omap4_i2c_init(void) TWL_COMMON_REGULATOR_CLK32KG | TWL_COMMON_REGULATOR_V1V8 | TWL_COMMON_REGULATOR_V2V1); - omap4_pmic_init("twl6030", &sdp4430_twldata, - &twl6040_data, 119 + OMAP44XX_IRQ_GIC_START); + omap4_pmic_init("twl6030", &sdp4430_twldata, sdp4430_i2c_1_boardinfo, + ARRAY_SIZE(sdp4430_i2c_1_boardinfo)); omap_register_i2c_bus(2, 400, NULL, 0); omap_register_i2c_bus(3, 400, sdp4430_i2c_3_boardinfo, ARRAY_SIZE(sdp4430_i2c_3_boardinfo)); diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 45fe2d3..7b592d3 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -264,6 +264,14 @@ static struct twl6040_platform_data twl6040_data = { .audpwron_gpio = 127, }; +static struct i2c_board_info __initdata panda_i2c_1_boardinfo[] = { + { + I2C_BOARD_INFO("twl6040", 0x4b), + .irq = 119 + OMAP44XX_IRQ_GIC_START, + .platform_data = &twl6040_data, + }, +}; + /* Panda board uses the common PMIC configuration */ static struct twl4030_platform_data omap4_panda_twldata; @@ -291,8 +299,8 @@ static int __init omap4_panda_i2c_init(void) TWL_COMMON_REGULATOR_CLK32KG | TWL_COMMON_REGULATOR_V1V8 | TWL_COMMON_REGULATOR_V2V1); - omap4_pmic_init("twl6030", &omap4_panda_twldata, - &twl6040_data, 119 + OMAP44XX_IRQ_GIC_START); + omap4_pmic_init("twl6030", &omap4_panda_twldata, panda_i2c_1_boardinfo, + ARRAY_SIZE(panda_i2c_1_boardinfo)); omap_register_i2c_bus(2, 400, NULL, 0); /* * Bus 3 is attached to the DVI port where devices like the pico DLP diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index 99be94e..af93acc 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c @@ -40,16 +40,6 @@ static struct i2c_board_info __initdata pmic_i2c_board_info = { .flags = I2C_CLIENT_WAKE, }; -static struct i2c_board_info __initdata omap4_i2c1_board_info[] = { - { - .addr = 0x48, - .flags = I2C_CLIENT_WAKE, - }, - { - I2C_BOARD_INFO("twl6040", 0x4b), - }, -}; - #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) static int twl_set_voltage(void *data, int target_uV) { @@ -79,30 +69,25 @@ void __init omap_pmic_init(int bus, u32 clkrate, void __init omap4_pmic_init(const char *pmic_type, struct twl4030_platform_data *pmic_data, - struct twl6040_platform_data *twl6040_data, int twl6040_irq) + struct i2c_board_info *devices, int nr_devices) { /* PMIC part*/ omap_mux_init_signal("sys_nirq1", OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); - strncpy(omap4_i2c1_board_info[0].type, pmic_type, - sizeof(omap4_i2c1_board_info[0].type)); - omap4_i2c1_board_info[0].irq = 7 + OMAP44XX_IRQ_GIC_START; - omap4_i2c1_board_info[0].platform_data = pmic_data; - - /* TWL6040 audio IC part */ - omap4_i2c1_board_info[1].irq = twl6040_irq; - omap4_i2c1_board_info[1].platform_data = twl6040_data; - - omap_register_i2c_bus(1, 400, omap4_i2c1_board_info, 2); + omap_pmic_init(1, 400, pmic_type, 7 + OMAP44XX_IRQ_GIC_START, pmic_data); + /* Register additional devices on i2c1 bus if needed */ + if (devices) + i2c_register_board_info(1, devices, nr_devices); } void __init omap_pmic_late_init(void) { - /* Init the OMAP TWL parameters (if PMIC has been registered) */ - if (pmic_i2c_board_info.irq) - omap3_twl_init(); - if (omap4_i2c1_board_info[0].irq) - omap4_twl_init(); + /* Init the OMAP TWL parameters (if PMIC has been registerd) */ + if (!pmic_i2c_board_info.irq) + return; + + omap3_twl_init(); + omap4_twl_init(); } #if defined(CONFIG_ARCH_OMAP3) diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h index d109c09..2256efe 100644 --- a/arch/arm/mach-omap2/twl-common.h +++ b/arch/arm/mach-omap2/twl-common.h @@ -32,6 +32,7 @@ struct twl4030_platform_data; struct twl6040_platform_data; +struct i2c_board_info; void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq, struct twl4030_platform_data *pmic_data); @@ -51,7 +52,7 @@ static inline void omap3_pmic_init(const char *pmic_type, void omap4_pmic_init(const char *pmic_type, struct twl4030_platform_data *pmic_data, - struct twl6040_platform_data *audio_data, int twl6040_irq); + struct i2c_board_info *devices, int nr_devices); void omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, u32 pdata_flags, u32 regulators_flags);