From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 AFDE23C062F; Mon, 8 Jun 2026 10:10:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913447; cv=none; b=C8fJ0Cl5IOLFhUjqvJ2RIuphDgwgto+qr8X8P2dyCbaj8IgIbtGVNmiufPE4aI/hokPicVgLsP0yTh8sk4WeJ6CLiPHm/pdfGPJFi4gFCTkWePGEXajoG7yIKV+d3ynxUqjyebMDfN9uC7KCJlttR2aaLpWLH2t82CofBs+1ZyY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913447; c=relaxed/simple; bh=6tW3zuKCOaqZDLAwvoD1qXk6xoEe4lRrNVw8RwLJQ94=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kofTfC2PSmg+G4bnR6bIyNys54z38mikmcBaVKHHYH/5KUVNtiuz0yP93Zqfmt9QKs19GgP832DYMnAKOPxrHOeuBbTHkEX+0686l9IYsIXZyBKTMt2TzaxgeQkWSsBhM1Ud0+j6Gu0vuEFZoOIGDzp1aoVVPFxDeDmUPRd0XEk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=dXhxYimS; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="dXhxYimS" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913444; bh=6tW3zuKCOaqZDLAwvoD1qXk6xoEe4lRrNVw8RwLJQ94=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dXhxYimSo90DpKste0Gh5t55ONIjgp5CLiQ5RYN5cvDdNJ3cDn5wOEpYB29tEWOk2 F2rt3OUT9tebY2T8akcOqFVT8ngcG+HviLIkSpaSX5bIomWNLv+wUF79C1IeoFmh5X zHVoeZ6ktRrOc1pdusWG/xTwPtKRMXAql8sDCbtVD9uKt1l3pFu9o+LDvI5KVoU5HX 1oKTHox+16ur7Y8RvCxrTTefxfr7x0q+/pNXJIhMSMeslTbzgBNiEbD8S/5A3J+vTb Qbg3QPHPZqx1TMaTI4JjqQlMddG0ELNdI5MGmPzKzG9Kdgl1AqXrf+/BIfPRNvxDhX Oioa/R8KPPU3Q== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 117C017E02F1; Mon, 8 Jun 2026 12:10:43 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Andy Shevchenko Subject: [PATCH v9 01/10] spmi: Remove redundant dev_name() print in spmi_device_add() Date: Mon, 8 Jun 2026 12:09:40 +0200 Message-ID: <20260608100949.36309-2-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Function spmi_device_add() uses dev_{dbg,err}() for respectively debug and error prints, and passes the same device pointer as both the dev_{dbg,err}() parameters and to a dev_name() that is part of the actual message. This means that the device name gets printed twice! Remove the redundant dev_name() from the messages. Acked-by: Stephen Boyd Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/spmi/spmi.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c index 57b7c0cb4240..152787ae82ca 100644 --- a/drivers/spmi/spmi.c +++ b/drivers/spmi/spmi.c @@ -68,12 +68,11 @@ int spmi_device_add(struct spmi_device *sdev) =20 err =3D device_add(&sdev->dev); if (err < 0) { - dev_err(&sdev->dev, "Can't add %s, status %d\n", - dev_name(&sdev->dev), err); + dev_err(&sdev->dev, "Can't add device, status %d\n", err); goto err_device_add; } =20 - dev_dbg(&sdev->dev, "device %s registered\n", dev_name(&sdev->dev)); + dev_dbg(&sdev->dev, "device registered\n"); =20 err_device_add: return err; --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 039463C1F57; Mon, 8 Jun 2026 10:10:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913448; cv=none; b=T5KNJhSFy9mal0M7lqFH2bc1wOy6BJZbqFpvHY6WDL/2Slu4vSrvC5wqt71i7ZrMmhVpW7FQB6tArOIM2V8GwsLC3O7ZlnU36h7/Qm0j9tujjmfNwFu4xeKGhH5aiTfZR7/hoiXinQRtFan2VeeAGPBmAp5V99sozs8k+kpsDCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913448; c=relaxed/simple; bh=CnyvyAqNXFlDCe2PtbyVPs0ttu+cUvvhfhJ2HDU2xfE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M4wDuknHHHM8/4ZJ+ciglOOB1EDSwe1zRRuh1/Jjv5CbTTcdkn+pwQslU0J3WIoFbohZq2r0aeZi8YPVIX5p60opdMXU31b8fXty/R8hpd8jOHzWftoEcCTq0kyPnhXK+1g0YYCE9/nHIMN9h2ktyopRRn4S+qdltCOz8QRYrDw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=UMlLuP/+; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="UMlLuP/+" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913445; bh=CnyvyAqNXFlDCe2PtbyVPs0ttu+cUvvhfhJ2HDU2xfE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UMlLuP/+zEPdQZsBxct91YcY3EbK7WtxkX+OSwq8GM0mPZiEco5yFrjhSwn0O9qfn NW0cC28gS+Mcz66YC4knRhUg+XrAHgRa9ehWgKITxhAHWsaYvLwnuffhCakVm9puR1 zZmaUpnoRcXyO/mDmtMkxM/7qlr+QPMpkg+oTSFS41HYB5RDJ1DXBb7lihMYsCx41M yzG6BarSjspZ9jle0wDxOxPSLX+cm7Aj2VBrB5k0Q5J8TTCiE1VGbLQ4rdCj7kjJBK 9P8EcM6iDK2DNYFwKZiLcK7eV9tb+FkudaWlrJQqeveeeNW8k6QYCFerB6UxQnralb VMtOn9BSQDiaw== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 4FD1A17E05FC; Mon, 8 Jun 2026 12:10:44 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Andy Shevchenko Subject: [PATCH v9 02/10] spmi: Print error status with %pe format Date: Mon, 8 Jun 2026 12:09:41 +0200 Message-ID: <20260608100949.36309-3-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Instead of printing just a number, use the %pe format for error status, increasing readability of error prints. Acked-by: Stephen Boyd Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/spmi/spmi.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c index 152787ae82ca..b0017bd61d95 100644 --- a/drivers/spmi/spmi.c +++ b/drivers/spmi/spmi.c @@ -68,7 +68,7 @@ int spmi_device_add(struct spmi_device *sdev) =20 err =3D device_add(&sdev->dev); if (err < 0) { - dev_err(&sdev->dev, "Can't add device, status %d\n", err); + dev_err(&sdev->dev, "Can't add device, status %pe\n", ERR_PTR(err)); goto err_device_add; } =20 @@ -493,8 +493,8 @@ static void of_spmi_register_devices(struct spmi_contro= ller *ctrl) err =3D of_property_read_u32_array(node, "reg", reg, 2); if (err) { dev_err(&ctrl->dev, - "node %pOF err (%d) does not have 'reg' property\n", - node, err); + "node %pOF err (%pe) does not have 'reg' property\n", + node, ERR_PTR(err)); continue; } =20 @@ -522,7 +522,7 @@ static void of_spmi_register_devices(struct spmi_contro= ller *ctrl) err =3D spmi_device_add(sdev); if (err) { dev_err(&sdev->dev, - "failure adding device. status %d\n", err); + "failure adding device. status %pe\n", ERR_PTR(err)); spmi_device_put(sdev); } } --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 144793D47B5; Mon, 8 Jun 2026 10:10:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913449; cv=none; b=mgC84tCAXB2bofKWnQ3UHkEOlc84MPnP7FrHuoAJMlkCOu1Vi4+EXKP7F4h9dow7lLt6Gn/oaO1Egm0brKJxAIRGAxL96aIwedPr6+n1KOtGJitYHkEiNftNm21roL35K0hi/Vudd7/ssBDMd4k6zGvI3E+8fAstlqgKJy8igqk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913449; c=relaxed/simple; bh=J8HuHi5+HV4gLQmYhw+5lWv8q9ArV5SGGhijuycX6JQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SbKQoIncun26sz396qARmXmCHPNkzvHrtJiyW3y+HT32ou9W8y4iRgo7nl1yQXum43CoAc2hMWeLT7kiRxbrGh/jJA0iU0/mq+VkB/vzUNSkSYCWE8TPqT4W0IGSaFJJUuRaOcJwWqCoWd9TEixznp8G8YIowmMfQeWqw83qPHs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=iGwOlKaV; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="iGwOlKaV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913446; bh=J8HuHi5+HV4gLQmYhw+5lWv8q9ArV5SGGhijuycX6JQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iGwOlKaV01efV0QgGSolwIdWMTyR/hEzu+q//zDAMD4w0r9cDo6Tgp2Xzl7NBZt8N ehYvMZDhHtFmwKbepK35RUzmT095RXzhVejnDxEe9Ymn/+AsJOWUuL8S/zKZ22TIJD evpxcLjIw/NW1tozXuGcgPkWwXrp8VjSdQkGihZcv0Bt2hyHBByBo8834LxPf8gE6G 5FzvrHImRu2w7yrzpaTXFllv1FR5TE6fWrMmc2WCixt5z4bmnI0/onVx3FFZG2gnRF BRWiZD/NpMTTI/hubvIjNtw3HspitghbKoC35IKTdnNspSsxgw+Ju9iU72Kj7dGLtd 5qTg4lZ7p4B6Q== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 8C37817E0D87; Mon, 8 Jun 2026 12:10:45 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Andy Shevchenko Subject: [PATCH v9 03/10] spmi: Remove unneeded goto in spmi_device_add() error path Date: Mon, 8 Jun 2026 12:09:42 +0200 Message-ID: <20260608100949.36309-4-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" If any error happens during device_add() just return inside of the conditional, as the goto path doesn't do anything else if not just returning. While at it, to improve readability, also change this function to explicitly return 0 (for success) at the end. Acked-by: Stephen Boyd Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/spmi/spmi.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c index b0017bd61d95..0f32f099b0ce 100644 --- a/drivers/spmi/spmi.c +++ b/drivers/spmi/spmi.c @@ -69,13 +69,11 @@ int spmi_device_add(struct spmi_device *sdev) err =3D device_add(&sdev->dev); if (err < 0) { dev_err(&sdev->dev, "Can't add device, status %pe\n", ERR_PTR(err)); - goto err_device_add; + return err; } =20 dev_dbg(&sdev->dev, "device registered\n"); - -err_device_add: - return err; + return 0; } EXPORT_SYMBOL_GPL(spmi_device_add); =20 --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 7F97C3D5671; Mon, 8 Jun 2026 10:10:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913451; cv=none; b=iB0aa+SKsyUy2lo2exPoCGN9tNLlmn+T1E3OMFWvINwztAu+ZlGGz0Fid/mWIjRW07nFkxhKDgdoK/LKRr1M3h8UyjOi/BPptleMbg14dXMRRxgLPLlJSo7fBpQ3jVN8AM4BP86rA1dgko+CLIALqlYi1wihyAn0BJ3GaMxpkW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913451; c=relaxed/simple; bh=HP73TMOo/xb49TOUi08knc6WOZuxameTKnDuIRFDeYM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i81eW0AaC7ndRO9vKkc2blpjEVogPKp2Qgh06ZOEG+b+3aglb/7QNfHpARmHSaWTyCXFpL2r8tQFX4fmvcnPYNHfu7KTv0fzPs0NWpbLb8glYVudKTypoKINSJHhfmKcRChPSdBYOeI5u6lZJnlkKMeddeCUdIU3UcmxH6nEmCw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=X8N8jMik; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="X8N8jMik" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913447; bh=HP73TMOo/xb49TOUi08knc6WOZuxameTKnDuIRFDeYM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X8N8jMikTQc2LzMzeck7QgFuMbomlUscdYdvs0h2CxMn+EJhFt2rXcU9ad114ml6+ Gp6EMbxcxAHpajaaNAPPhSHQNmdFdx3oLLMNZ7nhPztUSNxTcqG8DLGQsKQAEx1jJy nKvIUNeiv11faUpw0Ld3SD7s9gfZI4UsY7UmoZiFZKb/MMNWlKK1scvcIQO/I30G6u jGnYSZ2DmSwXvv7xViHf+HTKFalSGfv2inKU/wBz4e6LmjkGrIxfQlXHqEX9YC4adq GbpNjGFODyC0xYZtLU0WelA9EiBHjIKyAcZ8EI/x0QIitynM5ojs8RsNkTtgJFHjmt lRUt/TFZ2LQgw== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id C6F9F17E0DE1; Mon, 8 Jun 2026 12:10:46 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Jonathan Cameron , Andy Shevchenko Subject: [PATCH v9 04/10] spmi: Implement spmi_subdevice_alloc_and_add() and devm variant Date: Mon, 8 Jun 2026 12:09:43 +0200 Message-ID: <20260608100949.36309-5-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Some devices connected over the SPMI bus may be big, in the sense that those may be a complex of devices managed by a single chip over the SPMI bus, reachable through a single SID. Add new functions aimed at managing sub-devices of a SPMI device spmi_subdevice_alloc_and_add() and a spmi_subdevice_remove() for adding a new subdevice and removing it respectively, and also add their devm_* variants. The need for such functions comes from the existence of those complex Power Management ICs (PMICs), which feature one or many sub-devices, in some cases with these being even addressable on the chip in form of SPMI register ranges. Examples of those devices can be found in both Qualcomm platforms with their PMICs having PON, RTC, SDAM, GPIO controller, and other sub-devices, and in newer MediaTek platforms showing similar HW features and a similar layout with those also having many subdevs. Also, instead of generally exporting symbols, export them with a new "SPMI" namespace: all users will have to import this namespace to make use of the newly introduced exports. Reviewed-by: Jonathan Cameron Tested-by: Neil Armstrong # on SM8650-QRD Acked-by: Stephen Boyd Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/spmi/spmi-devres.c | 24 ++++++++++++ drivers/spmi/spmi.c | 78 ++++++++++++++++++++++++++++++++++++++ include/linux/spmi.h | 16 ++++++++ 3 files changed, 118 insertions(+) diff --git a/drivers/spmi/spmi-devres.c b/drivers/spmi/spmi-devres.c index 62c4b3f24d06..c3e889fe1b6e 100644 --- a/drivers/spmi/spmi-devres.c +++ b/drivers/spmi/spmi-devres.c @@ -60,5 +60,29 @@ int devm_spmi_controller_add(struct device *parent, stru= ct spmi_controller *ctrl } EXPORT_SYMBOL_GPL(devm_spmi_controller_add); =20 +static void devm_spmi_subdevice_remove(void *sub_sdev) +{ + spmi_subdevice_remove(sub_sdev); +} + +struct spmi_subdevice *devm_spmi_subdevice_alloc_and_add(struct device *de= v, + struct spmi_device *sparent) +{ + struct spmi_subdevice *sub_sdev; + int ret; + + sub_sdev =3D spmi_subdevice_alloc_and_add(sparent); + if (IS_ERR(sub_sdev)) + return sub_sdev; + + ret =3D devm_add_action_or_reset(dev, devm_spmi_subdevice_remove, sub_sde= v); + if (ret) + return ERR_PTR(ret); + + return sub_sdev; +} +EXPORT_SYMBOL_NS_GPL(devm_spmi_subdevice_alloc_and_add, "SPMI"); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("SPMI devres helpers"); +MODULE_IMPORT_NS("SPMI"); diff --git a/drivers/spmi/spmi.c b/drivers/spmi/spmi.c index 0f32f099b0ce..0d587248665e 100644 --- a/drivers/spmi/spmi.c +++ b/drivers/spmi/spmi.c @@ -19,6 +19,7 @@ =20 static bool is_registered; static DEFINE_IDA(ctrl_ida); +static DEFINE_IDA(spmi_subdevice_ida); =20 static void spmi_dev_release(struct device *dev) { @@ -31,6 +32,19 @@ static const struct device_type spmi_dev_type =3D { .release =3D spmi_dev_release, }; =20 +static void spmi_subdev_release(struct device *dev) +{ + struct spmi_device *sdev =3D to_spmi_device(dev); + struct spmi_subdevice *sub_sdev =3D container_of(sdev, struct spmi_subdev= ice, sdev); + + ida_free(&spmi_subdevice_ida, sub_sdev->devid); + kfree(sub_sdev); +} + +static const struct device_type spmi_subdev_type =3D { + .release =3D spmi_subdev_release, +}; + static void spmi_ctrl_release(struct device *dev) { struct spmi_controller *ctrl =3D to_spmi_controller(dev); @@ -87,6 +101,18 @@ void spmi_device_remove(struct spmi_device *sdev) } EXPORT_SYMBOL_GPL(spmi_device_remove); =20 +/** + * spmi_subdevice_remove() - Remove an SPMI subdevice + * @sub_sdev: spmi_device to be removed + */ +void spmi_subdevice_remove(struct spmi_subdevice *sub_sdev) +{ + struct spmi_device *sdev =3D &sub_sdev->sdev; + + device_unregister(&sdev->dev); +} +EXPORT_SYMBOL_NS_GPL(spmi_subdevice_remove, "SPMI"); + static inline int spmi_cmd(struct spmi_controller *ctrl, u8 opcode, u8 sid) { @@ -428,6 +454,58 @@ struct spmi_device *spmi_device_alloc(struct spmi_cont= roller *ctrl) } EXPORT_SYMBOL_GPL(spmi_device_alloc); =20 +/** + * spmi_subdevice_alloc_and_add(): Allocate and add a new SPMI sub-device + * @sparent: SPMI parent device with previously registered SPMI controller + * + * Returns: + * Pointer to newly allocated SPMI sub-device for success or error pointer. + */ +struct spmi_subdevice *spmi_subdevice_alloc_and_add(struct spmi_device *sp= arent) +{ + struct spmi_subdevice *sub_sdev; + struct spmi_device *sdev; + int ret; + + sub_sdev =3D kzalloc(sizeof(*sub_sdev), GFP_KERNEL); + if (!sub_sdev) + return ERR_PTR(-ENOMEM); + + sdev =3D &sub_sdev->sdev; + sdev->ctrl =3D sparent->ctrl; + sdev->usid =3D sparent->usid; + + ret =3D ida_alloc(&spmi_subdevice_ida, GFP_KERNEL); + if (ret < 0) { + kfree(sub_sdev); + return ERR_PTR(ret); + } + sub_sdev->devid =3D ret; + + device_initialize(&sdev->dev); + sdev->dev.parent =3D &sparent->dev; + sdev->dev.bus =3D &spmi_bus_type; + sdev->dev.type =3D &spmi_subdev_type; + + ret =3D dev_set_name(&sdev->dev, "%u-%02x.%d.auto", + sdev->ctrl->nr, sdev->usid, sub_sdev->devid); + if (ret) + goto err_put_dev; + + ret =3D device_add(&sdev->dev); + if (ret) { + dev_err(&sdev->dev, "Can't add device, status %pe\n", ERR_PTR(ret)); + goto err_put_dev; + } + + return sub_sdev; + +err_put_dev: + put_device(&sdev->dev); + return ERR_PTR(ret); +} +EXPORT_SYMBOL_NS_GPL(spmi_subdevice_alloc_and_add, "SPMI"); + /** * spmi_controller_alloc() - Allocate a new SPMI controller * @parent: parent device diff --git a/include/linux/spmi.h b/include/linux/spmi.h index 4eb9564a7fb3..a78a8924b2ac 100644 --- a/include/linux/spmi.h +++ b/include/linux/spmi.h @@ -69,6 +69,22 @@ int spmi_device_add(struct spmi_device *sdev); =20 void spmi_device_remove(struct spmi_device *sdev); =20 +/** + * struct spmi_subdevice - Basic representation of an SPMI sub-device + * @sdev: Sub-device representation of an SPMI device + * @devid: Platform Device ID of an SPMI sub-device + */ +struct spmi_subdevice { + struct spmi_device sdev; + unsigned int devid; +}; + +struct spmi_subdevice *spmi_subdevice_alloc_and_add(struct spmi_device *sp= arent); +void spmi_subdevice_remove(struct spmi_subdevice *sdev); + +struct spmi_subdevice *devm_spmi_subdevice_alloc_and_add(struct device *de= v, + struct spmi_device *sparent); + /** * struct spmi_controller - interface to the SPMI master controller * @dev: Driver model representation of the device. --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 A3EB43D75B1; Mon, 8 Jun 2026 10:10:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913452; cv=none; b=MhlDdJiL2T4yffrpoHGWUQ7t5VX0ceTTFW5t9P8m+9tG05rm9J7aMBCAQHmsyPIfWeI6DbFZmlcH7yY2M0Bo1U0hktV4BVzpkmFO76ZQ5rZvfLSK9g90g1KHVNC8TJtrF3ydS4YzYT1yQYjIhDEcDuVaKUKbocDFgUNYo6Ltstc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913452; c=relaxed/simple; bh=Vd4pVFh8wsoCdS9ymYot+ehre/gecffYFCVThMvrfYs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J4o55BzNc8ArbINFOSZ4A5ZjI+IZGmjFlnbgHYLc04DPS23NXWo/lPX/pFzWfFaa+tGQt5ha+H/epjhhqlhNAjBqpfboL8KHYNx5rwuW7c0ZeJj87prJGm7JT0jYvElpvKCmVN5rRGRQrFHltMtzlLXgGkJ214m9aParBfXrwuU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Td6rvWg3; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Td6rvWg3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913449; bh=Vd4pVFh8wsoCdS9ymYot+ehre/gecffYFCVThMvrfYs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Td6rvWg35CllMSGZfSJCFduyHDI+q/AQv3kGK/sq3IMdAC3lYjC471Hp7vLbLVe18 CLD0olLbFIyIIPhEDxC5zPeYz4Blrc0bAlPaKrYWvsiYcnMMQPfUenEIhCIoiY73HJ Ht51yKbbKC9JIYb9lE9G2Mk0XCKv10swz6f0i0E/Z1ngL/8PkzQh2Ehkuwylrluf8v reEaa+53UJBgCKlcTJZH3nqvzLr/3XC7ZSA4ZwGtsrZwkzzZK21YKUOXkaFZ6Vtxhp KPJi5tkNagH34qTQs66lbm49yF9oZ896dQckdsoK99rtgSs98W71ko/MdchCc/ZeIm DEfZRlqVsCTeQ== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 1801917E0FAC; Mon, 8 Jun 2026 12:10:48 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Andy Shevchenko Subject: [PATCH v9 05/10] nvmem: qcom-spmi-sdam: Migrate to devm_spmi_subdevice_alloc_and_add() Date: Mon, 8 Jun 2026 12:09:44 +0200 Message-ID: <20260608100949.36309-6-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Some Qualcomm PMICs integrate a SDAM device, internally located in a specific address range reachable through SPMI communication. Instead of using the parent SPMI device (the main PMIC) as a kind of syscon in this driver, register a new SPMI sub-device for SDAM and initialize its own regmap with this sub-device's specific base address, retrieved from the devicetree. This allows to stop manually adding the register base address to every R/W call in this driver, as this can be, and is now, handled by the regmap API instead. Reviewed-by: Konrad Dybcio Tested-by: Neil Armstrong # on SM8650-QRD Acked-by: Srinivas Kandagatla Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/nvmem/Kconfig | 1 + drivers/nvmem/qcom-spmi-sdam.c | 38 +++++++++++++++++++++++----------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig index e10f7ff725ff..cc032d60b8c1 100644 --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig @@ -380,6 +380,7 @@ config NVMEM_SNVS_LPGPR config NVMEM_SPMI_SDAM tristate "SPMI SDAM Support" depends on SPMI + select REGMAP_SPMI help This driver supports the Shared Direct Access Memory Module on Qualcomm Technologies, Inc. PMICs. It provides the clients diff --git a/drivers/nvmem/qcom-spmi-sdam.c b/drivers/nvmem/qcom-spmi-sdam.c index 4f1cca6eab71..4974105dd963 100644 --- a/drivers/nvmem/qcom-spmi-sdam.c +++ b/drivers/nvmem/qcom-spmi-sdam.c @@ -9,6 +9,7 @@ #include #include #include +#include =20 #define SDAM_MEM_START 0x40 #define REGISTER_MAP_ID 0x40 @@ -20,7 +21,6 @@ struct sdam_chip { struct regmap *regmap; struct nvmem_config sdam_config; - unsigned int base; unsigned int size; }; =20 @@ -73,7 +73,7 @@ static int sdam_read(void *priv, unsigned int offset, voi= d *val, return -EINVAL; } =20 - rc =3D regmap_bulk_read(sdam->regmap, sdam->base + offset, val, bytes); + rc =3D regmap_bulk_read(sdam->regmap, offset, val, bytes); if (rc < 0) dev_err(dev, "Failed to read SDAM offset %#x len=3D%zd, rc=3D%d\n", offset, bytes, rc); @@ -100,7 +100,7 @@ static int sdam_write(void *priv, unsigned int offset, = void *val, return -EINVAL; } =20 - rc =3D regmap_bulk_write(sdam->regmap, sdam->base + offset, val, bytes); + rc =3D regmap_bulk_write(sdam->regmap, offset, val, bytes); if (rc < 0) dev_err(dev, "Failed to write SDAM offset %#x len=3D%zd, rc=3D%d\n", offset, bytes, rc); @@ -110,8 +110,17 @@ static int sdam_write(void *priv, unsigned int offset,= void *val, =20 static int sdam_probe(struct platform_device *pdev) { + struct regmap_config sdam_regmap_config =3D { + .reg_bits =3D 16, + .val_bits =3D 8, + .max_register =3D 0xff, + .fast_io =3D true, + }; struct sdam_chip *sdam; struct nvmem_device *nvmem; + struct spmi_device *sparent; + struct spmi_subdevice *sub_sdev; + struct device *dev =3D &pdev->dev; unsigned int val; int rc; =20 @@ -119,19 +128,23 @@ static int sdam_probe(struct platform_device *pdev) if (!sdam) return -ENOMEM; =20 - sdam->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); - if (!sdam->regmap) { - dev_err(&pdev->dev, "Failed to get regmap handle\n"); - return -ENXIO; - } + sparent =3D to_spmi_device(dev->parent); + sub_sdev =3D devm_spmi_subdevice_alloc_and_add(dev, sparent); + if (IS_ERR(sub_sdev)) + return PTR_ERR(sub_sdev); =20 - rc =3D of_property_read_u32(pdev->dev.of_node, "reg", &sdam->base); + rc =3D device_property_read_u32(dev, "reg", &sdam_regmap_config.reg_base); if (rc < 0) { - dev_err(&pdev->dev, "Failed to get SDAM base, rc=3D%d\n", rc); + dev_err(dev, "Failed to get SDAM base, rc=3D%d\n", rc); return -EINVAL; } =20 - rc =3D regmap_read(sdam->regmap, sdam->base + SDAM_SIZE, &val); + sdam->regmap =3D devm_regmap_init_spmi_ext(&sub_sdev->sdev, &sdam_regmap_= config); + if (IS_ERR(sdam->regmap)) + return dev_err_probe(dev, PTR_ERR(sdam->regmap), + "Failed to get regmap handle\n"); + + rc =3D regmap_read(sdam->regmap, SDAM_SIZE, &val); if (rc < 0) { dev_err(&pdev->dev, "Failed to read SDAM_SIZE rc=3D%d\n", rc); return -EINVAL; @@ -159,7 +172,7 @@ static int sdam_probe(struct platform_device *pdev) } dev_dbg(&pdev->dev, "SDAM base=3D%#x size=3D%u registered successfully\n", - sdam->base, sdam->size); + sdam_regmap_config.reg_base, sdam->size); =20 return 0; } @@ -181,3 +194,4 @@ module_platform_driver(sdam_driver); =20 MODULE_DESCRIPTION("QCOM SPMI SDAM driver"); MODULE_LICENSE("GPL v2"); +MODULE_IMPORT_NS("SPMI"); --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 5F8E53D8133; Mon, 8 Jun 2026 10:10:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913453; cv=none; b=gjccQTy8RcP7FAN07tVGJizDpZnsGLqo1s1JyQKraCY9yy2tzEdPrenHqcsJ3Zjv45g8b6EvFJTjDmY8zFTy+mlgDhO4sjvM1cLIVj0XzfD413RFVmEIGgn9rBqgrSJl5B3L8lfcD3t0HaGqsrMhzThsFt1o6iixwk3gQNMSBCE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913453; c=relaxed/simple; bh=jiF4zcx0/I5VFQUDZ6VGy2qSs1jgwlxV44YiihFi/iE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G1HLBEbrdbVtKaGI5OKeL6WDOGOB1G4jfF6Ka0nn4VzJXJmh5bvyH6dD3y6a+D3WbC8Fy517daeODHoTg9ZGKJaIe2lNoecGoLvzTEWt4psT/u64fGpGXkH2myXFEwSTdmS1IlhjHktLMLosD0X7r+W9c011fIYSEqJB/KnfcUg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=eMaEd5Ux; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="eMaEd5Ux" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913450; bh=jiF4zcx0/I5VFQUDZ6VGy2qSs1jgwlxV44YiihFi/iE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eMaEd5UxOw4Pp1qLa17NzTv/CeNYUbTHI6CZRgKHJKqxgtywnJQWm2I0qBmxTpEk3 rRoL/HPnP5gmBza1UlqXVpZ5p2W5OphXSZYOX7gyexQBUE3D6ANpLAJylOqqrxlc5m hZbek7U0tMMPaWyf+CAA8Xwa3QegMvn3Uvra9JxaMJvwZrNFEm4j3FZbnd1uudmjWN hSJyohonktyUOUKGJrUHnapju1zJ7By4Z5OPpGT7AasPP+XId3NmJ2c0VImli5C883 AWb25T3iQD+OLeZzY/cVzE4z9iCCDh4/2JgQhAvbv9rwdnfcvnAn9O/6tVu/GE0cYz duonvVT57SXlg== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 52E7A17E0FD2; Mon, 8 Jun 2026 12:10:49 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Sebastian Reichel , Andy Shevchenko Subject: [PATCH v9 06/10] power: reset: qcom-pon: Migrate to devm_spmi_subdevice_alloc_and_add() Date: Mon, 8 Jun 2026 12:09:45 +0200 Message-ID: <20260608100949.36309-7-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Some Qualcomm PMICs integrates a Power On device supporting pwrkey and resin along with the Android reboot reason action identifier. Instead of using the parent SPMI device (the main PMIC) as a kind of syscon in this driver, register a new SPMI sub-device for PON and initialize its own regmap with this sub-device's specific base address, retrieved from the devicetree. This allows to stop manually adding the register base address to every R/W call in this driver, as this can be, and is now, handled by the regmap API instead. Reviewed-by: Sebastian Reichel Tested-by: Neil Armstrong # on SM8650-QRD Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/power/reset/qcom-pon.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/drivers/power/reset/qcom-pon.c b/drivers/power/reset/qcom-pon.c index 7e108982a582..182af188c9be 100644 --- a/drivers/power/reset/qcom-pon.c +++ b/drivers/power/reset/qcom-pon.c @@ -11,6 +11,7 @@ #include #include #include +#include =20 #define PON_SOFT_RB_SPARE 0x8f =20 @@ -22,7 +23,6 @@ struct qcom_pon { struct device *dev; struct regmap *regmap; - u32 baseaddr; struct reboot_mode_driver reboot_mode; long reason_shift; }; @@ -35,7 +35,7 @@ static int qcom_pon_reboot_mode_write(struct reboot_mode_= driver *reboot, int ret; =20 ret =3D regmap_update_bits(pon->regmap, - pon->baseaddr + PON_SOFT_RB_SPARE, + PON_SOFT_RB_SPARE, GENMASK(7, pon->reason_shift), magic << pon->reason_shift); if (ret < 0) @@ -46,27 +46,41 @@ static int qcom_pon_reboot_mode_write(struct reboot_mod= e_driver *reboot, =20 static int qcom_pon_probe(struct platform_device *pdev) { + struct regmap_config qcom_pon_regmap_config =3D { + .reg_bits =3D 16, + .val_bits =3D 8, + .max_register =3D 0xff, + .fast_io =3D true, + }; + struct device *dev =3D &pdev->dev; + struct spmi_subdevice *sub_sdev; + struct spmi_device *sparent; struct qcom_pon *pon; long reason_shift; int error; =20 + if (!dev->parent) + return -ENODEV; + pon =3D devm_kzalloc(&pdev->dev, sizeof(*pon), GFP_KERNEL); if (!pon) return -ENOMEM; =20 pon->dev =3D &pdev->dev; =20 - pon->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); - if (!pon->regmap) { - dev_err(&pdev->dev, "failed to locate regmap\n"); - return -ENODEV; - } + sparent =3D to_spmi_device(dev->parent); + sub_sdev =3D devm_spmi_subdevice_alloc_and_add(dev, sparent); + if (IS_ERR(sub_sdev)) + return PTR_ERR(sub_sdev); =20 - error =3D of_property_read_u32(pdev->dev.of_node, "reg", - &pon->baseaddr); + error =3D device_property_read_u32(dev, "reg", &qcom_pon_regmap_config.re= g_base); if (error) return error; =20 + pon->regmap =3D devm_regmap_init_spmi_ext(&sub_sdev->sdev, &qcom_pon_regm= ap_config); + if (IS_ERR(pon->regmap)) + return PTR_ERR(pon->regmap); + reason_shift =3D (long)of_device_get_match_data(&pdev->dev); =20 if (reason_shift !=3D NO_REASON_SHIFT) { @@ -106,3 +120,4 @@ module_platform_driver(qcom_pon_driver); =20 MODULE_DESCRIPTION("Qualcomm Power On driver"); MODULE_LICENSE("GPL v2"); +MODULE_IMPORT_NS("SPMI"); --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 34AFD3D891E; Mon, 8 Jun 2026 10:10:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913455; cv=none; b=s937zoJ9gsV+0UM1/Xwp3nQQlQ3PD+lnZjyB+ajIwPR8IA8olGF+D7HaxnOeHm1YiH4o3Ne/4T85wfiUXtDMFUKEd31JAnP/6oZk4awkNRmzQkmPQ4arLqa+NtrVvHRAUnOXeizzRgLd15k7VKQDxIhomA00+74UuqIif8Huc7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913455; c=relaxed/simple; bh=xxtWkTFWkatVOMsZ1TT9W7HOee+DQ/pHZnl1pUjFcZ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UO0RzsPM1tugsHLG+jHZPLQpEhO57AAUaESMu03K5pu0RLl39MP3qbmYTuvKv2KLLg3J+JaTVF5DnUHg/2YRHuZD9g86u/IPQQXMtEXQcUlK1SP8B1vTbgvQnYhsaREIBuGP0Nlv6k+Gx18QiGoA0WCCKQDWgjwLPgQWPZUiM7A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=EWaJyyt0; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="EWaJyyt0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913451; bh=xxtWkTFWkatVOMsZ1TT9W7HOee+DQ/pHZnl1pUjFcZ8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EWaJyyt0z4YSD9Q6I8nY6U80OG8lVzQJ7eTTJWNb9cSOXaBBDKlp5+SUWntxb5XoL fh5W6BgSzEQWBEeQButLaC4LEzgU6ujRr8AXQN77AFgayOLecE4AgThnuqY58RzrtO rvJXaxrhuxcsKK5lyoS+6sWjVmSzDDCGTeJwIrmcddN8Dna+jX7MHz2fkRtP/2KFAh TtU0XF4bvlH1OL4d3/Pw1RYfbablTIWx/7rANtCTlNYhbX6jyRoDAFDze7NlIp/Og6 pVgeRmmEVgAx4+3n7GDkUwOQbB7NjkIA4i64UPT6O71U0/116WI/9izouo7hphL7HF 9hZEzwNvYaegw== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 988EF17E00C2; Mon, 8 Jun 2026 12:10:50 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Abel Vesa , Andy Shevchenko Subject: [PATCH v9 07/10] phy: qualcomm: eusb2-repeater: Migrate to devm_spmi_subdevice_alloc_and_add() Date: Mon, 8 Jun 2026 12:09:46 +0200 Message-ID: <20260608100949.36309-8-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Some Qualcomm PMICs integrate an USB Repeater device, used to convert between eUSB2 and USB 2.0 signaling levels, reachable in a specific address range over SPMI. Instead of using the parent SPMI device (the main PMIC) as a kind of syscon in this driver, register a new SPMI sub-device for EUSB2 and initialize its own regmap with this sub-device's specific base address, retrieved from the devicetree. This allows to stop manually adding the register base address to every R/W call in this driver, as this can be, and is now, handled by the regmap API instead. Tested-by: Neil Armstrong # on SM8650-QRD Reviewed-by: Abel Vesa Acked-by: Vinod Koul Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/phy/qualcomm/Kconfig | 2 + .../phy/qualcomm/phy-qcom-eusb2-repeater.c | 54 +++++++++++-------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/drivers/phy/qualcomm/Kconfig b/drivers/phy/qualcomm/Kconfig index 60a0ead127fa..902a788f35f1 100644 --- a/drivers/phy/qualcomm/Kconfig +++ b/drivers/phy/qualcomm/Kconfig @@ -128,7 +128,9 @@ config PHY_QCOM_QUSB2 config PHY_QCOM_EUSB2_REPEATER tristate "Qualcomm PMIC eUSB2 Repeater Driver" depends on OF && (ARCH_QCOM || COMPILE_TEST) + depends on SPMI select GENERIC_PHY + select REGMAP_SPMI help Enable support for the USB high-speed eUSB2 repeater on Qualcomm PMICs. The repeater is paired with a Synopsys or M31 eUSB2 Phy diff --git a/drivers/phy/qualcomm/phy-qcom-eusb2-repeater.c b/drivers/phy/q= ualcomm/phy-qcom-eusb2-repeater.c index efeec4709a15..878ae03f70af 100644 --- a/drivers/phy/qualcomm/phy-qcom-eusb2-repeater.c +++ b/drivers/phy/qualcomm/phy-qcom-eusb2-repeater.c @@ -9,6 +9,7 @@ #include #include #include +#include =20 /* eUSB2 status registers */ #define EUSB2_RPTR_STATUS 0x08 @@ -66,7 +67,6 @@ struct eusb2_repeater { struct phy *phy; struct regulator_bulk_data *vregs; const struct eusb2_repeater_cfg *cfg; - u32 base; enum phy_mode mode; }; =20 @@ -143,7 +143,6 @@ static int eusb2_repeater_init(struct phy *phy) struct eusb2_repeater *rptr =3D phy_get_drvdata(phy); struct device_node *np =3D rptr->dev->of_node; struct regmap *regmap =3D rptr->regmap; - u32 base =3D rptr->base; u32 poll_val; s32 dt_val; int ret; @@ -154,37 +153,37 @@ static int eusb2_repeater_init(struct phy *phy) if (ret) return ret; =20 - regmap_write(regmap, base + EUSB2_EN_CTL1, EUSB2_RPTR_EN); + regmap_write(regmap, EUSB2_EN_CTL1, EUSB2_RPTR_EN); =20 /* Write registers from init table */ for (int i =3D 0; i < rptr->cfg->init_tbl_num; i++) - regmap_write(regmap, base + rptr->cfg->init_tbl[i].reg, + regmap_write(regmap, rptr->cfg->init_tbl[i].reg, rptr->cfg->init_tbl[i].value); =20 /* Override registers from devicetree values */ if (!of_property_read_u8(np, "qcom,tune-usb2-preem", &val)) - regmap_write(regmap, base + EUSB2_TUNE_USB2_PREEM, val); + regmap_write(regmap, EUSB2_TUNE_USB2_PREEM, val); =20 if (!of_property_read_u8(np, "qcom,tune-usb2-disc-thres", &val)) - regmap_write(regmap, base + EUSB2_TUNE_HSDISC, val); + regmap_write(regmap, EUSB2_TUNE_HSDISC, val); =20 if (!of_property_read_u8(np, "qcom,tune-usb2-amplitude", &val)) - regmap_write(regmap, base + EUSB2_TUNE_IUSB2, val); + regmap_write(regmap, EUSB2_TUNE_IUSB2, val); =20 if (!of_property_read_u8(np, "qcom,tune-res-fsdif", &val)) - regmap_write(regmap, base + EUSB2_TUNE_RES_FSDIF, val); + regmap_write(regmap, EUSB2_TUNE_RES_FSDIF, val); =20 if (!of_property_read_s32(np, "qcom,squelch-detector-bp", &dt_val)) { for (i =3D 0; i < ARRAY_SIZE(squelch_detector); i++) { if (squelch_detector[i] =3D=3D dt_val) { - regmap_write(regmap, base + EUSB2_TUNE_SQUELCH_U, i); + regmap_write(regmap, EUSB2_TUNE_SQUELCH_U, i); break; } } } =20 /* Wait for status OK */ - ret =3D regmap_read_poll_timeout(regmap, base + EUSB2_RPTR_STATUS, poll_v= al, + ret =3D regmap_read_poll_timeout(regmap, EUSB2_RPTR_STATUS, poll_val, poll_val & RPTR_OK, 10, 5); if (ret) dev_err(rptr->dev, "initialization timed-out\n"); @@ -197,7 +196,6 @@ static int eusb2_repeater_set_mode(struct phy *phy, { struct eusb2_repeater *rptr =3D phy_get_drvdata(phy); struct regmap *regmap =3D rptr->regmap; - u32 base =3D rptr->base; =20 switch (mode) { case PHY_MODE_USB_HOST: @@ -206,8 +204,8 @@ static int eusb2_repeater_set_mode(struct phy *phy, * per eUSB 1.2 Spec. Below implement software workaround until * PHY and controller is fixing seen observation. */ - regmap_write(regmap, base + EUSB2_FORCE_EN_5, F_CLK_19P2M_EN); - regmap_write(regmap, base + EUSB2_FORCE_VAL_5, V_CLK_19P2M_EN); + regmap_write(regmap, EUSB2_FORCE_EN_5, F_CLK_19P2M_EN); + regmap_write(regmap, EUSB2_FORCE_VAL_5, V_CLK_19P2M_EN); break; case PHY_MODE_USB_DEVICE: /* @@ -216,8 +214,8 @@ static int eusb2_repeater_set_mode(struct phy *phy, * repeater doesn't clear previous value due to shared * regulators (say host <-> device mode switch). */ - regmap_write(regmap, base + EUSB2_FORCE_EN_5, 0); - regmap_write(regmap, base + EUSB2_FORCE_VAL_5, 0); + regmap_write(regmap, EUSB2_FORCE_EN_5, 0); + regmap_write(regmap, EUSB2_FORCE_VAL_5, 0); break; default: return -EINVAL; @@ -242,13 +240,23 @@ static const struct phy_ops eusb2_repeater_ops =3D { =20 static int eusb2_repeater_probe(struct platform_device *pdev) { + struct regmap_config eusb2_regmap_config =3D { + .reg_bits =3D 16, + .val_bits =3D 8, + .max_register =3D 0xff, + .fast_io =3D true, + }; + struct spmi_device *sparent; struct eusb2_repeater *rptr; + struct spmi_subdevice *sub_sdev; struct device *dev =3D &pdev->dev; struct phy_provider *phy_provider; struct device_node *np =3D dev->of_node; - u32 res; int ret; =20 + if (!dev->parent) + return -ENODEV; + rptr =3D devm_kzalloc(dev, sizeof(*rptr), GFP_KERNEL); if (!rptr) return -ENOMEM; @@ -260,15 +268,18 @@ static int eusb2_repeater_probe(struct platform_devic= e *pdev) if (!rptr->cfg) return -EINVAL; =20 - rptr->regmap =3D dev_get_regmap(dev->parent, NULL); - if (!rptr->regmap) - return -ENODEV; + sparent =3D to_spmi_device(dev->parent); + sub_sdev =3D devm_spmi_subdevice_alloc_and_add(dev, sparent); + if (IS_ERR(sub_sdev)) + return PTR_ERR(sub_sdev); =20 - ret =3D of_property_read_u32(np, "reg", &res); + ret =3D device_property_read_u32(dev, "reg", &eusb2_regmap_config.reg_bas= e); if (ret < 0) return ret; =20 - rptr->base =3D res; + rptr->regmap =3D devm_regmap_init_spmi_ext(&sub_sdev->sdev, &eusb2_regmap= _config); + if (IS_ERR(rptr->regmap)) + return PTR_ERR(rptr->regmap); =20 ret =3D eusb2_repeater_init_vregs(rptr); if (ret < 0) { @@ -335,3 +346,4 @@ module_platform_driver(eusb2_repeater_driver); =20 MODULE_DESCRIPTION("Qualcomm PMIC eUSB2 Repeater driver"); MODULE_LICENSE("GPL"); +MODULE_IMPORT_NS("SPMI"); --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 72EE93D9DBA; Mon, 8 Jun 2026 10:10:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913456; cv=none; b=YUQ9ABwfOhDE+MZMa4rNQvttjw7NLTXEbpUaPjrEWhwxndUTVWoG9evrQx/KNy5ThtPpZbcUXhPKtCsKLkeC36zUPUIYDGK/LalY+XBIqK9jsdu32lOq9AM3t+G5EF22/q6CyANP6il+olSjz3VLj5ivAzNl2PiGzqq6BhzkUog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913456; c=relaxed/simple; bh=7w9uHVqNhQiJ1XWoX/p51zunauBZHPXPlJRM3QaLofE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=unFLiXqE1rU2Yd6ag+sxCZ1dT5kl3jqujZUWl6MQVMMsejcXlv36VDnUHgWuheW0JoaVjT08RW09D0Vct+TrruGZEMBT6rPf8rtYxP/2iY50tOVFxdtkYmNJ1Tnx7AQs9LzkYIgQ3/JyLubMHFChOozr0xQTCOuajbWxSbN9TBQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Vlt0pcRo; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Vlt0pcRo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913453; bh=7w9uHVqNhQiJ1XWoX/p51zunauBZHPXPlJRM3QaLofE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Vlt0pcRoZVNAxTzsv4WZa1lcqyQXiOzollPtSxAyRnQblxXV4em4DQ22GTnpNgPlH TS2y+aDg+0f3RIclHgDxFRPQM/yxB4PheMz8yK262YDh6+v4BUXqxraSKHi82De6AL HqM1IU1XQBDn5Cc8Z9mgk3dleRdMMZbqDyPuZnc3wu72fgz48iMdbTHF15xCQnJ5s6 4D9FkhHZaEK0qTgvWB9iJEed8wLK6ZG1UTOjSnvEas1QhAxJrGDObZAJghPzts1xkO wd9uuCrMSYxoTa0ESEvTg93Mr9iY3tCa4wSGyl2sI1DAmw0l61T7s0BQwjfcb3NmeE 5HmoFW/gyy0+A== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id DD67A17E1031; Mon, 8 Jun 2026 12:10:51 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Andy Shevchenko Subject: [PATCH v9 08/10] misc: qcom-coincell: Migrate to devm_spmi_subdevice_alloc_and_add() Date: Mon, 8 Jun 2026 12:09:47 +0200 Message-ID: <20260608100949.36309-9-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Some Qualcomm PMICs integrate a charger for coincells, usually powering an RTC when external (or main battery) power is missing. Instead of using the parent SPMI device (the main PMIC) as a kind of syscon in this driver, register a new SPMI sub-device and initialize its own regmap with this sub-device's specific base address, retrieved from the devicetree. This allows to stop manually adding the register base address to every R/W call in this driver, as this can be, and is now, handled by the regmap API instead. Acked-by: Greg Kroah-Hartman Tested-by: Neil Armstrong # on SM8650-QRD Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/misc/Kconfig | 2 ++ drivers/misc/qcom-coincell.c | 45 +++++++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 390256ed91f4..90947c015179 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -291,6 +291,8 @@ config HP_ILO config QCOM_COINCELL tristate "Qualcomm coincell charger support" depends on MFD_SPMI_PMIC || COMPILE_TEST + depends on SPMI + select REGMAP_SPMI help This driver supports the coincell block found inside of Qualcomm PMICs. The coincell charger provides a means to diff --git a/drivers/misc/qcom-coincell.c b/drivers/misc/qcom-coincell.c index 3c57f7429147..b0904f441300 100644 --- a/drivers/misc/qcom-coincell.c +++ b/drivers/misc/qcom-coincell.c @@ -9,11 +9,11 @@ #include #include #include +#include =20 struct qcom_coincell { struct device *dev; struct regmap *regmap; - u32 base_addr; }; =20 #define QCOM_COINCELL_REG_RSET 0x44 @@ -35,7 +35,7 @@ static int qcom_coincell_chgr_config(struct qcom_coincell= *chgr, int rset, /* if disabling, just do that and skip other operations */ if (!enable) return regmap_write(chgr->regmap, - chgr->base_addr + QCOM_COINCELL_REG_ENABLE, 0); + QCOM_COINCELL_REG_ENABLE, 0); =20 /* find index for current-limiting resistor */ for (i =3D 0; i < ARRAY_SIZE(qcom_rset_map); i++) @@ -58,7 +58,7 @@ static int qcom_coincell_chgr_config(struct qcom_coincell= *chgr, int rset, } =20 rc =3D regmap_write(chgr->regmap, - chgr->base_addr + QCOM_COINCELL_REG_RSET, i); + QCOM_COINCELL_REG_RSET, i); if (rc) { /* * This is mainly to flag a bad base_addr (reg) from dts. @@ -71,37 +71,55 @@ static int qcom_coincell_chgr_config(struct qcom_coince= ll *chgr, int rset, } =20 rc =3D regmap_write(chgr->regmap, - chgr->base_addr + QCOM_COINCELL_REG_VSET, j); + QCOM_COINCELL_REG_VSET, j); if (rc) return rc; =20 /* set 'enable' register */ return regmap_write(chgr->regmap, - chgr->base_addr + QCOM_COINCELL_REG_ENABLE, + QCOM_COINCELL_REG_ENABLE, QCOM_COINCELL_ENABLE); } =20 static int qcom_coincell_probe(struct platform_device *pdev) { - struct device_node *node =3D pdev->dev.of_node; + struct regmap_config qcom_coincell_regmap_config =3D { + .reg_bits =3D 16, + .val_bits =3D 8, + .max_register =3D 0xff, + .fast_io =3D true, + }; + struct device *dev =3D &pdev->dev; + struct device_node *node =3D dev->of_node; + struct spmi_subdevice *sub_sdev; + struct spmi_device *sparent; struct qcom_coincell chgr; u32 rset =3D 0; u32 vset =3D 0; bool enable; int rc; =20 - chgr.dev =3D &pdev->dev; + if (!dev->parent) + return -ENODEV; =20 - chgr.regmap =3D dev_get_regmap(pdev->dev.parent, NULL); - if (!chgr.regmap) { - dev_err(chgr.dev, "Unable to get regmap\n"); - return -EINVAL; - } + chgr.dev =3D &pdev->dev; =20 - rc =3D of_property_read_u32(node, "reg", &chgr.base_addr); + rc =3D device_property_read_u32(dev, "reg", &qcom_coincell_regmap_config.= reg_base); if (rc) return rc; =20 + sparent =3D to_spmi_device(dev->parent); + sub_sdev =3D devm_spmi_subdevice_alloc_and_add(dev, sparent); + if (IS_ERR(sub_sdev)) + return PTR_ERR(sub_sdev); + + chgr.regmap =3D devm_regmap_init_spmi_ext(&sub_sdev->sdev, + &qcom_coincell_regmap_config); + if (IS_ERR(chgr.regmap)) { + dev_err(chgr.dev, "Unable to get regmap\n"); + return PTR_ERR(chgr.regmap); + } + enable =3D !of_property_read_bool(node, "qcom,charger-disable"); =20 if (enable) { @@ -142,3 +160,4 @@ module_platform_driver(qcom_coincell_driver); =20 MODULE_DESCRIPTION("Qualcomm PMIC coincell charger driver"); MODULE_LICENSE("GPL v2"); +MODULE_IMPORT_NS("SPMI"); --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 CBECC3C378D; Mon, 8 Jun 2026 10:10:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913457; cv=none; b=P2dK224d6324cqQiFAMsY1jxJmyrR10QI6lCeirUuthOSfH/LkKNALInGFMrXusayjRr2pOKQJ9PUmNfdXw7KnN67wVc11UZ2Ux+gA18o6EMZfIQJbQxoRmkKilMrBK90+woNrPNQ/eiouVu5t6OZTbzjCVtOUchVKN/vHI9OHk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913457; c=relaxed/simple; bh=8D7sHh0LbWIVvo0dK/zPkFjBDZksD7eaPPqZIGWhDXs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X5FmkfUXaA4QCMXOPj63roVlESZId2LhwvvKWafzDQo9LrgqcHIFZsxeHGD2gOwaatbE6EFpe+sBGbiQe69KKXL+kkwTstFct34nwUl7whkbPbkAbKW+v0cKMkTQfkp/CrrXMs43608hA/u+VrLIy3nOeULSlDkTcYvzzNa9FeM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=I1OS95kM; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="I1OS95kM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913454; bh=8D7sHh0LbWIVvo0dK/zPkFjBDZksD7eaPPqZIGWhDXs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I1OS95kMWE1eVM4sbRDXz+VHEPhoq3TSN5VRwCPH9tVwkyoqGZ1HATHpvgh+M1qYx omMWRORn0p5WDUj4v6UxaxjhzQFw+WYypmizYMupjWa+uj0kR3li2HQeKolJsz3fJF p73WEkSluiotv7W3CSDfVwq1SBernZp7peBbKrbvKEyC2TTsQo+/uH0gkTH9BAY94n JkTi/ZgEy21g1UN7kGadNP7qC8I0imBpgM+3G2Jwtv6RE63IT7NjcBYhkX+sJX5UgZ QF2IcENOCXPxWnFb+nOVN00GE3ZIDO64P0AqSworK6sSiJsG0oShhz1xvgcVk5ekmv RD6Kw/6YFIvLQ== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 26E6B17E02F1; Mon, 8 Jun 2026 12:10:53 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Jonathan Cameron , Andy Shevchenko Subject: [PATCH v9 09/10] iio: adc: qcom-spmi-iadc: Migrate to devm_spmi_subdevice_alloc_and_add() Date: Mon, 8 Jun 2026 12:09:48 +0200 Message-ID: <20260608100949.36309-10-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" Some Qualcomm PMICs integrate an Current ADC device, reachable in a specific address range over SPMI. Instead of using the parent SPMI device (the main PMIC) as a kind of syscon in this driver, register a new SPMI sub-device and initialize its own regmap with this sub-device's specific base address, retrieved from the devicetree. This allows to stop manually adding the register base address to every R/W call in this driver, as this can be, and is now, handled by the regmap API instead. Reviewed-by: Jonathan Cameron Tested-by: Neil Armstrong # on SM8650-QRD Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/iio/adc/qcom-spmi-iadc.c | 35 ++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/iio/adc/qcom-spmi-iadc.c b/drivers/iio/adc/qcom-spmi-i= adc.c index 0ec3a0c4b1de..ad66bb92fe19 100644 --- a/drivers/iio/adc/qcom-spmi-iadc.c +++ b/drivers/iio/adc/qcom-spmi-iadc.c @@ -16,6 +16,7 @@ #include #include #include +#include =20 /* IADC register and bit definition */ #define IADC_REVISION2 0x1 @@ -94,7 +95,6 @@ * struct iadc_chip - IADC Current ADC device structure. * @regmap: regmap for register read/write. * @dev: This device pointer. - * @base: base offset for the ADC peripheral. * @rsense: Values of the internal and external sense resister in micro Oh= ms. * @poll_eoc: Poll for end of conversion instead of waiting for IRQ. * @offset: Raw offset values for the internal and external channels. @@ -105,7 +105,6 @@ struct iadc_chip { struct regmap *regmap; struct device *dev; - u16 base; bool poll_eoc; u32 rsense[2]; u16 offset[2]; @@ -119,7 +118,7 @@ static int iadc_read(struct iadc_chip *iadc, u16 offset= , u8 *data) unsigned int val; int ret; =20 - ret =3D regmap_read(iadc->regmap, iadc->base + offset, &val); + ret =3D regmap_read(iadc->regmap, offset, &val); if (ret < 0) return ret; =20 @@ -129,7 +128,7 @@ static int iadc_read(struct iadc_chip *iadc, u16 offset= , u8 *data) =20 static int iadc_write(struct iadc_chip *iadc, u16 offset, u8 data) { - return regmap_write(iadc->regmap, iadc->base + offset, data); + return regmap_write(iadc->regmap, offset, data); } =20 static int iadc_reset(struct iadc_chip *iadc) @@ -270,7 +269,7 @@ static int iadc_poll_wait_eoc(struct iadc_chip *iadc, u= nsigned int interval_us) =20 static int iadc_read_result(struct iadc_chip *iadc, u16 *data) { - return regmap_bulk_read(iadc->regmap, iadc->base + IADC_DATA, data, 2); + return regmap_bulk_read(iadc->regmap, IADC_DATA, data, 2); } =20 static int iadc_do_conversion(struct iadc_chip *iadc, int chan, u16 *data) @@ -488,12 +487,22 @@ static void iadc_disable_irq_wake(void *data) =20 static int iadc_probe(struct platform_device *pdev) { + struct regmap_config iadc_regmap_config =3D { + .reg_bits =3D 16, + .val_bits =3D 8, + .max_register =3D 0xff, + .fast_io =3D true, + }; struct device_node *node =3D pdev->dev.of_node; struct device *dev =3D &pdev->dev; + struct spmi_subdevice *sub_sdev; + struct spmi_device *sparent; struct iio_dev *indio_dev; struct iadc_chip *iadc; int ret, irq_eoc; - u32 res; + + if (!dev->parent) + return -ENODEV; =20 indio_dev =3D devm_iio_device_alloc(dev, sizeof(*iadc)); if (!indio_dev) @@ -502,18 +511,21 @@ static int iadc_probe(struct platform_device *pdev) iadc =3D iio_priv(indio_dev); iadc->dev =3D dev; =20 - iadc->regmap =3D dev_get_regmap(dev->parent, NULL); - if (!iadc->regmap) - return -ENODEV; + sparent =3D to_spmi_device(dev->parent); + sub_sdev =3D devm_spmi_subdevice_alloc_and_add(dev, sparent); + if (IS_ERR(sub_sdev)) + return PTR_ERR(sub_sdev); =20 init_completion(&iadc->complete); mutex_init(&iadc->lock); =20 - ret =3D of_property_read_u32(node, "reg", &res); + ret =3D device_property_read_u32(dev, "reg", &iadc_regmap_config.reg_base= ); if (ret < 0) return -ENODEV; =20 - iadc->base =3D res; + iadc->regmap =3D devm_regmap_init_spmi_ext(&sub_sdev->sdev, &iadc_regmap_= config); + if (IS_ERR(iadc->regmap)) + return PTR_ERR(iadc->regmap); =20 ret =3D iadc_version_check(iadc); if (ret < 0) @@ -596,3 +608,4 @@ MODULE_ALIAS("platform:qcom-spmi-iadc"); MODULE_DESCRIPTION("Qualcomm SPMI PMIC current ADC driver"); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Ivan T. Ivanov "); +MODULE_IMPORT_NS("SPMI"); --=20 2.54.0 From nobody Sat Jun 13 02:59:43 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (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 234DC3DC861; Mon, 8 Jun 2026 10:10:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913458; cv=none; b=maCPW2Xtj3J6JjoFDSRjeIilwd270EZAlmAsvk2H7E0GHz/wHAXB+NgkYMWsdlQPYKE2TODzVXqOPo1lPWiuAp8ujq7GpBwc+QXJC0RV/jS5w4/vhhA0gQ7yI4xLY/1TFQ1ITUD5OvdQMwBi2Dl4JZalWQ4u/o4JNYvr3wSSvbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780913458; c=relaxed/simple; bh=ocBR4DK3N5YI3SCULMPVftw8BGWTTDX62cB4q/nsdYI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E0YiV91cyBXJs5WOrKnL4KvUzvTBNZOoM8HFEuIEVtF787//tT4T6y5zFzzxvU9J7G+d+eLMcq1sL4ll/Bo8UZYEiPGYZgg/0bUcPpcpcMnKz5+Tic5Qxw18ZUQe+J1CxDgcrh3Sy7vcs0NXK5p9od9vh2M8aCqOStOO/gUFPrQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=P/w6l/vj; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="P/w6l/vj" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1780913455; bh=ocBR4DK3N5YI3SCULMPVftw8BGWTTDX62cB4q/nsdYI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=P/w6l/vj/VXslD8EaFC1dGZjEtFneSYTAYGMO9y1/Sdqpz9Yd0irRgVpvcwEK1fgJ WyhqLa0MRQLsTZIHYDtFZapi6JP743xrMHFHYMtZApcJmySQZ7i4YKdWei0qO5KDEQ Tb/eVHJnhDeZ+uYX958jELSMq/KEZayJpyWYqUThxWZ/1TGANlmTZlwkebM+4MjPY/ RDsOHSA2xMR2y2ATsbSipfPYueGZYQLcmQRU3VCvWrmdPdpdd/HjK3e3qPMkeOSReV RDcyKRzBauE22VML81KpNeYjdNilsEeEa0SPtXAa4N0thiKS/XeD8kylZOav30dQwR MdVTMlK9qlZfQ== Received: from IcarusMOD.eternityproject.eu (unknown [100.64.1.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by bali.collaboradmins.com (Postfix) with ESMTPSA id 6A62E17E05FC; Mon, 8 Jun 2026 12:10:54 +0200 (CEST) From: AngeloGioacchino Del Regno To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, sre@kernel.org, sboyd@kernel.org, angelogioacchino.delregno@collabora.com, krzk@kernel.org, dmitry.baryshkov@oss.qualcomm.com, quic_wcheng@quicinc.com, melody.olvera@oss.qualcomm.com, quic_nsekar@quicinc.com, ivo.ivanov.ivanov1@gmail.com, abelvesa@kernel.org, luca.weiss@fairphone.com, konrad.dybcio@oss.qualcomm.com, mitltlatltl@gmail.com, krishna.kurapati@oss.qualcomm.com, linux-arm-msm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-pm@vger.kernel.org, kernel@collabora.com, Jonathan Cameron , Andy Shevchenko Subject: [PATCH v9 10/10] iio: adc: qcom-spmi-iadc: Remove regmap R/W wrapper functions Date: Mon, 8 Jun 2026 12:09:49 +0200 Message-ID: <20260608100949.36309-11-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260608100949.36309-1-angelogioacchino.delregno@collabora.com> References: <20260608100949.36309-1-angelogioacchino.delregno@collabora.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 Content-Type: text/plain; charset="utf-8" This driver doesn't need to add any register base address to any regmap call anymore since it was migrated to register as a SPMI subdevice with its own regmap reg_base, which makes the regmap API to automatically add such base address internally. Since the iadc_{read,write,read_result}() functions now only do call regmap_{read,write,bulk_read}() and nothing else, simplify the driver by removing them and by calling regmap APIs directly. Reviewed-by: Jonathan Cameron Tested-by: Neil Armstrong # on SM8650-QRD Reviewed-by: Andy Shevchenko Signed-off-by: AngeloGioacchino Del Regno --- drivers/iio/adc/qcom-spmi-iadc.c | 89 ++++++++++++-------------------- 1 file changed, 33 insertions(+), 56 deletions(-) diff --git a/drivers/iio/adc/qcom-spmi-iadc.c b/drivers/iio/adc/qcom-spmi-i= adc.c index ad66bb92fe19..29e71e6ac374 100644 --- a/drivers/iio/adc/qcom-spmi-iadc.c +++ b/drivers/iio/adc/qcom-spmi-iadc.c @@ -113,77 +113,59 @@ struct iadc_chip { struct completion complete; }; =20 -static int iadc_read(struct iadc_chip *iadc, u16 offset, u8 *data) -{ - unsigned int val; - int ret; - - ret =3D regmap_read(iadc->regmap, offset, &val); - if (ret < 0) - return ret; - - *data =3D val; - return 0; -} - -static int iadc_write(struct iadc_chip *iadc, u16 offset, u8 data) -{ - return regmap_write(iadc->regmap, offset, data); -} - static int iadc_reset(struct iadc_chip *iadc) { - u8 data; + u32 data; int ret; =20 - ret =3D iadc_write(iadc, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA); + ret =3D regmap_write(iadc->regmap, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA); if (ret < 0) return ret; =20 - ret =3D iadc_read(iadc, IADC_PERH_RESET_CTL3, &data); + ret =3D regmap_read(iadc->regmap, IADC_PERH_RESET_CTL3, &data); if (ret < 0) return ret; =20 - ret =3D iadc_write(iadc, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA); + ret =3D regmap_write(iadc->regmap, IADC_SEC_ACCESS, IADC_SEC_ACCESS_DATA); if (ret < 0) return ret; =20 data |=3D IADC_FOLLOW_WARM_RB; =20 - return iadc_write(iadc, IADC_PERH_RESET_CTL3, data); + return regmap_write(iadc->regmap, IADC_PERH_RESET_CTL3, data); } =20 static int iadc_set_state(struct iadc_chip *iadc, bool state) { - return iadc_write(iadc, IADC_EN_CTL1, state ? IADC_EN_CTL1_SET : 0); + return regmap_write(iadc->regmap, IADC_EN_CTL1, state ? IADC_EN_CTL1_SET = : 0); } =20 static void iadc_status_show(struct iadc_chip *iadc) { - u8 mode, sta1, chan, dig, en, req; + u32 mode, sta1, chan, dig, en, req; int ret; =20 - ret =3D iadc_read(iadc, IADC_MODE_CTL, &mode); + ret =3D regmap_read(iadc->regmap, IADC_MODE_CTL, &mode); if (ret < 0) return; =20 - ret =3D iadc_read(iadc, IADC_DIG_PARAM, &dig); + ret =3D regmap_read(iadc->regmap, IADC_DIG_PARAM, &dig); if (ret < 0) return; =20 - ret =3D iadc_read(iadc, IADC_CH_SEL_CTL, &chan); + ret =3D regmap_read(iadc->regmap, IADC_CH_SEL_CTL, &chan); if (ret < 0) return; =20 - ret =3D iadc_read(iadc, IADC_CONV_REQ, &req); + ret =3D regmap_read(iadc->regmap, IADC_CONV_REQ, &req); if (ret < 0) return; =20 - ret =3D iadc_read(iadc, IADC_STATUS1, &sta1); + ret =3D regmap_read(iadc->regmap, IADC_STATUS1, &sta1); if (ret < 0) return; =20 - ret =3D iadc_read(iadc, IADC_EN_CTL1, &en); + ret =3D regmap_read(iadc->regmap, IADC_EN_CTL1, &en); if (ret < 0) return; =20 @@ -199,34 +181,34 @@ static int iadc_configure(struct iadc_chip *iadc, int= channel) =20 /* Mode selection */ mode =3D (IADC_OP_MODE_NORMAL << IADC_OP_MODE_SHIFT) | IADC_TRIM_EN; - ret =3D iadc_write(iadc, IADC_MODE_CTL, mode); + ret =3D regmap_write(iadc->regmap, IADC_MODE_CTL, mode); if (ret < 0) return ret; =20 /* Channel selection */ - ret =3D iadc_write(iadc, IADC_CH_SEL_CTL, channel); + ret =3D regmap_write(iadc->regmap, IADC_CH_SEL_CTL, channel); if (ret < 0) return ret; =20 /* Digital parameter setup */ decim =3D IADC_DEF_DECIMATION << IADC_DIG_DEC_RATIO_SEL_SHIFT; - ret =3D iadc_write(iadc, IADC_DIG_PARAM, decim); + ret =3D regmap_write(iadc->regmap, IADC_DIG_PARAM, decim); if (ret < 0) return ret; =20 /* HW settle time delay */ - ret =3D iadc_write(iadc, IADC_HW_SETTLE_DELAY, IADC_DEF_HW_SETTLE_TIME); + ret =3D regmap_write(iadc->regmap, IADC_HW_SETTLE_DELAY, IADC_DEF_HW_SETT= LE_TIME); if (ret < 0) return ret; =20 - ret =3D iadc_write(iadc, IADC_FAST_AVG_CTL, IADC_DEF_AVG_SAMPLES); + ret =3D regmap_write(iadc->regmap, IADC_FAST_AVG_CTL, IADC_DEF_AVG_SAMPLE= S); if (ret < 0) return ret; =20 if (IADC_DEF_AVG_SAMPLES) - ret =3D iadc_write(iadc, IADC_FAST_AVG_EN, IADC_FAST_AVG_EN_SET); + ret =3D regmap_write(iadc->regmap, IADC_FAST_AVG_EN, IADC_FAST_AVG_EN_SE= T); else - ret =3D iadc_write(iadc, IADC_FAST_AVG_EN, 0); + ret =3D regmap_write(iadc->regmap, IADC_FAST_AVG_EN, 0); =20 if (ret < 0) return ret; @@ -239,19 +221,19 @@ static int iadc_configure(struct iadc_chip *iadc, int= channel) return ret; =20 /* Request conversion */ - return iadc_write(iadc, IADC_CONV_REQ, IADC_CONV_REQ_SET); + return regmap_write(iadc->regmap, IADC_CONV_REQ, IADC_CONV_REQ_SET); } =20 static int iadc_poll_wait_eoc(struct iadc_chip *iadc, unsigned int interva= l_us) { unsigned int count, retry; + u32 sta1; int ret; - u8 sta1; =20 retry =3D interval_us / IADC_CONV_TIME_MIN_US; =20 for (count =3D 0; count < retry; count++) { - ret =3D iadc_read(iadc, IADC_STATUS1, &sta1); + ret =3D regmap_read(iadc->regmap, IADC_STATUS1, &sta1); if (ret < 0) return ret; =20 @@ -267,11 +249,6 @@ static int iadc_poll_wait_eoc(struct iadc_chip *iadc, = unsigned int interval_us) return -ETIMEDOUT; } =20 -static int iadc_read_result(struct iadc_chip *iadc, u16 *data) -{ - return regmap_bulk_read(iadc->regmap, IADC_DATA, data, 2); -} - static int iadc_do_conversion(struct iadc_chip *iadc, int chan, u16 *data) { unsigned int wait; @@ -296,7 +273,7 @@ static int iadc_do_conversion(struct iadc_chip *iadc, i= nt chan, u16 *data) } =20 if (!ret) - ret =3D iadc_read_result(iadc, data); + ret =3D regmap_bulk_read(iadc->regmap, IADC_DATA, data, sizeof(*data)); exit: iadc_set_state(iadc, false); if (ret < 0) @@ -392,33 +369,33 @@ static int iadc_update_offset(struct iadc_chip *iadc) =20 static int iadc_version_check(struct iadc_chip *iadc) { - u8 val; + u32 val; int ret; =20 - ret =3D iadc_read(iadc, IADC_PERPH_TYPE, &val); + ret =3D regmap_read(iadc->regmap, IADC_PERPH_TYPE, &val); if (ret < 0) return ret; =20 if (val < IADC_PERPH_TYPE_ADC) { - dev_err(iadc->dev, "%d is not ADC\n", val); + dev_err(iadc->dev, "%u is not ADC\n", val); return -EINVAL; } =20 - ret =3D iadc_read(iadc, IADC_PERPH_SUBTYPE, &val); + ret =3D regmap_read(iadc->regmap, IADC_PERPH_SUBTYPE, &val); if (ret < 0) return ret; =20 if (val < IADC_PERPH_SUBTYPE_IADC) { - dev_err(iadc->dev, "%d is not IADC\n", val); + dev_err(iadc->dev, "%u is not IADC\n", val); return -EINVAL; } =20 - ret =3D iadc_read(iadc, IADC_REVISION2, &val); + ret =3D regmap_read(iadc->regmap, IADC_REVISION2, &val); if (ret < 0) return ret; =20 if (val < IADC_REVISION2_SUPPORTED_IADC) { - dev_err(iadc->dev, "revision %d not supported\n", val); + dev_err(iadc->dev, "revision %u not supported\n", val); return -EINVAL; } =20 @@ -428,7 +405,7 @@ static int iadc_version_check(struct iadc_chip *iadc) static int iadc_rsense_read(struct iadc_chip *iadc, struct device_node *no= de) { int ret, sign, int_sense; - u8 deviation; + u32 deviation; =20 ret =3D of_property_read_u32(node, "qcom,external-resistor-micro-ohms", &iadc->rsense[IADC_EXT_RSENSE]); @@ -440,7 +417,7 @@ static int iadc_rsense_read(struct iadc_chip *iadc, str= uct device_node *node) return -EINVAL; } =20 - ret =3D iadc_read(iadc, IADC_NOMINAL_RSENSE, &deviation); + ret =3D regmap_read(iadc->regmap, IADC_NOMINAL_RSENSE, &deviation); if (ret < 0) return ret; =20 --=20 2.54.0