From nobody Tue Oct 7 02:15:32 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