From patchwork Fri Feb 23 01:52:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ond=C5=99ej_Jirman?= X-Patchwork-Id: 205180 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:a81b:b0:108:e6aa:91d0 with SMTP id bq27csp331190dyb; Thu, 22 Feb 2024 17:53:33 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXTOGOYUWCDLdaujPWSwt9lxlfyEe7hFvLyYjtm5oftLlhvHJqBqNkOrwhbIndL++tzUH8vXhivjVL7QuOnrj6YvIzD7Q== X-Google-Smtp-Source: AGHT+IEY3FlJEQTemL5Lu15VImwxpOsCTj8eSYURISUCTnmvvGyCUWrNptQ5qe9K86HA1PeTmBrP X-Received: by 2002:a05:6402:43c3:b0:564:9628:2e2f with SMTP id p3-20020a05640243c300b0056496282e2fmr3799308edc.17.1708653213401; Thu, 22 Feb 2024 17:53:33 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708653213; cv=pass; d=google.com; s=arc-20160816; b=VLoF7XMhfHBL1JSfAkkVdsrwKDQjWg4bCpJehp1Q8kIyoPxUOZ/9cabfvoEN6EK1YH xcpLGd3HjNhkSYdXmZRCeLn4hEP5xbEK43S374cha0ell+cIjyDo0Q/Gl89DFBkB4vXq dJImcASeg395SYhokrkxUBm4YYc2Hvo0A8+dF64bq0EdNFtp1FOB0XpvrvVfMQM/QTGh F7lDFxscLogke2kS0MvE68hRzPDmkc0lYom3g43d5W/8FDH8t5gEtpIoTIm/jTjgBdt9 8KmVRLKt4m9oi+R2AGVS2HE5QLTkzyEJ7GnpVC/u4r3mLYct/N6FVeCM0ETeP3Ve8LkZ TYEQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=FWdJspBYMrhtTSLSa4y1djhqrRBMjUznKJebsmkbZis=; fh=lpP2IfcZNV/hf2mJVDijI7IDwsQdGK74Y9L5zbTSxLU=; b=x9+U8tmQA2124v2vp+bbwuNctmpDfkXewApOxjHaHLlqau4m3KKdq0KoFBXDX/EvHy O7bb5xuC+PPPKXsnq3u/UYgHHJ1ruu6eOlgki7EIWe1tFO7SLCUopVdkSWtJBKP4oMUp LFJ08XEIi6iqaJl8YMZHUoPOW6uaBzDKMsC31UC0R7hBESwTLuku2fOlR5TRruo85sEi XzZJzhd2FTcWsTONwcMNPr/WIAX+nNVnKLzZIDGZW9wsVRWjwmC5XReU3Zy8uvRLJbEY 4rtwVynFfGi0+jSt4jumGRJviRHtxfRC3TFmYTQVJAJd8RcbM+nr/nB83in3PQCayzxI jzLQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xff.cz header.s=mail header.b=nesnC+6m; arc=pass (i=1 spf=pass spfdomain=xff.cz dkim=pass dkdomain=xff.cz dmarc=pass fromdomain=xff.cz); spf=pass (google.com: domain of linux-kernel+bounces-77653-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-77653-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=xff.cz Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id a11-20020a05640213cb00b005643bf20cf2si5090518edx.272.2024.02.22.17.53.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Feb 2024 17:53:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-77653-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@xff.cz header.s=mail header.b=nesnC+6m; arc=pass (i=1 spf=pass spfdomain=xff.cz dkim=pass dkdomain=xff.cz dmarc=pass fromdomain=xff.cz); spf=pass (google.com: domain of linux-kernel+bounces-77653-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-77653-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=xff.cz Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id B84081F2256A for ; Fri, 23 Feb 2024 01:53:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A64AF1118D; Fri, 23 Feb 2024 01:52:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=xff.cz header.i=@xff.cz header.b="nesnC+6m" Received: from vps.xff.cz (vps.xff.cz [195.181.215.36]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5424BB670; Fri, 23 Feb 2024 01:52:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=195.181.215.36 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708653152; cv=none; b=J0xK2C1Q9GqnohtXKrCKEWAl9yCW/UIbCSXqzBdiEF/Bq/s0bRDHo8PcPaU1UM/8bIDx50bWF1lP0gpR0lhvbSI+nO0/L8OWTm6phLVfSYh6lIiY9ML7XqMeHjMForsMdGVA1ERuSFZ7487EXb34HWkTbgrVjgkN7yA9Ltc8RKg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708653152; c=relaxed/simple; bh=8aPsPyUjJEl/R2IiSeB6qnP9Jf53fx5I0eeKkSCAPzA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=a8hJLCNtefgvPdj2q9lFAOO2Fs7xOyJPkd02pzANWSiLyc+E3TRm8q7GvZV7EGPXYfWbf+4rs79aRYCRtYGeqq5xXzLu2W5jKuntOfw/Em38yDzL9VCjGtgcDBT5dP5gK3VfS4IOVsE2C9YOXY/RF4+6Iugg5lM5crFrjruaz3Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=xff.cz; spf=pass smtp.mailfrom=xff.cz; dkim=pass (1024-bit key) header.d=xff.cz header.i=@xff.cz header.b=nesnC+6m; arc=none smtp.client-ip=195.181.215.36 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=xff.cz Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=xff.cz DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xff.cz; s=mail; t=1708653142; bh=8aPsPyUjJEl/R2IiSeB6qnP9Jf53fx5I0eeKkSCAPzA=; h=From:To:Cc:Subject:Date:References:From; b=nesnC+6mGG1JXwhuQYFMsZ39AOqxAMSBv74peTwaDb8+yo0diL7UgMh8ZNFK8B3mj BtIo69lX68ln7+A+NIFsbD8fu2Ruyl3WD/pllnPe2G5HNwlO8svfGUzlgc2hfyxe5R aYkn4pHZyYPB0eyBKHYK7KqGKumADiV5WNzC+U+I= From: =?utf-8?q?Ond=C5=99ej_Jirman?= To: linux-kernel@vger.kernel.org, Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: Arnaud Ferraris , Chen-Yu Tsai , Jernej Skrabec , Samuel Holland , Ondrej Jirman , linux-sound@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev Subject: [PATCH v2 4/5] ASoC: sun50i-codec-analog: Enable jack detection on startup Date: Fri, 23 Feb 2024 02:52:14 +0100 Message-ID: <20240223015219.3618111-5-megi@xff.cz> In-Reply-To: <20240223015219.3618111-1-megi@xff.cz> References: <20240223015219.3618111-1-megi@xff.cz> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1791652751680069220 X-GMAIL-MSGID: 1791652751680069220 From: Arnaud Ferraris This commit adds the necessary setup to enable jack detection on startup as well as the callback function enabling the microphone ADC when headset bias is enabled. The microphone ADC is also disabled in suspend. Signed-off-by: Arnaud Ferraris [Samuel: Moved MICADCEN setup to HBIAS event, added bias hooks] Signed-off-by: Samuel Holland Signed-off-by: Ondřej Jirman --- sound/soc/sunxi/sun50i-codec-analog.c | 32 ++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/sound/soc/sunxi/sun50i-codec-analog.c b/sound/soc/sunxi/sun50i-codec-analog.c index cedd4de42d1a..2081721a8ff2 100644 --- a/sound/soc/sunxi/sun50i-codec-analog.c +++ b/sound/soc/sunxi/sun50i-codec-analog.c @@ -116,8 +116,10 @@ #define SUN50I_ADDA_HS_MBIAS_CTRL_MMICBIASEN 7 #define SUN50I_ADDA_JACK_MIC_CTRL 0x1d +#define SUN50I_ADDA_JACK_MIC_CTRL_JACKDETEN 7 #define SUN50I_ADDA_JACK_MIC_CTRL_INNERRESEN 6 #define SUN50I_ADDA_JACK_MIC_CTRL_HMICBIASEN 5 +#define SUN50I_ADDA_JACK_MIC_CTRL_MICADCEN 4 /* mixer controls */ static const struct snd_kcontrol_new sun50i_a64_codec_mixer_controls[] = { @@ -296,6 +298,19 @@ static const struct snd_kcontrol_new sun50i_codec_earpiece_switch[] = { SUN50I_ADDA_EARPIECE_CTRL1_ESPPA_MUTE, 1, 0), }; +static int sun50i_codec_hbias_event(struct snd_soc_dapm_widget *w, + struct snd_kcontrol *kcontrol, int event) +{ + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); + u32 value = !!SND_SOC_DAPM_EVENT_ON(event); + + regmap_update_bits(component->regmap, SUN50I_ADDA_JACK_MIC_CTRL, + BIT(SUN50I_ADDA_JACK_MIC_CTRL_MICADCEN), + value << SUN50I_ADDA_JACK_MIC_CTRL_MICADCEN); + + return 0; +} + static const struct snd_soc_dapm_widget sun50i_a64_codec_widgets[] = { /* DAC */ SND_SOC_DAPM_DAC("Left DAC", NULL, SUN50I_ADDA_MIX_DAC_CTRL, @@ -367,7 +382,8 @@ static const struct snd_soc_dapm_widget sun50i_a64_codec_widgets[] = { /* Microphone Bias */ SND_SOC_DAPM_SUPPLY("HBIAS", SUN50I_ADDA_JACK_MIC_CTRL, SUN50I_ADDA_JACK_MIC_CTRL_HMICBIASEN, - 0, NULL, 0), + 0, sun50i_codec_hbias_event, + SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), /* Mic input path */ SND_SOC_DAPM_PGA("Mic2 Amplifier", SUN50I_ADDA_MIC2_CTRL, @@ -474,14 +490,28 @@ static const struct snd_soc_dapm_route sun50i_a64_codec_routes[] = { static int sun50i_a64_codec_set_bias_level(struct snd_soc_component *component, enum snd_soc_bias_level level) { + struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component); + int hbias; + switch (level) { case SND_SOC_BIAS_OFF: + regmap_clear_bits(component->regmap, SUN50I_ADDA_JACK_MIC_CTRL, + BIT(SUN50I_ADDA_JACK_MIC_CTRL_JACKDETEN) | + BIT(SUN50I_ADDA_JACK_MIC_CTRL_MICADCEN)); + regmap_set_bits(component->regmap, SUN50I_ADDA_HP_CTRL, BIT(SUN50I_ADDA_HP_CTRL_PA_CLK_GATE)); break; case SND_SOC_BIAS_STANDBY: regmap_clear_bits(component->regmap, SUN50I_ADDA_HP_CTRL, BIT(SUN50I_ADDA_HP_CTRL_PA_CLK_GATE)); + + hbias = snd_soc_dapm_get_pin_status(dapm, "HBIAS"); + regmap_update_bits(component->regmap, SUN50I_ADDA_JACK_MIC_CTRL, + BIT(SUN50I_ADDA_JACK_MIC_CTRL_JACKDETEN) | + BIT(SUN50I_ADDA_JACK_MIC_CTRL_MICADCEN), + BIT(SUN50I_ADDA_JACK_MIC_CTRL_JACKDETEN) | + hbias << SUN50I_ADDA_JACK_MIC_CTRL_MICADCEN); break; default: break;