[PATCH 4/4] pinctrl: berlin: use the generic node to map function
Antoine Tenart
antoine.tenart at free-electrons.com
Mon Oct 20 01:04:20 PDT 2014
A generic node to map function has been added into the pinctrl
framework. It is provieded by GENERIC_PINCONF. Use it in the Berlin
pinctrl driver as it fits the needs.
Signed-off-by: Antoine Tenart <antoine.tenart at free-electrons.com>
---
drivers/pinctrl/berlin/Kconfig | 1 +
drivers/pinctrl/berlin/berlin.c | 53 ++---------------------------------------
2 files changed, 3 insertions(+), 51 deletions(-)
diff --git a/drivers/pinctrl/berlin/Kconfig b/drivers/pinctrl/berlin/Kconfig
index b18322bc7bf9..b38c0abf1790 100644
--- a/drivers/pinctrl/berlin/Kconfig
+++ b/drivers/pinctrl/berlin/Kconfig
@@ -2,6 +2,7 @@ if ARCH_BERLIN
config PINCTRL_BERLIN
bool
+ select GENERIC_PINCONF
select PINMUX
select REGMAP_MMIO
diff --git a/drivers/pinctrl/berlin/berlin.c b/drivers/pinctrl/berlin/berlin.c
index 86db2235ab00..da98efae8d8f 100644
--- a/drivers/pinctrl/berlin/berlin.c
+++ b/drivers/pinctrl/berlin/berlin.c
@@ -15,6 +15,7 @@
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_device.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/pinctrl/pinmux.h>
#include <linux/platform_device.h>
@@ -49,56 +50,6 @@ static const char *berlin_pinctrl_get_group_name(struct pinctrl_dev *pctrl_dev,
return pctrl->desc->groups[group].name;
}
-static int berlin_pinctrl_dt_node_to_map(struct pinctrl_dev *pctrl_dev,
- struct device_node *node,
- struct pinctrl_map **map,
- unsigned *num_maps)
-{
- struct berlin_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctrl_dev);
- struct property *prop;
- const char *function_name, *group_name;
- unsigned reserved_maps = 0;
- int ret, ngroups;
-
- *map = NULL;
- *num_maps = 0;
-
- ret = of_property_read_string(node, "function", &function_name);
- if (ret) {
- dev_err(pctrl->dev,
- "missing function property in node %s\n",
- node->name);
- return -EINVAL;
- }
-
- ngroups = of_property_count_strings(node, "groups");
- if (ngroups < 0) {
- dev_err(pctrl->dev,
- "missing groups property in node %s\n",
- node->name);
- return -EINVAL;
- }
-
- ret = pinctrl_utils_reserve_map(pctrl_dev, map, &reserved_maps,
- num_maps, ngroups);
- if (ret) {
- dev_err(pctrl->dev, "can't reserve map: %d\n", ret);
- return ret;
- }
-
- of_property_for_each_string(node, "groups", prop, group_name) {
- ret = pinctrl_utils_add_map_mux(pctrl_dev, map, &reserved_maps,
- num_maps, group_name,
- function_name);
- if (ret) {
- dev_err(pctrl->dev, "can't add map: %d\n", ret);
- return ret;
- }
- }
-
- return 0;
-}
-
static void berlin_pinctrl_dt_free_map(struct pinctrl_dev *pctrl_dev,
struct pinctrl_map *map,
unsigned nmaps)
@@ -121,7 +72,7 @@ static void berlin_pinctrl_dt_free_map(struct pinctrl_dev *pctrl_dev,
static const struct pinctrl_ops berlin_pinctrl_ops = {
.get_groups_count = &berlin_pinctrl_get_group_count,
.get_group_name = &berlin_pinctrl_get_group_name,
- .dt_node_to_map = &berlin_pinctrl_dt_node_to_map,
+ .dt_node_to_map = &pinconf_generic_function_groups_dt_node_to_map,
.dt_free_map = &berlin_pinctrl_dt_free_map,
};
--
1.9.1
More information about the linux-arm-kernel
mailing list