From patchwork Tue Aug 7 13:12:25 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Ujfalusi X-Patchwork-Id: 1285631 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id B88693FCC5 for ; Tue, 7 Aug 2012 13:12:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752630Ab2HGNMi (ORCPT ); Tue, 7 Aug 2012 09:12:38 -0400 Received: from na3sys009aog119.obsmtp.com ([74.125.149.246]:35218 "EHLO na3sys009aog119.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751324Ab2HGNMh (ORCPT ); Tue, 7 Aug 2012 09:12:37 -0400 Received: from mail-qa0-f42.google.com ([209.85.216.42]) (using TLSv1) by na3sys009aob119.postini.com ([74.125.148.12]) with SMTP ID DSNKUCEURFKx+ICPQYKSSV3AJiNpkiPxUIw9@postini.com; Tue, 07 Aug 2012 06:12:37 PDT Received: by qaeb19 with SMTP id b19so1276574qae.8 for ; Tue, 07 Aug 2012 06:12:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:x-gm-message-state; bh=m4UHnlpBv5LfSoMYzM2+gaUKYHDEFZMBXnfokZZ6aTo=; b=TKoDXgPGAJAlusOCFIBXYN6X5KOzDnX9GahfKVQSKr3Gn+aRfhxhaeksehz6zUQte7 j/Awcl+5rIzi//LDewmZwkfoLsbWe+dXO/Tmy83EHcmd581OpRvuCyGrx7ouVTqDsNAA jpUKIp4pGXNJpjmIuNWCUOmmNKs9E4M48LI8ZcMnE8Qz/6Y9euPUgimP+PT/fX+vyj+v 4JsIaJqp4Xr8YoLuGhcQdWEf9PsGL/+RpdZ4JOFDqgHIJXRYtjpimA/lDNmFjVqG0EZW CuLWQy4UQGulTAOvoVB8Y4kiKGyl+mXKSmV8uYJYETuvmx4fPE0cGn4jcYlUrMmtlKMU /DqQ== Received: by 10.60.30.132 with SMTP id s4mr24548718oeh.6.1344345155603; Tue, 07 Aug 2012 06:12:35 -0700 (PDT) Received: from barack.emea.dhcp.ti.com (dragon.ti.com. [192.94.94.33]) by mx.google.com with ESMTPS id ac8sm19935498obc.11.2012.08.07.06.12.33 (version=SSLv3 cipher=OTHER); Tue, 07 Aug 2012 06:12:34 -0700 (PDT) From: Peter Ujfalusi To: Tony Lindgren Cc: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 resend] ARM: OMAP4: twl-common: Support for additional devices on i2c1 bus Date: Tue, 7 Aug 2012 16:12:25 +0300 Message-Id: <1344345145-32125-1-git-send-email-peter.ujfalusi@ti.com> X-Mailer: git-send-email 1.7.8.6 X-Gm-Message-State: ALoCoQmja/WN+It/+0nyPkHww5lHmUujGX/Id1SGo2bXk57Y4GwE07wQBkDOBoVLJWPmgxoHBT06 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org 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 --- Hi Tony, The v2 patch applied cleanly on top of today's mainline (with 2 offset). It would be really great if this could make it to 3.6, but it is not a big issue if this can only scheduled for 3.7. 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 d4831b6..bcbcad1 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -550,6 +550,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, @@ -583,8 +591,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 70f6d1d..5e18927 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 de47f17..d52be85 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 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 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);