From nobody Tue Oct 7 00:25:07 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 119531E4AE for ; Wed, 16 Jul 2025 12:33:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669217; cv=none; b=cUgbHyUVJhRJr7q/UWxhwLDTI6Ca2BbY6SM3t1l/jxhKR0i+eZzaM4R/IsvFDQgm3e+C5hFJpWweZE5uDWpG2B+f8pgsClUO8bLVELGXMmLKjOPAtk6tg8AJjjN+GiMeWFS8fE+iNIKntFScMIOZ1Me/cjvHntjwbqWGoi2DL4I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669217; c=relaxed/simple; bh=4Gv0/T/8U7C4wEDQQZ/epmxFjq6mYJfPd64LXq8Q4lk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nwDU/O9gCw8R33Xh2ozll3KqprHF039+k3R4wE0GK8jzude7MR+UqBlUm63rRUm56GHtmrTcVbQplnRkdOthYq4qfSKm+iGd5oMOslcKEwPcAo2dQqZgtwuBJ4Cb8fyoE9Z6ffI0XifN3mvAACp60AoTKdMmrF2sJFkiQ6URo8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=BRKurpOq; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="BRKurpOq" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56G5khI3008226 for ; Wed, 16 Jul 2025 12:33:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=9a5kcJc1/lD yZ8ZkJyB88QaZGZA6dNFsqwRCk2TjGtM=; b=BRKurpOqXgaMkHWO2oasG4eivTx 0pY/Li/UcFyUE2/y8HwQfNRKWLGf24sLveNUhS1NsAnaJvbklcogcWBfwJWRZ6Z1 Dpsqr2Z/A/mKUyb44mTs2gMa0WKyTSW0Z6VUbUmIStbZ7j/Ch6zRQBAw7y28M6eO 86sD7C3xkAW9DPu/BjD/IDW+5xG4OIEhD+ltFzZyPEP9sPP1Q0YAfSRh06o1zpk1 sILwFRVKRlXKzAtN1fJS14jqqvymB+FNEeDAlq3W9jyqXPPaugt52x1EkYRa1yRd GyyTAw0+gIewOqphkjmRYrhgFunnShQZWtA1ev8eVP0uibUNp6z41nzxHHA== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47wnh5v2a5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 16 Jul 2025 12:33:31 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-7e2c8137662so563120285a.2 for ; Wed, 16 Jul 2025 05:33:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752669210; x=1753274010; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9a5kcJc1/lDyZ8ZkJyB88QaZGZA6dNFsqwRCk2TjGtM=; b=aiz5KDAFxRIgtipoRLsZnqeE3OP7AkZc9EpCMWh0baDslhl1scF6UBeKLqncDiv/0y CasXMVQj9kjkVDXQKmQpMw5wbTocospEeCX2Tk6vZbf9foyWz+2Aoo6yNCWZvSfXlEcA gUOLVVjqDdHAheIqz+MECsTEgcIo4EaZ1D/+9gHcHXhNVSSEcubTV0iLKZDchOmfjdwR RAmbHXFBVSwHNgyyzY9LQbVpxc53vqAe+BqHB5zWw8GsJbKK8N9EhKeeaa2TAF89jOdH VgLLcpb3zgjE+LOYAas25aoP7EBIUuI5ay5+4ri/YuBOmuZF1/PJvadEFq8QFxlHyP+X c3og== X-Forwarded-Encrypted: i=1; AJvYcCWp6ddipVMffru8T1lK0w+JS5AWrUB3WBPz6YmrYJtKWRTo6Bb3ITME7AyspA+oj2IpA8lvc8soeePjbs0=@vger.kernel.org X-Gm-Message-State: AOJu0YyIu66uti30IpF7tdwUsqAnJP2NYbQ9FrtLFSR38pNu+qMXDoQb X7corSbnogyHvxAg9fKui+fTB4BrxGqjgfwhuwkHHWP4EwDxKxkmIv28cBhFcZfX0tGNIxPeCB5 yprXct8VDJwkTtm0sN5cZChOw+ncXG4HsEOw8NTUIZLfoWTb7sdRIBgDrwvMwet7WAEs= X-Gm-Gg: ASbGnct7yctW3E8R5hTE2YPus3tKLeMY4qVA6Exn36UFzfxcevlbkgbmefgMvoiIbFL cxvjOhhhAw7kLggUbR7NZZSwST/QGUNuA0oPYaOuPRv3YBiUZv2VZ4giYqQq9wLBgTwR/FgjJNg eIFArZ2DXR7WL3kSpEuKd/cYT+Rc/5AfAZyk41WGsBILMwkTAzRbuuloONwgqtE+9e5xct2UY1j X+apLiXz51t2ABVd9GYYD2ISPeZkhIBRtrA0qebwtWVWtNGn1nvAWGF6WLC4OVi0IqQ15E8DLN6 0pvQeNVgg8f3I2Wa9QGPR8gvPF8lKbafKFQAHiJfH6dfiS4AJNc/DQ== X-Received: by 2002:a05:620a:4506:b0:7d3:f1ff:5bac with SMTP id af79cd13be357-7e3435eb861mr370987185a.27.1752669210050; Wed, 16 Jul 2025 05:33:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHqR0kg7Frjotah+6cP1sEYi3co2t1OUjjfvtvORxCjneYUK0aaf6hdlNvSzgfqxruZEDt2SQ== X-Received: by 2002:a05:620a:4506:b0:7d3:f1ff:5bac with SMTP id af79cd13be357-7e3435eb861mr370981385a.27.1752669209341; Wed, 16 Jul 2025 05:33:29 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4562e89c739sm19453335e9.32.2025.07.16.05.33.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Jul 2025 05:33:28 -0700 (PDT) From: srinivas.kandagatla@oss.qualcomm.com To: broonie@kernel.org Cc: lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, srini@kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, neil.armstrong@linaro.org, krzysztof.kozlowski@linaro.org, Srinivas Kandagatla Subject: [PATCH 1/5] ASoC: codecs: wcd: add common helper for wcd codecs Date: Wed, 16 Jul 2025 13:33:19 +0100 Message-ID: <20250716123323.5831-2-srinivas.kandagatla@oss.qualcomm.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> References: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=dKimmPZb c=1 sm=1 tr=0 ts=68779c1c cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=Wb1JkmetP80A:10 a=EUspDBNiAAAA:8 a=wa_gl3HYg-BSzEidaMMA:9 a=sbBvEVo_xVyyD6Se:21 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-GUID: v7idcmrZ0cFWc1Sz_b3DrlxapymY1A68 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDExMiBTYWx0ZWRfX+JM8M9rBUWuo sBIK1Pp3pAoNGamJl8BxYkA1VeTTrs3g50EgIqkA0gl00GJ7LdzY6lUnfh5bNCPuNyYMxBNaIso Y6XDBDrhpCWR6EJBx4kIanzrdpPsuSBl/+i+oFntvWZKaXhvXhRUjdddwQ7XY8Ss7M6YwAWUlgg puCJUb7pqJE/uemElyH2HxEFAgkVS+kLS9/FpOpAprOCLyvhuJ7DfzZBoEyTnazdl5etT2/s5NS T0IEgKBhcxcK/rAId3b4N2GNUD96qe3GfGJ8PXwkLxg1E2N3LNYZqyoqmmNDYOYAbMHVShN+Gc2 XOs13EjQWHomvTUaRCxJMuuHJhMADmNPRj+OEVOW1Y7IeMVxSdxulOhHt3kURGWo3nQ2j5/qKIy HNSK2rCTCqyJUDjkGlmFrQFiGEgfWs0C9VHK1hCmFNQd3ML8es8wQHCzy2SCagCzNg1P96wI X-Proofpoint-ORIG-GUID: v7idcmrZ0cFWc1Sz_b3DrlxapymY1A68 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-16_01,2025-07-16_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 impostorscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507160112 Content-Type: text/plain; charset="utf-8" From: Srinivas Kandagatla All the Qualcomm WCD codecs have most of its code duplicated across all these 3/4 drivers. This patch is an attempt to remove those duplicate parts by adding a common helper library for these codecs. To start with move all the micbias parsing and voltage settings these are identical in WCD934x, WCD937x, WCD938x and WCD939x codec driver. Signed-off-by: Srinivas Kandagatla --- sound/soc/codecs/Kconfig | 8 ++++ sound/soc/codecs/Makefile | 2 + sound/soc/codecs/wcd-common.c | 66 ++++++++++++++++++++++++++ sound/soc/codecs/wcd-common.h | 24 ++++++++++ sound/soc/codecs/wcd934x.c | 82 +++++++++----------------------- sound/soc/codecs/wcd937x.c | 75 +++++++---------------------- sound/soc/codecs/wcd937x.h | 6 +-- sound/soc/codecs/wcd938x.c | 87 +++++++--------------------------- sound/soc/codecs/wcd938x.h | 1 + sound/soc/codecs/wcd939x.c | 89 +++++++---------------------------- sound/soc/codecs/wcd939x.h | 1 + 11 files changed, 176 insertions(+), 265 deletions(-) create mode 100644 sound/soc/codecs/wcd-common.c create mode 100644 sound/soc/codecs/wcd-common.h diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig index 6d7e4725d89c..b4dc28954da5 100644 --- a/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig @@ -2233,12 +2233,16 @@ config SND_SOC_UDA1380 config SND_SOC_WCD_CLASSH tristate =20 +config SND_SOC_WCD_COMMON + tristate + config SND_SOC_WCD9335 tristate "WCD9335 Codec" depends on SLIMBUS select REGMAP_SLIMBUS select REGMAP_IRQ select SND_SOC_WCD_CLASSH + select SND_SOC_WCD_COMMON help The WCD9335 is a standalone Hi-Fi audio CODEC IC, supports Qualcomm Technologies, Inc. (QTI) multimedia solutions, @@ -2254,6 +2258,7 @@ config SND_SOC_WCD934X select REGMAP_IRQ select REGMAP_SLIMBUS select SND_SOC_WCD_CLASSH + select SND_SOC_WCD_COMMON select SND_SOC_WCD_MBHC depends on MFD_WCD934X || COMPILE_TEST help @@ -2265,6 +2270,7 @@ config SND_SOC_WCD937X tristate depends on SOUNDWIRE || !SOUNDWIRE select SND_SOC_WCD_CLASSH + select SND_SOC_WCD_COMMON =20 config SND_SOC_WCD937X_SDW tristate "WCD9370/WCD9375 Codec - SDW" @@ -2284,6 +2290,7 @@ config SND_SOC_WCD938X tristate depends on SOUNDWIRE || !SOUNDWIRE select SND_SOC_WCD_CLASSH + select SND_SOC_WCD_COMMON select MULTIPLEXER =20 config SND_SOC_WCD938X_SDW @@ -2303,6 +2310,7 @@ config SND_SOC_WCD939X depends on SOUNDWIRE || !SOUNDWIRE depends on TYPEC || !TYPEC select SND_SOC_WCD_CLASSH + select SND_SOC_WCD_COMMON =20 config SND_SOC_WCD939X_SDW tristate "WCD9390/WCD9395 Codec - SDW" diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile index a68c3d192a1b..79e32f319cab 100644 --- a/sound/soc/codecs/Makefile +++ b/sound/soc/codecs/Makefile @@ -339,6 +339,7 @@ snd-soc-uda1334-y :=3D uda1334.o snd-soc-uda1342-y :=3D uda1342.o snd-soc-uda1380-y :=3D uda1380.o snd-soc-wcd-classh-y :=3D wcd-clsh-v2.o +snd-soc-wcd-common-y :=3D wcd-common.o snd-soc-wcd-mbhc-y :=3D wcd-mbhc-v2.o snd-soc-wcd9335-y :=3D wcd9335.o snd-soc-wcd934x-y :=3D wcd934x.o @@ -761,6 +762,7 @@ obj-$(CONFIG_SND_SOC_UDA1334) +=3D snd-soc-uda1334.o obj-$(CONFIG_SND_SOC_UDA1342) +=3D snd-soc-uda1342.o obj-$(CONFIG_SND_SOC_UDA1380) +=3D snd-soc-uda1380.o obj-$(CONFIG_SND_SOC_WCD_CLASSH) +=3D snd-soc-wcd-classh.o +obj-$(CONFIG_SND_SOC_WCD_COMMON) +=3D snd-soc-wcd-common.o obj-$(CONFIG_SND_SOC_WCD_MBHC) +=3D snd-soc-wcd-mbhc.o obj-$(CONFIG_SND_SOC_WCD9335) +=3D snd-soc-wcd9335.o obj-$(CONFIG_SND_SOC_WCD934X) +=3D snd-soc-wcd934x.o diff --git a/sound/soc/codecs/wcd-common.c b/sound/soc/codecs/wcd-common.c new file mode 100644 index 000000000000..dffb0431a48c --- /dev/null +++ b/sound/soc/codecs/wcd-common.c @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved. + +#include +#include +#include +#include +#include +#include + +#include "wcd-common.h" + +int wcd_get_micb_vout_ctl_val(struct device *dev, u32 micb_mv) +{ + /* min micbias voltage is 1V and maximum is 2.85V */ + if (micb_mv < WCD_MIN_MICBIAS_MV || micb_mv > WCD_MAX_MICBIAS_MV) { + dev_err(dev, "Unsupported micbias voltage (%u mV)\n", micb_mv); + return -EINVAL; + } + + return (micb_mv - WCD_MIN_MICBIAS_MV) / 50; +} +EXPORT_SYMBOL_GPL(wcd_get_micb_vout_ctl_val); + +static int wcd_get_micbias_val(struct device *dev, int micb_num, u32 *micb= _mv) +{ + char micbias[32]; + int mv; + + sprintf(micbias, "qcom,micbias%d-microvolt", micb_num); + + if (of_property_read_u32(dev->of_node, micbias, &mv)) { + dev_err(dev, "%s value not found, using default\n", micbias); + mv =3D WCD_DEF_MICBIAS_MV; + } else { + /* convert it to milli volts */ + mv =3D mv/1000; + } + if (micb_mv) + *micb_mv =3D mv; + + mv =3D wcd_get_micb_vout_ctl_val(dev, mv); + if (mv < 0) { + dev_err(dev, "Unsupported %s voltage (%d mV), falling back to default (%= d mV)\n", + micbias, mv, WCD_DEF_MICBIAS_MV); + return wcd_get_micb_vout_ctl_val(dev, WCD_DEF_MICBIAS_MV); + } + + return mv; +} + +int wcd_dt_parse_micbias_info(struct wcd_common *common) +{ + int i; + + for (i =3D 0; i < common->max_bias; i++) { + common->micb_vout[i] =3D wcd_get_micbias_val(common->dev, i+1, &common->= micb_mv[i]); + if (common->micb_vout[i] < 0) + return -EINVAL; + } + + return 0; +} +EXPORT_SYMBOL_GPL(wcd_dt_parse_micbias_info); +MODULE_DESCRIPTION("Common Qualcomm WCD Codec helpers driver"); +MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/wcd-common.h b/sound/soc/codecs/wcd-common.h new file mode 100644 index 000000000000..08c8e7ce9814 --- /dev/null +++ b/sound/soc/codecs/wcd-common.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved. + */ + +#ifndef __WCD_COMMON_H__ +#define __WCD_COMMON_H___ + +#define WCD_MIN_MICBIAS_MV 1000 +#define WCD_DEF_MICBIAS_MV 1800 +#define WCD_MAX_MICBIAS_MV 2850 +#define WCD_MAX_MICBIAS 4 + +struct wcd_common { + struct device *dev; + int max_bias; + u32 micb_mv[WCD_MAX_MICBIAS]; + u32 micb_vout[WCD_MAX_MICBIAS]; +}; + +int wcd_get_micb_vout_ctl_val(struct device *dev, u32 micb_mv); +int wcd_dt_parse_micbias_info(struct wcd_common *common); + +#endif /* __WCD_COMMON_H___ */ diff --git a/sound/soc/codecs/wcd934x.c b/sound/soc/codecs/wcd934x.c index 1bb7e1dc7e6b..d10b457e6c9a 100644 --- a/sound/soc/codecs/wcd934x.c +++ b/sound/soc/codecs/wcd934x.c @@ -21,6 +21,7 @@ #include #include #include "wcd-clsh-v2.h" +#include "wcd-common.h" #include "wcd-mbhc-v2.h" =20 #include @@ -116,9 +117,6 @@ #define WCD934X_DEC_PWR_LVL_DF 0x00 #define WCD934X_DEC_PWR_LVL_HYBRID WCD934X_DEC_PWR_LVL_DF =20 -#define WCD934X_DEF_MICBIAS_MV 1800 -#define WCD934X_MAX_MICBIAS_MV 2850 - #define WCD_IIR_FILTER_SIZE (sizeof(u32) * BAND_MAX) =20 #define WCD_IIR_FILTER_CTL(xname, iidx, bidx) \ @@ -530,6 +528,7 @@ struct wcd934x_codec { struct slim_device *sdev; struct slim_device *sidev; struct wcd_clsh_ctrl *clsh_ctrl; + struct wcd_common common; struct snd_soc_component *component; struct wcd934x_slim_ch rx_chs[WCD934X_RX_MAX]; struct wcd934x_slim_ch tx_chs[WCD934X_TX_MAX]; @@ -555,7 +554,6 @@ struct wcd934x_codec { struct mutex micb_lock; u32 micb_ref[WCD934X_MAX_MICBIAS]; u32 pullup_ref[WCD934X_MAX_MICBIAS]; - u32 micb2_mv; }; =20 #define to_wcd934x_codec(_hw) container_of(_hw, struct wcd934x_codec, hw) @@ -2168,55 +2166,24 @@ static struct clk *wcd934x_register_mclk_output(str= uct wcd934x_codec *wcd) return NULL; } =20 -static int wcd934x_get_micbias_val(struct device *dev, const char *micbias, - u32 *micb_mv) -{ - int mv; - - if (of_property_read_u32(dev->parent->of_node, micbias, &mv)) { - dev_err(dev, "%s value not found, using default\n", micbias); - mv =3D WCD934X_DEF_MICBIAS_MV; - } else { - /* convert it to milli volts */ - mv =3D mv/1000; - } - - if (mv < 1000 || mv > 2850) { - dev_err(dev, "%s value not in valid range, using default\n", - micbias); - mv =3D WCD934X_DEF_MICBIAS_MV; - } - - if (micb_mv) - *micb_mv =3D mv; - - return (mv - 1000) / 50; -} - static int wcd934x_init_dmic(struct snd_soc_component *comp) { - int vout_ctl_1, vout_ctl_2, vout_ctl_3, vout_ctl_4; struct wcd934x_codec *wcd =3D dev_get_drvdata(comp->dev); u32 def_dmic_rate, dmic_clk_drv; + int ret; =20 - vout_ctl_1 =3D wcd934x_get_micbias_val(comp->dev, - "qcom,micbias1-microvolt", NULL); - vout_ctl_2 =3D wcd934x_get_micbias_val(comp->dev, - "qcom,micbias2-microvolt", - &wcd->micb2_mv); - vout_ctl_3 =3D wcd934x_get_micbias_val(comp->dev, - "qcom,micbias3-microvolt", NULL); - vout_ctl_4 =3D wcd934x_get_micbias_val(comp->dev, - "qcom,micbias4-microvolt", NULL); + ret =3D wcd_dt_parse_mbhc_data(comp->dev, &wcd->mbhc_cfg); + if (ret) + return ret; =20 snd_soc_component_update_bits(comp, WCD934X_ANA_MICB1, - WCD934X_MICB_VAL_MASK, vout_ctl_1); + WCD934X_MICB_VAL_MASK, wcd->common.micb_vout[0]); snd_soc_component_update_bits(comp, WCD934X_ANA_MICB2, - WCD934X_MICB_VAL_MASK, vout_ctl_2); + WCD934X_MICB_VAL_MASK, wcd->common.micb_vout[1]); snd_soc_component_update_bits(comp, WCD934X_ANA_MICB3, - WCD934X_MICB_VAL_MASK, vout_ctl_3); + WCD934X_MICB_VAL_MASK, wcd->common.micb_vout[2]); snd_soc_component_update_bits(comp, WCD934X_ANA_MICB4, - WCD934X_MICB_VAL_MASK, vout_ctl_4); + WCD934X_MICB_VAL_MASK, wcd->common.micb_vout[3]); =20 if (wcd->rate =3D=3D WCD934X_MCLK_CLK_9P6MHZ) def_dmic_rate =3D WCD9XXX_DMIC_SAMPLE_RATE_4P8MHZ; @@ -2517,15 +2484,6 @@ static void wcd934x_mbhc_micb_ramp_control(struct sn= d_soc_component *component, } } =20 -static int wcd934x_get_micb_vout_ctl_val(u32 micb_mv) -{ - /* min micbias voltage is 1V and maximum is 2.85V */ - if (micb_mv < 1000 || micb_mv > 2850) - return -EINVAL; - - return (micb_mv - 1000) / 50; -} - static int wcd934x_mbhc_micb_adjust_voltage(struct snd_soc_component *comp= onent, int req_volt, int micb_num) { @@ -2562,7 +2520,7 @@ static int wcd934x_mbhc_micb_adjust_voltage(struct sn= d_soc_component *component, cur_vout_ctl =3D snd_soc_component_read_field(component, micb_reg, WCD934X_MICB_VAL_MASK); =20 - req_vout_ctl =3D wcd934x_get_micb_vout_ctl_val(req_volt); + req_vout_ctl =3D wcd_get_micb_vout_ctl_val(component->dev, req_volt); if (req_vout_ctl < 0) { ret =3D -EINVAL; goto exit; @@ -2610,10 +2568,10 @@ static int wcd934x_mbhc_micb_ctrl_threshold_mic(str= uct snd_soc_component *compon * voltage needed to detect threshold microphone, then do * not change the micbias, just return. */ - if (wcd934x->micb2_mv >=3D WCD_MBHC_THR_HS_MICB_MV) + if (wcd934x->common.micb_mv[1] >=3D WCD_MBHC_THR_HS_MICB_MV) return 0; =20 - micb_mv =3D req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd934x->micb2_mv; + micb_mv =3D req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd934x->common.micb_mv[1]; =20 rc =3D wcd934x_mbhc_micb_adjust_voltage(component, micb_mv, MIC_BIAS_2); =20 @@ -3036,7 +2994,7 @@ static void wcd934x_mbhc_deinit(struct snd_soc_compon= ent *component) static int wcd934x_comp_probe(struct snd_soc_component *component) { struct wcd934x_codec *wcd =3D dev_get_drvdata(component->dev); - int i; + int i, ret; =20 snd_soc_component_init_regmap(component, wcd->regmap); wcd->component =3D component; @@ -3054,7 +3012,12 @@ static int wcd934x_comp_probe(struct snd_soc_compone= nt *component) for (i =3D 0; i < NUM_CODEC_DAIS; i++) INIT_LIST_HEAD(&wcd->dai[i].slim_ch_list); =20 - wcd934x_init_dmic(component); + + ret =3D wcd934x_init_dmic(component); + if (ret) { + dev_err(component->dev, "Failed to Initialize micbias\n"); + return ret; + } =20 if (wcd934x_mbhc_init(component)) dev_err(component->dev, "Failed to Initialize MBHC\n"); @@ -5860,14 +5823,13 @@ static int wcd934x_codec_parse_data(struct wcd934x_= codec *wcd) cfg->anc_micbias =3D MIC_BIAS_2; cfg->v_hs_max =3D WCD_MBHC_HS_V_MAX; cfg->num_btn =3D WCD934X_MBHC_MAX_BUTTONS; - cfg->micb_mv =3D wcd->micb2_mv; + cfg->micb_mv =3D wcd->common.micb_mv[1]; cfg->linein_th =3D 5000; cfg->hs_thr =3D 1700; cfg->hph_thr =3D 50; =20 wcd_dt_parse_mbhc_data(dev, cfg); =20 - return 0; } =20 @@ -5888,6 +5850,8 @@ static int wcd934x_codec_probe(struct platform_device= *pdev) wcd->sdev =3D to_slim_device(data->dev); mutex_init(&wcd->sysclk_mutex); mutex_init(&wcd->micb_lock); + wcd->common.dev =3D dev->parent; + wcd->common.max_bias =3D 4; =20 ret =3D wcd934x_codec_parse_data(wcd); if (ret) diff --git a/sound/soc/codecs/wcd937x.c b/sound/soc/codecs/wcd937x.c index ccd542033967..69b2a7500c68 100644 --- a/sound/soc/codecs/wcd937x.c +++ b/sound/soc/codecs/wcd937x.c @@ -21,6 +21,7 @@ #include =20 #include "wcd-clsh-v2.h" +#include "wcd-common.h" #include "wcd-mbhc-v2.h" #include "wcd937x.h" =20 @@ -85,6 +86,7 @@ struct wcd937x_priv { struct wcd_mbhc_config mbhc_cfg; struct wcd_mbhc_intr intr_ids; struct wcd_clsh_ctrl *clsh_info; + struct wcd_common common; struct irq_domain *virq; struct regmap_irq_chip_data *irq_chip; struct snd_soc_jack *jack; @@ -93,9 +95,6 @@ struct wcd937x_priv { s32 pullup_ref[WCD937X_MAX_MICBIAS]; u32 hph_mode; int ear_rx_path; - u32 micb1_mv; - u32 micb2_mv; - u32 micb3_mv; int hphr_pdm_wd_int; int hphl_pdm_wd_int; int aux_pdm_wd_int; @@ -872,15 +871,6 @@ static int wcd937x_enable_rx3(struct snd_soc_dapm_widg= et *w, return 0; } =20 -static int wcd937x_get_micb_vout_ctl_val(u32 micb_mv) -{ - if (micb_mv < 1000 || micb_mv > 2850) { - pr_err("Unsupported micbias voltage (%u mV)\n", micb_mv); - return -EINVAL; - } - - return (micb_mv - 1000) / 50; -} =20 static int wcd937x_tx_swr_ctrl(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) @@ -1481,7 +1471,7 @@ static int wcd937x_mbhc_micb_adjust_voltage(struct sn= d_soc_component *component, cur_vout_ctl =3D snd_soc_component_read_field(component, micb_reg, WCD937X_MICB_VOUT_MASK); =20 - req_vout_ctl =3D wcd937x_get_micb_vout_ctl_val(req_volt); + req_vout_ctl =3D wcd_get_micb_vout_ctl_val(component->dev, req_volt); if (req_vout_ctl < 0) { ret =3D -EINVAL; goto exit; @@ -2436,22 +2426,14 @@ static const struct snd_soc_dapm_route wcd9375_audi= o_map[] =3D { { "DMIC6_MIXER", "Switch", "DMIC6" }, }; =20 -static int wcd937x_set_micbias_data(struct wcd937x_priv *wcd937x) +static void wcd937x_set_micbias_data(struct device *dev, struct wcd937x_pr= iv *wcd937x) { - int vout_ctl[3]; - - /* Set micbias voltage */ - vout_ctl[0] =3D wcd937x_get_micb_vout_ctl_val(wcd937x->micb1_mv); - vout_ctl[1] =3D wcd937x_get_micb_vout_ctl_val(wcd937x->micb2_mv); - vout_ctl[2] =3D wcd937x_get_micb_vout_ctl_val(wcd937x->micb3_mv); - if ((vout_ctl[0] | vout_ctl[1] | vout_ctl[2]) < 0) - return -EINVAL; - - regmap_update_bits(wcd937x->regmap, WCD937X_ANA_MICB1, WCD937X_ANA_MICB_V= OUT, vout_ctl[0]); - regmap_update_bits(wcd937x->regmap, WCD937X_ANA_MICB2, WCD937X_ANA_MICB_V= OUT, vout_ctl[1]); - regmap_update_bits(wcd937x->regmap, WCD937X_ANA_MICB3, WCD937X_ANA_MICB_V= OUT, vout_ctl[2]); - - return 0; + regmap_update_bits(wcd937x->regmap, WCD937X_ANA_MICB1, WCD937X_ANA_MICB_V= OUT, + wcd937x->commmon.micb_vout[0]); + regmap_update_bits(wcd937x->regmap, WCD937X_ANA_MICB2, WCD937X_ANA_MICB_V= OUT, + wcd937x->commmon.micb_vout[1]); + regmap_update_bits(wcd937x->regmap, WCD937X_ANA_MICB3, WCD937X_ANA_MICB_V= OUT, + wcd937x->commmon.micb_vout[2]); } =20 static irqreturn_t wcd937x_wd_handle_irq(int irq, void *data) @@ -2630,31 +2612,6 @@ static const struct snd_soc_component_driver soc_cod= ec_dev_wcd937x =3D { .endianness =3D 1, }; =20 -static void wcd937x_dt_parse_micbias_info(struct device *dev, struct wcd93= 7x_priv *wcd) -{ - struct device_node *np =3D dev->of_node; - u32 prop_val =3D 0; - int ret =3D 0; - - ret =3D of_property_read_u32(np, "qcom,micbias1-microvolt", &prop_val); - if (!ret) - wcd->micb1_mv =3D prop_val / 1000; - else - dev_warn(dev, "Micbias1 DT property not found\n"); - - ret =3D of_property_read_u32(np, "qcom,micbias2-microvolt", &prop_val); - if (!ret) - wcd->micb2_mv =3D prop_val / 1000; - else - dev_warn(dev, "Micbias2 DT property not found\n"); - - ret =3D of_property_read_u32(np, "qcom,micbias3-microvolt", &prop_val); - if (!ret) - wcd->micb3_mv =3D prop_val / 1000; - else - dev_warn(dev, "Micbias3 DT property not found\n"); -} - static bool wcd937x_swap_gnd_mic(struct snd_soc_component *component) { int value; @@ -2848,11 +2805,7 @@ static int wcd937x_bind(struct device *dev) wcd937x->sdw_priv[AIF1_PB]->slave_irq =3D wcd937x->virq; wcd937x->sdw_priv[AIF1_CAP]->slave_irq =3D wcd937x->virq; =20 - ret =3D wcd937x_set_micbias_data(wcd937x); - if (ret < 0) { - dev_err(dev, "Bad micbias pdata\n"); - return ret; - } + wcd937x_set_micbias_data(dev, wcd937x); =20 ret =3D snd_soc_register_component(dev, &soc_codec_dev_wcd937x, wcd937x_dais, ARRAY_SIZE(wcd937x_dais)); @@ -2920,6 +2873,8 @@ static int wcd937x_probe(struct platform_device *pdev) =20 dev_set_drvdata(dev, wcd937x); mutex_init(&wcd937x->micb_lock); + wcd937x->common.dev =3D dev; + wcd937x->common.max_bias =3D 3; =20 wcd937x->reset_gpio =3D devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); if (IS_ERR(wcd937x->reset_gpio)) @@ -2939,7 +2894,9 @@ static int wcd937x_probe(struct platform_device *pdev) if (ret) return dev_err_probe(dev, ret, "Failed to get and enable supplies\n"); =20 - wcd937x_dt_parse_micbias_info(dev, wcd937x); + ret =3D wcd_dt_parse_micbias_info(dev, &wcd937x->common); + if (ret) + return dev_err_probe(dev, ret, "Failed to get micbias\n"); =20 cfg->mbhc_micbias =3D MIC_BIAS_2; cfg->anc_micbias =3D MIC_BIAS_2; diff --git a/sound/soc/codecs/wcd937x.h b/sound/soc/codecs/wcd937x.h index 49e5dce6f8c9..0f96b7108a7e 100644 --- a/sound/soc/codecs/wcd937x.h +++ b/sound/soc/codecs/wcd937x.h @@ -550,21 +550,21 @@ int wcd937x_sdw_hw_params(struct wcd937x_sdw_priv *wc= d, struct snd_soc_dai *dai); =20 #else -int wcd937x_sdw_free(struct wcd937x_sdw_priv *wcd, +static inline int wcd937x_sdw_free(struct wcd937x_sdw_priv *wcd, struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { return -EOPNOTSUPP; } =20 -int wcd937x_sdw_set_sdw_stream(struct wcd937x_sdw_priv *wcd, +static inline int wcd937x_sdw_set_sdw_stream(struct wcd937x_sdw_priv *wcd, struct snd_soc_dai *dai, void *stream, int direction) { return -EOPNOTSUPP; } =20 -int wcd937x_sdw_hw_params(struct wcd937x_sdw_priv *wcd, +static inline int wcd937x_sdw_hw_params(struct wcd937x_sdw_priv *wcd, struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index f8d7bf27a6ed..6d77cbcafa70 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -155,6 +155,7 @@ struct wcd938x_priv { struct wcd_mbhc_config mbhc_cfg; struct wcd_mbhc_intr intr_ids; struct wcd_clsh_ctrl *clsh_info; + struct wcd_common common; struct irq_domain *virq; struct regmap_irq_chip_data *irq_chip; struct snd_soc_jack *jack; @@ -169,10 +170,6 @@ struct wcd938x_priv { struct gpio_desc *us_euro_gpio; struct mux_control *us_euro_mux; unsigned int mux_state; - u32 micb1_mv; - u32 micb2_mv; - u32 micb3_mv; - u32 micb4_mv; int hphr_pdm_wd_int; int hphl_pdm_wd_int; int aux_pdm_wd_int; @@ -1974,15 +1971,6 @@ static void wcd938x_mbhc_micb_ramp_control(struct sn= d_soc_component *component, } } =20 -static int wcd938x_get_micb_vout_ctl_val(u32 micb_mv) -{ - /* min micbias voltage is 1V and maximum is 2.85V */ - if (micb_mv < 1000 || micb_mv > 2850) - return -EINVAL; - - return (micb_mv - 1000) / 50; -} - static int wcd938x_mbhc_micb_adjust_voltage(struct snd_soc_component *comp= onent, int req_volt, int micb_num) { @@ -2019,7 +2007,7 @@ static int wcd938x_mbhc_micb_adjust_voltage(struct sn= d_soc_component *component, cur_vout_ctl =3D snd_soc_component_read_field(component, micb_reg, WCD938X_MICB_VOUT_MASK); =20 - req_vout_ctl =3D wcd938x_get_micb_vout_ctl_val(req_volt); + req_vout_ctl =3D wcd_get_micb_vout_ctl_val(component->dev, req_volt); if (req_vout_ctl < 0) { ret =3D -EINVAL; goto exit; @@ -2067,10 +2055,10 @@ static int wcd938x_mbhc_micb_ctrl_threshold_mic(str= uct snd_soc_component *compon * voltage needed to detect threshold microphone, then do * not change the micbias, just return. */ - if (wcd938x->micb2_mv >=3D WCD_MBHC_THR_HS_MICB_MV) + if (wcd938x->common.micb_mv[2] >=3D WCD_MBHC_THR_HS_MICB_MV) return 0; =20 - micb_mv =3D req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd938x->micb2_mv; + micb_mv =3D req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd938x->common.micb_mv[2]; =20 return wcd938x_mbhc_micb_adjust_voltage(component, micb_mv, MIC_BIAS_2); } @@ -2975,28 +2963,16 @@ static const struct snd_soc_dapm_route wcd938x_audi= o_map[] =3D { {"EAR", NULL, "EAR PGA"}, }; =20 -static int wcd938x_set_micbias_data(struct wcd938x_priv *wcd938x) +static void wcd938x_set_micbias_data(struct device *dev, struct wcd938x_pr= iv *wcd938x) { - int vout_ctl_1, vout_ctl_2, vout_ctl_3, vout_ctl_4; - - /* set micbias voltage */ - vout_ctl_1 =3D wcd938x_get_micb_vout_ctl_val(wcd938x->micb1_mv); - vout_ctl_2 =3D wcd938x_get_micb_vout_ctl_val(wcd938x->micb2_mv); - vout_ctl_3 =3D wcd938x_get_micb_vout_ctl_val(wcd938x->micb3_mv); - vout_ctl_4 =3D wcd938x_get_micb_vout_ctl_val(wcd938x->micb4_mv); - if (vout_ctl_1 < 0 || vout_ctl_2 < 0 || vout_ctl_3 < 0 || vout_ctl_4 < 0) - return -EINVAL; - regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB1, - WCD938X_MICB_VOUT_MASK, vout_ctl_1); + WCD938X_MICB_VOUT_MASK, wcd938x->common.micb_vout[0]); regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB2, - WCD938X_MICB_VOUT_MASK, vout_ctl_2); + WCD938X_MICB_VOUT_MASK, wcd938x->common.micb_vout[1]); regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB3, - WCD938X_MICB_VOUT_MASK, vout_ctl_3); + WCD938X_MICB_VOUT_MASK, wcd938x->common.micb_vout[2]); regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB4, - WCD938X_MICB_VOUT_MASK, vout_ctl_4); - - return 0; + WCD938X_MICB_VOUT_MASK, wcd938x->common.micb_vout[3]); } =20 static irqreturn_t wcd938x_wd_handle_irq(int irq, void *data) @@ -3200,37 +3176,6 @@ static const struct snd_soc_component_driver soc_cod= ec_dev_wcd938x =3D { .endianness =3D 1, }; =20 -static void wcd938x_dt_parse_micbias_info(struct device *dev, struct wcd93= 8x_priv *wcd) -{ - struct device_node *np =3D dev->of_node; - u32 prop_val =3D 0; - int rc =3D 0; - - rc =3D of_property_read_u32(np, "qcom,micbias1-microvolt", &prop_val); - if (!rc) - wcd->micb1_mv =3D prop_val/1000; - else - dev_info(dev, "%s: Micbias1 DT property not found\n", __func__); - - rc =3D of_property_read_u32(np, "qcom,micbias2-microvolt", &prop_val); - if (!rc) - wcd->micb2_mv =3D prop_val/1000; - else - dev_info(dev, "%s: Micbias2 DT property not found\n", __func__); - - rc =3D of_property_read_u32(np, "qcom,micbias3-microvolt", &prop_val); - if (!rc) - wcd->micb3_mv =3D prop_val/1000; - else - dev_info(dev, "%s: Micbias3 DT property not found\n", __func__); - - rc =3D of_property_read_u32(np, "qcom,micbias4-microvolt", &prop_val); - if (!rc) - wcd->micb4_mv =3D prop_val/1000; - else - dev_info(dev, "%s: Micbias4 DT property not found\n", __func__); -} - static bool wcd938x_swap_gnd_mic(struct snd_soc_component *component) { struct wcd938x_priv *wcd938x =3D snd_soc_component_get_drvdata(component); @@ -3295,13 +3240,15 @@ static int wcd938x_populate_dt_data(struct wcd938x_= priv *wcd938x, struct device if (ret) return dev_err_probe(dev, ret, "Failed to get and enable supplies\n"); =20 - wcd938x_dt_parse_micbias_info(dev, wcd938x); + ret =3D wcd_dt_parse_micbias_info(&wcd938x->common); + if (ret) + return dev_err_probe(dev, ret, "Failed to get and enable supplies\n"); =20 cfg->mbhc_micbias =3D MIC_BIAS_2; cfg->anc_micbias =3D MIC_BIAS_2; cfg->v_hs_max =3D WCD_MBHC_HS_V_MAX; cfg->num_btn =3D WCD938X_MBHC_MAX_BUTTONS; - cfg->micb_mv =3D wcd938x->micb2_mv; + cfg->micb_mv =3D wcd938x->common.micb_mv[2]; cfg->linein_th =3D 5000; cfg->hs_thr =3D 1700; cfg->hph_thr =3D 50; @@ -3457,11 +3404,7 @@ static int wcd938x_bind(struct device *dev) wcd938x->sdw_priv[AIF1_PB]->slave_irq =3D wcd938x->virq; wcd938x->sdw_priv[AIF1_CAP]->slave_irq =3D wcd938x->virq; =20 - ret =3D wcd938x_set_micbias_data(wcd938x); - if (ret < 0) { - dev_err(dev, "%s: bad micbias pdata\n", __func__); - goto err_remove_rx_link; - } + wcd938x_set_micbias_data(dev, wcd938x); =20 ret =3D snd_soc_register_component(dev, &soc_codec_dev_wcd938x, wcd938x_dais, ARRAY_SIZE(wcd938x_dais)); @@ -3550,6 +3493,8 @@ static int wcd938x_probe(struct platform_device *pdev) =20 dev_set_drvdata(dev, wcd938x); mutex_init(&wcd938x->micb_lock); + wcd938x->common.dev =3D dev; + wcd938x->common.max_bias =3D 4; =20 ret =3D wcd938x_populate_dt_data(wcd938x, dev); if (ret) diff --git a/sound/soc/codecs/wcd938x.h b/sound/soc/codecs/wcd938x.h index 54ee56b7fbd6..a6fda63d7f98 100644 --- a/sound/soc/codecs/wcd938x.h +++ b/sound/soc/codecs/wcd938x.h @@ -3,6 +3,7 @@ #define __WCD938X_H__ #include #include +#include "wcd-common.h" =20 #define WCD938X_BASE_ADDRESS (0x3000) #define WCD938X_ANA_PAGE_REGISTER (0x3000) diff --git a/sound/soc/codecs/wcd939x.c b/sound/soc/codecs/wcd939x.c index 85730ae40c2c..ef8def695219 100644 --- a/sound/soc/codecs/wcd939x.c +++ b/sound/soc/codecs/wcd939x.c @@ -191,6 +191,7 @@ struct wcd939x_priv { struct wcd_mbhc_config mbhc_cfg; struct wcd_mbhc_intr intr_ids; struct wcd_clsh_ctrl *clsh_info; + struct wcd_common common; struct irq_domain *virq; struct regmap_irq_chip_data *irq_chip; struct snd_soc_jack *jack; @@ -201,10 +202,6 @@ struct wcd939x_priv { u32 tx_mode[TX_ADC_MAX]; int variant; struct gpio_desc *reset_gpio; - u32 micb1_mv; - u32 micb2_mv; - u32 micb3_mv; - u32 micb4_mv; int hphr_pdm_wd_int; int hphl_pdm_wd_int; int ear_pdm_wd_int; @@ -1919,17 +1916,6 @@ static void wcd939x_mbhc_micb_ramp_control(struct sn= d_soc_component *component, } } =20 -static int wcd939x_get_micb_vout_ctl_val(u32 micb_mv) -{ - /* min micbias voltage is 1V and maximum is 2.85V */ - if (micb_mv < 1000 || micb_mv > 2850) { - pr_err("%s: unsupported micbias voltage\n", __func__); - return -EINVAL; - } - - return (micb_mv - 1000) / 50; -} - static int wcd939x_mbhc_micb_adjust_voltage(struct snd_soc_component *comp= onent, int req_volt, int micb_num) { @@ -1969,7 +1955,7 @@ static int wcd939x_mbhc_micb_adjust_voltage(struct sn= d_soc_component *component, cur_vout_ctl =3D snd_soc_component_read_field(component, micb_reg, WCD939X_MICB_VOUT_CTL); =20 - req_vout_ctl =3D wcd939x_get_micb_vout_ctl_val(req_volt); + req_vout_ctl =3D wcd_get_micb_vout_ctl_val(component->dev, req_volt); if (req_vout_ctl < 0) { ret =3D req_vout_ctl; goto exit; @@ -2021,10 +2007,10 @@ static int wcd939x_mbhc_micb_ctrl_threshold_mic(str= uct snd_soc_component *compon * voltage needed to detect threshold microphone, then do * not change the micbias, just return. */ - if (wcd939x->micb2_mv >=3D WCD_MBHC_THR_HS_MICB_MV) + if (wcd939x->common.micb_mv[1] >=3D WCD_MBHC_THR_HS_MICB_MV) return 0; =20 - micb_mv =3D req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd939x->micb2_mv; + micb_mv =3D req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd939x->common.micb_mv[1]; =20 return wcd939x_mbhc_micb_adjust_voltage(component, micb_mv, MIC_BIAS_2); } @@ -2895,28 +2881,16 @@ static const struct snd_soc_dapm_route wcd939x_audi= o_map[] =3D { {"EAR", NULL, "EAR PGA"}, }; =20 -static int wcd939x_set_micbias_data(struct wcd939x_priv *wcd939x) +static void wcd939x_set_micbias_data(struct device *dev, struct wcd939x_pr= iv *wcd939x) { - int vout_ctl_1, vout_ctl_2, vout_ctl_3, vout_ctl_4; - - /* set micbias voltage */ - vout_ctl_1 =3D wcd939x_get_micb_vout_ctl_val(wcd939x->micb1_mv); - vout_ctl_2 =3D wcd939x_get_micb_vout_ctl_val(wcd939x->micb2_mv); - vout_ctl_3 =3D wcd939x_get_micb_vout_ctl_val(wcd939x->micb3_mv); - vout_ctl_4 =3D wcd939x_get_micb_vout_ctl_val(wcd939x->micb4_mv); - if (vout_ctl_1 < 0 || vout_ctl_2 < 0 || vout_ctl_3 < 0 || vout_ctl_4 < 0) - return -EINVAL; - regmap_update_bits(wcd939x->regmap, WCD939X_ANA_MICB1, - WCD939X_MICB_VOUT_CTL, vout_ctl_1); + WCD939X_MICB_VOUT_CTL, wcd939x->common.micb_vout[0]); regmap_update_bits(wcd939x->regmap, WCD939X_ANA_MICB2, - WCD939X_MICB_VOUT_CTL, vout_ctl_2); + WCD939X_MICB_VOUT_CTL, wcd939x->common.micb_vout[1]); regmap_update_bits(wcd939x->regmap, WCD939X_ANA_MICB3, - WCD939X_MICB_VOUT_CTL, vout_ctl_3); + WCD939X_MICB_VOUT_CTL, wcd939x->common.micb_vout[2]); regmap_update_bits(wcd939x->regmap, WCD939X_ANA_MICB4, - WCD939X_MICB_VOUT_CTL, vout_ctl_4); - - return 0; + WCD939X_MICB_VOUT_CTL, wcd939x->common.micb_vout[3]); } =20 static irqreturn_t wcd939x_wd_handle_irq(int irq, void *data) @@ -3186,37 +3160,6 @@ static int wcd939x_typec_mux_set(struct typec_mux_de= v *mux, } #endif /* CONFIG_TYPEC */ =20 -static void wcd939x_dt_parse_micbias_info(struct device *dev, struct wcd93= 9x_priv *wcd) -{ - struct device_node *np =3D dev->of_node; - u32 prop_val =3D 0; - int rc =3D 0; - - rc =3D of_property_read_u32(np, "qcom,micbias1-microvolt", &prop_val); - if (!rc) - wcd->micb1_mv =3D prop_val / 1000; - else - dev_info(dev, "%s: Micbias1 DT property not found\n", __func__); - - rc =3D of_property_read_u32(np, "qcom,micbias2-microvolt", &prop_val); - if (!rc) - wcd->micb2_mv =3D prop_val / 1000; - else - dev_info(dev, "%s: Micbias2 DT property not found\n", __func__); - - rc =3D of_property_read_u32(np, "qcom,micbias3-microvolt", &prop_val); - if (!rc) - wcd->micb3_mv =3D prop_val / 1000; - else - dev_info(dev, "%s: Micbias3 DT property not found\n", __func__); - - rc =3D of_property_read_u32(np, "qcom,micbias4-microvolt", &prop_val); - if (!rc) - wcd->micb4_mv =3D prop_val / 1000; - else - dev_info(dev, "%s: Micbias4 DT property not found\n", __func__); -} - #if IS_ENABLED(CONFIG_TYPEC) static bool wcd939x_swap_gnd_mic(struct snd_soc_component *component) { @@ -3252,13 +3195,15 @@ static int wcd939x_populate_dt_data(struct wcd939x_= priv *wcd939x, struct device if (ret) return dev_err_probe(dev, ret, "Failed to get and enable supplies\n"); =20 - wcd939x_dt_parse_micbias_info(dev, wcd939x); + ret =3D wcd_dt_parse_micbias_info(&wcd939x->common); + if (ret) + return dev_err_probe(dev, ret, "Failed to get micbias\n"); =20 cfg->mbhc_micbias =3D MIC_BIAS_2; cfg->anc_micbias =3D MIC_BIAS_2; cfg->v_hs_max =3D WCD_MBHC_HS_V_MAX; cfg->num_btn =3D WCD939X_MBHC_MAX_BUTTONS; - cfg->micb_mv =3D wcd939x->micb2_mv; + cfg->micb_mv =3D wcd939x->common.micb_mv[1]; cfg->linein_th =3D 5000; cfg->hs_thr =3D 1700; cfg->hph_thr =3D 50; @@ -3444,11 +3389,7 @@ static int wcd939x_bind(struct device *dev) wcd939x->sdw_priv[AIF1_PB]->slave_irq =3D wcd939x->virq; wcd939x->sdw_priv[AIF1_CAP]->slave_irq =3D wcd939x->virq; =20 - ret =3D wcd939x_set_micbias_data(wcd939x); - if (ret < 0) { - dev_err(dev, "%s: bad micbias pdata\n", __func__); - goto err_remove_rx_link; - } + wcd939x_set_micbias_data(dev, wcd939x); =20 /* Check WCD9395 version */ regmap_read(wcd939x->regmap, WCD939X_DIGITAL_CHIP_ID1, &id1); @@ -3613,6 +3554,8 @@ static int wcd939x_probe(struct platform_device *pdev) =20 dev_set_drvdata(dev, wcd939x); mutex_init(&wcd939x->micb_lock); + wcd939x->common.dev =3D dev; + wcd939x->common.max_bias =3D 4; =20 ret =3D wcd939x_populate_dt_data(wcd939x, dev); if (ret) { diff --git a/sound/soc/codecs/wcd939x.h b/sound/soc/codecs/wcd939x.h index e70445b1a4bc..f587cf22f86f 100644 --- a/sound/soc/codecs/wcd939x.h +++ b/sound/soc/codecs/wcd939x.h @@ -8,6 +8,7 @@ #define __WCD939X_H__ #include #include +#include "wcd-common.h" =20 #define WCD939X_BASE (0x3000) #define WCD939X_ANA_PAGE (0x3000) --=20 2.50.0 From nobody Tue Oct 7 00:25:07 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E554A2F509A for ; Wed, 16 Jul 2025 12:33:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669215; cv=none; b=qHjWivj/bitnhq7siAl0ZMW15BjjH4grkSJMV+1txECqDff5eG06lLx7c7hsfMqfFfCJ4c4iiguQH6SYtWDkMdyQ1qyFGHgfVT7i/17bFvFdLadzPFpNLuJH4mNe06nQHU5/+p+IrLB+CTSnISFTVbXKaathYtluaJrCKYVW5MM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669215; c=relaxed/simple; bh=pwUXcN/tYFpUKUiZQ9vbe6DzhnD4SjUoa6LqKayVcrs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qi/xZjLZSPO8stl7sp48IhlIBKy7b1v62nOWCNBD3mG2BoPVJtXNn81iosSuASRyw5goFJBe31FrveWRa3WMZTSpoWOE/fhpm/sBsI/eIF6RQjfKHAf8cHOod33iNCep741k4YJwRwf7CuSxrOhAdM5AWTGQCmdcMWuZtYofgaY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=QpobCLBF; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="QpobCLBF" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56G5xBtP007286 for ; Wed, 16 Jul 2025 12:33:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=ILZwIdqXKUz HsZ/3SNiY+HSM17zGHVzMqnAliKbqiUU=; b=QpobCLBFUMRP+4LZL+sabHXTMxI PNjbjwNBf31+kFbAk2Raa4ZyDYNcBCetrPIOLwOdnb+4pMWt9lBLYSq45obZKfu7 1CVMFjmURJeF6L6g7k/QLuttoV1egTkBR5F4INrPgNSY99fOLPlJNFQ8B4Ypp+uc XSmaqsHyF5/INQIoyB3CKtZPaAFJSskobPDEwx9rngGhaWLLeheyhtyijzBWpSIk giF2kVcj75eMOdrUg9rC2kz30T0NBp8fJ1pULp94p7bZQlGjm/j9Be5U2NEHQd78 EUzS//+HJrRl7URIuK6InwqOJGY3b3N5yKbLiUyRlTfC2l718dVurNwSWNA== Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47wnh5v2a7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 16 Jul 2025 12:33:33 +0000 (GMT) Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-4ab60125e3dso67172421cf.0 for ; Wed, 16 Jul 2025 05:33:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752669211; x=1753274011; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ILZwIdqXKUzHsZ/3SNiY+HSM17zGHVzMqnAliKbqiUU=; b=GOY+CpSG4DepORPezW1MtSjzCCeLg+Upe27A4uWLyToNli7hFmbD8qRjqCZ4XqT2A7 KZzok7aLexDsW7pihq5w0iEoO/oleeOoVeiND8kracDp7eF4F/qlT9x5s6KhKnJEjnsf JC8pAKwC2rHGaSBdRK+Pb/cZRlSfUfeSpOWuJX7xhHKK4wPt2j3CmnaEYY+q/Sd2aYx0 N3/W1C8UQ1qODW8tCAn/croLVjDPW6GccL78FYyugIfnQaZdZT6bdm7n8b3MslrmSU8h ul+3pzwakOKCeT+SC1yzkVFvY+1rL4ZdQPMv5kkpKe1Ox21MUnVhj/4wBJNjFRRJyAQp tqQw== X-Forwarded-Encrypted: i=1; AJvYcCUd1Vsl56QRrI0IKY4jDVa9shGKodkFYFd0ryISWISK/Ospj1qTOg+b3+DiwzVXS4EJdooTkDSMi0o1Hb0=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+DN7XbVi63W0zqJ/K8VL91xo6Jh43xDEBnbIQICS2/DEl0YDx dTFRHC7hhUggjMR1URjYui5i06pCG/BF6Sqpx5ebfd/Kqr5tvJrP3De2uVFX3cF+e7Wn9Q1rini i2oD0tVPPIfToXvMTjpASeMB3ipu+J5ePNsSeLSrF4x4jN6AH3yKU4oVlHDTrJcr67ew= X-Gm-Gg: ASbGncsVURpjh7YbkyA6qi6cfE72IgZlTpSQGj7qAli9Ch1T1r0p6qM+bcNtGISEN5v RIEeOmCJ5b3KUnKIjVA+544Jn7PHYONIxXPWnRxQCuaHxnWWoqhYyGTzAkJDbpoWJkXEUCseuuq gU6BEd8jVwev94zxAwqrUGcacZtshj4jxQLRN9YyIr+nCgWbLp+NkT0PlCMI9L3RRXRYAi1+vVO QfmWHI/OckWAAwSIKkFWPSTyu4NuNqArwUhYh4FU5oYnCGkFL6rQs+paNW43jbHJuytWm/KTzv/ +uYZi8qgL+LPHy+/1DjzI8MCKKNzFtbDFahCaYO5+rMbB9ypi4HUlg== X-Received: by 2002:a05:622a:1a8d:b0:4a3:4d46:c2a6 with SMTP id d75a77b69052e-4ab93c6d086mr39094221cf.7.1752669211236; Wed, 16 Jul 2025 05:33:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGDy9BVKcG+tyN/VAXcRAsDaOYTfPP9joPVVd8YCEddeMx0YjTzda0WPIBrtsaF2giE4NQYcA== X-Received: by 2002:a05:622a:1a8d:b0:4a3:4d46:c2a6 with SMTP id d75a77b69052e-4ab93c6d086mr39093281cf.7.1752669210366; Wed, 16 Jul 2025 05:33:30 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4562e89c739sm19453335e9.32.2025.07.16.05.33.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Jul 2025 05:33:29 -0700 (PDT) From: srinivas.kandagatla@oss.qualcomm.com To: broonie@kernel.org Cc: lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, srini@kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, neil.armstrong@linaro.org, krzysztof.kozlowski@linaro.org, Srinivas Kandagatla Subject: [PATCH 2/5] ASoC: codecs: wcd-common: move WCD_SDW_CH to common Date: Wed, 16 Jul 2025 13:33:20 +0100 Message-ID: <20250716123323.5831-3-srinivas.kandagatla@oss.qualcomm.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> References: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=dKimmPZb c=1 sm=1 tr=0 ts=68779c1d cx=c_pps a=WeENfcodrlLV9YRTxbY/uA==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=Wb1JkmetP80A:10 a=EUspDBNiAAAA:8 a=AbvtZVZmey0OcoHPdAYA:9 a=kacYvNCVWA4VmyqE58fU:22 X-Proofpoint-GUID: ZW3_UnLRdnip--_k9X06lw_3o3XQqagu X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDExMiBTYWx0ZWRfX0W2EiS3iTgEL a3hEgNmmlMC2iM6OmaYJs/XkTYkNH5A5JwccjpfrMc7xbtO/AGq+SDUA9HeuBAQxhN59W3yJ+al tQo2ccDm0CzWfGzSn7b2Yx2ufGvah2mX8w7oFQjJnH73t7COn+983LVbvUgiuzVZOrNZerWAzag w9DmdBCGQ/bgMYL3pY1/R+oT01ftyt0xT3kUe0qBELkm0idNCzn6Bsjf2lsVvnum6FdqR3CI+nl G6utzpwTPJsOjZhVc2oJjkR2zTJgHpOy5jcqQBHBaA/ubHo4fkT61Y8MBz+6wZZdbzJib5IgzlB hGSo2rmvKJ+Ab23n24m9+AWyNHFDRQuHCpBf7FeVWJP3ir1b9wqeAgyFDBhCYVJ7E7oYaXxahl8 WNGRrCF+juQsWNa+hUsYpLp19kc2eO/1TzpQWkzRZP88dyNByZHEogRDl4u1N6kW8kZp/8KG X-Proofpoint-ORIG-GUID: ZW3_UnLRdnip--_k9X06lw_3o3XQqagu X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-16_01,2025-07-16_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 mlxlogscore=999 mlxscore=0 spamscore=0 adultscore=0 impostorscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 phishscore=0 lowpriorityscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507160112 Content-Type: text/plain; charset="utf-8" From: Srinivas Kandagatla sdw_ch_info and WCD_SDW_CH macro is duplicated across wcd937x, wcd938x, wcd939x soundwire codec drivers. Move this to wcd common driver to remove this code duplication. Signed-off-by: Srinivas Kandagatla --- sound/soc/codecs/wcd-common.h | 11 +++++++++++ sound/soc/codecs/wcd937x-sdw.c | 4 ++-- sound/soc/codecs/wcd937x.h | 16 ++-------------- sound/soc/codecs/wcd938x-sdw.c | 4 ++-- sound/soc/codecs/wcd938x.c | 2 +- sound/soc/codecs/wcd938x.h | 13 +------------ sound/soc/codecs/wcd939x-sdw.c | 4 ++-- sound/soc/codecs/wcd939x.c | 2 +- sound/soc/codecs/wcd939x.h | 13 +------------ 9 files changed, 23 insertions(+), 46 deletions(-) diff --git a/sound/soc/codecs/wcd-common.h b/sound/soc/codecs/wcd-common.h index 08c8e7ce9814..ee101f8547d5 100644 --- a/sound/soc/codecs/wcd-common.h +++ b/sound/soc/codecs/wcd-common.h @@ -11,6 +11,17 @@ #define WCD_MAX_MICBIAS_MV 2850 #define WCD_MAX_MICBIAS 4 =20 +struct wcd_sdw_ch_info { + int port_num; + unsigned int ch_mask; +}; + +#define WCD_SDW_CH(id, pn, cmask) \ + [id] =3D { \ + .port_num =3D pn, \ + .ch_mask =3D cmask, \ + } + struct wcd_common { struct device *dev; int max_bias; diff --git a/sound/soc/codecs/wcd937x-sdw.c b/sound/soc/codecs/wcd937x-sdw.c index e7cc699bd8bc..8f2819163527 100644 --- a/sound/soc/codecs/wcd937x-sdw.c +++ b/sound/soc/codecs/wcd937x-sdw.c @@ -19,7 +19,7 @@ #include #include "wcd937x.h" =20 -static struct wcd937x_sdw_ch_info wcd937x_sdw_rx_ch_info[] =3D { +static struct wcd_sdw_ch_info wcd937x_sdw_rx_ch_info[] =3D { WCD_SDW_CH(WCD937X_HPH_L, WCD937X_HPH_PORT, BIT(0)), WCD_SDW_CH(WCD937X_HPH_R, WCD937X_HPH_PORT, BIT(1)), WCD_SDW_CH(WCD937X_CLSH, WCD937X_CLSH_PORT, BIT(0)), @@ -30,7 +30,7 @@ static struct wcd937x_sdw_ch_info wcd937x_sdw_rx_ch_info[= ] =3D { WCD_SDW_CH(WCD937X_DSD_R, WCD937X_DSD_PORT, BIT(1)), }; =20 -static struct wcd937x_sdw_ch_info wcd937x_sdw_tx_ch_info[] =3D { +static struct wcd_sdw_ch_info wcd937x_sdw_tx_ch_info[] =3D { WCD_SDW_CH(WCD937X_ADC1, WCD937X_ADC_1_PORT, BIT(0)), WCD_SDW_CH(WCD937X_ADC2, WCD937X_ADC_2_3_PORT, BIT(0)), WCD_SDW_CH(WCD937X_ADC3, WCD937X_ADC_2_3_PORT, BIT(0)), diff --git a/sound/soc/codecs/wcd937x.h b/sound/soc/codecs/wcd937x.h index 0f96b7108a7e..3d0ba3cc0ee6 100644 --- a/sound/soc/codecs/wcd937x.h +++ b/sound/soc/codecs/wcd937x.h @@ -7,6 +7,7 @@ =20 #include #include +#include "wcd-common.h" =20 #define WCD937X_BASE_ADDRESS 0x3000 #define WCD937X_ANA_BIAS 0x3001 @@ -507,26 +508,13 @@ enum wcd937x_rx_sdw_ports { WCD937X_MAX_SWR_PORTS =3D WCD937X_DSD_PORT, }; =20 -struct wcd937x_sdw_ch_info { - int port_num; - unsigned int ch_mask; - unsigned int master_ch_mask; -}; - -#define WCD_SDW_CH(id, pn, cmask) \ - [id] =3D { \ - .port_num =3D pn, \ - .ch_mask =3D cmask, \ - .master_ch_mask =3D cmask, \ - } - struct wcd937x_priv; struct wcd937x_sdw_priv { struct sdw_slave *sdev; struct sdw_stream_config sconfig; struct sdw_stream_runtime *sruntime; struct sdw_port_config port_config[WCD937X_MAX_SWR_PORTS]; - struct wcd937x_sdw_ch_info *ch_info; + struct wcd_sdw_ch_info *ch_info; bool port_enable[WCD937X_MAX_SWR_CH_IDS]; unsigned int master_channel_map[SDW_MAX_PORTS]; int active_ports; diff --git a/sound/soc/codecs/wcd938x-sdw.c b/sound/soc/codecs/wcd938x-sdw.c index 8bcd8396f375..40c6896eb781 100644 --- a/sound/soc/codecs/wcd938x-sdw.c +++ b/sound/soc/codecs/wcd938x-sdw.c @@ -21,7 +21,7 @@ =20 #define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m)) =20 -static const struct wcd938x_sdw_ch_info wcd938x_sdw_rx_ch_info[] =3D { +static const struct wcd_sdw_ch_info wcd938x_sdw_rx_ch_info[] =3D { WCD_SDW_CH(WCD938X_HPH_L, WCD938X_HPH_PORT, BIT(0)), WCD_SDW_CH(WCD938X_HPH_R, WCD938X_HPH_PORT, BIT(1)), WCD_SDW_CH(WCD938X_CLSH, WCD938X_CLSH_PORT, BIT(0)), @@ -32,7 +32,7 @@ static const struct wcd938x_sdw_ch_info wcd938x_sdw_rx_ch= _info[] =3D { WCD_SDW_CH(WCD938X_DSD_R, WCD938X_DSD_PORT, BIT(1)), }; =20 -static const struct wcd938x_sdw_ch_info wcd938x_sdw_tx_ch_info[] =3D { +static const struct wcd_sdw_ch_info wcd938x_sdw_tx_ch_info[] =3D { WCD_SDW_CH(WCD938X_ADC1, WCD938X_ADC_1_2_PORT, BIT(0)), WCD_SDW_CH(WCD938X_ADC2, WCD938X_ADC_1_2_PORT, BIT(1)), WCD_SDW_CH(WCD938X_ADC3, WCD938X_ADC_3_4_PORT, BIT(0)), diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index 6d77cbcafa70..678e4052a255 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -393,7 +393,7 @@ static int wcd938x_io_init(struct wcd938x_priv *wcd938x) =20 } =20 -static int wcd938x_sdw_connect_port(const struct wcd938x_sdw_ch_info *ch_i= nfo, +static int wcd938x_sdw_connect_port(const struct wcd_sdw_ch_info *ch_info, struct sdw_port_config *port_config, u8 enable) { diff --git a/sound/soc/codecs/wcd938x.h b/sound/soc/codecs/wcd938x.h index a6fda63d7f98..a37962c4cef1 100644 --- a/sound/soc/codecs/wcd938x.h +++ b/sound/soc/codecs/wcd938x.h @@ -588,17 +588,6 @@ =20 #define WCD938X_MAX_SWR_CH_IDS 15 =20 -struct wcd938x_sdw_ch_info { - int port_num; - unsigned int ch_mask; -}; - -#define WCD_SDW_CH(id, pn, cmask) \ - [id] =3D { \ - .port_num =3D pn, \ - .ch_mask =3D cmask, \ - } - enum wcd938x_tx_sdw_ports { WCD938X_ADC_1_2_PORT =3D 1, WCD938X_ADC_3_4_PORT, @@ -650,7 +639,7 @@ struct wcd938x_sdw_priv { struct sdw_stream_config sconfig; struct sdw_stream_runtime *sruntime; struct sdw_port_config port_config[WCD938X_MAX_SWR_PORTS]; - const struct wcd938x_sdw_ch_info *ch_info; + const struct wcd_sdw_ch_info *ch_info; bool port_enable[WCD938X_MAX_SWR_CH_IDS]; int active_ports; bool is_tx; diff --git a/sound/soc/codecs/wcd939x-sdw.c b/sound/soc/codecs/wcd939x-sdw.c index 477d6cf27d32..b5a35c3b22e1 100644 --- a/sound/soc/codecs/wcd939x-sdw.c +++ b/sound/soc/codecs/wcd939x-sdw.c @@ -23,7 +23,7 @@ =20 #define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m)) =20 -static const struct wcd939x_sdw_ch_info wcd939x_sdw_rx_ch_info[] =3D { +static const struct wcd_sdw_ch_info wcd939x_sdw_rx_ch_info[] =3D { WCD_SDW_CH(WCD939X_HPH_L, WCD939X_HPH_PORT, BIT(0)), WCD_SDW_CH(WCD939X_HPH_R, WCD939X_HPH_PORT, BIT(1)), WCD_SDW_CH(WCD939X_CLSH, WCD939X_CLSH_PORT, BIT(0)), @@ -36,7 +36,7 @@ static const struct wcd939x_sdw_ch_info wcd939x_sdw_rx_ch= _info[] =3D { WCD_SDW_CH(WCD939X_HIFI_PCM_R, WCD939X_HIFI_PCM_PORT, BIT(1)), }; =20 -static const struct wcd939x_sdw_ch_info wcd939x_sdw_tx_ch_info[] =3D { +static const struct wcd_sdw_ch_info wcd939x_sdw_tx_ch_info[] =3D { WCD_SDW_CH(WCD939X_ADC1, WCD939X_ADC_1_4_PORT, BIT(0)), WCD_SDW_CH(WCD939X_ADC2, WCD939X_ADC_1_4_PORT, BIT(1)), WCD_SDW_CH(WCD939X_ADC3, WCD939X_ADC_1_4_PORT, BIT(2)), diff --git a/sound/soc/codecs/wcd939x.c b/sound/soc/codecs/wcd939x.c index ef8def695219..6bbdfa426365 100644 --- a/sound/soc/codecs/wcd939x.c +++ b/sound/soc/codecs/wcd939x.c @@ -412,7 +412,7 @@ static int wcd939x_io_init(struct snd_soc_component *co= mponent) return 0; } =20 -static int wcd939x_sdw_connect_port(const struct wcd939x_sdw_ch_info *ch_i= nfo, +static int wcd939x_sdw_connect_port(const struct wcd_sdw_ch_info *ch_info, struct sdw_port_config *port_config, u8 enable) { diff --git a/sound/soc/codecs/wcd939x.h b/sound/soc/codecs/wcd939x.h index f587cf22f86f..0ee0fbb49ff9 100644 --- a/sound/soc/codecs/wcd939x.h +++ b/sound/soc/codecs/wcd939x.h @@ -845,17 +845,6 @@ =20 #define WCD939X_MAX_SWR_CH_IDS (15) =20 -struct wcd939x_sdw_ch_info { - int port_num; - unsigned int ch_mask; -}; - -#define WCD_SDW_CH(id, pn, cmask) \ - [id] =3D { \ - .port_num =3D pn, \ - .ch_mask =3D cmask, \ - } - enum wcd939x_tx_sdw_ports { WCD939X_ADC_1_4_PORT =3D 1, WCD939X_ADC_DMIC_1_2_PORT, @@ -910,7 +899,7 @@ struct wcd939x_sdw_priv { struct sdw_stream_config sconfig; struct sdw_stream_runtime *sruntime; struct sdw_port_config port_config[WCD939X_MAX_SWR_PORTS]; - const struct wcd939x_sdw_ch_info *ch_info; + const struct wcd_sdw_ch_info *ch_info; bool port_enable[WCD939X_MAX_SWR_CH_IDS]; int active_ports; bool is_tx; --=20 2.50.0 From nobody Tue Oct 7 00:25:07 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A5AD2F50B1 for ; Wed, 16 Jul 2025 12:33:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669217; cv=none; b=uUy1JLH2bhjLm9/yBl6YWYLL4Eu3+HAPdLZHLRZgb4ynXwtW6sSMnRkmero8FaurvYAaWjCo3E29iCaM6IyivkF1KML+RG5HueLd3LXhkLMb4Zbv7Ha36MtJaMz9xaYIo7I4MxLxkGEIvkde15GpTwgh3gsxbOetg8hY+tgcYmo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669217; c=relaxed/simple; bh=zjhVvqySrSwwnLW11WVGyKNG12Gd3+0QhOKhI4XLesk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dL4zExKDQUoWisBzpucD6kamDt7uiolREZH37oVcc1knVgzKMy9u3zn/Vi++gTfqRVhX1q+rZ58g8UZTrvue+NbX42hlrhk1P+EtAgVClgtmu20jiqcQGZPlaA0OS6T7uEtRJrboMe2yvFcth27V3Kca7rP5ZeO3V8qD8si2otQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=go8gXOA8; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="go8gXOA8" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56G5gu09017640 for ; Wed, 16 Jul 2025 12:33:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=R54aSxowHXp RiRjvZplb9BA0g0wx/yEa6TgqmAyLwd4=; b=go8gXOA8B82eFopyyptiL8OFTq4 94Rxse6jI0Rew729F1XpyMsf4d4ExC+v/QZgLi9KEbumF+AzsnYq5iZqiLohNIlH RGilJMJ7chQs+dAW1MYr3jS92e657cqL9wWSn54uqF2zK4KmxdP+OVUNopqkoodQ lDRvy9TtPj2MhXzCgi/UjTryhFn6Easg4qsCGvKzSZoTWglNF9YySs4awYXlwogA bMxn9gDWciX4Cj5VEEf3P3/X5PwohuLf9HrggFBv173anFwf0xy3qaj8iKIew5mQ 88dQVHl3Jus3WufKMbu9XBAxg0n3TqLZjpAdiSJoXXsbQ6wCGYxJRDoKatQ== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47ufu8bqxm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 16 Jul 2025 12:33:34 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-7e32b9398e4so367771685a.1 for ; Wed, 16 Jul 2025 05:33:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752669212; x=1753274012; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=R54aSxowHXpRiRjvZplb9BA0g0wx/yEa6TgqmAyLwd4=; b=ADrNCMC3LCo0jaSCFeN2IDTr8eu0654CURXCNKhI4uDEAn6Ya3tG8//MA2b0PeHT26 au5AU+alkX4U7mqPz/Ksg4FqG5MjjO7A7peRWabKbdDmWqkHaKfHD92V/4Q18amvqI8R FvuTqKi1rZrhKGm0K6o6/SGbPN6W5Pe611BcmV7a/HfdxwNwuu+YCi8cSTuuWG++RrVv EN3CTTDa1YXy9Ctg7DdRrq8KrBKChPyuXfXkMzLCsAVrm6YKn/hjcrg+EVJqK01PN3Z6 ovjNX2G32pLDm8WnaJSE3Euvg3E6JaKXqbuTcZkVwdbTtQzC+kPv2qr/Q+aTik5OA8Ky JejQ== X-Forwarded-Encrypted: i=1; AJvYcCVu2RESbnn6WOrI6nOcDwM5NRO79kXMDJ1PyaDTOZ3ooMD0Nk4ZjkJWVtobRJSiwdwTvqixEs0/xxmem0A=@vger.kernel.org X-Gm-Message-State: AOJu0YzMKtTAnnctWLxl2Q1NjS9jXQmGhQXP5J6KSCB4I02X1W8flVnK JFuhbKiwcWadLymEUj+TweZM+8zPpxekHYcJDIGZFuKOTfWAMiO+5H6x23eMG9Rk6tM3tTTdEQ/ enwBWr+Bi2fHLKEZllffEOiOuljKLPauiSKfgkxGHuLD0/2Rx+jyaRtCuBPgb4N0c9xw= X-Gm-Gg: ASbGnctrMfcUgDZF6LSiYFfhXdIHlI4FONSCCvpCcYbRZzVE2723wdo2HTcPfVf7u7A Gl77ss6oYSV0jm0C1ABgPehrTlR0v1duJnPt9hdP1+al511z+DWBx5/G3m+vVQe7qAl+X9OUKtk jmQurlL9Cb89+YOrpxG2YOau1shEvwuJAMGm5YF36A4t22bFqIaN0jykNW6IPB4ZycBkui0mYsa wgUeNVm2/BP5op9PDsvuUHjIduXxzLj7heY5LHRgrMzpkCGr8G4VUAmLYxsguJ9cWq8JpK7WqwL AFaYmKYenZUlNOFym0ZhBSHmw8Dsd37aET+UHaEaAfb7dOoDzpkkNw== X-Received: by 2002:a05:620a:44c5:b0:7e3:49b5:d53f with SMTP id af79cd13be357-7e349b5d6b4mr66929785a.34.1752669211906; Wed, 16 Jul 2025 05:33:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGsvE+VqtNvxlt0dhL+n9oaGEyO6NZwYTFbdXlPWS1CeSWMSp3UiwpgsU6Vom+DApz6OG/vjQ== X-Received: by 2002:a05:620a:44c5:b0:7e3:49b5:d53f with SMTP id af79cd13be357-7e349b5d6b4mr66925085a.34.1752669211381; Wed, 16 Jul 2025 05:33:31 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4562e89c739sm19453335e9.32.2025.07.16.05.33.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Jul 2025 05:33:30 -0700 (PDT) From: srinivas.kandagatla@oss.qualcomm.com To: broonie@kernel.org Cc: lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, srini@kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, neil.armstrong@linaro.org, krzysztof.kozlowski@linaro.org, Srinivas Kandagatla Subject: [PATCH 3/5] ASoC: codecs: wcd-common: move component ops to common Date: Wed, 16 Jul 2025 13:33:21 +0100 Message-ID: <20250716123323.5831-4-srinivas.kandagatla@oss.qualcomm.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> References: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDExMiBTYWx0ZWRfX822LMbqPBnhu 3aauTkdiGt6wfcpdtvDh4npLpFXjVeQcVH7t+kW0XpgBn8HMc3hz/AkYt1N/+g7vq+9d5lkJiXX 0AhDaCh3dPTyzesKwQuk94U1D0SmwelGvqPqQ1rAjB81ONgk7DZOdo4vzycQ0vVmxKDK4yAUnDd IGbjsngYpDPU144SsA8wD2H7cRjT4wGtbB5YvJIBTuweU9Kn4TKp7ZAh/OSTYAD6BeGqIFETr2f sIgSC2hTM3qFh3G1hYD5SjXv+Qsj1h/G9bjqdsCkSI04wtW/OUHhlkP+5sNqjRDUhg75V+Ng9Si Gv1CamyiIN3um7bFNKmnDyeL00nGe3R5UT/rciQTKhew44Jut1hXXuGEgJPQLA8fQGPICMgKT3U yPM/iedYV4MR+t1yxDre4xXusHEcQxqpKvsPhv1MdUNuXLAYlYJIceo6Ixka9gkeOXOOUXRx X-Proofpoint-ORIG-GUID: ua9-To6eqX6oRy80Lk67ork8B92EwLpe X-Proofpoint-GUID: ua9-To6eqX6oRy80Lk67ork8B92EwLpe X-Authority-Analysis: v=2.4 cv=f59IBPyM c=1 sm=1 tr=0 ts=68779c1e cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=Wb1JkmetP80A:10 a=EUspDBNiAAAA:8 a=eQjB__F64b99YC4tFhYA:9 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-16_01,2025-07-16_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 spamscore=0 mlxscore=0 bulkscore=0 suspectscore=0 impostorscore=0 adultscore=0 priorityscore=1501 mlxlogscore=999 phishscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507160112 Content-Type: text/plain; charset="utf-8" From: Srinivas Kandagatla component_ops for wcd97x, wcd938x, wcd939x soundwire codecs are exactly identlical, move them to common driver to remove this duplicate code. Signed-off-by: Srinivas Kandagatla --- sound/soc/codecs/wcd-common.c | 27 +++++++++++++++++++++++++++ sound/soc/codecs/wcd-common.h | 1 + sound/soc/codecs/wcd937x-sdw.c | 29 ++--------------------------- sound/soc/codecs/wcd938x-sdw.c | 20 ++------------------ sound/soc/codecs/wcd939x-sdw.c | 29 ++--------------------------- 5 files changed, 34 insertions(+), 72 deletions(-) diff --git a/sound/soc/codecs/wcd-common.c b/sound/soc/codecs/wcd-common.c index dffb0431a48c..0c1ffa015403 100644 --- a/sound/soc/codecs/wcd-common.c +++ b/sound/soc/codecs/wcd-common.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include =20 #include "wcd-common.h" =20 @@ -62,5 +64,30 @@ int wcd_dt_parse_micbias_info(struct wcd_common *common) return 0; } EXPORT_SYMBOL_GPL(wcd_dt_parse_micbias_info); + +static int wcd_sdw_component_bind(struct device *dev, struct device *maste= r, void *data) +{ + pm_runtime_set_autosuspend_delay(dev, 3000); + pm_runtime_use_autosuspend(dev); + pm_runtime_mark_last_busy(dev); + pm_runtime_set_active(dev); + pm_runtime_enable(dev); + + return 0; +} + +static void wcd_sdw_component_unbind(struct device *dev, struct device *ma= ster, void *data) +{ + pm_runtime_disable(dev); + pm_runtime_set_suspended(dev); + pm_runtime_dont_use_autosuspend(dev); +} + +const struct component_ops wcd_sdw_component_ops =3D { + .bind =3D wcd_sdw_component_bind, + .unbind =3D wcd_sdw_component_unbind, +}; +EXPORT_SYMBOL_GPL(wcd_sdw_component_ops); + MODULE_DESCRIPTION("Common Qualcomm WCD Codec helpers driver"); MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/wcd-common.h b/sound/soc/codecs/wcd-common.h index ee101f8547d5..deb78241236b 100644 --- a/sound/soc/codecs/wcd-common.h +++ b/sound/soc/codecs/wcd-common.h @@ -29,6 +29,7 @@ struct wcd_common { u32 micb_vout[WCD_MAX_MICBIAS]; }; =20 +extern const struct component_ops wcd_sdw_component_ops; int wcd_get_micb_vout_ctl_val(struct device *dev, u32 micb_mv); int wcd_dt_parse_micbias_info(struct wcd_common *common); =20 diff --git a/sound/soc/codecs/wcd937x-sdw.c b/sound/soc/codecs/wcd937x-sdw.c index 8f2819163527..59c353cafd31 100644 --- a/sound/soc/codecs/wcd937x-sdw.c +++ b/sound/soc/codecs/wcd937x-sdw.c @@ -983,31 +983,6 @@ static const struct sdw_slave_ops wcd9370_slave_ops = =3D { .interrupt_callback =3D wcd9370_interrupt_callback, }; =20 -static int wcd937x_sdw_component_bind(struct device *dev, - struct device *master, void *data) -{ - pm_runtime_set_autosuspend_delay(dev, 3000); - pm_runtime_use_autosuspend(dev); - pm_runtime_mark_last_busy(dev); - pm_runtime_set_active(dev); - pm_runtime_enable(dev); - - return 0; -} - -static void wcd937x_sdw_component_unbind(struct device *dev, - struct device *master, void *data) -{ - pm_runtime_disable(dev); - pm_runtime_set_suspended(dev); - pm_runtime_dont_use_autosuspend(dev); -} - -static const struct component_ops wcd937x_sdw_component_ops =3D { - .bind =3D wcd937x_sdw_component_bind, - .unbind =3D wcd937x_sdw_component_unbind, -}; - static int wcd9370_probe(struct sdw_slave *pdev, const struct sdw_device_id *id) { @@ -1093,7 +1068,7 @@ static int wcd9370_probe(struct sdw_slave *pdev, } =20 =20 - ret =3D component_add(dev, &wcd937x_sdw_component_ops); + ret =3D component_add(dev, &wcd_sdw_component_ops); if (ret) return ret; =20 @@ -1107,7 +1082,7 @@ static int wcd9370_remove(struct sdw_slave *pdev) { struct device *dev =3D &pdev->dev; =20 - component_del(dev, &wcd937x_sdw_component_ops); + component_del(dev, &wcd_sdw_component_ops); =20 return 0; } diff --git a/sound/soc/codecs/wcd938x-sdw.c b/sound/soc/codecs/wcd938x-sdw.c index 40c6896eb781..e43d6ac1c913 100644 --- a/sound/soc/codecs/wcd938x-sdw.c +++ b/sound/soc/codecs/wcd938x-sdw.c @@ -1181,22 +1181,6 @@ static const struct sdw_slave_ops wcd9380_slave_ops = =3D { .bus_config =3D wcd9380_bus_config, }; =20 -static int wcd938x_sdw_component_bind(struct device *dev, - struct device *master, void *data) -{ - return 0; -} - -static void wcd938x_sdw_component_unbind(struct device *dev, - struct device *master, void *data) -{ -} - -static const struct component_ops wcd938x_sdw_component_ops =3D { - .bind =3D wcd938x_sdw_component_bind, - .unbind =3D wcd938x_sdw_component_unbind, -}; - static int wcd9380_probe(struct sdw_slave *pdev, const struct sdw_device_id *id) { @@ -1261,7 +1245,7 @@ static int wcd9380_probe(struct sdw_slave *pdev, pm_runtime_set_active(dev); pm_runtime_enable(dev); =20 - ret =3D component_add(dev, &wcd938x_sdw_component_ops); + ret =3D component_add(dev, &wcd_sdw_component_ops); if (ret) goto err_disable_rpm; =20 @@ -1279,7 +1263,7 @@ static int wcd9380_remove(struct sdw_slave *pdev) { struct device *dev =3D &pdev->dev; =20 - component_del(dev, &wcd938x_sdw_component_ops); + component_del(dev, &wcd_sdw_component_ops); =20 pm_runtime_disable(dev); pm_runtime_set_suspended(dev); diff --git a/sound/soc/codecs/wcd939x-sdw.c b/sound/soc/codecs/wcd939x-sdw.c index b5a35c3b22e1..df71d7777b71 100644 --- a/sound/soc/codecs/wcd939x-sdw.c +++ b/sound/soc/codecs/wcd939x-sdw.c @@ -1377,31 +1377,6 @@ static const struct sdw_slave_ops wcd9390_slave_ops = =3D { .bus_config =3D wcd9390_bus_config, }; =20 -static int wcd939x_sdw_component_bind(struct device *dev, struct device *m= aster, - void *data) -{ - pm_runtime_set_autosuspend_delay(dev, 3000); - pm_runtime_use_autosuspend(dev); - pm_runtime_mark_last_busy(dev); - pm_runtime_set_active(dev); - pm_runtime_enable(dev); - - return 0; -} - -static void wcd939x_sdw_component_unbind(struct device *dev, - struct device *master, void *data) -{ - pm_runtime_disable(dev); - pm_runtime_set_suspended(dev); - pm_runtime_dont_use_autosuspend(dev); -} - -static const struct component_ops wcd939x_sdw_component_ops =3D { - .bind =3D wcd939x_sdw_component_bind, - .unbind =3D wcd939x_sdw_component_unbind, -}; - static int wcd9390_probe(struct sdw_slave *pdev, const struct sdw_device_i= d *id) { struct device *dev =3D &pdev->dev; @@ -1465,7 +1440,7 @@ static int wcd9390_probe(struct sdw_slave *pdev, cons= t struct sdw_device_id *id) regcache_cache_only(wcd->regmap, true); } =20 - ret =3D component_add(dev, &wcd939x_sdw_component_ops); + ret =3D component_add(dev, &wcd_sdw_component_ops); if (ret) return ret; =20 @@ -1480,7 +1455,7 @@ static int wcd9390_remove(struct sdw_slave *pdev) struct device *dev =3D &pdev->dev; struct wcd939x_sdw_priv *wcd =3D dev_get_drvdata(dev); =20 - component_del(dev, &wcd939x_sdw_component_ops); + component_del(dev, &wcd_sdw_component_ops); =20 if (wcd->regmap) regmap_exit(wcd->regmap); --=20 2.50.0 From nobody Tue Oct 7 00:25:07 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15BD62F5318 for ; Wed, 16 Jul 2025 12:33:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669219; cv=none; b=sCxgO6IaAY+nsbG/uibjVHDna8DFBcLAAzr9GlSNR832O7z981WbqFF5wIVIfvBhXJHhCor2EWpHNU2grsazwCKYT9Wl5EcJOrZC7cOP+MVB4l+Cn4+oIZ3tyj32Jkj/hW+LN01vWO1YigSCnW5XbfNe1JLNHlIAhOVDEFBcbwg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669219; c=relaxed/simple; bh=yibIyJ86F2/IfQa5SjS5WXhbpmt6CUibLHc0JVss7P8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U0/HrJDrkdi4STx58Q0Xacd8SP46PaFxxmUSJ99qAuPED/R59x6rNLOsepkVlhK/oA5MuYKvIM0CI7c9v3M009lEcZ+EJaH83ub0Sq9ydy1uaGKTLN1bfild6cEEvhe7J9RwZdv3CKdag8KdCMcK7D5XpwY9mZ3e9SRA0Xm8Fms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=LBCud2yJ; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="LBCud2yJ" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56GCLg1D022755 for ; Wed, 16 Jul 2025 12:33:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=jlH8rAJGwAT ewu+6bBhjIOTX5MRWqExEs1wQ0VHGYQg=; b=LBCud2yJs6PttBRPX/0Z/vKFZmh pIPsaxpF4ZeDmtn8Nuc1Ith5r92KW4n55TnXrSV3R2Ed+OxOydupPuNz8blfYdGi BXqFxYNC/epuhRq8nvBqfNRQWfOBB00th5fagKj7DRn/paeK1yJj9s6Kov56MgYr zRZLE7Ktb9Irrk/fy4EwGBp5pSHcDcnWH7GWmRougNOnNAXhFLw7+95xqIbD6xQ7 vLi6LwmhLaA6HOpTchCNBmokFDCAWkHZmab1ROWhX65Ft969VUCult9veAD1UvX1 w5gUwX28TV97mVJXToCH6t+4jTmAToCcbqYcrEyfvtv4rKu+8UzANHbKAeQ== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47wkrumk6d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 16 Jul 2025 12:33:35 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-7e269587d8eso573477985a.3 for ; Wed, 16 Jul 2025 05:33:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752669214; x=1753274014; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jlH8rAJGwATewu+6bBhjIOTX5MRWqExEs1wQ0VHGYQg=; b=AH5XN4NKjM/wGhIyNJ5DaHhSfxYiTTCcNu0mF6NXz2K1+f+Ep9ZR39+JKIBUy08Z+k YZomckQ52ow4Y0prBGVMCMTtI7qEztw14Gvp73VHhcvGQGlVEct9auevEfS7chNqJMzI lwWel1nPJuwfIA4A4gjjt8aeJhppvU5NZyUBz2/cWho4f2NIEpJ/P+00igpQX8CWqbV6 ilzzTB7fQlkjBjlh8qHAwpJrPjZOqvOj47byek1P6rjy+49i+1E1eG0bdPavSVdjQFD4 XNifC3a50NWcdaoHzclOJBFPuH6nQpCvsKwIZI45Z8D1FlU7rvFPgFgUTFUHiDmD9Bjd famQ== X-Forwarded-Encrypted: i=1; AJvYcCW648twCUdgjwc5nJkxpNlkwFG7tQlVlGABc/YYUk+6k75OnBhK4ZQ6cd/CXGLv7PGJf0n944IZJ3i7GMU=@vger.kernel.org X-Gm-Message-State: AOJu0YzpGy7EkeAxEH00Jh+Mrfsr98JauzEid4k6wQaGcdgE39eCGiUK yrWRj5D6SPvPRAWu/h0QFFrxGJvw6DNx1chsPZB1uTNFl6UGeozRRUmmF5hgjaDMs6rc8GzuCqf dvqP+fsweLNyXr48c2A8rNNJm9dyWtnipDXwk6Jh9D1xYtXLNpE5CQkUSmOrheNUPQWs= X-Gm-Gg: ASbGnctCW4b7N3XRaAonCUPJxYz70qocG0ccPYosenlf/2c7RJz+nSpOpPw1nKmgtmg uPY/qTqO+8wxXbaC0hYgH79VawVPLoaXUPTSMalmIRNDAVkEPh9pcvQKqhWfZ7nzr/kwVVhdCcx TIc3J8MDUPsKovR1SJfa/sJIr0w+gAxZgHtTAmd0pfpzwUt9wPrHSVDECGWiSHX+lKTuWmmVWJb JfBYrnQElINJJIXrQNu4eaO6N9cRenheVIMsFdrsGTOctePTtg7Q8LUUR3ZPYr6K22qLhvg3Mef hkn0doRBSJYLMklywStwj4rhnbIbas02M9cBE9GP/wQ/hIjySeG6pg== X-Received: by 2002:a05:620a:a20c:b0:7e3:44e1:be4b with SMTP id af79cd13be357-7e344e1c048mr266093985a.31.1752669214499; Wed, 16 Jul 2025 05:33:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGQGAK+k/pm+VAAiYbieT5s9SCZyiLFMahx58ymhGKiZvECv6WJDXL9w1xmtshVD5BdvFTvNg== X-Received: by 2002:a05:620a:a20c:b0:7e3:44e1:be4b with SMTP id af79cd13be357-7e344e1c048mr266090085a.31.1752669213998; Wed, 16 Jul 2025 05:33:33 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4562e89c739sm19453335e9.32.2025.07.16.05.33.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Jul 2025 05:33:31 -0700 (PDT) From: srinivas.kandagatla@oss.qualcomm.com To: broonie@kernel.org Cc: lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, srini@kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, neil.armstrong@linaro.org, krzysztof.kozlowski@linaro.org, Srinivas Kandagatla Subject: [PATCH 4/5] ASoC: codecs: wcd939x: move to using dev_get_regmap Date: Wed, 16 Jul 2025 13:33:22 +0100 Message-ID: <20250716123323.5831-5-srinivas.kandagatla@oss.qualcomm.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> References: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: wTH8ci5f0zoVZ6bcK3-R1tdeKI7l-km2 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDExMiBTYWx0ZWRfXwD2T+6yGOk6p LJ6J3FGZ7NoQXSZxeIGL/Hy3PL7c7ttrYRGLdx3YeF/zcwQfX99AZbHte+Ndd6+a2edDZIJx84k EfKVC5MDZdyCrJWvOKNEo8ZralW8xDbonZ3WH6czrzCUzqEGfCR8QVK4uuZI8rzuYlfuUzZH49w 5D7VqITTmrJE8SVGBu6i6HH170cetns6FLSYQdXjPs8euoRnX4tQjeYboPIdaVvzbYMxAPmV1S6 lqLri+JtdKB0h5tcvrLn5NZE1UvkOni4LYH5AHKPqHXDCdyUgC0vKcw9WI3Ymb2wWT/EPkJ3Y2o /XP5mmTER9p7BdnZiaa5QVGSy1lZBeXk4FU6Tw7Yrso3RwGEI4UeM3CwHiZvjH1M231049ocOF3 FTw0eX3EspoS+gnG5VG8WMfk0kXPqkQHns/VvbViFbf2BxXkaaJesk5vvlYvxSO3G8DJ1ku/ X-Authority-Analysis: v=2.4 cv=WqUrMcfv c=1 sm=1 tr=0 ts=68779c1f cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=Wb1JkmetP80A:10 a=EUspDBNiAAAA:8 a=ZenZftWH51yG1dFpGBgA:9 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-ORIG-GUID: wTH8ci5f0zoVZ6bcK3-R1tdeKI7l-km2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-16_01,2025-07-16_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 mlxscore=0 mlxlogscore=734 bulkscore=0 adultscore=0 priorityscore=1501 impostorscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 spamscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507160112 Content-Type: text/plain; charset="utf-8" From: Srinivas Kandagatla Ffor some reason we ended up with a boiler plate for dev_get_regmap in wcd939x codec and started exporting a symbol for this. Remove this redundant wrapper and direclty use dev_get_regmap from device pointer.. Signed-off-by: Srinivas Kandagatla --- sound/soc/codecs/wcd939x-sdw.c | 9 --------- sound/soc/codecs/wcd939x.c | 6 +++--- sound/soc/codecs/wcd939x.h | 6 ------ 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/sound/soc/codecs/wcd939x-sdw.c b/sound/soc/codecs/wcd939x-sdw.c index df71d7777b71..2b0aa2108f33 100644 --- a/sound/soc/codecs/wcd939x-sdw.c +++ b/sound/soc/codecs/wcd939x-sdw.c @@ -186,15 +186,6 @@ int wcd939x_sdw_set_sdw_stream(struct wcd939x_sdw_priv= *wcd, } EXPORT_SYMBOL_GPL(wcd939x_sdw_set_sdw_stream); =20 -struct regmap *wcd939x_swr_get_regmap(struct wcd939x_sdw_priv *wcd) -{ - if (wcd->regmap) - return wcd->regmap; - - return ERR_PTR(-EINVAL); -} -EXPORT_SYMBOL_GPL(wcd939x_swr_get_regmap); - static int wcd9390_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { diff --git a/sound/soc/codecs/wcd939x.c b/sound/soc/codecs/wcd939x.c index 6bbdfa426365..18ccdba18291 100644 --- a/sound/soc/codecs/wcd939x.c +++ b/sound/soc/codecs/wcd939x.c @@ -3373,10 +3373,10 @@ static int wcd939x_bind(struct device *dev) } =20 /* Get regmap from TX SoundWire device */ - wcd939x->regmap =3D wcd939x_swr_get_regmap(wcd939x->sdw_priv[AIF1_CAP]); - if (IS_ERR(wcd939x->regmap)) { + wcd939x->regmap =3D dev_get_regmap(wcd939x->txdev, NULL); + if (!wcd939x->regmap) { dev_err(dev, "could not get TX device regmap\n"); - ret =3D PTR_ERR(wcd939x->regmap); + ret =3D -ENODEV; goto err_remove_rx_link; } =20 diff --git a/sound/soc/codecs/wcd939x.h b/sound/soc/codecs/wcd939x.h index 0ee0fbb49ff9..eba8205cdd0d 100644 --- a/sound/soc/codecs/wcd939x.h +++ b/sound/soc/codecs/wcd939x.h @@ -919,8 +919,6 @@ int wcd939x_sdw_hw_params(struct wcd939x_sdw_priv *wcd, struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai); - -struct regmap *wcd939x_swr_get_regmap(struct wcd939x_sdw_priv *wcd); #else =20 static inline int wcd939x_sdw_free(struct wcd939x_sdw_priv *wcd, @@ -945,10 +943,6 @@ static inline int wcd939x_sdw_hw_params(struct wcd939x= _sdw_priv *wcd, return -EOPNOTSUPP; } =20 -struct regmap *wcd939x_swr_get_regmap(struct wcd939x_sdw_priv *wcd) -{ - return PTR_ERR(-EINVAL); -} #endif /* CONFIG_SND_SOC_WCD939X_SDW */ =20 #endif /* __WCD939X_H__ */ --=20 2.50.0 From nobody Tue Oct 7 00:25:07 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CA5972F5092 for ; Wed, 16 Jul 2025 12:33:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669220; cv=none; b=sR/NKBAJv6mtejsMUa/J5/k+541X2oL4bi8q7Otg8Bu6Z1WlCs229vvDG4F8Pqgsvs3g2vy47Om7ABzCni8yEEAIovY7+rZzyjgn8H1hmUYecWR0yoPbD36Hy3+UKfNLLsIdUvgOewTOiedD0tItDxUexNHmXYUQ3ez7JmGNC/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752669220; c=relaxed/simple; bh=nupn9pkX0zqAeVFf9lC6kwIRN70I1W/PW+o1yKDGOLo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WblHZXOi2JoRUB9lL/uaPFlgMUqF28KgQXtF/7VC0rQbv9u5v8OR14a16WgtKGF1Na9JiMuuKpAud4/b3QCOY14VRSeA7j75EJMDie+D8KhrlYJ841XBODGKV/omJNdArOmPNIq3irnddWwh0fu0ORALYJtOrqr5tIyRiDVaIJ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=pzi1MKKd; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="pzi1MKKd" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56G6eNBX003467 for ; Wed, 16 Jul 2025 12:33:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=TD3zJuWoo4A 9skdFDbNfZ3ei/LYBXk6PfYZIRRq0xcU=; b=pzi1MKKdLr/IYL9BWW32tdK3v6f dxW15QlipkIqKCazfMlxy8qdbg1W+4CLu9++t0z2xBFYwY3dWMUmI2kvRw6j3AK0 Lpnm/i2wBpwQTw76SaFUvyjO0lpkUU/Ixwov5/2oj91JdmlB/YFn0IxvVQqegKjd 3PUe+tZ+U5FQU7jZ7HndNx2xGmE6H6TBb9bECS0BCCRnVb/CwSpCWC29RBrPsohY e7RSus2DYHr9X70PzrOQHy10Tgt8ZAbapyiBZBnd7+FjRGZrAF/JA8GSXRlDfzpi UBNSfQzBM6ia7uShqskltXC0ZjE40xWPfVRDscMErJj09Ogz4ovekQEt6wQ== Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 47w5drpt7m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 16 Jul 2025 12:33:37 +0000 (GMT) Received: by mail-qt1-f198.google.com with SMTP id d75a77b69052e-4ab60125e3dso67173631cf.0 for ; Wed, 16 Jul 2025 05:33:37 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752669216; x=1753274016; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TD3zJuWoo4A9skdFDbNfZ3ei/LYBXk6PfYZIRRq0xcU=; b=jBR9na2oYRKeamFC8aqtagOgWV/YB4jcwVV13hGcmHy0Jqhoz5/rqX1DM3SOWDJFr1 1hM5OPQsSTi8H3R2NbRuGni/HGCIwp9XX7S8Ne3u+jqUu39XtGBlDMq4DpxzB8VC3uRD dkdwvrIPWoUY+7P7vpN552/+QCuDmVia8Wl8rFozG/eVXhu2/jrNTtZua0gqS2/y0Gji sZSvd+G+s2B0PKNJBBmOATyl/PnooJgHMOc6fMQwWIlgGlHw+yHjx9qkPQuI9M+VozMe 030tnDRAaZkEAVjYmOGg0KPGZWcd5/eCwO0l5bLY9xe+igKAlR3r68nonsihrBwWnO5z /KZg== X-Forwarded-Encrypted: i=1; AJvYcCVy/MtqhQ84CX9UEZSPH8J5QMSk3pE0rj5qfuCcNUC7iLUR6/oRfCx7UrN8vG4GaUr/uieBGExrtq/gjms=@vger.kernel.org X-Gm-Message-State: AOJu0YzaEoFS/QVby/DJc5i3vpi5qXzhzbrTk5kFhEQYZu/NYINQU9zt sQDjpOzAmG6nOHqFC43LqbAzv1fFaxuFsAaY+x6NXiWTY6aTvNJOQbWdtukKTB7MZ4YOirbK6Hn c5EwyFRhWkyMWG6vWs6p3Yb14U7LMTBibdUA5Izr5imhgEVwSaTbJxYZot60unowkXT1fTb+gNI E= X-Gm-Gg: ASbGncs1w4PgMQOBatFTCDNiGiZ4KTC0QcarU2/fkQ4qtq7ck/K1TNue41VpHYC2Gls vMs+ld+a4Sgrprre+ShgzjbrJAqvxGptzBB/9/j8CeAS+yf218spLMYn751FR+dGmB7UioaATL/ eaoYnF8wxL8lOfVHmUIKGsZv5Hx8/A/irxXdyB75odn0EAzb+6DU7l766WYqUsXgD38xiD2t/66 uMgm4NJLiRLoy1vC0QpUYNlBNE+g4XY/HnocxSua5kveA/sqOnWCdxq+a8GI1TWXMmNxIHpG+VE 2yFuBeqB02JlKY6nYq6wx5ZQyBQ1Cmhlfwc0pK7L+Fd4c13Es/HQjQ== X-Received: by 2002:ac8:7d8d:0:b0:4ab:609f:d7cc with SMTP id d75a77b69052e-4ab93d8cfafmr38118571cf.32.1752669215615; Wed, 16 Jul 2025 05:33:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGVpHx0DzaSsSRDkIyaIEAGNk3vJ+sQ0pU3HKYg2BJTARwronXrjlbyX/uMeFsjk3qP+ckwCg== X-Received: by 2002:ac8:7d8d:0:b0:4ab:609f:d7cc with SMTP id d75a77b69052e-4ab93d8cfafmr38117991cf.32.1752669215018; Wed, 16 Jul 2025 05:33:35 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4562e89c739sm19453335e9.32.2025.07.16.05.33.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Jul 2025 05:33:34 -0700 (PDT) From: srinivas.kandagatla@oss.qualcomm.com To: broonie@kernel.org Cc: lgirdwood@gmail.com, perex@perex.cz, tiwai@suse.com, srini@kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, linux-arm-msm@vger.kernel.org, neil.armstrong@linaro.org, krzysztof.kozlowski@linaro.org, Srinivas Kandagatla Subject: [PATCH 5/5] ASoC: codecs: wcd-common: move status_update callback to common Date: Wed, 16 Jul 2025 13:33:23 +0100 Message-ID: <20250716123323.5831-6-srinivas.kandagatla@oss.qualcomm.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> References: <20250716123323.5831-1-srinivas.kandagatla@oss.qualcomm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-ORIG-GUID: _hbtMU0RCZLG1jG-M2UVxvteLdemd0-C X-Authority-Analysis: v=2.4 cv=D4xHKuRj c=1 sm=1 tr=0 ts=68779c21 cx=c_pps a=mPf7EqFMSY9/WdsSgAYMbA==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=Wb1JkmetP80A:10 a=sWKEhP36mHoA:10 a=EUspDBNiAAAA:8 a=lLZ5r3BOYuU-AXZT-04A:9 a=dawVfQjAaf238kedN5IG:22 X-Proofpoint-GUID: _hbtMU0RCZLG1jG-M2UVxvteLdemd0-C X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE2MDExMiBTYWx0ZWRfXxv+6EbzJl/yt NB1CyYM9dnJPQcneQT2+q/jkdesbAWqEZ9vFw6uK5VVvaRe+ZsOav/tKnv45At5rGUG0cW+J5t6 rVNT+9rtboYIJtXthhsECesBfaMGEKEsXZHvZHEjJVvu8ju6xoVOWgEJU2C2WCw7/LItN6d4nCw +XNY3VY7EqqTE0SfagbAymfyqIRRCEDDzjVrq8w9qRtJq+wOx/qwG0isuUrMmqLUIfCSyO1Yu/U HdnhQKhMeI4AxWP+Vq7ZJTBow7G6Gj3oUE/s0kp9yonywPgWcjhoK3B2XV6uJSpKUB2yqjwpSWZ SZEr2Lf1oAv7HsGINLgukwRVjIy3RfTKAIdQAn0ZLsQeEqT7AEhYZHEmmRXUBvPiqHVAGjB1/3x NB0wBsxy/L6EaPuzjSpt3PVD8wyP1nWkvfJZXXoS991xdiujFr/XuaJjNPOyWM2/hd1VN33w X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-16_01,2025-07-16_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 mlxlogscore=999 impostorscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 suspectscore=0 bulkscore=0 mlxscore=0 priorityscore=1501 phishscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507160112 Content-Type: text/plain; charset="utf-8" From: Srinivas Kandagatla Soundwire update_status, bus_config and interrupt callbacks for wcd937x, wcd938x, wcd939x soundwire codecs are exactly identlical, move them to common driver to remove this duplicate code. Signed-off-by: Srinivas Kandagatla --- sound/soc/codecs/wcd-common.c | 46 ++++++++++++++++++++++++++++++++++ sound/soc/codecs/wcd-common.h | 10 ++++++++ sound/soc/codecs/wcd937x-sdw.c | 28 +++------------------ sound/soc/codecs/wcd938x-sdw.c | 41 +++--------------------------- sound/soc/codecs/wcd939x-sdw.c | 42 +++---------------------------- 5 files changed, 67 insertions(+), 100 deletions(-) diff --git a/sound/soc/codecs/wcd-common.c b/sound/soc/codecs/wcd-common.c index 0c1ffa015403..2592e8ed2d13 100644 --- a/sound/soc/codecs/wcd-common.c +++ b/sound/soc/codecs/wcd-common.c @@ -9,9 +9,14 @@ #include #include #include +#include +#include +#include =20 #include "wcd-common.h" =20 +#define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m)) + int wcd_get_micb_vout_ctl_val(struct device *dev, u32 micb_mv) { /* min micbias voltage is 1V and maximum is 2.85V */ @@ -89,5 +94,46 @@ const struct component_ops wcd_sdw_component_ops =3D { }; EXPORT_SYMBOL_GPL(wcd_sdw_component_ops); =20 +int wcd_update_status(struct sdw_slave *slave, enum sdw_slave_status statu= s) +{ + struct regmap *regmap =3D dev_get_regmap(&slave->dev, NULL); + + if (regmap && status =3D=3D SDW_SLAVE_ATTACHED) { + /* Write out any cached changes that happened between probe and attach */ + regcache_cache_only(regmap, false); + return regcache_sync(regmap); + } + + return 0; +} +EXPORT_SYMBOL_GPL(wcd_update_status); + +int wcd_bus_config(struct sdw_slave *slave, struct sdw_bus_params *params) +{ + sdw_write(slave, SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(params->next_bank), 0x01= ); + + return 0; +} +EXPORT_SYMBOL_GPL(wcd_bus_config); + +int wcd_interrupt_callback(struct sdw_slave *slave, struct irq_domain *sla= ve_irq, + unsigned int wcd_intr_status0, unsigned int wcd_intr_status1, + unsigned int wcd_intr_status2) +{ + struct regmap *regmap =3D dev_get_regmap(&slave->dev, NULL); + u32 sts1, sts2, sts3; + + do { + handle_nested_irq(irq_find_mapping(slave_irq, 0)); + regmap_read(regmap, wcd_intr_status0, &sts1); + regmap_read(regmap, wcd_intr_status1, &sts2); + regmap_read(regmap, wcd_intr_status2, &sts3); + + } while (sts1 || sts2 || sts3); + + return IRQ_HANDLED; +} +EXPORT_SYMBOL_GPL(wcd_interrupt_callback); + MODULE_DESCRIPTION("Common Qualcomm WCD Codec helpers driver"); MODULE_LICENSE("GPL"); diff --git a/sound/soc/codecs/wcd-common.h b/sound/soc/codecs/wcd-common.h index deb78241236b..0cb6365bea4b 100644 --- a/sound/soc/codecs/wcd-common.h +++ b/sound/soc/codecs/wcd-common.h @@ -6,11 +6,16 @@ #ifndef __WCD_COMMON_H__ #define __WCD_COMMON_H___ =20 +#include +#include + #define WCD_MIN_MICBIAS_MV 1000 #define WCD_DEF_MICBIAS_MV 1800 #define WCD_MAX_MICBIAS_MV 2850 #define WCD_MAX_MICBIAS 4 =20 + + struct wcd_sdw_ch_info { int port_num; unsigned int ch_mask; @@ -32,5 +37,10 @@ struct wcd_common { extern const struct component_ops wcd_sdw_component_ops; int wcd_get_micb_vout_ctl_val(struct device *dev, u32 micb_mv); int wcd_dt_parse_micbias_info(struct wcd_common *common); +int wcd_update_status(struct sdw_slave *slave, enum sdw_slave_status statu= s); +int wcd_bus_config(struct sdw_slave *slave, struct sdw_bus_params *params); +int wcd_interrupt_callback(struct sdw_slave *slave, struct irq_domain *sla= ve_irq, + unsigned int wcd_intr_status0, unsigned int wcd_intr_status1, + unsigned int wcd_intr_status2); =20 #endif /* __WCD_COMMON_H___ */ diff --git a/sound/soc/codecs/wcd937x-sdw.c b/sound/soc/codecs/wcd937x-sdw.c index 59c353cafd31..1878d67e3fa1 100644 --- a/sound/soc/codecs/wcd937x-sdw.c +++ b/sound/soc/codecs/wcd937x-sdw.c @@ -112,19 +112,6 @@ int wcd937x_sdw_hw_params(struct wcd937x_sdw_priv *wcd, } EXPORT_SYMBOL_GPL(wcd937x_sdw_hw_params); =20 -static int wcd9370_update_status(struct sdw_slave *slave, enum sdw_slave_s= tatus status) -{ - struct wcd937x_sdw_priv *wcd =3D dev_get_drvdata(&slave->dev); - - if (wcd->regmap && status =3D=3D SDW_SLAVE_ATTACHED) { - /* Write out any cached changes that happened between probe and attach */ - regcache_cache_only(wcd->regmap, false); - return regcache_sync(wcd->regmap); - } - - return 0; -} - /* * Handle Soundwire out-of-band interrupt event by triggering * the first irq of the slave_irq irq domain, which then will @@ -135,18 +122,9 @@ static int wcd9370_interrupt_callback(struct sdw_slave= *slave, struct sdw_slave_intr_status *status) { struct wcd937x_sdw_priv *wcd =3D dev_get_drvdata(&slave->dev); - struct irq_domain *slave_irq =3D wcd->slave_irq; - u32 sts1, sts2, sts3; - - do { - handle_nested_irq(irq_find_mapping(slave_irq, 0)); - regmap_read(wcd->regmap, WCD937X_DIGITAL_INTR_STATUS_0, &sts1); - regmap_read(wcd->regmap, WCD937X_DIGITAL_INTR_STATUS_1, &sts2); - regmap_read(wcd->regmap, WCD937X_DIGITAL_INTR_STATUS_2, &sts3); - - } while (sts1 || sts2 || sts3); =20 - return IRQ_HANDLED; + return wcd_interrupt_callback(slave, wcd->slave_irq, WCD937X_DIGITAL_INTR= _STATUS_0, + WCD937X_DIGITAL_INTR_STATUS_1, WCD937X_DIGITAL_INTR_STATUS_2); } =20 static const struct reg_default wcd937x_defaults[] =3D { @@ -979,7 +957,7 @@ static const struct regmap_config wcd937x_regmap_config= =3D { }; =20 static const struct sdw_slave_ops wcd9370_slave_ops =3D { - .update_status =3D wcd9370_update_status, + .update_status =3D wcd_update_status, .interrupt_callback =3D wcd9370_interrupt_callback, }; =20 diff --git a/sound/soc/codecs/wcd938x-sdw.c b/sound/soc/codecs/wcd938x-sdw.c index e43d6ac1c913..9636501c90ac 100644 --- a/sound/soc/codecs/wcd938x-sdw.c +++ b/sound/soc/codecs/wcd938x-sdw.c @@ -19,8 +19,6 @@ #include #include "wcd938x.h" =20 -#define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m)) - static const struct wcd_sdw_ch_info wcd938x_sdw_rx_ch_info[] =3D { WCD_SDW_CH(WCD938X_HPH_L, WCD938X_HPH_PORT, BIT(0)), WCD_SDW_CH(WCD938X_HPH_R, WCD938X_HPH_PORT, BIT(1)), @@ -141,44 +139,13 @@ int wcd938x_sdw_set_sdw_stream(struct wcd938x_sdw_pri= v *wcd, } EXPORT_SYMBOL_GPL(wcd938x_sdw_set_sdw_stream); =20 -static int wcd9380_update_status(struct sdw_slave *slave, - enum sdw_slave_status status) -{ - struct wcd938x_sdw_priv *wcd =3D dev_get_drvdata(&slave->dev); - - if (wcd->regmap && (status =3D=3D SDW_SLAVE_ATTACHED)) { - /* Write out any cached changes that happened between probe and attach */ - regcache_cache_only(wcd->regmap, false); - return regcache_sync(wcd->regmap); - } - - return 0; -} - -static int wcd9380_bus_config(struct sdw_slave *slave, - struct sdw_bus_params *params) -{ - sdw_write(slave, SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(params->next_bank), 0x0= 1); - - return 0; -} - static int wcd9380_interrupt_callback(struct sdw_slave *slave, struct sdw_slave_intr_status *status) { struct wcd938x_sdw_priv *wcd =3D dev_get_drvdata(&slave->dev); - struct irq_domain *slave_irq =3D wcd->slave_irq; - u32 sts1, sts2, sts3; - - do { - handle_nested_irq(irq_find_mapping(slave_irq, 0)); - regmap_read(wcd->regmap, WCD938X_DIGITAL_INTR_STATUS_0, &sts1); - regmap_read(wcd->regmap, WCD938X_DIGITAL_INTR_STATUS_1, &sts2); - regmap_read(wcd->regmap, WCD938X_DIGITAL_INTR_STATUS_2, &sts3); - - } while (sts1 || sts2 || sts3); =20 - return IRQ_HANDLED; + return wcd_interrupt_callback(slave, wcd->slave_irq, WCD938X_DIGITAL_INTR= _STATUS_0, + WCD938X_DIGITAL_INTR_STATUS_1, WCD938X_DIGITAL_INTR_STATUS_2); } =20 static const struct reg_default wcd938x_defaults[] =3D { @@ -1176,9 +1143,9 @@ static const struct regmap_config wcd938x_regmap_conf= ig =3D { }; =20 static const struct sdw_slave_ops wcd9380_slave_ops =3D { - .update_status =3D wcd9380_update_status, + .update_status =3D wcd_update_status, .interrupt_callback =3D wcd9380_interrupt_callback, - .bus_config =3D wcd9380_bus_config, + .bus_config =3D wcd_bus_config, }; =20 static int wcd9380_probe(struct sdw_slave *pdev, diff --git a/sound/soc/codecs/wcd939x-sdw.c b/sound/soc/codecs/wcd939x-sdw.c index 2b0aa2108f33..8bc89401beb9 100644 --- a/sound/soc/codecs/wcd939x-sdw.c +++ b/sound/soc/codecs/wcd939x-sdw.c @@ -21,8 +21,6 @@ #include #include "wcd939x.h" =20 -#define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m)) - static const struct wcd_sdw_ch_info wcd939x_sdw_rx_ch_info[] =3D { WCD_SDW_CH(WCD939X_HPH_L, WCD939X_HPH_PORT, BIT(0)), WCD_SDW_CH(WCD939X_HPH_R, WCD939X_HPH_PORT, BIT(1)), @@ -186,29 +184,6 @@ int wcd939x_sdw_set_sdw_stream(struct wcd939x_sdw_priv= *wcd, } EXPORT_SYMBOL_GPL(wcd939x_sdw_set_sdw_stream); =20 -static int wcd9390_update_status(struct sdw_slave *slave, - enum sdw_slave_status status) -{ - struct wcd939x_sdw_priv *wcd =3D dev_get_drvdata(&slave->dev); - - if (wcd->regmap && status =3D=3D SDW_SLAVE_ATTACHED) { - /* Write out any cached changes that happened between probe and attach */ - regcache_cache_only(wcd->regmap, false); - return regcache_sync(wcd->regmap); - } - - return 0; -} - -static int wcd9390_bus_config(struct sdw_slave *slave, - struct sdw_bus_params *params) -{ - sdw_write(slave, SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(params->next_bank), - 0x01); - - return 0; -} - /* * Handle Soundwire out-of-band interrupt event by triggering * the first irq of the slave_irq irq domain, which then will @@ -219,18 +194,9 @@ static int wcd9390_interrupt_callback(struct sdw_slave= *slave, struct sdw_slave_intr_status *status) { struct wcd939x_sdw_priv *wcd =3D dev_get_drvdata(&slave->dev); - struct irq_domain *slave_irq =3D wcd->slave_irq; - u32 sts1, sts2, sts3; - - do { - handle_nested_irq(irq_find_mapping(slave_irq, 0)); - regmap_read(wcd->regmap, WCD939X_DIGITAL_INTR_STATUS_0, &sts1); - regmap_read(wcd->regmap, WCD939X_DIGITAL_INTR_STATUS_1, &sts2); - regmap_read(wcd->regmap, WCD939X_DIGITAL_INTR_STATUS_2, &sts3); - - } while (sts1 || sts2 || sts3); =20 - return IRQ_HANDLED; + return wcd_interrupt_callback(slave, wcd->slave_irq, WCD939X_DIGITAL_INTR= _STATUS_0, + WCD939X_DIGITAL_INTR_STATUS_1, WCD939X_DIGITAL_INTR_STATUS_2); } =20 static const struct reg_default wcd939x_defaults[] =3D { @@ -1363,9 +1329,9 @@ static const struct regmap_config wcd939x_regmap_conf= ig =3D { }; =20 static const struct sdw_slave_ops wcd9390_slave_ops =3D { - .update_status =3D wcd9390_update_status, + .update_status =3D wcd_update_status, .interrupt_callback =3D wcd9390_interrupt_callback, - .bus_config =3D wcd9390_bus_config, + .bus_config =3D wcd_bus_config, }; =20 static int wcd9390_probe(struct sdw_slave *pdev, const struct sdw_device_i= d *id) --=20 2.50.0