On Tue, Apr 09, 2024 at 02:21:24PM +0100, Charles Keepax wrote: > SPI devices can specify a cs-gpios property to enumerate their > chip selects. Under device tree, a zero entry in this property can > be used to specify that a particular chip select is using the SPI > controllers native chip select, for example: > > cs-gpios = <&gpio1 0 0>, <0>; > > Here the second chip select is native. However, when using swnodes > there is currently no way to specify a native chip select. The > proposal here is to register a swnode_gpio_undefined software node, > that can be specified to allow the indication of a native chip > select. For example: > > static const struct software_node_ref_args device_cs_refs[] = { > { > .node = &device_gpiochip_swnode, > .nargs = 2, > .args = { 0, GPIO_ACTIVE_LOW }, > }, > { > .node = &swnode_gpio_undefined, > .nargs = 0, > }, > }; > > Register the swnode as the gpiolib is initialised and > check in swnode_get_gpio_device if the returned node matches swnode_get_gpio_device() > swnode_gpio_undefined and return -ENOENT, which matches the behaviour > of the device tree system when it encounters a 0 phandle. ... > +config GPIO_SWNODE_UNDEFINED > + bool "Undefined swnode GPIOs" Why is this user visible? > + help > + This adds a special place holder for software nodes to contain an > + undefined GPIO reference, this is primarily used by SPI to allow a > + list of GPIO chip selects to mark a certain chip select as being > + controlled the SPI device's internal chip select mechanism and not > + a GPIO. How are drivers supposed to work in case this is not selected? ... > +EXPORT_SYMBOL_NS_GPL(swnode_gpio_undefined, GPIO_SWNODE); + export.h > +static int __init swnode_gpio_init(void) + init.h > + pr_err("gpiolib: failed to register swnode: %d\n", ret); + printk.h -- With Best Regards, Andy Shevchenko