pinctrl: show pin name when request pins
[deliverable/linux.git] / drivers / pinctrl / pinmux.c
index 4e62783a573a2443efa7db6f807e4fbda5deacd5..fa0357bd88ff638ed28f36ce8c84c9d167a80f6e 100644 (file)
 int pinmux_check_ops(struct pinctrl_dev *pctldev)
 {
        const struct pinmux_ops *ops = pctldev->desc->pmxops;
+       unsigned nfuncs;
        unsigned selector = 0;
 
        /* Check that we implement required operations */
-       if (!ops->list_functions ||
+       if (!ops ||
+           !ops->get_functions_count ||
            !ops->get_function_name ||
            !ops->get_function_groups ||
            !ops->enable ||
@@ -44,11 +46,12 @@ int pinmux_check_ops(struct pinctrl_dev *pctldev)
                return -EINVAL;
 
        /* Check that all functions registered have names */
-       while (ops->list_functions(pctldev, selector) >= 0) {
+       nfuncs = ops->get_functions_count(pctldev);
+       while (selector < nfuncs) {
                const char *fname = ops->get_function_name(pctldev,
                                                           selector);
                if (!fname) {
-                       pr_err("pinmux ops has no name for function%u\n",
+                       dev_err(pctldev->dev, "pinmux ops has no name for function%u\n",
                                selector);
                        return -EINVAL;
                }
@@ -85,8 +88,6 @@ static int pin_request(struct pinctrl_dev *pctldev,
        const struct pinmux_ops *ops = pctldev->desc->pmxops;
        int status = -EINVAL;
 
-       dev_dbg(pctldev->dev, "request pin %d for %s\n", pin, owner);
-
        desc = pin_desc_get(pctldev, pin);
        if (desc == NULL) {
                dev_err(pctldev->dev,
@@ -94,6 +95,9 @@ static int pin_request(struct pinctrl_dev *pctldev,
                goto out;
        }
 
+       dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n",
+               pin, desc->name, owner);
+
        if (gpio_range) {
                /* There's no need to support multiple GPIO requests */
                if (desc->gpio_owner) {
@@ -287,10 +291,11 @@ static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
                                        const char *function)
 {
        const struct pinmux_ops *ops = pctldev->desc->pmxops;
+       unsigned nfuncs = ops->get_functions_count(pctldev);
        unsigned selector = 0;
 
        /* See if this pctldev has this function */
-       while (ops->list_functions(pctldev, selector) >= 0) {
+       while (selector < nfuncs) {
                const char *fname = ops->get_function_name(pctldev,
                                                           selector);
 
@@ -319,6 +324,11 @@ int pinmux_map_to_setting(struct pinctrl_map const *map,
        const unsigned *pins;
        unsigned num_pins;
 
+       if (!pmxops) {
+               dev_err(pctldev->dev, "does not support mux function\n");
+               return -EINVAL;
+       }
+
        setting->data.mux.func =
                pinmux_func_name_to_selector(pctldev, map->data.mux.function);
        if (setting->data.mux.func < 0)
@@ -477,11 +487,15 @@ static int pinmux_functions_show(struct seq_file *s, void *what)
 {
        struct pinctrl_dev *pctldev = s->private;
        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
+       unsigned nfuncs;
        unsigned func_selector = 0;
 
-       mutex_lock(&pinctrl_mutex);
+       if (!pmxops)
+               return 0;
 
-       while (pmxops->list_functions(pctldev, func_selector) >= 0) {
+       mutex_lock(&pinctrl_mutex);
+       nfuncs = pmxops->get_functions_count(pctldev);
+       while (func_selector < nfuncs) {
                const char *func = pmxops->get_function_name(pctldev,
                                                          func_selector);
                const char * const *groups;
@@ -515,6 +529,9 @@ static int pinmux_pins_show(struct seq_file *s, void *what)
        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
        unsigned i, pin;
 
+       if (!pmxops)
+               return 0;
+
        seq_puts(s, "Pinmux settings per pin\n");
        seq_puts(s, "Format: pin (name): mux_owner gpio_owner hog?\n");
 
This page took 0.02604 seconds and 5 git commands to generate.