On Tue, Nov 05, 2019 at 10:04:22AM +0800, Kent Gibson wrote: > Patches are against Bart's gpio/for-kent branch[1]. > > The patch has been successfully tested against gpio-mockup, and > on a Raspberry Pi, in both cases using the feature/pud_set_config > branch of my Go gpiod library[2], as well as with my feature/pud > development branch of libgpiod[3]. Patch 7 has only been tested using > my gpiod library as libgpiod has not yet been updated to support the > SET_CONFIG ioctl. > I've just pushed a first pass at SET_CONFIG support into my libgpiod feature/pud branch. It is causing me a bit of grief. Due to the way the libgpiod API is structured, with the direction flags pulled out into the request type, I thought it would be cleaner to keep changes to direction orthogonal to changes to the other handle flags. So I've added these methods to the API: int gpiod_line_set_config(struct gpiod_line *line, int flags) int gpiod_line_set_direction_input(struct gpiod_line *line) int gpiod_line_set_direction_output(struct gpiod_line *line, int value) along with their bulk equivalents. I've coded that and started adding tests when I tripped over changing bias. The kernel requires a direction to be set, but I'm setting it as-is in gpiod_line_set_config - so that wont work. Open drain/source are in the same boat - they require output mode. I see these options: 1. set the direction as part of gpiod_line_set_config 2. relax the kernel restriction. 3. don't support changing bias or open source/drain. 4. rethink the API. The first option requires caching the value set for outputs which I'm a bit hesitant to do, though I'm not sure why - I've already added caching of the handle flags for the direction functions. Any preferences or suggestions? Cheers, Kent.