Re: [PATCH 01/28] mfd: Add Microchip ZL3073x support

From: Ivan Vecera
Date: Mon Apr 14 2025 - 10:51:13 EST




On 14. 04. 25 3:55 odp., Andy Shevchenko wrote:
On Mon, Apr 14, 2025 at 2:52 PM Ivan Vecera <ivecera@xxxxxxxxxx> wrote:
On 14. 04. 25 1:39 odp., Ivan Vecera wrote:
On 14. 04. 25 8:36 dop., Andy Shevchenko wrote:
What is wrong here?

I have a device that uses 7-bit addresses and have 16 register pages.
Each pages is from 0x00-0x7f and register 0x7f is used as page selector
where bits 0-3 select the page.
The problem is that you overlap virtual page over the real one (the
main one).

The drivers you mentioned in v2 discussions most likely are also buggy.
As I implied in the above question the developers hardly get the
regmap ranges
right. It took me quite a while to see the issue, so it's not
particularly your
fault.
Hi Andy,

thank you I see the point.

Do you mean that the selector register should not be part of the range?

If so, does it mean that I have to specify a range for each page? Like
this:

{
/* Page 0 */
.range_min = 0x000,
.range_max = 0x07e,
.selector_reg = ZL3073x_PAGE_SEL,
.selector_mask = GENMASK(3, 0),
.selector_shift = 0,
.window_start = 0,
.window_len = 0x7e,
},
{
/* Page 1 */
.range_min = 0x080,
.range_max = 0x0fe,
.selector_reg = ZL3073x_PAGE_SEL,
.selector_mask = GENMASK(3, 0),
.selector_shift = 0,
.window_start = 0,
.window_len = 0x7e,
},

...

Sorry,
.window_len = 0x7f /* Exclude selector reg */

It actually will make things worse. If selector register is accessible
to all of the pages, it's better to include it in all pages.

Yes :-) I know this is non-sense.
See my recent reply.

Thanks,
Ivan