Re: [RFC] gpio: add set_active_low() function to gpio_chip
On Wed, Mar 18, 2015 at 9:16 PM, David Cohen wrote: > +++ b/drivers/gpio/gpiolib-sysfs.c > @@ -289,11 +289,15 @@ static DEVICE_ATTR(edge, 0644, gpio_edge_show, > gpio_edge_store); > static int sysfs_set_active_low(struct gpio_desc *desc, struct device *dev, > int value) > { > + struct gpio_chip*chip = desc->chip; > int status = 0; > > if (!!test_bit(FLAG_ACTIVE_LOW, &desc->flags) == !!value) > return 0; > > + if (chip->set_active_low) > + chip->set_active_low(chip, gpio_chip_hwgpio(desc), value); > + > if (value) > set_bit(FLAG_ACTIVE_LOW, &desc->flags); Since the only user seems to be this abominable sysfs, and since that is definitely not on the hotpath due to context switching, this cannot possibly gain any performance benefits. Unless we can come up with a use case where this actually improves performance we should just let software handle this instead. I like to have all hardware features implemented usually, so I'm a bit torn. But this one lacks a plausible use case. It looks like some hardware engineers attempt to be helpful to software developers. Any takers? Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC] gpio: add set_active_low() function to gpio_chip
On 03/18/2015 08:07 PM, Alexandre Courbot wrote: On Thu, Mar 19, 2015 at 5:16 AM, David Cohen wrote: Some gpio controllers are capable of programming its pins' active-low state. Let's add this new gpio_chip function for such cases and use it in gpiolib. When set_active_low() is implemented, we no longer need to do soft flips on values from non-raw get functions. Signed-off-by: David Cohen --- Hi, This is a RFC, not meant for integration (yet). We have a GPIO controller that is capable of inverting the GPIO logical value on hardware using a register (and GPIO voltage level if configured for output): - If GPIO pin is configured for input, only the logical value is affected: the GPIO level stays the same but the read values are inverted (it affects even interrupt event triggers). - If GPIO pin is configured for output, the GPIO level is also inverted. Is it acceptable to expose this functionality via new gpio chip operation set_active_low()? At first I thought "why not", but then I couldn't help but ask "why?" Handling the active low state in software is basically free and requires no extra support. What is the benefit of handling it in hardware that would counterbalance the complexity this adds to the GPIO framework? Also, wouldn't that require us to reverse this active-low logic in the *_raw functions for them to work as expected? What happens when some generic driver starts to make use of this new API because it's convenient? Then that API has to work everywhere, including on chips that don't support this feature in HW. Then, we're back to emulating it in SW on those platforms. Given how trivial it is to emulate, shouldn't we emulate it everywhere, so that the code paths are identical everywhere? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [RFC] gpio: add set_active_low() function to gpio_chip
On Thu, Mar 19, 2015 at 5:16 AM, David Cohen wrote: > Some gpio controllers are capable of programming its pins' active-low > state. Let's add this new gpio_chip function for such cases and use it > in gpiolib. > > When set_active_low() is implemented, we no longer need to do soft flips > on values from non-raw get functions. > > Signed-off-by: David Cohen > --- > > Hi, > > This is a RFC, not meant for integration (yet). > > We have a GPIO controller that is capable of inverting the GPIO logical value > on hardware using a register (and GPIO voltage level if configured for > output): > - If GPIO pin is configured for input, only the logical value is affected: the > GPIO level stays the same but the read values are inverted (it affects even > interrupt event triggers). > - If GPIO pin is configured for output, the GPIO level is also inverted. > > Is it acceptable to expose this functionality via new gpio chip operation > set_active_low()? At first I thought "why not", but then I couldn't help but ask "why?" Handling the active low state in software is basically free and requires no extra support. What is the benefit of handling it in hardware that would counterbalance the complexity this adds to the GPIO framework? Also, wouldn't that require us to reverse this active-low logic in the *_raw functions for them to work as expected? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/