[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20231204120151.f0afbee2ebc69e93e7977547@hugovil.com>
Date: Mon, 4 Dec 2023 12:01:51 -0500
From: Hugo Villeneuve <hugo@...ovil.com>
To: Mark Brown <broonie@...nel.org>
Cc: Jan Kundrát <jan.kundrat@...net.cz>,
Cosmin Tanislav <cosmin.tanislav@...log.com>,
linux-serial@...r.kernel.org,
Andy Shevchenko <andy.shevchenko@...il.com>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] tty: max310x: work around regmap->regcache data
corruption
On Mon, 4 Dec 2023 16:35:30 +0000
Mark Brown <broonie@...nel.org> wrote:
> On Mon, Dec 04, 2023 at 11:29:05AM -0500, Hugo Villeneuve wrote:
>
> > Do you have an example of a driver which is using regmap ranges like it
> > should be done in this driver, that is using the exact same address for
> > two or more registers? I found an example, but it doesn't seem
> > applicable to the sc16is7xx driver because the two registers do not
> > share a common address, for example they have addresses like 0x01 and
> > 0x81, even though with the proper page selection, they finally map to
> > address 0x01.
>
> I don't understand what you mean here - you say that the addresses both
> have addresses 0x1 and 0x81 but map to address 0x1. What does the 0x81
> refer to? The comments in the driver seemed to indicate that there was
> a single address which mapped to multiple underlying registers...
Hi,
I was referring to an example in da9063-i2c.c where they have
these two registers:
#define DA9063_REG_STATUS_A 0x01
#define DA9063_REG_SEQ 0x81
To access one or the other, you must select page 0 or 1 in page config
selection register at address 0x00. It makes sense to me for this case.
But for the sc16is7xx, for example you have these two
independent registers, sharing the exact same address:
#define SC16IS7XX_IIR_REG (0x02) /* Interrupt Identification */
#define SC16IS7XX_FCR_REG (0x02) /* FIFO control */
I am not sure if regmap range can be used with this configuration.
Assuming regmap range would be properly setup, when we call
regmap_read(regmap, SC16IS7XX_IIR_REG, &val), how does regmap would
know that we want to access SC16IS7XX_IIR_REG and not SC16IS7XX_FCR_REG?
> Searching for struct regmap_range_cfg should show a lot of users in
> mainline.
Yes, I am trying to find a good example but I must download and read the
datasheet for each one. If you could point to an IC/driver that uses
regmap_range similar to IC sc16is7xx, it would really help.
Thank you
Hugo Villeneuve
Powered by blists - more mailing lists