linux/drivers/pinctrl/pinmux.c
<<
>>
Prefs
   1/*
   2 * Core driver for the pin muxing portions of the pin control subsystem
   3 *
   4 * Copyright (C) 2011-2012 ST-Ericsson SA
   5 * Written on behalf of Linaro for ST-Ericsson
   6 * Based on bits of regulator core, gpio core and clk core
   7 *
   8 * Author: Linus Walleij <linus.walleij@linaro.org>
   9 *
  10 * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
  11 *
  12 * License terms: GNU General Public License (GPL) version 2
  13 */
  14#define pr_fmt(fmt) "pinmux core: " fmt
  15
  16#include <linux/kernel.h>
  17#include <linux/module.h>
  18#include <linux/init.h>
  19#include <linux/device.h>
  20#include <linux/slab.h>
  21#include <linux/radix-tree.h>
  22#include <linux/err.h>
  23#include <linux/list.h>
  24#include <linux/string.h>
  25#include <linux/sysfs.h>
  26#include <linux/debugfs.h>
  27#include <linux/seq_file.h>
  28#include <linux/pinctrl/machine.h>
  29#include <linux/pinctrl/pinmux.h>
  30#include "core.h"
  31#include "pinmux.h"
  32
  33int pinmux_check_ops(struct pinctrl_dev *pctldev)
  34{
  35        const struct pinmux_ops *ops = pctldev->desc->pmxops;
  36        unsigned nfuncs;
  37        unsigned selector = 0;
  38
  39        /* Check that we implement required operations */
  40        if (!ops ||
  41            !ops->get_functions_count ||
  42            !ops->get_function_name ||
  43            !ops->get_function_groups ||
  44            !ops->enable) {
  45                dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n");
  46                return -EINVAL;
  47        }
  48        /* Check that all functions registered have names */
  49        nfuncs = ops->get_functions_count(pctldev);
  50        while (selector < nfuncs) {
  51                const char *fname = ops->get_function_name(pctldev,
  52                                                           selector);
  53                if (!fname) {
  54                        dev_err(pctldev->dev, "pinmux ops has no name for function%u\n",
  55                                selector);
  56                        return -EINVAL;
  57                }
  58                selector++;
  59        }
  60
  61        return 0;
  62}
  63
  64int pinmux_validate_map(struct pinctrl_map const *map, int i)
  65{
  66        if (!map->data.mux.function) {
  67                pr_err("failed to register map %s (%d): no function given\n",
  68                       map->name, i);
  69                return -EINVAL;
  70        }
  71
  72        return 0;
  73}
  74
  75/**
  76 * pin_request() - request a single pin to be muxed in, typically for GPIO
  77 * @pin: the pin number in the global pin space
  78 * @owner: a representation of the owner of this pin; typically the device
  79 *      name that controls its mux function, or the requested GPIO name
  80 * @gpio_range: the range matching the GPIO pin if this is a request for a
  81 *      single GPIO pin
  82 */
  83static int pin_request(struct pinctrl_dev *pctldev,
  84                       int pin, const char *owner,
  85                       struct pinctrl_gpio_range *gpio_range)
  86{
  87        struct pin_desc *desc;
  88        const struct pinmux_ops *ops = pctldev->desc->pmxops;
  89        int status = -EINVAL;
  90
  91        desc = pin_desc_get(pctldev, pin);
  92        if (desc == NULL) {
  93                dev_err(pctldev->dev,
  94                        "pin %d is not registered so it cannot be requested\n",
  95                        pin);
  96                goto out;
  97        }
  98
  99        dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n",
 100                pin, desc->name, owner);
 101
 102        if (gpio_range) {
 103                /* There's no need to support multiple GPIO requests */
 104                if (desc->gpio_owner) {
 105                        dev_err(pctldev->dev,
 106                                "pin %s already requested by %s; cannot claim for %s\n",
 107                                desc->name, desc->gpio_owner, owner);
 108                        goto out;
 109                }
 110
 111                desc->gpio_owner = owner;
 112        } else {
 113                if (desc->mux_usecount && strcmp(desc->mux_owner, owner)) {
 114                        dev_err(pctldev->dev,
 115                                "pin %s already requested by %s; cannot claim for %s\n",
 116                                desc->name, desc->mux_owner, owner);
 117                        goto out;
 118                }
 119
 120                desc->mux_usecount++;
 121                if (desc->mux_usecount > 1)
 122                        return 0;
 123
 124                desc->mux_owner = owner;
 125        }
 126
 127        /* Let each pin increase references to this module */
 128        if (!try_module_get(pctldev->owner)) {
 129                dev_err(pctldev->dev,
 130                        "could not increase module refcount for pin %d\n",
 131                        pin);
 132                status = -EINVAL;
 133                goto out_free_pin;
 134        }
 135
 136        /*
 137         * If there is no kind of request function for the pin we just assume
 138         * we got it by default and proceed.
 139         */
 140        if (gpio_range && ops->gpio_request_enable)
 141                /* This requests and enables a single GPIO pin */
 142                status = ops->gpio_request_enable(pctldev, gpio_range, pin);
 143        else if (ops->request)
 144                status = ops->request(pctldev, pin);
 145        else
 146                status = 0;
 147
 148        if (status) {
 149                dev_err(pctldev->dev, "request() failed for pin %d\n", pin);
 150                module_put(pctldev->owner);
 151        }
 152
 153out_free_pin:
 154        if (status) {
 155                if (gpio_range) {
 156                        desc->gpio_owner = NULL;
 157                } else {
 158                        desc->mux_usecount--;
 159                        if (!desc->mux_usecount)
 160                                desc->mux_owner = NULL;
 161                }
 162        }
 163out:
 164        if (status)
 165                dev_err(pctldev->dev, "pin-%d (%s) status %d\n",
 166                        pin, owner, status);
 167
 168        return status;
 169}
 170
 171/**
 172 * pin_free() - release a single muxed in pin so something else can be muxed
 173 * @pctldev: pin controller device handling this pin
 174 * @pin: the pin to free
 175 * @gpio_range: the range matching the GPIO pin if this is a request for a
 176 *      single GPIO pin
 177 *
 178 * This function returns a pointer to the previous owner. This is used
 179 * for callers that dynamically allocate an owner name so it can be freed
 180 * once the pin is free. This is done for GPIO request functions.
 181 */
 182static const char *pin_free(struct pinctrl_dev *pctldev, int pin,
 183                            struct pinctrl_gpio_range *gpio_range)
 184{
 185        const struct pinmux_ops *ops = pctldev->desc->pmxops;
 186        struct pin_desc *desc;
 187        const char *owner;
 188
 189        desc = pin_desc_get(pctldev, pin);
 190        if (desc == NULL) {
 191                dev_err(pctldev->dev,
 192                        "pin is not registered so it cannot be freed\n");
 193                return NULL;
 194        }
 195
 196        if (!gpio_range) {
 197                desc->mux_usecount--;
 198                if (desc->mux_usecount)
 199                        return NULL;
 200        }
 201
 202        /*
 203         * If there is no kind of request function for the pin we just assume
 204         * we got it by default and proceed.
 205         */
 206        if (gpio_range && ops->gpio_disable_free)
 207                ops->gpio_disable_free(pctldev, gpio_range, pin);
 208        else if (ops->free)
 209                ops->free(pctldev, pin);
 210
 211        if (gpio_range) {
 212                owner = desc->gpio_owner;
 213                desc->gpio_owner = NULL;
 214        } else {
 215                owner = desc->mux_owner;
 216                desc->mux_owner = NULL;
 217                desc->mux_setting = NULL;
 218        }
 219
 220        module_put(pctldev->owner);
 221
 222        return owner;
 223}
 224
 225/**
 226 * pinmux_request_gpio() - request pinmuxing for a GPIO pin
 227 * @pctldev: pin controller device affected
 228 * @pin: the pin to mux in for GPIO
 229 * @range: the applicable GPIO range
 230 */
 231int pinmux_request_gpio(struct pinctrl_dev *pctldev,
 232                        struct pinctrl_gpio_range *range,
 233                        unsigned pin, unsigned gpio)
 234{
 235        char gpiostr[16];
 236        const char *owner;
 237        int ret;
 238
 239        /* Conjure some name stating what chip and pin this is taken by */
 240        snprintf(gpiostr, 15, "%s:%d", range->name, gpio);
 241
 242        owner = kstrdup(gpiostr, GFP_KERNEL);
 243        if (!owner)
 244                return -EINVAL;
 245
 246        ret = pin_request(pctldev, pin, owner, range);
 247        if (ret < 0)
 248                kfree(owner);
 249
 250        return ret;
 251}
 252
 253/**
 254 * pinmux_free_gpio() - release a pin from GPIO muxing
 255 * @pctldev: the pin controller device for the pin
 256 * @pin: the affected currently GPIO-muxed in pin
 257 * @range: applicable GPIO range
 258 */
 259void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
 260                      struct pinctrl_gpio_range *range)
 261{
 262        const char *owner;
 263
 264        owner = pin_free(pctldev, pin, range);
 265        kfree(owner);
 266}
 267
 268/**
 269 * pinmux_gpio_direction() - set the direction of a single muxed-in GPIO pin
 270 * @pctldev: the pin controller handling this pin
 271 * @range: applicable GPIO range
 272 * @pin: the affected GPIO pin in this controller
 273 * @input: true if we set the pin as input, false for output
 274 */
 275int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
 276                          struct pinctrl_gpio_range *range,
 277                          unsigned pin, bool input)
 278{
 279        const struct pinmux_ops *ops;
 280        int ret;
 281
 282        ops = pctldev->desc->pmxops;
 283
 284        if (ops->gpio_set_direction)
 285                ret = ops->gpio_set_direction(pctldev, range, pin, input);
 286        else
 287                ret = 0;
 288
 289        return ret;
 290}
 291
 292static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
 293                                        const char *function)
 294{
 295        const struct pinmux_ops *ops = pctldev->desc->pmxops;
 296        unsigned nfuncs = ops->get_functions_count(pctldev);
 297        unsigned selector = 0;
 298
 299        /* See if this pctldev has this function */
 300        while (selector < nfuncs) {
 301                const char *fname = ops->get_function_name(pctldev,
 302                                                           selector);
 303
 304                if (!strcmp(function, fname))
 305                        return selector;
 306
 307                selector++;
 308        }
 309
 310        pr_err("%s does not support function %s\n",
 311               pinctrl_dev_get_name(pctldev), function);
 312        return -EINVAL;
 313}
 314
 315int pinmux_map_to_setting(struct pinctrl_map const *map,
 316                          struct pinctrl_setting *setting)
 317{
 318        struct pinctrl_dev *pctldev = setting->pctldev;
 319        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 320        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 321        char const * const *groups;
 322        unsigned num_groups;
 323        int ret;
 324        const char *group;
 325        int i;
 326        const unsigned *pins;
 327        unsigned num_pins;
 328
 329        if (!pmxops) {
 330                dev_err(pctldev->dev, "does not support mux function\n");
 331                return -EINVAL;
 332        }
 333
 334        ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function);
 335        if (ret < 0) {
 336                dev_err(pctldev->dev, "invalid function %s in map table\n",
 337                        map->data.mux.function);
 338                return ret;
 339        }
 340        setting->data.mux.func = ret;
 341
 342        ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
 343                                          &groups, &num_groups);
 344        if (ret < 0) {
 345                dev_err(pctldev->dev, "can't query groups for function %s\n",
 346                        map->data.mux.function);
 347                return ret;
 348        }
 349        if (!num_groups) {
 350                dev_err(pctldev->dev,
 351                        "function %s can't be selected on any group\n",
 352                        map->data.mux.function);
 353                return -EINVAL;
 354        }
 355        if (map->data.mux.group) {
 356                bool found = false;
 357                group = map->data.mux.group;
 358                for (i = 0; i < num_groups; i++) {
 359                        if (!strcmp(group, groups[i])) {
 360                                found = true;
 361                                break;
 362                        }
 363                }
 364                if (!found) {
 365                        dev_err(pctldev->dev,
 366                                "invalid group \"%s\" for function \"%s\"\n",
 367                                group, map->data.mux.function);
 368                        return -EINVAL;
 369                }
 370        } else {
 371                group = groups[0];
 372        }
 373
 374        ret = pinctrl_get_group_selector(pctldev, group);
 375        if (ret < 0) {
 376                dev_err(pctldev->dev, "invalid group %s in map table\n",
 377                        map->data.mux.group);
 378                return ret;
 379        }
 380        setting->data.mux.group = ret;
 381
 382        ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, &pins,
 383                                      &num_pins);
 384        if (ret) {
 385                dev_err(pctldev->dev,
 386                        "could not get pins for device %s group selector %d\n",
 387                        pinctrl_dev_get_name(pctldev), setting->data.mux.group);
 388                        return -ENODEV;
 389        }
 390
 391        /* Try to allocate all pins in this group, one by one */
 392        for (i = 0; i < num_pins; i++) {
 393                ret = pin_request(pctldev, pins[i], map->dev_name, NULL);
 394                if (ret) {
 395                        dev_err(pctldev->dev,
 396                                "could not request pin %d on device %s\n",
 397                                pins[i], pinctrl_dev_get_name(pctldev));
 398                        /* On error release all taken pins */
 399                        i--; /* this pin just failed */
 400                        for (; i >= 0; i--)
 401                                pin_free(pctldev, pins[i], NULL);
 402                        return -ENODEV;
 403                }
 404        }
 405
 406        return 0;
 407}
 408
 409void pinmux_free_setting(struct pinctrl_setting const *setting)
 410{
 411        struct pinctrl_dev *pctldev = setting->pctldev;
 412        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 413        const unsigned *pins;
 414        unsigned num_pins;
 415        int ret;
 416        int i;
 417
 418        ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
 419                                      &pins, &num_pins);
 420        if (ret) {
 421                dev_err(pctldev->dev,
 422                        "could not get pins for device %s group selector %d\n",
 423                        pinctrl_dev_get_name(pctldev), setting->data.mux.group);
 424                return;
 425        }
 426
 427        for (i = 0; i < num_pins; i++)
 428                pin_free(pctldev, pins[i], NULL);
 429}
 430
 431int pinmux_enable_setting(struct pinctrl_setting const *setting)
 432{
 433        struct pinctrl_dev *pctldev = setting->pctldev;
 434        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 435        const struct pinmux_ops *ops = pctldev->desc->pmxops;
 436        int ret;
 437        const unsigned *pins;
 438        unsigned num_pins;
 439        int i;
 440        struct pin_desc *desc;
 441
 442        ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
 443                                      &pins, &num_pins);
 444        if (ret) {
 445                /* errors only affect debug data, so just warn */
 446                dev_warn(pctldev->dev,
 447                         "could not get pins for group selector %d\n",
 448                         setting->data.mux.group);
 449                num_pins = 0;
 450        }
 451
 452        for (i = 0; i < num_pins; i++) {
 453                desc = pin_desc_get(pctldev, pins[i]);
 454                if (desc == NULL) {
 455                        dev_warn(pctldev->dev,
 456                                 "could not get pin desc for pin %d\n",
 457                                 pins[i]);
 458                        continue;
 459                }
 460                desc->mux_setting = &(setting->data.mux);
 461        }
 462
 463        return ops->enable(pctldev, setting->data.mux.func,
 464                           setting->data.mux.group);
 465}
 466
 467void pinmux_disable_setting(struct pinctrl_setting const *setting)
 468{
 469        struct pinctrl_dev *pctldev = setting->pctldev;
 470        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 471        const struct pinmux_ops *ops = pctldev->desc->pmxops;
 472        int ret;
 473        const unsigned *pins;
 474        unsigned num_pins;
 475        int i;
 476        struct pin_desc *desc;
 477
 478        ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
 479                                      &pins, &num_pins);
 480        if (ret) {
 481                /* errors only affect debug data, so just warn */
 482                dev_warn(pctldev->dev,
 483                         "could not get pins for group selector %d\n",
 484                         setting->data.mux.group);
 485                num_pins = 0;
 486        }
 487
 488        for (i = 0; i < num_pins; i++) {
 489                desc = pin_desc_get(pctldev, pins[i]);
 490                if (desc == NULL) {
 491                        dev_warn(pctldev->dev,
 492                                 "could not get pin desc for pin %d\n",
 493                                 pins[i]);
 494                        continue;
 495                }
 496                desc->mux_setting = NULL;
 497        }
 498
 499        if (ops->disable)
 500                ops->disable(pctldev, setting->data.mux.func, setting->data.mux.group);
 501}
 502
 503#ifdef CONFIG_DEBUG_FS
 504
 505/* Called from pincontrol core */
 506static int pinmux_functions_show(struct seq_file *s, void *what)
 507{
 508        struct pinctrl_dev *pctldev = s->private;
 509        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 510        unsigned nfuncs;
 511        unsigned func_selector = 0;
 512
 513        if (!pmxops)
 514                return 0;
 515
 516        mutex_lock(&pinctrl_mutex);
 517        nfuncs = pmxops->get_functions_count(pctldev);
 518        while (func_selector < nfuncs) {
 519                const char *func = pmxops->get_function_name(pctldev,
 520                                                          func_selector);
 521                const char * const *groups;
 522                unsigned num_groups;
 523                int ret;
 524                int i;
 525
 526                ret = pmxops->get_function_groups(pctldev, func_selector,
 527                                                  &groups, &num_groups);
 528                if (ret)
 529                        seq_printf(s, "function %s: COULD NOT GET GROUPS\n",
 530                                   func);
 531
 532                seq_printf(s, "function: %s, groups = [ ", func);
 533                for (i = 0; i < num_groups; i++)
 534                        seq_printf(s, "%s ", groups[i]);
 535                seq_puts(s, "]\n");
 536
 537                func_selector++;
 538        }
 539
 540        mutex_unlock(&pinctrl_mutex);
 541
 542        return 0;
 543}
 544
 545static int pinmux_pins_show(struct seq_file *s, void *what)
 546{
 547        struct pinctrl_dev *pctldev = s->private;
 548        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 549        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 550        unsigned i, pin;
 551
 552        if (!pmxops)
 553                return 0;
 554
 555        seq_puts(s, "Pinmux settings per pin\n");
 556        seq_puts(s, "Format: pin (name): mux_owner gpio_owner hog?\n");
 557
 558        mutex_lock(&pinctrl_mutex);
 559
 560        /* The pin number can be retrived from the pin controller descriptor */
 561        for (i = 0; i < pctldev->desc->npins; i++) {
 562                struct pin_desc *desc;
 563                bool is_hog = false;
 564
 565                pin = pctldev->desc->pins[i].number;
 566                desc = pin_desc_get(pctldev, pin);
 567                /* Skip if we cannot search the pin */
 568                if (desc == NULL)
 569                        continue;
 570
 571                if (desc->mux_owner &&
 572                    !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev)))
 573                        is_hog = true;
 574
 575                seq_printf(s, "pin %d (%s): %s %s%s", pin,
 576                           desc->name ? desc->name : "unnamed",
 577                           desc->mux_owner ? desc->mux_owner
 578                                : "(MUX UNCLAIMED)",
 579                           desc->gpio_owner ? desc->gpio_owner
 580                                : "(GPIO UNCLAIMED)",
 581                           is_hog ? " (HOG)" : "");
 582
 583                if (desc->mux_setting)
 584                        seq_printf(s, " function %s group %s\n",
 585                                   pmxops->get_function_name(pctldev,
 586                                        desc->mux_setting->func),
 587                                   pctlops->get_group_name(pctldev,
 588                                        desc->mux_setting->group));
 589                else
 590                        seq_printf(s, "\n");
 591        }
 592
 593        mutex_unlock(&pinctrl_mutex);
 594
 595        return 0;
 596}
 597
 598void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map)
 599{
 600        seq_printf(s, "group %s\nfunction %s\n",
 601                map->data.mux.group ? map->data.mux.group : "(default)",
 602                map->data.mux.function);
 603}
 604
 605void pinmux_show_setting(struct seq_file *s,
 606                         struct pinctrl_setting const *setting)
 607{
 608        struct pinctrl_dev *pctldev = setting->pctldev;
 609        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 610        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 611
 612        seq_printf(s, "group: %s (%u) function: %s (%u)\n",
 613                   pctlops->get_group_name(pctldev, setting->data.mux.group),
 614                   setting->data.mux.group,
 615                   pmxops->get_function_name(pctldev, setting->data.mux.func),
 616                   setting->data.mux.func);
 617}
 618
 619static int pinmux_functions_open(struct inode *inode, struct file *file)
 620{
 621        return single_open(file, pinmux_functions_show, inode->i_private);
 622}
 623
 624static int pinmux_pins_open(struct inode *inode, struct file *file)
 625{
 626        return single_open(file, pinmux_pins_show, inode->i_private);
 627}
 628
 629static const struct file_operations pinmux_functions_ops = {
 630        .open           = pinmux_functions_open,
 631        .read           = seq_read,
 632        .llseek         = seq_lseek,
 633        .release        = single_release,
 634};
 635
 636static const struct file_operations pinmux_pins_ops = {
 637        .open           = pinmux_pins_open,
 638        .read           = seq_read,
 639        .llseek         = seq_lseek,
 640        .release        = single_release,
 641};
 642
 643void pinmux_init_device_debugfs(struct dentry *devroot,
 644                         struct pinctrl_dev *pctldev)
 645{
 646        debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
 647                            devroot, pctldev, &pinmux_functions_ops);
 648        debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
 649                            devroot, pctldev, &pinmux_pins_ops);
 650}
 651
 652#endif /* CONFIG_DEBUG_FS */
 653
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.