linux-stable/drivers/iio/adc
Quentin Schulz 4434bd1c58 iio: adc: rockchip_saradc: use mask for write_enable bitfield
[ Upstream commit 5b4e4b7203 ]

Some of the registers on the SARADCv2 have bits write protected except
if another bit is set. This is usually done by having the lowest 16 bits
store the data to write and the highest 16 bits specify which of the 16
lowest bits should have their value written to the hardware block.

The write_enable mask for the channel selection was incorrect because it
was just the value shifted by 16 bits, which means it would only ever
write bits and never clear them. So e.g. if someone starts a conversion
on channel 5, the lowest 4 bits would be 0x5, then starts a conversion
on channel 0, it would still be 5.

Instead of shifting the value by 16 as the mask, let's use the OR'ing of
the appropriate masks shifted by 16.

Note that this is not an issue currently because the only SARADCv2
currently supported has a reset defined in its Device Tree, that reset
resets the SARADC controller before starting a conversion on a channel.
However, this reset is handled as optional by the probe function and
thus proper masking should be used in the event an SARADCv2 without a
reset ever makes it upstream.

Fixes: 757953f8ec ("iio: adc: rockchip_saradc: Add support for RK3588")
Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20240223-saradcv2-chan-mask-v1-2-84b06a0f623a@theobroma-systems.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:32:08 +02:00
..
ab8500-gpadc.c iio: adc: ab8500-gpadc: Convert to platform remove callback returning void 2023-09-23 15:06:52 +01:00
ad799x.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ad4130.c iio: adc: ad4130: only set GPIO_CTRL if pin is unused 2024-02-10 16:52:39 +00:00
ad7091r-base.c iio: adc: Add support for AD7091R-8 2023-12-26 15:43:33 +00:00
ad7091r-base.h iio: adc: Add support for AD7091R-8 2023-12-26 15:43:33 +00:00
ad7091r5.c iio: adc: ad7091r: Add chip_info callback to get conversion result channel 2023-12-26 15:42:24 +00:00
ad7091r8.c iio: adc: ad7091r8: Fix error code in ad7091r8_gpio_setup() 2024-01-22 18:59:07 +00:00
ad7124.c iio: adc: Explicitly include correct DT includes 2023-07-23 13:38:13 +01:00
ad7192.c IIO: 1st set of new device support, features and cleanup for 6.7 2023-10-20 07:54:15 +02:00
ad7266.c
ad7280a.c
ad7291.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ad7292.c iio: adc: ad7292: Add explicit include for of.h 2023-04-06 20:36:26 +02:00
ad7298.c
ad7476.c iio: adc: ad7476: simplify using devm_regulator_get_enable() 2022-11-23 19:44:00 +00:00
ad7606.c iio: Rename iio_trigger_poll_chained and add kernel-doc 2023-03-11 12:18:29 +00:00
ad7606.h iio: adc: ad7606: simplify using devm_regulator_get_enable() 2022-11-23 19:44:00 +00:00
ad7606_par.c iio: use devm_platform_get_and_ioremap_resource() 2022-11-23 20:41:23 +00:00
ad7606_spi.c
ad7766.c
ad7768-1.c
ad7780.c
ad7791.c iio: adc: ad7791: fix IRQ flags 2023-02-18 17:06:09 +00:00
ad7793.c
ad7887.c
ad7923.c
ad7949.c
ad9467.c iio: adc: ad9467: use the more common !val NULL check 2023-12-10 11:41:01 +00:00
ad_sigma_delta.c iio: adc: ad_sigma_delta: Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag 2023-05-20 16:34:52 +01:00
adi-axi-adc.c iio: adc: adi-axi-adc: convert to regmap 2023-12-11 19:16:30 +00:00
aspeed_adc.c iio: adc: aspeed: Remove the trim valid dts property. 2022-11-14 20:20:08 +00:00
at91-sama5d2_adc.c iio: adc: at91-sama5d2: Convert to platform remove callback returning void 2023-09-23 15:06:52 +01:00
at91_adc.c iio: adc: at91: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
axp20x_adc.c iio: adc: axp20x: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
axp288_adc.c iio: adc: axp288_adc: do not use internal iio_dev lock 2022-11-23 19:43:57 +00:00
bcm_iproc_adc.c iio: adc: bcm_iproc: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
berlin2-adc.c iio: adc: berlin2-adc: Add missing of_node_put() in error path 2022-12-28 17:20:03 +00:00
cc10001_adc.c iio: adc: Explicitly include correct DT includes 2023-07-23 13:38:13 +01:00
cpcap-adc.c
da9150-gpadc.c
dln2-adc.c iio: adc: dln2: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
envelope-detector.c
ep93xx_adc.c iio: adc: ep93xx: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
exynos_adc.c Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
fsl-imx25-gcq.c iio: adc: fsl-imx25-gcq: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
hi8435.c
hx711.c iio: adc: hx711: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
imx7d_adc.c iio: adc: Remove redundant dev_err_probe() 2023-07-29 12:13:17 +01:00
imx8qxp-adc.c IIO: 1st set of new device support, features and cleanup for 6.7 2023-10-20 07:54:15 +02:00
imx93_adc.c iio: adc: imx93: add four channels for imx93 adc 2023-12-04 09:56:28 +00:00
ina2xx-adc.c Merge 6.5-rc6 into char-misc-next 2023-08-13 22:14:51 +02:00
ingenic-adc.c
intel_mrfld_adc.c
Kconfig iio: adc: Add support for AD7091R-8 2023-12-26 15:43:33 +00:00
lp8788_adc.c
lpc18xx_adc.c
lpc32xx_adc.c iio: adc: fix the return value handle for platform_get_irq() 2023-07-29 16:23:45 +01:00
ltc2309.c iio: adc: add ltc2309 support 2023-09-12 10:42:04 +01:00
ltc2471.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ltc2485.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ltc2496.c
ltc2497-core.c iio: adc: ltc2947-core: do not use internal iio_dev lock 2022-11-23 19:43:58 +00:00
ltc2497.c iio: adc: ltc2497: Simplify probe() 2023-09-12 10:42:04 +01:00
ltc2497.h iio: adc: ltc2947-core: do not use internal iio_dev lock 2022-11-23 19:43:58 +00:00
Makefile iio: adc: Add support for AD7091R-8 2023-12-26 15:43:33 +00:00
max1027.c
max1118.c
max1241.c iio: adc: max1241: simplify using devm_regulator_get_enable() 2022-11-23 19:44:01 +00:00
max1363.c iio: adc: max1363: Use i2c_get_match_data() 2023-09-11 20:12:42 +01:00
max9611.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
max11100.c
max11205.c
max11410.c 1st set of IIO new device support, features and cleanups for the 6.4 cycle. 2023-04-12 09:45:34 +02:00
max34408.c iio: adc: Add driver support for MAX34408/9 2023-11-16 19:10:25 +00:00
max77541-adc.c iio: adc: max77541: Add ADI MAX77541 ADC Support 2023-06-28 15:18:11 +01:00
mcp320x.c
mcp3422.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
mcp3564.c iio: adc: MCP3564: fix hardware identification logic 2023-12-04 13:54:10 +00:00
mcp3911.c iio: adc: mcp3911: simplify code with guard macro 2023-12-10 11:36:38 +00:00
men_z188_adc.c iio: adc: men_z188_adc: Remove redundant initialization owner in men_z188_driver 2023-08-05 17:43:17 +01:00
meson_saradc.c iio: adc: meson: add separate config for axg SoC family 2023-12-04 10:36:07 +00:00
mp2629_adc.c iio: adc: mp2629: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
mt6360-adc.c
mt6370-adc.c iio: adc: mt6370: Fix ibus and ibat scaling value of some specific vendor ID chips 2023-05-13 17:54:56 +01:00
mt6577_auxadc.c iio: adc: mt6577_auxadc: Fix kernel panic on suspend 2023-10-11 15:54:40 +01:00
mxs-lradc-adc.c iio: adc: mxs-lradc: Convert to platform remove callback returning void 2023-09-23 15:06:53 +01:00
nau7802.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
npcm_adc.c iio: adc: npcm: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
palmas_gpadc.c iio: adc: palmas_gpadc: Drop duplicated the in comment. 2023-09-23 18:38:18 +01:00
qcom-pm8xxx-xoadc.c iio: adc: qcom-pm8xxx-xoadc: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
qcom-spmi-adc5.c iio: adc: qcom-spmi-adc5: Add ADC5_GPIO2_100K_PU 2023-07-20 19:21:30 +01:00
qcom-spmi-iadc.c iio: adc: Explicitly include correct DT includes 2023-07-23 13:38:13 +01:00
qcom-spmi-rradc.c
qcom-spmi-vadc.c iio: adc: qcom-spmi-vadc: Propagate fw node label to userspace 2023-05-13 18:28:10 +01:00
qcom-vadc-common.c
rcar-gyroadc.c iio: adc: rcar-gyroadc: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
rn5t618-adc.c
rockchip_saradc.c iio: adc: rockchip_saradc: use mask for write_enable bitfield 2024-04-03 15:32:08 +02:00
rtq6056.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
rzg2l_adc.c
sc27xx_adc.c iio: adc: Explicitly include correct DT includes 2023-07-23 13:38:13 +01:00
sd_adc_modulator.c
spear_adc.c iio: adc: spear_adc: Use dev_err_probe() 2023-09-11 20:12:40 +01:00
stm32-adc-core.c iio: Use device_get_match_data() 2023-10-14 17:18:36 +01:00
stm32-adc-core.h iio: adc: stm32-adc: smart calibration support 2022-11-23 20:56:13 +00:00
stm32-adc.c iio: adc: stm32-adc: Replace deprecated strncpy() with strscpy() 2023-10-05 15:01:08 +01:00
stm32-dfsdm-adc.c iio: adc: stm32-dfsdm-adc: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
stm32-dfsdm-core.c iio: adc: stm32-dfsdm-core: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
stm32-dfsdm.h iio: adc: stm32-dfsdm: add id registers support 2023-01-08 13:11:03 +00:00
stmpe-adc.c iio: adc: Explicitly include correct DT includes 2023-07-23 13:38:13 +01:00
sun4i-gpadc-iio.c iio: adc: sun4i-gpadc-iio: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
sun20i-gpadc-iio.c iio: adc: Add Allwinner D1/T113s/R329/T507 SoCs GPADC 2023-07-20 19:21:29 +01:00
ti-adc081c.c iio: adc: ti-adc081c: Simplify probe() 2023-09-12 10:42:04 +01:00
ti-adc084s021.c
ti-adc108s102.c
ti-adc128s052.c iio: adc: ti-adc128s052: Sort headers 2023-01-08 12:12:10 +00:00
ti-adc161s626.c
ti-adc0832.c
ti-adc12138.c
ti-ads124s08.c
ti-ads131e08.c iio: adc: ti-ads131e08: Silence no spi_device_id warnings 2022-11-23 19:43:57 +00:00
ti-ads1015.c iio: adc: ti-ads1015: Simplify probe() 2023-09-12 10:42:04 +01:00
ti-ads1100.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ti-ads7924.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ti-ads7950.c iio: adc: ti-ads7950: Set can_sleep flag for GPIO chip 2023-03-18 16:39:35 +00:00
ti-ads8344.c
ti-ads8688.c
ti-lmp92064.c iio: adc: ti-lmp92064: add buffering support 2023-07-20 19:21:30 +01:00
ti-tlc4541.c
ti-tsc2046.c
ti_am335x_adc.c iio: adc: ti_am335x_adc: Fix return value check of tiadc_request_dma() 2023-12-04 09:31:51 +00:00
twl4030-madc.c iio: adc: twl4030-madc: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
twl6030-gpadc.c iio: Use device_get_match_data() 2023-10-14 17:18:36 +01:00
vf610_adc.c iio: adc: vf610_adc: Convert to platform remove callback returning void 2023-09-23 15:06:54 +01:00
viperboard_adc.c
xilinx-ams.c iio: adc: Use devm_krealloc_array 2023-05-30 21:07:15 +01:00
xilinx-xadc-core.c iio: adc: xilinx-xadc: Correct temperature offset/scale for UltraScale 2023-10-13 19:10:39 +01:00
xilinx-xadc-events.c
xilinx-xadc.h iio: adc: xilinx-xadc: Correct temperature offset/scale for UltraScale 2023-10-13 19:10:39 +01:00