From patchwork Sun Oct 4 13:38:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Ripard X-Patchwork-Id: 7323581 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 6B7CC9F1B9 for ; Sun, 4 Oct 2015 13:38:39 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8707D20529 for ; Sun, 4 Oct 2015 13:38:38 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 4838020519 for ; Sun, 4 Oct 2015 13:38:37 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 8B3412651AA; Sun, 4 Oct 2015 15:38:35 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,NO_DNS_FOR_FROM, RCVD_IN_DNSWL_LOW, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id 6DEB326153A; Sun, 4 Oct 2015 15:38:27 +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 6517026153C; Sun, 4 Oct 2015 15:38:26 +0200 (CEST) Received: from mail.free-electrons.com (down.free-electrons.com [37.187.137.238]) by alsa0.perex.cz (Postfix) with ESMTP id 3D6D82614A1 for ; Sun, 4 Oct 2015 15:38:19 +0200 (CEST) Received: by mail.free-electrons.com (Postfix, from userid 110) id 1C685346; Sun, 4 Oct 2015 15:38:18 +0200 (CEST) Received: from localhost (smb-atls-01.wifihubtelecom.net [94.199.127.61]) by mail.free-electrons.com (Postfix) with ESMTPSA id C04BF2D2; Sun, 4 Oct 2015 15:38:17 +0200 (CEST) From: Maxime Ripard To: Liam Girdwood , Mark Brown Date: Sun, 4 Oct 2015 15:38:16 +0200 Message-Id: <1443965896-6205-1-git-send-email-maxime.ripard@free-electrons.com> X-Mailer: git-send-email 2.5.3 Cc: Emilio Lopez , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Maxime Ripard Subject: [alsa-devel] [PATCH] ASoC: sun4i-codec: Rework and fix headphone routing 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 Most of the boards have their headphone jack directly connected to the matching pins of the SoCs. Since most of the time we will have the same routing path, it makes sense to put that in the driver, and only have a property describing whether that route is enabled or not. It also fixes the following warning messages that were seen so far: sun4i-codec 1c22c00.codec: ASoC: no sink widget found for Headphone Jack sun4i-codec 1c22c00.codec: ASoC: Failed to add route HP Left -> direct -> Headphone Jack sun4i-codec 1c22c00.codec: ASoC: no sink widget found for Headphone Jack sun4i-codec 1c22c00.codec: ASoC: Failed to add route HP Right -> direct -> Headphone Jack Reported-by: Priit Laes Signed-off-by: Maxime Ripard --- .../devicetree/bindings/sound/sun4i-codec.txt | 9 ++++---- sound/soc/sunxi/sun4i-codec.c | 25 +++++++++++++++++----- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Documentation/devicetree/bindings/sound/sun4i-codec.txt b/Documentation/devicetree/bindings/sound/sun4i-codec.txt index 680144b74ae9..470823845698 100644 --- a/Documentation/devicetree/bindings/sound/sun4i-codec.txt +++ b/Documentation/devicetree/bindings/sound/sun4i-codec.txt @@ -13,10 +13,10 @@ Required properties: - clock-names: should contain followings: - "apb": the parent APB clock for this controller - "codec": the parent module clock -- routing : A list of the connections between audio components. Each - entry is a pair of strings, the first being the connection's sink, - the second being the connection's source. +Optional Properties: +- allwinner,hp-jack-attached: Indicates that the headphone jack on the + board is directly routed to the SoC pins Example: codec: codec@01c22c00 { @@ -28,6 +28,5 @@ codec: codec@01c22c00 { clock-names = "apb", "codec"; dmas = <&dma 0 19>, <&dma 0 19>; dma-names = "rx", "tx"; - routing = "Headphone Jack", "HP Right", - "Headphone Jack", "HP Left"; + allwinner,hp-jack-attached; }; diff --git a/sound/soc/sunxi/sun4i-codec.c b/sound/soc/sunxi/sun4i-codec.c index 47780552dcd0..e86b8fcede5a 100644 --- a/sound/soc/sunxi/sun4i-codec.c +++ b/sound/soc/sunxi/sun4i-codec.c @@ -568,10 +568,18 @@ static struct snd_soc_dai_link *sun4i_codec_create_link(struct device *dev, return link; }; +static const struct snd_soc_dapm_widget sun4i_codec_sink_widgets[] = { + SND_SOC_DAPM_HP("Headphone Jack", NULL), +}; + +static const struct snd_soc_dapm_route sun4i_codec_sink_routes[] = { + { "Headphone Jack", NULL, "HP Right" }, + { "Headphone Jack", NULL, "HP Left" }, +}; + static struct snd_soc_card *sun4i_codec_create_card(struct device *dev) { struct snd_soc_card *card; - int ret; card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL); if (!card) @@ -584,10 +592,17 @@ static struct snd_soc_card *sun4i_codec_create_card(struct device *dev) card->dev = dev; card->name = "sun4i-codec"; - ret = snd_soc_of_parse_audio_routing(card, "routing"); - if (ret) { - dev_err(dev, "Failed to create our audio routing\n"); - return NULL; + /* + * FIXME: This will probably require more logic once we will + * support other sinks (for capture for example), or + * encounter more complicated setups where the + * headphone jack is not directly connected to the SoC. + */ + if (of_property_read_bool(dev->of_node, "allwinner,hp-jack-attached")) { + card->dapm_widgets = sun4i_codec_sink_widgets; + card->num_dapm_widgets = ARRAY_SIZE(sun4i_codec_sink_widgets); + card->dapm_routes = sun4i_codec_sink_routes; + card->num_dapm_routes = ARRAY_SIZE(sun4i_codec_sink_routes); } return card;