From patchwork Tue Aug 14 14:22:37 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Ujfalusi X-Patchwork-Id: 1320291 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 6355EDF266 for ; Tue, 14 Aug 2012 14:26:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756385Ab2HNO0s (ORCPT ); Tue, 14 Aug 2012 10:26:48 -0400 Received: from na3sys009aog114.obsmtp.com ([74.125.149.211]:59224 "EHLO na3sys009aog114.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756275Ab2HNOXF (ORCPT ); Tue, 14 Aug 2012 10:23:05 -0400 Received: from mail-ob0-f169.google.com ([209.85.214.169]) (using TLSv1) by na3sys009aob114.postini.com ([74.125.148.12]) with SMTP ID DSNKUCpfSPFyEFLcQf3Rti7BwkXmGN2qlvb0@postini.com; Tue, 14 Aug 2012 07:23:05 PDT Received: by obhx4 with SMTP id x4so780073obh.14 for ; Tue, 14 Aug 2012 07:23:04 -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:in-reply-to:references :x-gm-message-state; bh=9URCJ6IKubWvrLd5YIRNjbvdFgmV47ZrcxYip4/2YgA=; b=no9xNN7sdctLNVpfT+VXCjJugI7bJddfrL1FTU4pvfOvxLP3TQVSaf6cgDNAWeonXP YrZrc7fdGMEwKbqsEkJtmRGhHPeOjJjuqflc3L6WsiihAlmbCsJxB8T/Uxn4T6RfhtK3 6yTlPvWamIZ9s6ndpXn11HleuyWnaCo1AgtlAq46h0jlouMn1NfdHw3B4HmGfsgNbIYF rwDnXS01EfI2GjndTWw5Hn9oMYAoWLAIDAox0xd/3FCfSB4IDCYDkiW1P2bIoy3fAoql +hb7frv1E9FNpBQXm+xaRqsmE1y+oXxvkgk5d8Nl+BK5eZ8Ys+k6mT8214GIl8d6+3gG cFkg== Received: by 10.182.53.103 with SMTP id a7mr19084673obp.3.1344954184245; Tue, 14 Aug 2012 07:23:04 -0700 (PDT) Received: from barack.emea.dhcp.ti.com (dragon.ti.com. [192.94.94.33]) by mx.google.com with ESMTPS id kc5sm2799741obb.21.2012.08.14.07.23.00 (version=SSLv3 cipher=OTHER); Tue, 14 Aug 2012 07:23:03 -0700 (PDT) From: Peter Ujfalusi To: Mark Brown , Liam Girdwood , Tony Lindgren , Grant Likely , Rob Herring Cc: Tero Kristo , alsa-devel@alsa-project.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree-discuss@lists.ozlabs.org, Benoit Cousson , linux-kernel@vger.kernel.org Subject: [PATCH v2 09/14] ASoC: twl4030: Move hs_extmute GPIO handling to driver Date: Tue, 14 Aug 2012 17:22:37 +0300 Message-Id: <1344954162-7985-10-git-send-email-peter.ujfalusi@ti.com> X-Mailer: git-send-email 1.7.8.6 In-Reply-To: <1344954162-7985-1-git-send-email-peter.ujfalusi@ti.com> References: <1344954162-7985-1-git-send-email-peter.ujfalusi@ti.com> X-Gm-Message-State: ALoCoQmSNZo8jJBGJGxVCfg0iZ09p1ZYCCo/wohucGwGj88pg8YKjXmLMFromvsJjHLpw7Rzo33M Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org The external mute (if it is in use) is handled by a GPIO line. Prepare to remove the set_hs_extmute callback and replace it with: hs_extmute_gpio: the GPIO number to use for external mute When the users of set_hs_extmute has been converted the callback can be removed. Signed-off-by: Peter Ujfalusi --- include/linux/i2c/twl.h | 4 +++- sound/soc/codecs/twl4030.c | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h index ac6488c..2040309 100644 --- a/include/linux/i2c/twl.h +++ b/include/linux/i2c/twl.h @@ -667,7 +667,9 @@ struct twl4030_codec_data { unsigned int check_defaults:1; unsigned int reset_registers:1; unsigned int hs_extmute:1; - void (*set_hs_extmute)(int mute); + void (*set_hs_extmute)(int mute); /* Deprecated, use hs_extmute_gpio and + hs_extmute_disable_level */ + int hs_extmute_gpio; }; struct twl4030_vibra_data { diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c index 391fcfc..5fc271a 100644 --- a/sound/soc/codecs/twl4030.c +++ b/sound/soc/codecs/twl4030.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -302,6 +303,22 @@ static void twl4030_init_chip(struct snd_soc_codec *codec) u8 reg, byte; int i = 0; + if (pdata && pdata->hs_extmute && + gpio_is_valid(pdata->hs_extmute_gpio)) { + int ret; + + if (!pdata->hs_extmute_gpio) + dev_warn(codec->dev, + "Extmute GPIO is 0 is this correct?\n"); + + ret = gpio_request_one(pdata->hs_extmute_gpio, + GPIOF_OUT_INIT_LOW, "hs_extmute"); + if (ret) { + dev_err(codec->dev, "Failed to get hs_extmute GPIO\n"); + pdata->hs_extmute_gpio = -1; + } + } + /* Check defaults, if instructed before anything else */ if (pdata && pdata->check_defaults) twl4030_check_defaults(codec); @@ -748,7 +765,10 @@ static void headset_ramp(struct snd_soc_codec *codec, int ramp) /* Enable external mute control, this dramatically reduces * the pop-noise */ if (pdata && pdata->hs_extmute) { - if (pdata->set_hs_extmute) { + if (gpio_is_valid(pdata->hs_extmute_gpio)) { + gpio_set_value(pdata->hs_extmute_gpio, 1); + } else if (pdata->set_hs_extmute) { + dev_warn(codec->dev, "set_hs_extmute is deprecated\n"); pdata->set_hs_extmute(1); } else { hs_pop |= TWL4030_EXTMUTE; @@ -786,7 +806,10 @@ static void headset_ramp(struct snd_soc_codec *codec, int ramp) /* Disable external mute */ if (pdata && pdata->hs_extmute) { - if (pdata->set_hs_extmute) { + if (gpio_is_valid(pdata->hs_extmute_gpio)) { + gpio_set_value(pdata->hs_extmute_gpio, 0); + } else if (pdata->set_hs_extmute) { + dev_warn(codec->dev, "set_hs_extmute is deprecated\n"); pdata->set_hs_extmute(0); } else { hs_pop &= ~TWL4030_EXTMUTE; @@ -2230,12 +2253,17 @@ static int twl4030_soc_probe(struct snd_soc_codec *codec) static int twl4030_soc_remove(struct snd_soc_codec *codec) { + struct twl4030_codec_data *pdata = dev_get_platdata(codec->dev); struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec); /* Reset registers to their chip default before leaving */ twl4030_reset_registers(codec); twl4030_set_bias_level(codec, SND_SOC_BIAS_OFF); kfree(twl4030); + + if (pdata && pdata->hs_extmute && gpio_is_valid(pdata->hs_extmute_gpio)) + gpio_free(pdata->hs_extmute_gpio); + return 0; }