gpiochip_add_pingroup_range(9)
π gpiochip_add_pingroup_range(9) β the Kernel API Manual page, bestie edition β¨
okay so this is a kernel API manual page (gpiochip_add_pingroup_range(9), section 9, kernel devs only, no userspace girlies here) and it's lowkey a whole vibe. Let's get into it π
β¨ NAME β¨
gpiochip_add_pingroup_range β the function that adds a range for the whole GPIO <-> pin mapping situation π¦
πΈ SYNOPSIS πΈ
int gpiochip_add_pingroup_range (struct gpio_chip *gc , struct
pinctrl_dev *pctldev , unsigned int gpio_offset , const char *pin_group
);
bestie it returns an int, and here's the exact signature, character for character, don't @ me:
int gpiochip_add_pingroup_range(struct gpio_chip *gc,
struct pinctrl_dev *pctldev,
unsigned int gpio_offset,
const char *pin_group);
(i know, i know β the original line-wraps it weirdly. the parameters and types are exactly the same either way π«Ά)
π ARGUMENTS π
gcβ thegpiochipyou're adding the range for. it's the main character in this story πpctldevβ the pin controller you want to map to. the love interest, if you will πgpio_offsetβ the start offset, in the currentgpio_chipnumber space. note the "current" and note the "number space", those words are doing heavy lifting and they are iconic β¨pin_groupβ the name of the pin group inside the pin controller. it's aconst char *, so like, don't go mutating it π
π DESCRIPTION π
so here's the tea, and it's kind of a big deal: calling this function directly from a DeviceTree-supported pinctrl driver is DEPRECATED. like, capital-letters deprecated, fr fr π
instead, please see Section 2.1 of Documentation/devicetree/bindings/gpio/gpio.txt on how to bind pinctrl and gpio drivers via the "gpio-ranges" property. that's the way, that's the path, that's the move π§
bestie do NOT just raw-call this from your DT-supported pinctrl driver. the docs said deprecated and the docs do not lie π read the doc file first, it's giving responsible adult energy and honestly? it slays.
β RETURN β
0on success π (slay)- negative
errnoon failure π (not slay, check your errno)
π₯ SEE ALSO π₯
the kernel file ./drivers/gpio/gpiolib.c, plus this absolutely enormous friend group of manpages that all showed up to the party:
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_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_get_index_optional(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?? ninety-something cross-references?? that's not a SEE ALSO that's a whole group chat π and every single one of them made the list, bestie, i counted (i didn't count but they're all there, promise π«Ά)
and that's the page!! π β¨
cute lil sign-off: this masterpiece lives in ./drivers/gpio, and the version/date stamp on it is October 2026 β so yeah, it's from the future, it's giving time traveler energy, we stan a forward-dated manpage π¦ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms