* [PATCH v3] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus
@ 2012-09-24 9:24 Peter Ujfalusi
2012-09-24 15:43 ` Tony Lindgren
0 siblings, 1 reply; 4+ messages in thread
From: Peter Ujfalusi @ 2012-09-24 9:24 UTC (permalink / raw)
To: Tony Lindgren; +Cc: linux-omap, linux-arm-kernel
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...
Regards,
Peter
arch/arm/mach-omap2/board-4430sdp.c | 12 +++++++++--
arch/arm/mach-omap2/board-omap4panda.c | 12 +++++++++--
arch/arm/mach-omap2/twl-common.c | 37 ++++++++++------------------------
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 6fe9079..7c1a662 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 = OMAP44XX_IRQ_SYS_2N,
+ .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 8ebb16c..eb7a9a8 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 = OMAP44XX_IRQ_SYS_2N,
+ .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 040f480..e279732 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, 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 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);
--
1.7.12
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus
2012-09-24 9:24 [PATCH v3] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus Peter Ujfalusi
@ 2012-09-24 15:43 ` Tony Lindgren
2012-09-24 17:34 ` Tony Lindgren
0 siblings, 1 reply; 4+ messages in thread
From: Tony Lindgren @ 2012-09-24 15:43 UTC (permalink / raw)
To: Peter Ujfalusi; +Cc: linux-omap, linux-arm-kernel
* 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.
Regards,
Tony
> arch/arm/mach-omap2/board-4430sdp.c | 12 +++++++++--
> arch/arm/mach-omap2/board-omap4panda.c | 12 +++++++++--
> arch/arm/mach-omap2/twl-common.c | 37 ++++++++++------------------------
> 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 6fe9079..7c1a662 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 = OMAP44XX_IRQ_SYS_2N,
> + .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 8ebb16c..eb7a9a8 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 = OMAP44XX_IRQ_SYS_2N,
> + .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 040f480..e279732 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, 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 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);
> --
> 1.7.12
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus
2012-09-24 15:43 ` Tony Lindgren
@ 2012-09-24 17:34 ` Tony Lindgren
2012-09-25 8:48 ` Peter Ujfalusi
0 siblings, 1 reply; 4+ messages in thread
From: Tony Lindgren @ 2012-09-24 17:34 UTC (permalink / raw)
To: Peter Ujfalusi; +Cc: linux-omap, linux-arm-kernel
* 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.
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);
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus
2012-09-24 17:34 ` Tony Lindgren
@ 2012-09-25 8:48 ` Peter Ujfalusi
0 siblings, 0 replies; 4+ messages in thread
From: Peter Ujfalusi @ 2012-09-25 8:48 UTC (permalink / raw)
To: Tony Lindgren; +Cc: linux-omap, linux-arm-kernel
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
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-09-25 8:47 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-24 9:24 [PATCH v3] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus Peter Ujfalusi
2012-09-24 15:43 ` Tony Lindgren
2012-09-24 17:34 ` Tony Lindgren
2012-09-25 8:48 ` Peter Ujfalusi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).