[PATCH] mfd: intel_soc_pmic_chtdc_ti: Set use_single_read regmap_config flag

Hans de Goede posted 1 patch 2 months ago
drivers/mfd/intel_soc_pmic_chtdc_ti.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] mfd: intel_soc_pmic_chtdc_ti: Set use_single_read regmap_config flag
Posted by Hans de Goede 2 months ago
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[] = {
-- 
2.49.0
Re: [PATCH] mfd: intel_soc_pmic_chtdc_ti: Set use_single_read regmap_config flag
Posted by Andy Shevchenko 2 months ago
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=ahCWRN7SAk3pfZ_A@mail.gmail.com/
?
(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>

-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH] mfd: intel_soc_pmic_chtdc_ti: Set use_single_read regmap_config flag
Posted by Hans de Goede 2 months ago
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=ahCWRN7SAk3pfZ_A@mail.gmail.com/
> ?

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.



Re: [PATCH] mfd: intel_soc_pmic_chtdc_ti: Set use_single_read regmap_config flag
Posted by Andy Shevchenko 2 months ago
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=ahCWRN7SAk3pfZ_A@mail.gmail.com/
> > ?
>
> 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.

> 1) 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?

-- 
With Best Regards,
Andy Shevchenko
Re: [PATCH] mfd: intel_soc_pmic_chtdc_ti: Set use_single_read regmap_config flag
Posted by Hans de Goede 2 months ago
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=ahCWRN7SAk3pfZ_A@mail.gmail.com/
>>> ?
>>
>> 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.
> 
>> 1) 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