gpiod_get_index_optional(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ gpiod_get_index_optional ✨

okay so bestie, welcome to the Kernel API Manual πŸ’… this is the page for gpiod_get_index_optional(9) and honestly? it's giving "i handle optional things so you don't have to" ✨


🌸 NAME 🌸

gpiod_get_index_optional β€” obtain an optional GPIO from a multi-index GPIO function πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

struct gpio_desc * gpiod_get_index_optional (struct device *dev , const
char *con_id , unsigned int index , enum gpiod_flags flags );

πŸ’– ARGUMENTS πŸ’–

  • dev β€” the GPIO consumer, and yes bestie it can be NULL for system-global GPIOs πŸ‘‘
  • con_id β€” the function within the GPIO consumer, like which vibe this GPIO is serving 🌈
  • index β€” the index of the GPIO to obtain in the consumer, iykyk 🧚
  • flags β€” optional GPIO initialization flags, the little settings bestie πŸŽ€

πŸ”₯ DESCRIPTION πŸ”₯

So this function is literally equivalent to gpiod_get_index, except β€” and this is the main character moment β€” when no GPIO with the specified index was assigned to the requested function, it will return NULL πŸ’€

That's it. That's the whole flex. It's convenient for drivers that need to handle optional GPIOs, so like, if the GPIO isn't there? no drama, no crash, just NULL and you move on with your life ✨

Not me being obsessed with how chill that is 🫢


⭐ RETURN ⭐

so what do you get back, bestie? a few possibilities:

  • A valid GPIO descriptor πŸ‘‘ (slay)
  • NULL if no GPIO has been assigned to the requested function and/or index 😌 (the optional vibe check failing, no cap)
  • or another IS_ERR code if an error occurred while trying to acquire the GPIO πŸ’€ (something went wrong, fr fr)
ok but seriously β€” don't just check for NULL, check for IS_ERR too, because errors are a whole different thing and you don't want to be caught lacking πŸ™ˆ

🌟 SEE ALSO 🌟

okay so this list is LONG but every single one of these is important so we're listing them all, periodt πŸ’… the kernel file is ./drivers/gpio/gpiolib.c and here is the whole friend group:

gpio_to_desc(9), gpio_device_get_desc(9), desc_to_gpio(9), gpiod_hwgpio(9), gpiod_to_chip(9), gpiod_to_gpio_device(9), gpio_device_get_base(9), gpio_device_get_label(9), gpio_device_get_chip(9), gpiochip_find_base_unlocked(9), gpiod_is_equal(9), gpiod_get_direction(9), gpiod_is_single_ended(9), gpiochip_query_valid_mask(9), gpiochip_get_data(9), gpiochip_remove(9), gpio_device_find(9), gpio_device_find_by_label(9), gpio_device_find_by_fwnode(9), gpio_device_get(9), gpio_device_put(9), gpio_device_to_device(9), gpiochip_set_hierarchical_irqchip(9), gpiochip_irq_domain_activate(9), gpiochip_irq_domain_deactivate(9), gpiochip_irq_map(9), gpiochip_add_irqchip(9), gpiochip_irqchip_remove(9), gpiochip_irqchip_add_domain(9), gpiochip_generic_request(9), gpiochip_generic_free(9), gpiochip_generic_config(9), gpiochip_add_pingroup_range(9), gpiochip_add_pin_range_with_pins(9), gpiochip_remove_pin_ranges(9), gpiochip_dup_line_label(9), gpiochip_request_own_desc(9), gpiochip_free_own_desc(9), gpio_set_debounce_timeout(9), gpiod_direction_input(9), gpiod_direction_output_raw(9), gpiod_direction_output(9), gpiod_enable_hw_timestamp_ns(9), gpiod_disable_hw_timestamp_ns(9), gpiod_set_config(9), gpiod_set_debounce(9), gpiod_set_transitory(9), gpiod_is_active_low(9), gpiod_toggle_active_low(9), gpiod_get_raw_value(9), gpiod_get_value(9), gpiod_get_raw_array_value(9), gpiod_get_array_value(9), gpiod_set_raw_value(9), gpiod_set_value_nocheck(9), gpiod_set_value(9), gpiod_set_raw_array_value(9), gpiod_set_array_value(9), gpiod_cansleep(9), gpiod_set_consumer_name(9), gpiod_is_shared(9), gpiod_to_irq(9), gpiochip_lock_as_irq(9), gpiochip_unlock_as_irq(9), gpiod_get_raw_value_cansleep(9), gpiod_get_value_cansleep(9), gpiod_get_raw_array_value_cansleep(9), gpiod_get_array_value_cansleep(9), gpiod_set_raw_value_cansleep(9), gpiod_set_value_cansleep(9), gpiod_set_raw_array_value_cansleep(9), gpiod_add_lookup_tables(9), gpiod_set_array_value_cansleep(9), gpiod_add_lookup_table(9), gpiod_remove_lookup_table(9), fwnode_gpiod_get_index(9), gpiod_count(9), gpiod_get(9), gpiod_get_optional(9), gpiod_configure_flags(9), gpiod_get_index(9), gpiod_hog(9), gpiochip_free_hogs(9), gpiod_get_array(9), gpiod_get_array_optional(9), gpiod_put(9), gpiod_put_array(9)

like, that's the whole contact list bestie, all the GPIO besties you could ever need πŸ’œ


and that's the page! πŸŽ€ from ./drivers/gpio, Kernel API Manual, dated October 2026 β€” go get your optional GPIOs bestie, you got this, periodt βœ¨πŸ’…πŸ‘‘

πŸ“¦ where this page comes from