From nobody Thu Oct 2 15:35:41 2025 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 50BF129B8E0; Tue, 16 Sep 2025 08:45:09 +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=1758012312; cv=none; b=k8IxuBPmGkGI0Kuk7ElZdvbd25/wr3ZcJcPU/CD6zy8chDTLvqjycizo2lsyxCFeTHvRZEadQhlMh50MjoawWKXhhiJnlThGxGe6D01dldEBvCUkzrzhCcQ2eofSg5PnZO4eRYMJJv8PItAgY/COyEl9PuFKMBdCgkkYZmS9SV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758012312; c=relaxed/simple; bh=JI4hMEuGNCckUV7KuaoimYbjQfXphEDRXUDIrFmDCoY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AUvkDlleoU3JCZ0eFpvHwAISiysd6IbnpohbrsL5/4O5Q2LaBJmEENsHz2cJGebixrmhEFy8QuIyP6iKAZX3EiXlozuaB21q1CUyLgpGZBgJaHNjQMjCdpNIxJ4MjHDqv4VX6asDOGCr/O6r+0QmYNEHqcVd2rhlGowIThRWpMM= 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=CwUIxDd3; 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="CwUIxDd3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1758012304; bh=JI4hMEuGNCckUV7KuaoimYbjQfXphEDRXUDIrFmDCoY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CwUIxDd3jsCjsgPKqQbDRN5lkjQnCtzRkeLo07PI7HS1ba3lgVyETW0y1wwwVe72p CKJ5M4JuoWoNsKvLZ+nqLolFjxoPzajRjkS9psCBvjTj6jqs0ErcnVDOIuuYaeiQ/6 U15wqhYtUuLp9UWahE3fY9NiqznkfeICjNmlU25p4+9g8uw03HZt3W7HMxxcOMOd2C bd+TDMH+6h0/I8I6KIfgLbtWJy8Xcn20NseFanqH45vtzM/ImM1lJKaIaXIvYXLoXF LmvdfNwK+GfkJRf5IfaSk0ypf55qiTxWIEz99mz/K5A6NEgO7bmNdX3eRxRfIT6Wv+ HDoSimYDFjMzw== 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 A4B9717E13B2; Tue, 16 Sep 2025 10:45:03 +0200 (CEST) From: AngeloGioacchino Del Regno To: sboyd@kernel.org Cc: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, arnd@arndb.de, gregkh@linuxfoundation.org, srini@kernel.org, vkoul@kernel.org, kishon@kernel.org, sre@kernel.org, krzysztof.kozlowski@linaro.org, u.kleine-koenig@baylibre.com, angelogioacchino.delregno@collabora.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, wenst@chromium.org, casey.connolly@linaro.org, Jonathan Cameron , Neil Armstrong Subject: [PATCH v4 6/7] iio: adc: qcom-spmi-iadc: Migrate to devm_spmi_subdevice_alloc_and_add() Date: Tue, 16 Sep 2025 10:44:44 +0200 Message-ID: <20250916084445.96621-7-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250916084445.96621-1-angelogioacchino.delregno@collabora.com> References: <20250916084445.96621-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 Link: https://lore.kernel.org/r/20250722101317.76729-7-angelogioacchino.del= regno@collabora.com Tested-by: Neil Armstrong # on SM8650-QRD Link: https://lore.kernel.org/r/20250730112645.542179-7-angelogioacchino.de= lregno@collabora.com 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..67096952b229 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 0x100, + .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 of_property_read_u32(node, "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.51.0