From patchwork Sat Oct 13 03:32:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasily Khoruzhick X-Patchwork-Id: 983417 Return-Path: X-Original-To: incoming-dt@patchwork.ozlabs.org Delivered-To: patchwork-incoming-dt@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=devicetree-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="c8fqOjA6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42X9JK3m9Zz9s89 for ; Sat, 13 Oct 2018 14:32:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726125AbeJMLIQ (ORCPT ); Sat, 13 Oct 2018 07:08:16 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:46011 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725970AbeJMLIP (ORCPT ); Sat, 13 Oct 2018 07:08:15 -0400 Received: by mail-pf1-f196.google.com with SMTP id u12-v6so7079810pfn.12 for ; Fri, 12 Oct 2018 20:32:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n3iaN3Xu/mE4N7hU0RKzQv44MnZsu06IF0GDrF621RM=; b=c8fqOjA6VF48WajsJDmTlV0pCkxYPrgleQ1KaqlmGJVPJng4o92X5xih8fr0uZL4sJ adQnBgwBHg0XqoVJe/JE7dJLctyVo8rHq5OAbmWeGA/GSKZkJi6Hf0MX1YWudXM2FoUT I78b4kQ26NtmM1IaHAkdpA1105xkyvsILSaiOuZfGhfX04iD12chZ9UqP6wuuMN+9v2N VFcGgO84oE0DOn6og4PZGhXhlGhPutGyxEkHWbT7mp44QRWLvppou5+NVeAJTBZPdWof vNEAQOToSSVUGPo95fkJN964oZXAt61DRkdjwrOpNpDKufcqannVCGNEUag20BbSAXZ/ vY7A== 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:mime-version:content-transfer-encoding; bh=n3iaN3Xu/mE4N7hU0RKzQv44MnZsu06IF0GDrF621RM=; b=pBcRf2j4ltmY1cxK/s5XJZ5xDTZFOF9GJHniM37hkt5Rwfm6f0u/lDOHnM60JctM38 cJ6tLwvAuRgz/WwVptKuGw3KBAxRAL0Koa2stSvkKrqB62XpPXS5n5r/ipmsq1Pge7bB hx3mKqF0F2iSfh7f5dkxFERrownvL0KM5am7RlCRAU4egEf6zSJvnEb2oQGP902mL07L vXDo0EXlkX/P3zEXi5iXNeyPVKyH+mlgCxcAtNcHQh77ksFS/LS4Kg7jlnDu7bhlOwLh e9071RDrxR443O1er5xgryvW83a6fKf5HjY+Fwu4QPAs8derIbLE7jkR8Uo1lENO5DZ4 dn/A== X-Gm-Message-State: ABuFfoiTRCbQeN/1nrnHDuZBhVvFwM7cyFJvdlqfkJ+O4GAhDhKWpiZ6 4mjYhWnzd4jPZzfWWLumyxs= X-Google-Smtp-Source: ACcGV605mmi9SCo7GFQ8QIBIh3lZ22FY0xHV3pBDAmBbBdV2SE/UTeOJ6OAjhOeyjrFUvf6qtIEqMg== X-Received: by 2002:a63:3cc:: with SMTP id 195-v6mr7992313pgd.262.1539401567818; Fri, 12 Oct 2018 20:32:47 -0700 (PDT) Received: from anarsoul-thinkpad.lan (216-71-193-140.dyn.novuscom.net. [216.71.193.140]) by smtp.gmail.com with ESMTPSA id u79-v6sm5565039pfi.104.2018.10.12.20.32.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Oct 2018 20:32:47 -0700 (PDT) From: Vasily Khoruzhick To: Liam Girdwood , Mark Brown , Rob Herring , Mark Rutland , Maxime Ripard , Jaroslav Kysela , Takashi Iwai , Marcus Cooper , Mylene JOSSERAND , alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Vasily Khoruzhick Subject: [PATCH 03/10] ASoC: sun8i-codec: add support for speaker amp GPIO Date: Fri, 12 Oct 2018 20:32:23 -0700 Message-Id: <20181013033230.6506-4-anarsoul@gmail.com> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181013033230.6506-1-anarsoul@gmail.com> References: <20181013033230.6506-1-anarsoul@gmail.com> MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Some boards may have external amplifier for speaker that is controlled via GPIO, add support for it in similar way as it's done in sun4i-codec Signed-off-by: Vasily Khoruzhick --- .../bindings/sound/sun8i-a33-codec.txt | 3 +++ sound/soc/sunxi/sun8i-codec.c | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/sun8i-a33-codec.txt b/Documentation/devicetree/bindings/sound/sun8i-a33-codec.txt index 2ca3d138528e..21ab72b29ee4 100644 --- a/Documentation/devicetree/bindings/sound/sun8i-a33-codec.txt +++ b/Documentation/devicetree/bindings/sound/sun8i-a33-codec.txt @@ -25,6 +25,9 @@ Required properties: - "bus": the parent APB clock for this controller - "mod": the parent module clock +Optional properties: +- allwinner,pa-gpios: gpio to enable external amplifier + Here is an example to add a sound card and the codec binding on sun8i SoCs that are similar to A33 using simple-card: diff --git a/sound/soc/sunxi/sun8i-codec.c b/sound/soc/sunxi/sun8i-codec.c index e681e194ad4c..96879dad3425 100644 --- a/sound/soc/sunxi/sun8i-codec.c +++ b/sound/soc/sunxi/sun8i-codec.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -97,8 +98,22 @@ struct sun8i_codec { struct regmap *regmap; struct clk *clk_module; struct clk *clk_bus; + struct gpio_desc *gpio_pa; }; +static int sun8i_codec_spk_event(struct snd_soc_dapm_widget *w, + struct snd_kcontrol *k, int event) +{ + struct snd_soc_component *component = + snd_soc_dapm_to_component(w->dapm); + struct sun8i_codec *scodec = snd_soc_component_get_drvdata(component); + + gpiod_set_value_cansleep(scodec->gpio_pa, + !!SND_SOC_DAPM_EVENT_ON(event)); + + return 0; +} + static int sun8i_codec_runtime_resume(struct device *dev) { struct sun8i_codec *scodec = dev_get_drvdata(dev); @@ -432,6 +447,9 @@ static const struct snd_soc_dapm_widget sun8i_codec_dapm_widgets[] = { SOC_MIXER_ARRAY("Right Digital ADC Mixer", SND_SOC_NOPM, 0, 0, sun8i_input_mixer_controls), + /* Speaker */ + SND_SOC_DAPM_SPK("Speaker", sun8i_codec_spk_event), + /* Clocks */ SND_SOC_DAPM_SUPPLY("MODCLK AFI1", SUN8I_MOD_CLK_ENA, SUN8I_MOD_CLK_ENA_AIF1, 0, NULL, 0), @@ -570,6 +588,15 @@ static int sun8i_codec_probe(struct platform_device *pdev) return PTR_ERR(scodec->clk_bus); } + scodec->gpio_pa = devm_gpiod_get_optional(&pdev->dev, "allwinner,pa", + GPIOD_OUT_LOW); + if (IS_ERR(scodec->gpio_pa)) { + ret = PTR_ERR(scodec->gpio_pa); + if (ret != -EPROBE_DEFER) + dev_err(&pdev->dev, "Failed to get pa gpio: %d\n", ret); + return ret; + } + res_base = platform_get_resource(pdev, IORESOURCE_MEM, 0); base = devm_ioremap_resource(&pdev->dev, res_base); if (IS_ERR(base)) {