From nobody Mon Feb 9 09:38:44 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 9A880389DFA; Wed, 14 Jan 2026 09:28:00 +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=1768382882; cv=none; b=Jy+QqOuAvzdK0olzExe3gg97c+2g9M4XXk9PubePRItFH9r2wNbeBOIuhenDjE9/XfzaMXs+Q78fLxVIifus8n7fVOfs8UPMn3BRzXJlP77avnIAgD2rIf5nxQyda1IZJkfsbFtAKSDKGAVXt0jc32497t9vcr7zXcuU+Mzr+xY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768382882; c=relaxed/simple; bh=O9ah9HMKLhUz0dSyohdRgTK+400/LyPEmXBMbnkIHpI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zd17dW7OTAIIF0uIHzZ4GvfnRcf93+ALIgcCYa7J/5jJiThBXdNnPpVcMoKjbMX9D8T96CIb3gtRwqSURzR3g5LBqhkM3Cjixv88HSgDyHF04fr8ciGkqZtI+rm8GLXj/Lx+hBTXCJ7LNXEpyuW3SlCMbA01eI+Vd3Td41WfDfc= 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=O4S+bkUu; 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="O4S+bkUu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1768382879; bh=O9ah9HMKLhUz0dSyohdRgTK+400/LyPEmXBMbnkIHpI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O4S+bkUuBvA7MvHViHaT+1srMt2OX6ORI4HHI5ovheWT5mVd9zLjo1jO9injkZ0lC LUNxAscJmEie8PVT8gT1cVIwVUBp6HmBWNPk7W7c1CekbawQ/mFbmpiPSYbnJvdy2A rAKrs29fepkoe+p/hYwYr23i6gKepVlGgD2pSf2gRKxkBqd4jgWjjob/Y1nylBUXl1 hUHuvGGmdtdDT80wcyChc7a1w3/Gye2e4t40+EC9sKx7FPyKyyG60tlNL1du7OGp0P 7RQKZErZ3U1cgh/dp6ZY9wld7AM1LrHOnXlmrSnoFuLAAu1p7F4a8hbXx5gdN7U6Ik KeH+2SNlZxMKA== Received: from IcarusMOD.eternityproject.eu (2-237-20-237.ip236.fastwebnet.it [2.237.20.237]) (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 E233C17E1513; Wed, 14 Jan 2026 10:27:57 +0100 (CET) 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 Subject: [PATCH v8 09/10] iio: adc: qcom-spmi-iadc: Migrate to devm_spmi_subdevice_alloc_and_add() Date: Wed, 14 Jan 2026 10:27:41 +0100 Message-ID: <20260114092742.13231-10-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260114092742.13231-1-angelogioacchino.delregno@collabora.com> References: <20260114092742.13231-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 Signed-off-by: AngeloGioacchino Del Regno --- drivers/iio/adc/qcom-spmi-iadc.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/drivers/iio/adc/qcom-spmi-iadc.c b/drivers/iio/adc/qcom-spmi-i= adc.c index b64a8a407168..55a09c0e2d5c 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) @@ -483,12 +482,19 @@ static const struct iio_chan_spec iadc_channels[] =3D= { =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; =20 indio_dev =3D devm_iio_device_alloc(dev, sizeof(*iadc)); if (!indio_dev) @@ -497,18 +503,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) @@ -584,3 +593,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.52.0