From: "Yu-Chun Lin [林祐君]" <eleanor.lin@realtek.com>
To: Andy Shevchenko <andriy.shevchenko@intel.com>,
Michael Walle <mwalle@kernel.org>
Cc: "Michael.Hennerich@analog.com" <Michael.Hennerich@analog.com>,
"afaerber@suse.com" <afaerber@suse.com>,
"andy@kernel.org" <andy@kernel.org>,
"brgl@kernel.org" <brgl@kernel.org>,
"conor+dt@kernel.org" <conor+dt@kernel.org>,
"CY_Huang[黃鉦晏]" <cy.huang@realtek.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"dlechner@baylibre.com" <dlechner@baylibre.com>,
"James Tai [戴志峰]" <james.tai@realtek.com>,
"jic23@kernel.org" <jic23@kernel.org>,
"krzk+dt@kernel.org" <krzk+dt@kernel.org>,
"lars@metafoo.de" <lars@metafoo.de>,
"linus.walleij@linaro.org" <linus.walleij@linaro.org>,
"linusw@kernel.org" <linusw@kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-realtek-soc@lists.infradead.org"
<linux-realtek-soc@lists.infradead.org>,
"mathieu.dubois-briand@bootlin.com"
<mathieu.dubois-briand@bootlin.com>,
"nuno.sa@analog.com" <nuno.sa@analog.com>,
"robh@kernel.org" <robh@kernel.org>,
"Stanley Chang[昌育德]" <stanley_chang@realtek.com>,
"TY_Chang[張子逸]" <tychang@realtek.com>,
"wbg@kernel.org" <wbg@kernel.org>
Subject: RE: [PATCH v3 3/7] gpio: regmap: Add gpio_regmap_operation and write-enable support
Date: Thu, 16 Jul 2026 10:47:56 +0000 [thread overview]
Message-ID: <9ee344c1d9c642bdb7d3b85bc922fe66@realtek.com> (raw)
In-Reply-To: <alim_HGTD5RCupav@ashevche-desk.local>
Hi Andy and Michael,
> On Thu, Jul 16, 2026 at 11:08:55AM +0200, Michael Walle wrote:
> > On Thu Jul 16, 2026 at 10:27 AM CEST, Andy Shevchenko wrote:
> > > On Thu, Jul 16, 2026 at 02:26:14PM +0800, Yu-Chun Lin wrote:
>
> ...
>
> > > From the above list I tend to the approach 2, but this might require
> > > to have GPIO regmap level of locking. I'm a bit lost in the context,
> > > though. I assume we need a fresh start, id est issue a v6 with
> > > approach 2 or 3 in place and summarize the choices in the cover
> > > letter, so we can understand what has been considered.
> >
> > I don't really like approach 3. You'd need to check if the regs of
> > both xlate calls are the same. With the sample code above, you
> > silently drop the first xlate'd reg.
>
> If I rank the proposals, the worst is #1, the best is #2.
>
> > And honestly, it really seems like a one-off. What controllers, are
> > there that need a write enable bit. The real problem seems to be the
> > assumption that we operate on just one bit. IOW we either set mask or
> > don't set mask in gpio_regmap_set().
>
> Yes, we should KISS.
>
> > For a more generic solution, we should be able to control the written
> > value. We could add another .value_xlate().
>
> Maybe not now? As per IPs, Synopsys IPs (not exactly GPIO) likes to have that
> kind of "protection". So, from HW perspective it's kinda pattern, and it might
> be possible to see more IPs (including GPIO) that follow it in some cases.
>
> --
> With Best Regards,
> Andy Shevchenko
>
I checked with our internal hardware engineers. The WREN bit was designed to
avoid race conditions, which requires both the data bit and the WREN bit to be
updated simultaneously within the same register.
I have a new idea that might be similar to Michael's suggestion. We can
introduce a new callback to allow the driver to intercept and modify the
mask and the value. By doing so, the driver can determine the corresponding
WREN bit based on the original mask, and assemble the WREN bit into this new
callback function right before the final write API is executed.
The idea looks like:
static void gpio_regmap_set(struct gpio_chip *chip, unsigned int offset,
int val)
{
struct gpio_regmap *gpio = gpiochip_get_data(chip);
unsigned int base = gpio_regmap_addr(gpio->reg_set_base);
unsigned int reg, mask, mask_val, wren_reg, wren_mask;
int ret;
ret = gpio->reg_mask_xlate(gpio, GPIO_REGMAP_SET_OP, base, offset, ®, &mask);
if (ret)
return;
if (val)
mask_val = mask;
else
mask_val = 0;
/* Let the driver modify the mask and mask_val to include WREN */
if (gpio->value_xlate) {
ret = gpio->value_xlate(&mask, &mask_val);
if (ret)
return ret;
}
/* ignore input values which shadow the old output value */
if (gpio->reg_dat_base == gpio->reg_set_base)
ret = regmap_write_bits(gpio->regmap, reg, mask, mask_val);
else
ret = regmap_update_bits(gpio->regmap, reg, mask, mask_val);
return ret;
}
Best Regards,
Yu-Chun
next prev parent reply other threads:[~2026-07-16 10:49 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-12 3:33 [PATCH v3 0/7] gpio: realtek: Add support for Realtek DHC RTD1625 Yu-Chun Lin
2026-05-12 3:33 ` [PATCH v3 1/7] gpio: Replace "default y" with "default ARCH_REALTEK" in Kconfig Yu-Chun Lin
2026-05-12 3:33 ` [PATCH v3 2/7] gpio: regmap: add gpio_regmap_get_gpiochip() accessor Yu-Chun Lin
2026-05-12 11:20 ` Andy Shevchenko
2026-05-25 12:04 ` Yu-Chun Lin [林祐君]
2026-06-03 0:34 ` Andy Shevchenko
2026-06-08 14:10 ` Bartosz Golaszewski
2026-06-08 14:41 ` Michael Walle
2026-06-17 8:36 ` Yu-Chun Lin [林祐君]
2026-06-17 8:44 ` Michael Walle
2026-06-17 9:54 ` Yu-Chun Lin [林祐君]
2026-06-17 11:19 ` Michael Walle
2026-06-19 21:08 ` Linus Walleij
2026-06-22 10:35 ` Andy Shevchenko
2026-06-30 13:21 ` Linus Walleij
2026-07-01 8:44 ` Michael Walle
2026-07-01 10:01 ` Andy Shevchenko
2026-07-01 10:55 ` Andy Shevchenko
2026-07-01 11:38 ` Andy Shevchenko
2026-07-01 11:42 ` Michael Walle
2026-07-01 12:03 ` Andy Shevchenko
2026-07-01 11:38 ` Michael Walle
2026-07-01 12:08 ` Andy Shevchenko
2026-05-12 3:33 ` [PATCH v3 3/7] gpio: regmap: Add gpio_regmap_operation and write-enable support Yu-Chun Lin
2026-05-12 11:26 ` Andy Shevchenko
2026-05-12 14:37 ` Jonathan Cameron
2026-07-09 17:21 ` Yu-Chun Lin [林祐君]
2026-07-16 6:26 ` Yu-Chun Lin
2026-07-16 7:15 ` Michael Walle
2026-07-16 8:27 ` Andy Shevchenko
2026-07-16 9:08 ` Michael Walle
2026-07-16 9:40 ` Andy Shevchenko
2026-07-16 10:47 ` Yu-Chun Lin [林祐君] [this message]
2026-07-16 11:03 ` Michael Walle
2026-07-16 11:21 ` Yu-Chun Lin [林祐君]
2026-07-16 11:42 ` Michael Walle
2026-07-16 12:08 ` Yu-Chun Lin [林祐君]
2026-07-16 10:55 ` Michael Walle
2026-05-13 4:01 ` sashiko-bot
2026-05-13 7:40 ` Linus Walleij
2026-05-12 3:33 ` [PATCH v3 4/7] gpio: regmap: Add set_config callback Yu-Chun Lin
2026-05-12 18:12 ` Andy Shevchenko
2026-05-13 4:23 ` sashiko-bot
2026-05-12 3:33 ` [PATCH v3 5/7] dt-bindings: gpio: realtek: Add realtek,rtd1625-gpio Yu-Chun Lin
2026-05-13 4:26 ` sashiko-bot
2026-05-12 3:33 ` [PATCH v3 6/7] gpio: realtek: Add driver for Realtek DHC RTD1625 SoC Yu-Chun Lin
2026-05-12 18:50 ` Andy Shevchenko
2026-05-13 4:56 ` sashiko-bot
2026-05-12 3:33 ` [PATCH v3 7/7] arm64: dts: realtek: Add GPIO support for RTD1625 Yu-Chun Lin
2026-05-13 5:40 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9ee344c1d9c642bdb7d3b85bc922fe66@realtek.com \
--to=eleanor.lin@realtek.com \
--cc=Michael.Hennerich@analog.com \
--cc=afaerber@suse.com \
--cc=andriy.shevchenko@intel.com \
--cc=andy@kernel.org \
--cc=brgl@kernel.org \
--cc=conor+dt@kernel.org \
--cc=cy.huang@realtek.com \
--cc=devicetree@vger.kernel.org \
--cc=dlechner@baylibre.com \
--cc=james.tai@realtek.com \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=linus.walleij@linaro.org \
--cc=linusw@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-realtek-soc@lists.infradead.org \
--cc=mathieu.dubois-briand@bootlin.com \
--cc=mwalle@kernel.org \
--cc=nuno.sa@analog.com \
--cc=robh@kernel.org \
--cc=stanley_chang@realtek.com \
--cc=tychang@realtek.com \
--cc=wbg@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.