On 07/17/2014 12:41 PM, Thierry Reding wrote:
On Thu, Jul 17, 2014 at 11:17:23AM +0100, Mark Brown wrote:
On Thu, Jul 17, 2014 at 05:55:36PM +0900, Alexandre Courbot wrote:
Right. It may very well be that a single flag specifier (as opposed to an array) will be enough for this case. If you need to request some GPIOs as input and some other as output then they are clearly different functions and requesting them together would be an abuse of the API.
Not so sure about that - what about requesting GPIOs for a bidirectional bus? Thinking about SPI bitbanging here.
Wouldn't you want to use a different means that the gpiod_array_*() API to handle those cases? gpiod_array_*() is probably most useful to handle bulk operations on a set of GPIOs that do essentially the same thing. If you get and then need to index into that array to handle them all differently then you don't gain very much.
I think the goal of a gpiod_array_* API should be to make requesting multiple GPIOs that are used by a driver as convenient as possible and at the same time reduce the amount of boiler plate code necessary. E.g compare
gpios[0] = gpio_get(...); if (IS_ERR(gpios[0])) { ret = PTR_ERR(gpios[0]); goto cleanup; }
gpios[1] = gpio_get(...); if (IS_ERR(gpios[1])) { ret = PTR_ERR(gpios[1]); goto cleanup; }
gpios[2] = gpio_get(...); if (IS_ERR(gpios[2])) { ret = PTR_ERR(gpioss[2]); goto cleanup; }
with
ret = gpio_array_get(..., gpios); if (ret) goto err_cleanup;
- Lars