From patchwork Wed Aug 2 17:09:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinivas Kandagatla X-Patchwork-Id: 109263 Delivered-To: patch@linaro.org Received: by 10.182.45.195 with SMTP id p3csp6473219obm; Wed, 2 Aug 2017 10:10:14 -0700 (PDT) X-Received: by 10.99.108.69 with SMTP id h66mr7234257pgc.163.1501693814848; Wed, 02 Aug 2017 10:10:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1501693814; cv=none; d=google.com; s=arc-20160816; b=ifmqdhY4FPy5nAGN4Eje7S5BAxSlwsUlqvz0MLuPyX+A5Bis/YhMgMMvH/EBz+jTf5 /nN2bR/MvstQG3MmMK9t4VhyMktaIsBP7Xp0c4NleEEtIaierlzE+Gt4lXPpB8uwdQtk wq8yxnxjn88pQSGZn5bn21qjv+v8PBvr4nvZadgfaN9hdJeAFNwYUSP3CYjVP67Oz6V9 5mZnMVH2SVrPni4WbkHte2yfASYh0SWNW5F8cAUCcDcqwOf3OjaB8AMwOP+et8rDIxkc euzz3dC9mWWIk3iAm+9B2FbUHG4DWLp53Ii25SsV7aGla3U9EQcQNN2AR7X3+0yUCbry XVGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=UQB+Cy5g9aBZGzJ9kp9BfeAQ44W2u0sbiFvEfGtsPo8=; b=oqNwP9ua8AUP1PHUOiRFoXjeJO4Ciu2XYwaufCHE3oHyaigUx+JWnWJegXDx45srk+ 5AZ4yhc9YmqW2635z2Wm9lreMDMu36P487IpXcJPKyCX/4adwTzfZLZaf1TAgNcKFh0y 3LNXybRn6W6waBXJXX2Hq72bZxLBID8KlnHG+sAuCOIL8y+yS0HXswakuAhV4g3+vJww JkUYt/mdw3hPYVpbLUps2rftVmUNAyF/Ku3Dafpu3kNe8subJtiJe8Yz20FA3sdMlh0H xypyiG0RgwQieFguIekztigUpi0CjqqxSDouyMGA1AZILAfpGQhajjjwdP3Ef+hiZZk6 F1bw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.b=KVF7Zp2B; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y12si17301476pge.912.2017.08.02.10.10.14; Wed, 02 Aug 2017 10:10:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.b=KVF7Zp2B; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752635AbdHBRKJ (ORCPT + 25 others); Wed, 2 Aug 2017 13:10:09 -0400 Received: from mail-it0-f44.google.com ([209.85.214.44]:36327 "EHLO mail-it0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751956AbdHBRJt (ORCPT ); Wed, 2 Aug 2017 13:09:49 -0400 Received: by mail-it0-f44.google.com with SMTP id 77so27007511itj.1 for ; Wed, 02 Aug 2017 10:09:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UQB+Cy5g9aBZGzJ9kp9BfeAQ44W2u0sbiFvEfGtsPo8=; b=KVF7Zp2BJhM7k4U6MWl9osaig2kcksb+I3aOP5yJTQRk+WFkSogvfg0gDM/vkHXnjT EbFHIXe2EGGhuqdkZ/PtN9dEZbnEhoTqpV9+Iy2svts79At4BBAYOHPEn36QMYjON+9b Qb+eUb/6VheLjFbXAh2gKW+2Jsq7W/DkVwHdc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UQB+Cy5g9aBZGzJ9kp9BfeAQ44W2u0sbiFvEfGtsPo8=; b=qtSFuAoBTSmNcMI4qp5eN/X84UURojFvSFhG6HYNz3KtIuRhXjBaJx4E8PvfJAUTTa So5qUMJOJqbctGTsYhoniM+5aTrS9HP+pm/n2HjMLneYks71eiEneqhq5gZaTgSkKSuX wAOmdl8y22WERb4PMXwxjOrDrSy3HJKKIPQsDIJc1qdga5arboczvfnsQT0bxzwII9hb Vrf+s1UqDq49ip5K9XBh0B7/oB8lCNokgZTXQfCHvZJFXZNPLXchAsDoducMTbox1NNp l/p7eCe9AV2LLaIVHRpBbpbRMjBadEjDdoEnJO4rkAe7ca6ET73r9UG3DOFtvKSHcOh6 s6pg== X-Gm-Message-State: AIVw111Uwpx0FtLV3t3Hd5hnC3ez1jyE0c4E3nA0TTo/WcMnmnjIkF04 3qbmH5udihgGPyIu X-Received: by 10.36.14.201 with SMTP id 192mr6121259ite.81.1501693788864; Wed, 02 Aug 2017 10:09:48 -0700 (PDT) Received: from localhost.localdomain (static.8.26.4.46.clients.your-server.de. [46.4.26.8]) by smtp.gmail.com with ESMTPSA id u79sm2291222ita.24.2017.08.02.10.09.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 02 Aug 2017 10:09:48 -0700 (PDT) From: srinivas.kandagatla@linaro.org To: Mark Brown , Banajit Goswami , alsa-devel@alsa-project.org Cc: damien.riegel@savoirfairelinux.com, Jaroslav Kysela , Takashi Iwai , Patrick Lai , linux-kernel@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH v2 3/6] ASoC: codecs: msm8916-wcd-analog: get micbias voltage from dt Date: Wed, 2 Aug 2017 19:09:27 +0200 Message-Id: <20170802170930.26083-4-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170802170930.26083-1-srinivas.kandagatla@linaro.org> References: <20170802170930.26083-1-srinivas.kandagatla@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Srinivas Kandagatla This patch adds bindings in DT to provide required micbias voltage which could be specific to board. With this new binding, now the mic bias voltage is left at hardware default value if the device tree does not specify any mic bias voltage value. Correct micbias value is required for mbhc buttons to work. Signed-off-by: Srinivas Kandagatla --- .../bindings/sound/qcom,msm8916-wcd-analog.txt | 1 + sound/soc/codecs/msm8916-wcd-analog.c | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) -- 2.9.3 diff --git a/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-analog.txt b/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-analog.txt index ccb401c..05b67a1 100644 --- a/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-analog.txt +++ b/Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-analog.txt @@ -33,6 +33,7 @@ Required properties - vdd-micbias-supply: phandle of VDD_MICBIAS supply's regulator DT node. Optional Properties: +- qcom,micbias-lvl: Voltage (mV) for Mic Bias - qcom,micbias1-ext-cap: boolean, present if micbias1 has external capacitor connected. - qcom,micbias2-ext-cap: boolean, present if micbias2 has external capacitor diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c index 6606954..dec4978 100644 --- a/sound/soc/codecs/msm8916-wcd-analog.c +++ b/sound/soc/codecs/msm8916-wcd-analog.c @@ -93,8 +93,12 @@ #define MICB_1_EN_TX3_GND_SEL_TX_GND 0 #define CDC_A_MICB_1_VAL (0xf141) +#define MICB_MIN_VAL 1600 +#define MICB_STEP_SIZE 50 +#define MICB_VOLTAGE_REGVAL(v) ((v - MICB_MIN_VAL)/MICB_STEP_SIZE) #define MICB_1_VAL_MICB_OUT_VAL_MASK GENMASK(7, 3) #define MICB_1_VAL_MICB_OUT_VAL_V2P70V ((0x16) << 3) +#define MICB_1_VAL_MICB_OUT_VAL_V1P80V ((0x4) << 3) #define CDC_A_MICB_1_CTL (0xf142) #define MICB_1_CTL_CFILT_REF_SEL_MASK BIT(1) @@ -225,6 +229,7 @@ struct pm8916_wcd_analog_priv { struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)]; unsigned int micbias1_cap_mode; unsigned int micbias2_cap_mode; + unsigned int micbias_mv; }; static const char *const adc2_mux_text[] = { "ZERO", "INP2", "INP3" }; @@ -265,18 +270,18 @@ static const struct snd_kcontrol_new pm8916_wcd_analog_snd_controls[] = { static void pm8916_wcd_analog_micbias_enable(struct snd_soc_codec *codec) { + struct pm8916_wcd_analog_priv *wcd = snd_soc_codec_get_drvdata(codec); + snd_soc_update_bits(codec, CDC_A_MICB_1_CTL, MICB_1_CTL_EXT_PRECHARG_EN_MASK | MICB_1_CTL_INT_PRECHARG_BYP_MASK, MICB_1_CTL_INT_PRECHARG_BYP_EXT_PRECHRG_SEL | MICB_1_CTL_EXT_PRECHARG_EN_ENABLE); - snd_soc_write(codec, CDC_A_MICB_1_VAL, MICB_1_VAL_MICB_OUT_VAL_V2P70V); - /* - * Special headset needs MICBIAS as 2.7V so wait for - * 50 msec for the MICBIAS to reach 2.7 volts. - */ - msleep(50); + if (wcd->micbias_mv) + snd_soc_write(codec, CDC_A_MICB_1_VAL, + MICB_VOLTAGE_REGVAL(wcd->micbias_mv)); + snd_soc_update_bits(codec, CDC_A_MICB_1_CTL, MICB_1_CTL_EXT_PRECHARG_EN_MASK | MICB_1_CTL_INT_PRECHARG_BYP_MASK, 0); @@ -795,6 +800,9 @@ static int pm8916_wcd_analog_parse_dt(struct device *dev, else priv->micbias2_cap_mode = MICB_1_EN_NO_EXT_BYP_CAP; + of_property_read_u32(dev->of_node, "qcom,micbias-lvl", + &priv->micbias_mv); + return 0; }