[PATCH] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus
Peter Ujfalusi
peter.ujfalusi at ti.com
Fri Jul 13 04:11:58 EDT 2012
Hello,
On 07/13/2012 10:01 AM, Peter Ujfalusi wrote:
> 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 differnet set of additional devices to i2c1 bus on
> OMAP4 boards.
Please ignore this patch since it is not going to apply to mainline. I
accidentally overlooked my pending underneath (twl6040 GPO driver).
Will resend ASAP.
--
Péter
>
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi at ti.com>
> ---
> arch/arm/mach-omap2/board-4430sdp.c | 14 ++++++++++--
> arch/arm/mach-omap2/board-omap4panda.c | 12 +++++++++-
> arch/arm/mach-omap2/twl-common.c | 35 +++++++++----------------------
> arch/arm/mach-omap2/twl-common.h | 3 +-
> 4 files changed, 33 insertions(+), 31 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
> index 2fd7b03..1d81f62 100644
> --- a/arch/arm/mach-omap2/board-4430sdp.c
> +++ b/arch/arm/mach-omap2/board-4430sdp.c
> @@ -542,7 +542,7 @@ static struct twl6040_vibra_data twl6040_vibra = {
>
> static struct twl6040_gpo_data twl6040_gpo = {
> .nr_gpo = TWL6040_GPO_MAX,
> - .gpio_base = -1,
> + .gpio_base = 192,
> };
>
> static struct twl6040_platform_data twl6040_data = {
> @@ -553,6 +553,14 @@ static struct twl6040_platform_data twl6040_data = {
> .irq_base = TWL6040_CODEC_IRQ_BASE,
> };
>
> +static struct i2c_board_info __initdata sdp4430_i2c_1_boardinfo[] = {
> + {
> + I2C_BOARD_INFO("twl6040", 0x4b),
> + .irq = OMAP44XX_IRQ_SYS_2N,
> + .platform_data = &twl6040_data,
> + },
> +};
> +
> static struct twl4030_platform_data sdp4430_twldata = {
> /* Regulators */
> .vusim = &sdp4430_vusim,
> @@ -586,8 +594,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, OMAP44XX_IRQ_SYS_2N);
> + 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 b627cdc..5becba2 100644
> --- a/arch/arm/mach-omap2/board-omap4panda.c
> +++ b/arch/arm/mach-omap2/board-omap4panda.c
> @@ -266,6 +266,14 @@ static struct twl6040_platform_data twl6040_data = {
> .irq_base = TWL6040_CODEC_IRQ_BASE,
> };
>
> +static struct i2c_board_info __initdata panda_i2c_1_boardinfo[] = {
> + {
> + I2C_BOARD_INFO("twl6040", 0x4b),
> + .irq = OMAP44XX_IRQ_SYS_2N,
> + .platform_data = &twl6040_data,
> + },
> +};
> +
> /* Panda board uses the common PMIC configuration */
> static struct twl4030_platform_data omap4_panda_twldata;
>
> @@ -293,8 +301,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, OMAP44XX_IRQ_SYS_2N);
> + 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 c76d075..94c8280 100644
> --- a/arch/arm/mach-omap2/twl-common.c
> +++ b/arch/arm/mach-omap2/twl-common.c
> @@ -39,16 +39,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)
> {
> @@ -77,30 +67,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 = OMAP44XX_IRQ_SYS_1N;
> - 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, OMAP44XX_IRQ_SYS_1N, 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 registerd) */
> - if (pmic_i2c_board_info.irq)
> - omap3_twl_init();
> - if (omap4_i2c1_board_info[0].irq)
> - omap4_twl_init();
> + 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 8fe71cf..de062c7 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);
>
More information about the linux-arm-kernel
mailing list