参照元

説明

引数

返り値

参考

実装

/**
 * 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;
        pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
        if (!pin_range) {
                chip_err(chip, "failed to allocate pin ranges\n");
                return -ENOMEM;
        }
        /* 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;
        }
        pinctrl_add_gpio_range(pctldev, &pin_range->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);
        list_add_tail(&pin_range->node, &chip->pin_ranges);
        return 0;
}
EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-05-19 (木) 09:58:40