Re: [PATCH] nvmem: core: Mark nWP GPIO as non-exclusive
Marek Vasut <[email protected]> Thu, 23 Jul 2026 21:35:27 +0200
| Newsgroups | org.kernel.vger.linux-i2c,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 5/12/26 12:04 PM, Bartosz Golaszewski wrote: > On Mon, May 11, 2026 at 6:35 PM Marek Vasut <[email protected]> wrote: >> >> Mark the nWP GPIO as non-exclusive, because there is hardware in the >> field which has multiple AT24 EEPROMs with nWP GPIO line tied to a >> single GPIO. This allows such hardware to be described in DT and the >> nWP GPIO operated via NVMEM force_ro sysfs attribute. >> >> Note that GPIOD_FLAGS_BIT_NONEXCLUSIVE is a deprecated flag and should >> not be used, but thus far there seems to be no replacement. >> > > There is a replacement now. It lives under > drivers/gpio/gpiolib-shared.c and drivers/gpio/gpio-shared-proxy.c. > Though the voting mechanism I implemented is hard-coded to drive the > line high if there's at least one consumer sharing the line that votes > high. I'm now thinking that this may be too rigid as yesterday, within > two hours I had two submissions wanting to do it the other way around > - drive the line low if there's at least one consumer that wants it > low. > > I'll try to modify the gpio-shared-proxy driver to take into account > the value set when the line is first requested and treat it as the > "default" in the voting mechanism. IOW: when the first user requests > it out-high, we'll drive it low on the first user that votes for low > and drive it high again when the last user drivers it high. This > should work for both the Qualcomm shared GPIOs for audio use-cases and > the WP pin here as well as the SCL recovery shared GPIO we have in > I2C. > > With that said: I'd prefer you not set the > GPIOD_FLAGS_BIT_NONEXCLUSIVE and see if you can make gpio-shared-proxy > work for you instead. I'll submit something soon for you to test. I'm sorry for my late reply, I was completely overwhelmed by emails. I tried to look into the gpio-shared* , but I couldn't figure out how to describe it in DT. Do you have any examples? Take for example this DT snippet: gpio: gpio-controller { ... }; i2c { eeprom@0 { wp-gpios = <&gpio 0 0>; ... }; eeprom@1 { wp-gpios = <&gpio 0 0>; ... }; }; I assume there has to be some new glue node between the eeproms and the GPIO controller somewhere ? Thank you for your help ! -- Best regards, Marek Vasut