On Tue, Nov 05, 2019 at 10:04:22AM +0800, Kent Gibson wrote: > This series adds gross control o:f pull-up/pull-down to the GPIO uAPI. > Gross control means enabling and disabling of bias functionality, > not finer grained control such as setting biasing impedances. > > The support allows both input and output lines to have any one of the > following biases applied as part of the line handle or event request: > 0. As Is - bias is left alone. This is the default for ABI compatibility. > 1. Bias Disable - bias is explicitly disabled. > 2. Pull Down - pull-down bias is enabled. > 3. Pull Up - pull-up bias is enabled. > > The biases are set via three flags, BIAS_DISABLE, BIAS_PULL_DOWN > and BIAS_PULL_UP. These map directly to the similarly named > pinctrl pin_config_param flags. > As Is corresponds to none of the flags being set. I had been looking at how to make these flags work on the BeagleBone (TI Sitara AM3358 SoC) which uses the gpio-omap driver and pinctrl-single driver. Howeverm, it seems that it is not posssible as the BeagleBone device tree uses compatible of "pinctrl-single" instead of "padconf-single", and thus pcs_pinconf_set() is not called [0]. The bias flags already work on the Raspberry Pi as the Broadcom SoC uses pinctrl-bcm2835.c which uses gpiochip_generic_config() from gpiolib.c for .set_config in bcm2835_gpio_chip. This eventually calls bcm2835_pinconf_set() which handles the PIN_CONFIG_BIAS_* flags. Thus, I started thinking about what other boards I could test the bias flags with, and potentially, find drivers that I could add or fix support. The PIN_CONFIG_BIAS_* flags exist in these GPIO drivers: gpio-aspeed.c: aspeed seems to be used in server BMC so not hardware that I have access to or could easily acquire. gpio-mockup.c: mockup driver that has already been tested and works gpio-pca953x.c: an external I2C GPIO expander, easy for me to acquire, it appears that gpio uapi bias flags should work, but I could test and verify gpiolib.c: like the bmc2835 in the raspberry pi, it seems some drivers in pinctrl directory will define a gpiochip and use gpiochip_generic_config(). Here is a list of other pinctrl drivers which use gpiochip_generic_config: drivers/pinctrl/pinctrl-stmfx.c and drivers/pinctrl/pinctrl-sx150x.c: These are both GPIO expanders which I could probably purchase drivers/pinctrl/intel/pinctrl-intel.c: Maybe this means that I could try this on x86 boards? drivers/pinctrl/sunxi/pinctrl-sunxi.c Maybe the Allwinner boards might work too? Any other hardware that I should take a look at testing? Thanks, Drew [0] https://lore.kernel.org/linux-gpio/20200413123921.GA32586@x1/T/#t