From patchwork Fri Apr 17 08:32:58 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inha Song X-Patchwork-Id: 6229381 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 599019F1AC for ; Fri, 17 Apr 2015 08:34:29 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 70DFC2027D for ; Fri, 17 Apr 2015 08:34:28 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 596DD202FF for ; Fri, 17 Apr 2015 08:34:26 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 3270A265750; Fri, 17 Apr 2015 10:34:25 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id 874AF26053E; Fri, 17 Apr 2015 10:33:18 +0200 (CEST) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 3B471264F07; Fri, 17 Apr 2015 10:33:16 +0200 (CEST) Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by alsa0.perex.cz (Postfix) with ESMTP id 4A34C26053E for ; Fri, 17 Apr 2015 10:33:06 +0200 (CEST) Received: from epcpsbgr3.samsung.com (u143.gpu120.samsung.co.kr [203.254.230.143]) by mailout1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NMX001NNZR36340@mailout1.samsung.com> for alsa-devel@alsa-project.org; Fri, 17 Apr 2015 17:33:03 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.116]) by epcpsbgr3.samsung.com (EPCPMTA) with SMTP id F1.0A.24422.F35C0355; Fri, 17 Apr 2015 17:33:03 +0900 (KST) X-AuditID: cbfee68f-f793b6d000005f66-11-5530c53f0938 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id A4.E6.25346.F35C0355; Fri, 17 Apr 2015 17:33:03 +0900 (KST) Received: from songinha-Samsung-DeskTop-System.10.32.193.11 ([10.252.81.136]) by mmp1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0NMX007B6ZR0CFL0@mmp1.samsung.com>; Fri, 17 Apr 2015 17:33:03 +0900 (KST) From: Inha Song To: lee.jones@linaro.org Date: Fri, 17 Apr 2015 17:32:58 +0900 Message-id: <1429259579-16563-2-git-send-email-ideal.song@samsung.com> X-Mailer: git-send-email 2.0.0.390.gcb682f8 In-reply-to: <1429259579-16563-1-git-send-email-ideal.song@samsung.com> References: <1429259579-16563-1-git-send-email-ideal.song@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupnkeLIzCtJLcpLzFFi42JZI2JSomt/1CDUYOJ+OYsrFw8xWUx9+ITN 4t+UG+wW1788Z7WYf+Qcq8Wuv/cZLc69Wslocf/rUUaLy7vmsFksvX6RyWL52/9sFhOmr2Wx mDXxD4tF694j7A58Hhs+N7F5rJm3htFj5fIvbB6bVnWyedy5tofN4+XE32wefVtWMXp83iQX wBHFZZOSmpNZllqkb5fAlTFzwgP2ghcyFTef3GJqYPwi3sXIySEhYCJxo3sFK4QtJnHh3nq2 LkYuDiGBpYwSSxtnsMIUPfqxFCqxiFFi7fQFLBDORCaJ3h0PwarYBDQkvn/ezAxiiwhISGz8 0QdWxCzwk0ni690vYAlhgWqJMy1zwBpYBFQlfm2bxw5i8wq4Sbxc854RYp22xL6GmWwgNqeA u8TEJ0vAaoSAaq6fvMMMMlRC4BG7xI3Xd1kgBglIfJt8CMjmAErISmw6wAwxR1Li4IobLBMY hRcwMqxiFE0tSC4oTkovMtYrTswtLs1L10vOz93ECIyn0/+e9e9gvHvA+hCjAAejEg/vgXiD UCHWxLLiytxDjKZAGyYyS4km5wOjNq8k3tDYzMjC1MTU2Mjc0kxJnHeh1M9gIYH0xJLU7NTU gtSi+KLSnNTiQ4xMHJxSDYz1yQ0KGWxVW2zqr2VyG2b3WS6s7Fgzk/fxMcGf1/umzYxZeVJM rb/pp1CV+4597rrHBd/3r7zBbvpPvXAyR0CV/Oxrxbt2n1fmdRGeuk9z9UPJXraHEw0PdPv7 e8ga2tZ0rngb7mK11Nv1wMt3Z+YKpN2vW8xflaB4dOLxGZ2Md36/SnX6bqDEUpyRaKjFXFSc CACPmMA+ogIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrJIsWRmVeSWpSXmKPExsVy+t9jAV37owahBlfvi1pcuXiIyWLqwyds Fv+m3GC3uP7lOavF/CPnWC12/b3PaHHu1UpGi/tfjzJaXN41h81i6fWLTBbL3/5ns5gwfS2L xayJf1gsWvceYXfg89jwuYnNY828NYweK5d/YfPYtKqTzePOtT1sHi8n/mbz6NuyitHj8ya5 AI6oBkabjNTElNQihdS85PyUzLx0WyXv4HjneFMzA0NdQ0sLcyWFvMTcVFslF58AXbfMHKDL lRTKEnNKgUIBicXFSvp2mCaEhrjpWsA0Ruj6hgTB9RgZoIGENYwZMyc8YC94IVNx88ktpgbG L+JdjJwcEgImEo9+LGWDsMUkLtxbD2RzcQgJLGKUWDt9AQuEM5FJonfHQ1aQKjYBDYnvnzcz g9giAhISG3/0gRUxC/xkkvh69wtYQligWuJMyxywBhYBVYlf2+axg9i8Am4SL9e8Z4RYpy2x r2Em2GpOAXeJiU+WgNUIAdVcP3mHeQIj7wJGhlWMoqkFyQXFSem5hnrFibnFpXnpesn5uZsY wdH6TGoH48oGi0OMAhyMSjy8EkkGoUKsiWXFlbmHGCU4mJVEeDm2AYV4UxIrq1KL8uOLSnNS iw8xmgJdNZFZSjQ5H5hI8kriDY1NzIwsjcwNLYyMzZXEeefoyoUKCaQnlqRmp6YWpBbB9DFx cEo1MB5h0Bb0UZHv35NwR+rfRJ3kB9b3Vz3/39otdOVJjYya4r2l0TU+dp57H28znfanjC/r zioumbdzJPjn3C2c+kJv792MXxcyDCdE2Je96+mV2i7nsXTZ/PkzjT9N6lI6tJnhbID40VK3 91nSn2Vqew7MMD4t4/OvOnjuPHapmhvhtc96ZPuMPyixFGckGmoxFxUnAgAadpCW7AIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, alsa-devel@alsa-project.org, pawel.moll@arm.com, ijc+devicetree@hellion.org.uk, patches@opensource.wolfsonmicro.com, linux-kernel@vger.kernel.org, robh+dt@kernel.org, cw00.choi@samsung.com, broonie@kernel.org, ckeepax@opensource.wolfsonmicro.com, rf@opensource.wolfsonmicro.com, Inha Song Subject: [alsa-devel] [PATCH 1/2] extcon: arizona: Add support for select accessory detect mode when headphone detection" X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP This patch add support for select accessory detect mode to HPDETL or HPDETR. Arizona provides a headphone detection circuit on the HPDETL and HPDETR pins to measure the impedance of an external load connected to the headphone. Depending on board design, headphone detect pins can change to HPDETR or HPDETL. Signed-off-by: Inha Song --- drivers/extcon/extcon-arizona.c | 34 ++++++++++++++++++++++++++++++---- include/linux/mfd/arizona/pdata.h | 3 +++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c index 63f01c4..7bc9159 100644 --- a/drivers/extcon/extcon-arizona.c +++ b/drivers/extcon/extcon-arizona.c @@ -95,6 +95,7 @@ struct arizona_extcon_info { int jack_flips; int hpdet_ip; + int hpdet_channel; struct extcon_dev *edev; }; @@ -653,9 +654,9 @@ static void arizona_identify_headphone(struct arizona_extcon_info *info) ret = regmap_update_bits(arizona->regmap, ARIZONA_ACCESSORY_DETECT_MODE_1, ARIZONA_ACCDET_MODE_MASK, - ARIZONA_ACCDET_MODE_HPL); + info->hpdet_channel); if (ret != 0) { - dev_err(arizona->dev, "Failed to set HPDETL mode: %d\n", ret); + dev_err(arizona->dev, "Failed to set HPDET mode: %d\n", ret); goto err; } @@ -705,9 +706,9 @@ static void arizona_start_hpdet_acc_id(struct arizona_extcon_info *info) ARIZONA_ACCESSORY_DETECT_MODE_1, ARIZONA_ACCDET_SRC | ARIZONA_ACCDET_MODE_MASK, info->micd_modes[0].src | - ARIZONA_ACCDET_MODE_HPL); + info->hpdet_channel); if (ret != 0) { - dev_err(arizona->dev, "Failed to set HPDETL mode: %d\n", ret); + dev_err(arizona->dev, "Failed to set HPDET mode: %d\n", ret); goto err; } @@ -1103,6 +1104,23 @@ static void arizona_micd_set_level(struct arizona *arizona, int index, regmap_update_bits(arizona->regmap, reg, mask, level); } +#ifdef CONFIG_OF +static int arizona_of_get_extcon_pdata(struct arizona *arizona) +{ + struct arizona_pdata *pdata = &arizona->pdata; + + of_property_read_u32(arizona->dev->of_node, "wlf,hpdet-channel", + &pdata->hpdet_channel); + + return 0; +} +#else +static inline int arizona_of_get_extcon_pdata(struct arizona *arizona) +{ + return 0; +} +#endif + static int arizona_extcon_probe(struct platform_device *pdev) { struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); @@ -1120,6 +1138,9 @@ static int arizona_extcon_probe(struct platform_device *pdev) if (!info) return -ENOMEM; + if (!dev_get_platdata(arizona->dev)) + arizona_of_get_extcon_pdata(arizona); + info->micvdd = devm_regulator_get(&pdev->dev, "MICVDD"); if (IS_ERR(info->micvdd)) { ret = PTR_ERR(info->micvdd); @@ -1338,6 +1359,11 @@ static int arizona_extcon_probe(struct platform_device *pdev) arizona_extcon_set_mode(info, 0); + if (arizona->pdata.hpdet_channel) + info->hpdet_channel = ARIZONA_ACCDET_MODE_HPR; + else + info->hpdet_channel = ARIZONA_ACCDET_MODE_HPL; + pm_runtime_enable(&pdev->dev); pm_runtime_idle(&pdev->dev); pm_runtime_get_sync(&pdev->dev); diff --git a/include/linux/mfd/arizona/pdata.h b/include/linux/mfd/arizona/pdata.h index 4578c72..feb5903 100644 --- a/include/linux/mfd/arizona/pdata.h +++ b/include/linux/mfd/arizona/pdata.h @@ -139,6 +139,9 @@ struct arizona_pdata { /** GPIO used for mic isolation with HPDET */ int hpdet_id_gpio; + /** Channel to use for headphone detection */ + int hpdet_channel; + /** Extra debounce timeout used during initial mic detection (ms) */ int micd_detect_debounce;