diff options
Diffstat (limited to 'drivers/pinctrl')
-rw-r--r-- | drivers/pinctrl/nomadik/pinctrl-abx500.c | 43 |
1 files changed, 5 insertions, 38 deletions
diff --git a/drivers/pinctrl/nomadik/pinctrl-abx500.c b/drivers/pinctrl/nomadik/pinctrl-abx500.c index b0289824cf73..be95f5e68c01 100644 --- a/drivers/pinctrl/nomadik/pinctrl-abx500.c +++ b/drivers/pinctrl/nomadik/pinctrl-abx500.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include "pinctrl-abx500.h" | 34 | #include "pinctrl-abx500.h" |
35 | #include "../core.h" | 35 | #include "../core.h" |
36 | #include "../pinconf.h" | 36 | #include "../pinconf.h" |
37 | #include "../pinctrl-utils.h" | ||
37 | 38 | ||
38 | /* | 39 | /* |
39 | * The AB9540 and AB8540 GPIO support are extended versions | 40 | * The AB9540 and AB8540 GPIO support are extended versions |
@@ -827,41 +828,6 @@ static void abx500_pin_dbg_show(struct pinctrl_dev *pctldev, | |||
827 | chip->base + offset - 1); | 828 | chip->base + offset - 1); |
828 | } | 829 | } |
829 | 830 | ||
830 | static void abx500_dt_free_map(struct pinctrl_dev *pctldev, | ||
831 | struct pinctrl_map *map, unsigned num_maps) | ||
832 | { | ||
833 | int i; | ||
834 | |||
835 | for (i = 0; i < num_maps; i++) | ||
836 | if (map[i].type == PIN_MAP_TYPE_CONFIGS_PIN) | ||
837 | kfree(map[i].data.configs.configs); | ||
838 | kfree(map); | ||
839 | } | ||
840 | |||
841 | static int abx500_dt_reserve_map(struct pinctrl_map **map, | ||
842 | unsigned *reserved_maps, | ||
843 | unsigned *num_maps, | ||
844 | unsigned reserve) | ||
845 | { | ||
846 | unsigned old_num = *reserved_maps; | ||
847 | unsigned new_num = *num_maps + reserve; | ||
848 | struct pinctrl_map *new_map; | ||
849 | |||
850 | if (old_num >= new_num) | ||
851 | return 0; | ||
852 | |||
853 | new_map = krealloc(*map, sizeof(*new_map) * new_num, GFP_KERNEL); | ||
854 | if (!new_map) | ||
855 | return -ENOMEM; | ||
856 | |||
857 | memset(new_map + old_num, 0, (new_num - old_num) * sizeof(*new_map)); | ||
858 | |||
859 | *map = new_map; | ||
860 | *reserved_maps = new_num; | ||
861 | |||
862 | return 0; | ||
863 | } | ||
864 | |||
865 | static int abx500_dt_add_map_mux(struct pinctrl_map **map, | 831 | static int abx500_dt_add_map_mux(struct pinctrl_map **map, |
866 | unsigned *reserved_maps, | 832 | unsigned *reserved_maps, |
867 | unsigned *num_maps, const char *group, | 833 | unsigned *num_maps, const char *group, |
@@ -958,7 +924,8 @@ static int abx500_dt_subnode_to_map(struct pinctrl_dev *pctldev, | |||
958 | 924 | ||
959 | reserve *= ret; | 925 | reserve *= ret; |
960 | 926 | ||
961 | ret = abx500_dt_reserve_map(map, reserved_maps, num_maps, reserve); | 927 | ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps, |
928 | num_maps, reserve); | ||
962 | if (ret < 0) | 929 | if (ret < 0) |
963 | goto exit; | 930 | goto exit; |
964 | 931 | ||
@@ -999,7 +966,7 @@ static int abx500_dt_node_to_map(struct pinctrl_dev *pctldev, | |||
999 | ret = abx500_dt_subnode_to_map(pctldev, np, map, | 966 | ret = abx500_dt_subnode_to_map(pctldev, np, map, |
1000 | &reserved_maps, num_maps); | 967 | &reserved_maps, num_maps); |
1001 | if (ret < 0) { | 968 | if (ret < 0) { |
1002 | abx500_dt_free_map(pctldev, *map, *num_maps); | 969 | pinctrl_utils_dt_free_map(pctldev, *map, *num_maps); |
1003 | return ret; | 970 | return ret; |
1004 | } | 971 | } |
1005 | } | 972 | } |
@@ -1013,7 +980,7 @@ static const struct pinctrl_ops abx500_pinctrl_ops = { | |||
1013 | .get_group_pins = abx500_get_group_pins, | 980 | .get_group_pins = abx500_get_group_pins, |
1014 | .pin_dbg_show = abx500_pin_dbg_show, | 981 | .pin_dbg_show = abx500_pin_dbg_show, |
1015 | .dt_node_to_map = abx500_dt_node_to_map, | 982 | .dt_node_to_map = abx500_dt_node_to_map, |
1016 | .dt_free_map = abx500_dt_free_map, | 983 | .dt_free_map = pinctrl_utils_dt_free_map, |
1017 | }; | 984 | }; |
1018 | 985 | ||
1019 | static int abx500_pin_config_get(struct pinctrl_dev *pctldev, | 986 | static int abx500_pin_config_get(struct pinctrl_dev *pctldev, |