Testing has shown that reading multiple registers at once (for 10 bit adc values) does not work. Set the use_single_read regmap_config flag to make regmap split these for is.
This should fix temperature opregion accesses done by drivers/acpi/pmic/intel_pmic_chtdc_ti.c and is also necessary for the upcoming drivers for the ADC and battery MFD cells.
Fixes: 6bac0606fdba ("mfd: Add support for Cherry Trail Dollar Cove TI PMIC") Cc: stable@vger.kernel.org Signed-off-by: Hans de Goede hansg@kernel.org --- drivers/mfd/intel_soc_pmic_chtdc_ti.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/mfd/intel_soc_pmic_chtdc_ti.c b/drivers/mfd/intel_soc_pmic_chtdc_ti.c index 4c1a68c9f575..a23bda8ddae8 100644 --- a/drivers/mfd/intel_soc_pmic_chtdc_ti.c +++ b/drivers/mfd/intel_soc_pmic_chtdc_ti.c @@ -82,6 +82,8 @@ static const struct regmap_config chtdc_ti_regmap_config = { .reg_bits = 8, .val_bits = 8, .max_register = 0xff, + /* Reading multiple registers at once is not supported */ + .use_single_read = true, };
static const struct regmap_irq chtdc_ti_irqs[] = {
On Mon, Aug 4, 2025 at 10:34 AM Hans de Goede hansg@kernel.org wrote:
Testing has shown that reading multiple registers at once (for 10 bit adc values) does not work. Set the use_single_read regmap_config flag to make regmap split these for is.
This should fix temperature opregion accesses done by drivers/acpi/pmic/intel_pmic_chtdc_ti.c and is also necessary for the upcoming drivers for the ADC and battery MFD cells.
...
/* Reading multiple registers at once is not supported */
.use_single_read = true,
By HW or by problem in regmap as being suggested here: https://lore.kernel.org/linux-gpio/CALNFmy1ZRqHz6_DD_2qamm-iLQ51AOFQH=ahCWRN... ? (OTOH it mentioned cache init and you seems referring to run-time, however it might be well related)
As a quick fix I am fine with this. Reviewed-by: Andy Shevchenko andy@kernel.org
Hi Andy,
On 4-Aug-25 10:47 AM, Andy Shevchenko wrote:
On Mon, Aug 4, 2025 at 10:34 AM Hans de Goede hansg@kernel.org wrote:
Testing has shown that reading multiple registers at once (for 10 bit adc values) does not work. Set the use_single_read regmap_config flag to make regmap split these for is.
This should fix temperature opregion accesses done by drivers/acpi/pmic/intel_pmic_chtdc_ti.c and is also necessary for the upcoming drivers for the ADC and battery MFD cells.
...
/* Reading multiple registers at once is not supported */
.use_single_read = true,
By HW or by problem in regmap as being suggested here: https://lore.kernel.org/linux-gpio/CALNFmy1ZRqHz6_DD_2qamm-iLQ51AOFQH=ahCWRN... ?
This is a hw limitation. I tried with i2ctransfer to directly access the chip and it returns invalid values (1) after the first byte read.
As a quick fix I am fine with this. Reviewed-by: Andy Shevchenko andy@kernel.org
Thank you.
Regards,
Hans
1) I don't remember if it was 0, 0xff or repeating of the first byte. But it definitely did not work.
On Mon, Aug 4, 2025 at 10:51 AM Hans de Goede hansg@kernel.org wrote:
On 4-Aug-25 10:47 AM, Andy Shevchenko wrote:
On Mon, Aug 4, 2025 at 10:34 AM Hans de Goede hansg@kernel.org wrote:
...
/* Reading multiple registers at once is not supported */
.use_single_read = true,
By HW or by problem in regmap as being suggested here: https://lore.kernel.org/linux-gpio/CALNFmy1ZRqHz6_DD_2qamm-iLQ51AOFQH=ahCWRN... ?
This is a hw limitation. I tried with i2ctransfer to directly access the chip and it returns invalid values (1) after the first byte read.
- I don't remember if it was 0, 0xff or repeating
of the first byte. But it definitely did not work.
Perhaps elaborate the above in the comment, by at least putting keyword HW there?
Hi,
On 4-Aug-25 10:57 AM, Andy Shevchenko wrote:
On Mon, Aug 4, 2025 at 10:51 AM Hans de Goede hansg@kernel.org wrote:
On 4-Aug-25 10:47 AM, Andy Shevchenko wrote:
On Mon, Aug 4, 2025 at 10:34 AM Hans de Goede hansg@kernel.org wrote:
...
/* Reading multiple registers at once is not supported */
.use_single_read = true,
By HW or by problem in regmap as being suggested here: https://lore.kernel.org/linux-gpio/CALNFmy1ZRqHz6_DD_2qamm-iLQ51AOFQH=ahCWRN... ?
This is a hw limitation. I tried with i2ctransfer to directly access the chip and it returns invalid values (1) after the first byte read.
- I don't remember if it was 0, 0xff or repeating
of the first byte. But it definitely did not work.
Perhaps elaborate the above in the comment, by at least putting keyword HW there?
Ok, I've just send out a v2 clarifying the comment.
Regards,
Hans
linux-stable-mirror@lists.linaro.org