pinctrl: copy per-pin driver private data to struct pin_desc
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Wed, 25 May 2016 05:09:31 +0000 (14:09 +0900)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 31 May 2016 08:27:19 +0000 (10:27 +0200)
commitcd8f61f1e52b33766639e28a042d717d1e069d4f
tree801bb36205960e6c26028de592a15a2bd54d36c6
parentcf9d994dcf00c09c73eb686e239ab6449a248719
pinctrl: copy per-pin driver private data to struct pin_desc

Currently, struct pinctrl_pin_desc can have per-pin driver private
data, but it is not copied to struct pin_desc.

For a driver with sparse pin space, for-loop search like below would
be necessary in order to get the driver-specific data for a desired
pin number.

  for (i = 0; i < pctldev->desc->npins; i++)
          if (pin_number == pctldev->desc->pins[i].number)
                  return pctldev->desc->pins[i].drv_data;

This is not efficient for a driver with a large number of pins.
So, copy the data to struct pin_desc when each pin is registered
for the faster radix tree lookup.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/core.c
drivers/pinctrl/core.h