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:
Hi Andy,What is wrong here?The problem is that you overlap virtual page over the real one (the
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.
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.
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.