From patchwork Sun Jan 6 16:48:01 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Grinberg X-Patchwork-Id: 1937761 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by patchwork2.kernel.org (Postfix) with ESMTP id 10A7EDF2A2 for ; Sun, 6 Jan 2013 16:51:20 +0000 (UTC) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1TrtOd-00041v-FF; Sun, 06 Jan 2013 16:48:27 +0000 Received: from softlayer.compulab.co.il ([50.23.254.55] helo=compulab.co.il) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1TrtOZ-00040u-1M for linux-arm-kernel@lists.infradead.org; Sun, 06 Jan 2013 16:48:24 +0000 Received: from [62.90.235.247] (port=63902 helo=zimbra-mta.compulab.co.il) by softlayer.compulab.co.il with esmtp (Exim 4.80) (envelope-from ) id 1TrtOW-00037b-U1; Sun, 06 Jan 2013 18:48:21 +0200 Received: from localhost (localhost.localdomain [127.0.0.1]) by zimbra-mta.compulab.co.il (Postfix) with ESMTP id E8F43644198; Sun, 6 Jan 2013 18:48:19 +0200 (IST) X-Virus-Scanned: amavisd-new at compulab.co.il Received: from zimbra-mta.compulab.co.il ([127.0.0.1]) by localhost (zimbra-mta.compulab.co.il [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Lx7j2xCFmPqd; Sun, 6 Jan 2013 18:48:18 +0200 (IST) Received: from grinberg-linux (grinberg-pc.compulab.local [10.1.1.13]) by zimbra-mta.compulab.co.il (Postfix) with SMTP id DBCF4644194; Sun, 6 Jan 2013 18:48:17 +0200 (IST) Received: by grinberg-linux (sSMTP sendmail emulation); Sun, 06 Jan 2013 18:48:12 +0200 From: Igor Grinberg To: Haojian Zhuang Subject: [PATCH v2] ARM: PXA27x: fix workaround for AC97 reset Date: Sun, 6 Jan 2013 18:48:01 +0200 Message-Id: <1357490881-19015-1-git-send-email-grinberg@compulab.co.il> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <87fw2ebe1i.fsf@free.fr> References: <87fw2ebe1i.fsf@free.fr> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - softlayer.compulab.co.il X-AntiAbuse: Original Domain - lists.infradead.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - compulab.co.il X-Get-Message-Sender-Via: softlayer.compulab.co.il: acl_c_relayhosts_text_entry: grinberg@compulab.co.il|compulab.co.il X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130106_114823_540611_D3590C96 X-CRM114-Status: GOOD ( 15.52 ) X-Spam-Score: -2.6 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.6 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -0.7 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: Mike Dunn , stable@vger.kernel.org, Igor Grinberg , Eric Miao , Robert Jarzmik , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Fix the workaround to a hardware bug in the AC97 controller of PXA27x. A bug in the controller's warm reset functionality requires that the MFP used by the controller as the AC97_RESET_n line be temporarily reconfigured as a GPIO (AF0) and manually held high for the duration of the warm reset cycle. The workaround was broken long ago by commit fb1bf8cd ([ARM] pxa: introduce processor specific pxa27x_assert_ac97reset()). The commit above changed the original workaround code in a way that changed the MFP to AF0 (GPIO), but forgot to drive the GPIO high output. This way, the GPIO state was left input (and undriven) and only worked for boards with external pullup on the line. Fix the above breakage by actually configurring the GPIO for output high in case of reset assert and returning it to default state (AF1 - for GPIO95 and AF2 - for GPIO113) in case of reset deassert. Reported-by: Mike Dunn Signed-off-by: Igor Grinberg Cc: Mike Dunn Cc: Robert Jarzmik Cc: Eric Miao Cc: stable@vger.kernel.org --- v2: Do not change the GPDR to input on reset deassert, as AC97 controller will not drive it (thanks Robert). Also, this time really send to Mike. Mike, Robert, can you test this one on boards with GPIO113 and GPIO95? Thanks! arch/arm/mach-pxa/devices.c | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-) diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c index daa86d3..03db2ce 100644 --- a/arch/arm/mach-pxa/devices.c +++ b/arch/arm/mach-pxa/devices.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -488,7 +489,18 @@ struct platform_device pxa_device_ac97 = { void __init pxa_set_ac97_info(pxa2xx_audio_ops_t *ops) { - pxa_register_device(&pxa_device_ac97, ops); + int err = 0; + + if (ops && gpio_is_valid(ops->reset_gpio)) { + err = gpio_request_one(ops->reset_gpio, GPIOF_INIT_HIGH, + "ac97 rst"); + if (err) + pr_err("%s: Failed requesting GPIO%d (ac97 rst): %d", + __func__, ops->reset_gpio, err); + } + + if (!err) + pxa_register_device(&pxa_device_ac97, ops); } #ifdef CONFIG_PXA25x