From patchwork Tue Jul 14 09:05:34 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shengjiu Wang X-Patchwork-Id: 235514 Delivered-To: patch@linaro.org Received: by 2002:a92:d244:0:0:0:0:0 with SMTP id v4csp3557062ilg; Tue, 14 Jul 2020 02:09:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxDlA4XFzNQIedjTj6tOB6Z+uk+lSEcsGPy+TeQR5qTDvzdqMi+bf3SeP58VECLw3CQxpnC X-Received: by 2002:a17:906:8316:: with SMTP id j22mr3473191ejx.97.1594717777760; Tue, 14 Jul 2020 02:09:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594717777; cv=none; d=google.com; s=arc-20160816; b=DQmkVrj158ibdze9+QeLaBDZq2O+sGKYSTCyCcHR6CaYNnqucA5OIpCwUO5fBbufzM aJawAriU7tHcl27n1xuuMinzw+XOAu7kE4k39DXdyMrwcm7Fy30AyM8QUuQKQ8eYZnzl 10xCGI1/PhxTLyUd7E1b7YlzucaxY+o7u70ql3neNLZeRt0E15mUY+8QMqLONxols363 qny8C7pyzrMsFQ2xOdNKy9Cs4Lozah8YixONmcSlp6XrUfug/P70tNmdLhQnJNuFZKbe OSo8v1wVXwxly+dyXztIpx2C1+qctKu8BBOGg76XOzU5dfa5DCpaJUDqLugCQJZ+ZcrZ KUSA== 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; bh=YdbCN2OM8dyQvyU5XrBaFXYWY2XhVDeLSpv1f4jtd0M=; b=dSElT24vSBh47UlYRfE6I7T8usjBWmrJT8OkXQbFd0TZNFXFp+ntRr1atVqItGOUxf Y+bVEqptKHXR6S5JHWRQasQFgYJTvx6gCm5k3mkd7VBrqQRiX5DqMDDXHxxybfuWUxPN yLc4+Svx3D9WhmxQfr2VA72LLjQC6gSGL5zQuAABtLsP9rOazP6gNcvEdIlkdg9B+TCl dUEPS60vs5KOFnQakBWW7WOhiuxgoDTmOIgJPW4AuS7cT/Z+rlm1HxhDhbPE/d8EUNhU U6RvyPkTyAr5Kt5Ew3O9+XGTiGACscuI2Gj18qQEJcGU1KiuEd56+o5N6DXzJCNyX6+9 PSng== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g26si11234851edq.238.2020.07.14.02.09.37; Tue, 14 Jul 2020 02:09:37 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726768AbgGNJJV (ORCPT + 6 others); Tue, 14 Jul 2020 05:09:21 -0400 Received: from inva020.nxp.com ([92.121.34.13]:47308 "EHLO inva020.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725833AbgGNJJV (ORCPT ); Tue, 14 Jul 2020 05:09:21 -0400 Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 74C2F1A113A; Tue, 14 Jul 2020 11:09:19 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 242A11A01C1; Tue, 14 Jul 2020 11:09:13 +0200 (CEST) Received: from localhost.localdomain (shlinux2.ap.freescale.net [10.192.224.44]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id E132A40305; Tue, 14 Jul 2020 17:09:04 +0800 (SGT) From: Shengjiu Wang To: perex@perex.cz, tiwai@suse.com, lgirdwood@gmail.com, broonie@kernel.org, kuninori.morimoto.gx@renesas.com, katsuhiro@katsuster.net, samuel@sholland.org, alsa-devel@alsa-project.org, robh+dt@kernel.org, devicetree@vger.kernel.org, timur@kernel.org, nicoleotsuka@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: [PATCH 1/3] ASoC: simple-card-utils: Support configure pin_name for asoc_simple_init_jack Date: Tue, 14 Jul 2020 17:05:34 +0800 Message-Id: <1594717536-5188-2-git-send-email-shengjiu.wang@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594717536-5188-1-git-send-email-shengjiu.wang@nxp.com> References: <1594717536-5188-1-git-send-email-shengjiu.wang@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Currently the pin_name is fixed in asoc_simple_init_jack, but some driver may use a different pin_name. So add a new parameter in asoc_simple_init_jack for configuring pin_name. If this parameter is NULL, then the default pin_name is used. Signed-off-by: Shengjiu Wang --- include/sound/simple_card_utils.h | 6 +++--- sound/soc/generic/simple-card-utils.c | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) -- 2.27.0 diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h index bbdd1542d6f1..86a1e956991e 100644 --- a/include/sound/simple_card_utils.h +++ b/include/sound/simple_card_utils.h @@ -12,9 +12,9 @@ #include #define asoc_simple_init_hp(card, sjack, prefix) \ - asoc_simple_init_jack(card, sjack, 1, prefix) + asoc_simple_init_jack(card, sjack, 1, prefix, NULL) #define asoc_simple_init_mic(card, sjack, prefix) \ - asoc_simple_init_jack(card, sjack, 0, prefix) + asoc_simple_init_jack(card, sjack, 0, prefix, NULL) struct asoc_simple_dai { const char *name; @@ -131,7 +131,7 @@ int asoc_simple_parse_pin_switches(struct snd_soc_card *card, int asoc_simple_init_jack(struct snd_soc_card *card, struct asoc_simple_jack *sjack, - int is_hp, char *prefix); + int is_hp, char *prefix, char *pin); int asoc_simple_init_priv(struct asoc_simple_priv *priv, struct link_info *li); diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c index 8c54dc6710fe..b408cb5ed644 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -540,7 +540,8 @@ EXPORT_SYMBOL_GPL(asoc_simple_parse_pin_switches); int asoc_simple_init_jack(struct snd_soc_card *card, struct asoc_simple_jack *sjack, - int is_hp, char *prefix) + int is_hp, char *prefix, + char *pin) { struct device *dev = card->dev; enum of_gpio_flags flags; @@ -557,12 +558,12 @@ int asoc_simple_init_jack(struct snd_soc_card *card, if (is_hp) { snprintf(prop, sizeof(prop), "%shp-det-gpio", prefix); - pin_name = "Headphones"; + pin_name = pin ? pin : "Headphones"; gpio_name = "Headphone detection"; mask = SND_JACK_HEADPHONE; } else { snprintf(prop, sizeof(prop), "%smic-det-gpio", prefix); - pin_name = "Mic Jack"; + pin_name = pin ? pin : "Mic Jack"; gpio_name = "Mic detection"; mask = SND_JACK_MICROPHONE; } From patchwork Tue Jul 14 09:05:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shengjiu Wang X-Patchwork-Id: 235512 Delivered-To: patch@linaro.org Received: by 2002:a92:d244:0:0:0:0:0 with SMTP id v4csp3556959ilg; Tue, 14 Jul 2020 02:09:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzVgo0TVbDLKXdUiT+DTiKK1Nz0QvPAN7TdHTN098sir9AaVqPtP5phx2z44T8B6ZYkxXjh X-Received: by 2002:aa7:c545:: with SMTP id s5mr3392754edr.19.1594717767087; Tue, 14 Jul 2020 02:09:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594717767; cv=none; d=google.com; s=arc-20160816; b=pjPyYazokhoyoJUlZrm/fTsTSyZuWc4C/dvCuRy51aUXFvGGZxEewxp8KrPMV1EV22 uxycOuZtNmWXypUSgElZck48h5FnKoSqXmIpX+U1MUCXgBWAAsFK4GEalYHmVKXoJeqK US+3yZccVava3uQH0joVmw1/UlCdceyQxfIx/9bakBCKqDjfguVV9/rcQ2IR5XkWCtf4 HljmpSAAS+PR2Rr8xCl3WAcPgoADf01DY+K8POGAEsbjp/49KQ1GN6BmwBhxZmO9xECc 0xx0Il0V1NO0EuK6lTxqt6Z5NWnzateLOWutOTYvQlBhHDt5f6+i65AhchZ4mhptYi7G xwEw== 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; bh=4EENnwdigxJhVo+7WddMkLjjLSlZXRk6D+TqcPgGFV4=; b=C3x2iWuG9I2mC3Wp3OLMyW36ejokHbWBXSgBjMxCXJdYaZQ+dw7Y9kJIRAWmhlIEdS QzOCzfKddZsWVM6HAQ0njP1wd8M+MAnMzISu/sZdYIphtMLxH1rnX0FXbN4Yexp+C4b5 K4C3dsfByFmTIhWTB6p3fiG1TfHdzaYmf1ZYxMr5ub/GhB4GRPj+63GzQdpISyFl9p68 /Y1TkXLFZxhrLzRTRFj+tjzDUcGn+kPSIOm3W9pLiFAcab8y5y3Z/WO1hVT7GRvF/1DF gHPEDFYdD32ldRkAqCgAM6g72AVm90eNBc9zaYplG+UsBi/7+sWgA0JEW0LVl52DZVWl xgdQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h14si10810267edr.586.2020.07.14.02.09.26; Tue, 14 Jul 2020 02:09:27 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726850AbgGNJJZ (ORCPT + 6 others); Tue, 14 Jul 2020 05:09:25 -0400 Received: from inva021.nxp.com ([92.121.34.21]:39554 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725833AbgGNJJY (ORCPT ); Tue, 14 Jul 2020 05:09:24 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 3A68D200F54; Tue, 14 Jul 2020 11:09:23 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id DA146200F44; Tue, 14 Jul 2020 11:09:16 +0200 (CEST) Received: from localhost.localdomain (shlinux2.ap.freescale.net [10.192.224.44]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id C88D9402BB; Tue, 14 Jul 2020 17:09:08 +0800 (SGT) From: Shengjiu Wang To: perex@perex.cz, tiwai@suse.com, lgirdwood@gmail.com, broonie@kernel.org, kuninori.morimoto.gx@renesas.com, katsuhiro@katsuster.net, samuel@sholland.org, alsa-devel@alsa-project.org, robh+dt@kernel.org, devicetree@vger.kernel.org, timur@kernel.org, nicoleotsuka@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: [PATCH 2/3] ASoC: bindings: fsl-asoc-card: Support hp-det-gpio and mic-det-gpio Date: Tue, 14 Jul 2020 17:05:35 +0800 Message-Id: <1594717536-5188-3-git-send-email-shengjiu.wang@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594717536-5188-1-git-send-email-shengjiu.wang@nxp.com> References: <1594717536-5188-1-git-send-email-shengjiu.wang@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Add headphone and microphone detection GPIO support. Signed-off-by: Shengjiu Wang --- Documentation/devicetree/bindings/sound/fsl-asoc-card.txt | 3 +++ 1 file changed, 3 insertions(+) -- 2.27.0 diff --git a/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt b/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt index 133d7e14a4d0..8a6a3d0fda5e 100644 --- a/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt +++ b/Documentation/devicetree/bindings/sound/fsl-asoc-card.txt @@ -69,6 +69,9 @@ Optional properties: coexisting in order to support the old bindings of wm8962 and sgtl5000. + - hp-det-gpio : The GPIO that detect headphones are plugged in + - mic-det-gpio : The GPIO that detect microphones are plugged in + Optional unless SSI is selected as a CPU DAI: - mux-int-port : The internal port of the i.MX audio muxer (AUDMUX) From patchwork Tue Jul 14 09:05:36 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shengjiu Wang X-Patchwork-Id: 235513 Delivered-To: patch@linaro.org Received: by 2002:a92:d244:0:0:0:0:0 with SMTP id v4csp3557054ilg; Tue, 14 Jul 2020 02:09:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx+CbDUyYCyQZrD7BnD/K5oDW2U9zQYM1WPCeP9dWQl52Oe3arEhbC0pSz8nWwZjon+vsIs X-Received: by 2002:a17:906:694d:: with SMTP id c13mr3432639ejs.337.1594717777301; Tue, 14 Jul 2020 02:09:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594717777; cv=none; d=google.com; s=arc-20160816; b=jUGZUDkfnAJZwcrBAAhKfVcrIWBLcKO/g/6Tj1Km6HzCNIasreIzzSBTlMYNVCaNMu xMLoiTgEvGgFtU6pgdODTdb4i5fOJnRj9XN6npCIf42GXY/SM2k1+mkeG1RLYblxhIJg T8fpEqda3yBiliJChKj9GRnfVUpRyAtKu/xuMgzpFecvbWGOkBBuSbkz7y6Hs2lJRx4y nuGc4Dp3YjnaNZGV0MR+idIMj+Bh5uld1l5CrVYw4AMye6ZP91o5odCfghTr+T519btT UGsuWhilXIColew54F8F+j0QpgipNP6tv5KKYfowftonHbC8TMTMhcVCJHfC4B9hs3Xr //Cw== 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; bh=jgKU773VCu//far6nyLY8eYgi8oCFxIGkcOknWCaR64=; b=rxPRATQWSAZff6MHhoGgGGBWzoIVLA/spetmC+pOOxHr5Lv9eU5jcW0OSUTScJUWiY S8yDtSwre9AQSxz4RAlNZRiNs7MLM1aypLSYui4h7h64VRlFHMvMcmehfsscG19JP1ON MAr43ScUziUyjfkveKH3B1P+iaFkAMtLWaFQirZOlH7DEvK0fai1cvk/j4BijFhXGZXb HnGm6QNgkq6S5z5ckraUrJYUxxJJo0WbFGKeayKtJFH3Pd3OGvyb137L82QM1di+FU7t Bx6zNf55PcG5q2hITMk+3WMm4iGD44l2trq6S/iT7vrJgQdvR5y37WeEtNasdItSjT8w bgOQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g26si11234851edq.238.2020.07.14.02.09.37; Tue, 14 Jul 2020 02:09:37 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726437AbgGNJJc (ORCPT + 6 others); Tue, 14 Jul 2020 05:09:32 -0400 Received: from inva021.nxp.com ([92.121.34.21]:39694 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725833AbgGNJJ3 (ORCPT ); Tue, 14 Jul 2020 05:09:29 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 3E3BF200F70; Tue, 14 Jul 2020 11:09:27 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id B746C200179; Tue, 14 Jul 2020 11:09:20 +0200 (CEST) Received: from localhost.localdomain (shlinux2.ap.freescale.net [10.192.224.44]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id B3703402E4; Tue, 14 Jul 2020 17:09:12 +0800 (SGT) From: Shengjiu Wang To: perex@perex.cz, tiwai@suse.com, lgirdwood@gmail.com, broonie@kernel.org, kuninori.morimoto.gx@renesas.com, katsuhiro@katsuster.net, samuel@sholland.org, alsa-devel@alsa-project.org, robh+dt@kernel.org, devicetree@vger.kernel.org, timur@kernel.org, nicoleotsuka@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Subject: [PATCH 3/3] ASoC: fsl-asoc-card: Support Headphone and Microphone Jack detection Date: Tue, 14 Jul 2020 17:05:36 +0800 Message-Id: <1594717536-5188-4-git-send-email-shengjiu.wang@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1594717536-5188-1-git-send-email-shengjiu.wang@nxp.com> References: <1594717536-5188-1-git-send-email-shengjiu.wang@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Use asoc_simple_init_jack function from simple card to implement the Headphone and Microphone detection. Register notifier to disable Speaker when Headphone is plugged in and enable Speaker when Headphone is unplugged. Register notifier to disable Digital Microphone when Analog Microphone is plugged in and enable DMIC when Analog Microphone is unplugged. Signed-off-by: Shengjiu Wang --- sound/soc/fsl/Kconfig | 1 + sound/soc/fsl/fsl-asoc-card.c | 69 ++++++++++++++++++++++++++++++++++- 2 files changed, 68 insertions(+), 2 deletions(-) -- 2.27.0 Acked-by: Nicolin Chen diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig index ea7b4787a8af..1c4ca5ec8caf 100644 --- a/sound/soc/fsl/Kconfig +++ b/sound/soc/fsl/Kconfig @@ -315,6 +315,7 @@ config SND_SOC_FSL_ASOC_CARD depends on OF && I2C # enforce SND_SOC_FSL_ASOC_CARD=m if SND_AC97_CODEC=m: depends on SND_AC97_CODEC || SND_AC97_CODEC=n + select SND_SIMPLE_CARD_UTILS select SND_SOC_IMX_AUDMUX select SND_SOC_IMX_PCM_DMA select SND_SOC_FSL_ESAI diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c index faac6ce9a82c..313058789ea9 100644 --- a/sound/soc/fsl/fsl-asoc-card.c +++ b/sound/soc/fsl/fsl-asoc-card.c @@ -15,6 +15,8 @@ #endif #include #include +#include +#include #include "fsl_esai.h" #include "fsl_sai.h" @@ -65,6 +67,8 @@ struct cpu_priv { /** * struct fsl_asoc_card_priv - Freescale Generic ASOC card private data * @dai_link: DAI link structure including normal one and DPCM link + * @hp_jack: Headphone Jack structure + * @mic_jack: Microphone Jack structure * @pdev: platform device pointer * @codec_priv: CODEC private data * @cpu_priv: CPU private data @@ -79,6 +83,8 @@ struct cpu_priv { struct fsl_asoc_card_priv { struct snd_soc_dai_link dai_link[3]; + struct asoc_simple_jack hp_jack; + struct asoc_simple_jack mic_jack; struct platform_device *pdev; struct codec_priv codec_priv; struct cpu_priv cpu_priv; @@ -445,6 +451,44 @@ static int fsl_asoc_card_audmux_init(struct device_node *np, return 0; } +static int hp_jack_event(struct notifier_block *nb, unsigned long event, + void *data) +{ + struct snd_soc_jack *jack = (struct snd_soc_jack *)data; + struct snd_soc_dapm_context *dapm = &jack->card->dapm; + + if (event & SND_JACK_HEADPHONE) + /* Disable speaker if headphone is plugged in */ + snd_soc_dapm_disable_pin(dapm, "Ext Spk"); + else + snd_soc_dapm_enable_pin(dapm, "Ext Spk"); + + return 0; +} + +static struct notifier_block hp_jack_nb = { + .notifier_call = hp_jack_event, +}; + +static int mic_jack_event(struct notifier_block *nb, unsigned long event, + void *data) +{ + struct snd_soc_jack *jack = (struct snd_soc_jack *)data; + struct snd_soc_dapm_context *dapm = &jack->card->dapm; + + if (event & SND_JACK_MICROPHONE) + /* Disable dmic if microphone is plugged in */ + snd_soc_dapm_disable_pin(dapm, "DMIC"); + else + snd_soc_dapm_enable_pin(dapm, "DMIC"); + + return 0; +} + +static struct notifier_block mic_jack_nb = { + .notifier_call = mic_jack_event, +}; + static int fsl_asoc_card_late_probe(struct snd_soc_card *card) { struct fsl_asoc_card_priv *priv = snd_soc_card_get_drvdata(card); @@ -745,8 +789,29 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) snd_soc_card_set_drvdata(&priv->card, priv); ret = devm_snd_soc_register_card(&pdev->dev, &priv->card); - if (ret && ret != -EPROBE_DEFER) - dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret); + if (ret) { + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret); + goto asrc_fail; + } + + if (of_property_read_bool(np, "hp-det-gpio")) { + ret = asoc_simple_init_jack(&priv->card, &priv->hp_jack, + 1, NULL, "Headphone Jack"); + if (ret) + goto asrc_fail; + + snd_soc_jack_notifier_register(&priv->hp_jack.jack, &hp_jack_nb); + } + + if (of_property_read_bool(np, "mic-det-gpio")) { + ret = asoc_simple_init_jack(&priv->card, &priv->mic_jack, + 0, NULL, "Mic Jack"); + if (ret) + goto asrc_fail; + + snd_soc_jack_notifier_register(&priv->mic_jack.jack, &mic_jack_nb); + } asrc_fail: of_node_put(asrc_np);