*参照元 [#a37eeac5] #backlinks *説明 [#l34eaf78] -パス: [[linux-4.4.1/drivers/gpio/gpiolib.c]] -FIXME: これは何? --説明 **引数 [#nec0b631] -struct gpio_chip *chip -- --[[linux-4.4.1/gpio_chip]] -struct pinctrl_dev *pctldev -- --[[linux-4.4.1/pinctrl_dev]] -unsigned int gpio_offset -- -const char *pin_group -- **返り値 [#ndea4724] -int -- **参考 [#zddc35cf] *実装 [#z71d9d8a] /** * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping * @chip: the gpiochip to add the range for * @pctldev: the pin controller to map to * @gpio_offset: the start offset in the current gpio_chip number space * @pin_group: name of the pin group inside the pin controller */ int gpiochip_add_pingroup_range(struct gpio_chip *chip, struct pinctrl_dev *pctldev, unsigned int gpio_offset, const char *pin_group) { struct gpio_pin_range *pin_range; int ret; - --[[linux-4.4.1/gpio_pin_range]] pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL); if (!pin_range) { chip_err(chip, "failed to allocate pin ranges\n"); return -ENOMEM; } - --[[linux-4.4.1/kzalloc()]] --[[linux-4.4.1/chip_err()]] /* Use local offset as range ID */ pin_range->range.id = gpio_offset; pin_range->range.gc = chip; pin_range->range.name = chip->label; pin_range->range.base = chip->base + gpio_offset; pin_range->pctldev = pctldev; ret = pinctrl_get_group_pins(pctldev, pin_group, &pin_range->range.pins, &pin_range->range.npins); if (ret < 0) { kfree(pin_range); return ret; } - --[[linux-4.4.1/pinctrl_get_group_pins()]] --[[linux-4.4.1/kfree()]] pinctrl_add_gpio_range(pctldev, &pin_range->range); - --[[linux-4.4.1/pinctrl_add_gpio_range()]] chip_dbg(chip, "created GPIO range %d->%d ==> %s PINGRP %s\n", gpio_offset, gpio_offset + pin_range->range.npins - 1, pinctrl_dev_get_devname(pctldev), pin_group); - --[[linux-4.4.1/chip_dbg()]] --[[linux-4.4.1/pinctrl_dev_get_devname()]] list_add_tail(&pin_range->node, &chip->pin_ranges); - --[[linux-4.4.1/list_add_tail()]] return 0; } EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range); - --[[linux-4.4.1/EXPORT_SYMBOL_GPL()]] *コメント [#e8f4dbad]