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->set_mux) {
  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                if (ops->strict && desc->mux_usecount &&
 111                    strcmp(desc->mux_owner, owner)) {
 112                        dev_err(pctldev->dev,
 113                                "pin %s already requested by %s; cannot claim for %s\n",
 114                                desc->name, desc->mux_owner, owner);
 115                        goto out;
 116                }
 117
 118                desc->gpio_owner = owner;
 119        } else {
 120                if (desc->mux_usecount && strcmp(desc->mux_owner, owner)) {
 121                        dev_err(pctldev->dev,
 122                                "pin %s already requested by %s; cannot claim for %s\n",
 123                                desc->name, desc->mux_owner, owner);
 124                        goto out;
 125                }
 126                if (ops->strict && desc->gpio_owner) {
 127                        dev_err(pctldev->dev,
 128                                "pin %s already requested by %s; cannot claim for %s\n",
 129                                desc->name, desc->gpio_owner, owner);
 130                        goto out;
 131                }
 132
 133                desc->mux_usecount++;
 134                if (desc->mux_usecount > 1)
 135                        return 0;
 136
 137                desc->mux_owner = owner;
 138        }
 139
 140        /* Let each pin increase references to this module */
 141        if (!try_module_get(pctldev->owner)) {
 142                dev_err(pctldev->dev,
 143                        "could not increase module refcount for pin %d\n",
 144                        pin);
 145                status = -EINVAL;
 146                goto out_free_pin;
 147        }
 148
 149        /*
 150         * If there is no kind of request function for the pin we just assume
 151         * we got it by default and proceed.
 152         */
 153        if (gpio_range && ops->gpio_request_enable)
 154                /* This requests and enables a single GPIO pin */
 155                status = ops->gpio_request_enable(pctldev, gpio_range, pin);
 156        else if (ops->request)
 157                status = ops->request(pctldev, pin);
 158        else
 159                status = 0;
 160
 161        if (status) {
 162                dev_err(pctldev->dev, "request() failed for pin %d\n", pin);
 163                module_put(pctldev->owner);
 164        }
 165
 166out_free_pin:
 167        if (status) {
 168                if (gpio_range) {
 169                        desc->gpio_owner = NULL;
 170                } else {
 171                        desc->mux_usecount--;
 172                        if (!desc->mux_usecount)
 173                                desc->mux_owner = NULL;
 174                }
 175        }
 176out:
 177        if (status)
 178                dev_err(pctldev->dev, "pin-%d (%s) status %d\n",
 179                        pin, owner, status);
 180
 181        return status;
 182}
 183
 184/**
 185 * pin_free() - release a single muxed in pin so something else can be muxed
 186 * @pctldev: pin controller device handling this pin
 187 * @pin: the pin to free
 188 * @gpio_range: the range matching the GPIO pin if this is a request for a
 189 *      single GPIO pin
 190 *
 191 * This function returns a pointer to the previous owner. This is used
 192 * for callers that dynamically allocate an owner name so it can be freed
 193 * once the pin is free. This is done for GPIO request functions.
 194 */
 195static const char *pin_free(struct pinctrl_dev *pctldev, int pin,
 196                            struct pinctrl_gpio_range *gpio_range)
 197{
 198        const struct pinmux_ops *ops = pctldev->desc->pmxops;
 199        struct pin_desc *desc;
 200        const char *owner;
 201
 202        desc = pin_desc_get(pctldev, pin);
 203        if (desc == NULL) {
 204                dev_err(pctldev->dev,
 205                        "pin is not registered so it cannot be freed\n");
 206                return NULL;
 207        }
 208
 209        if (!gpio_range) {
 210                /*
 211                 * A pin should not be freed more times than allocated.
 212                 */
 213                if (WARN_ON(!desc->mux_usecount))
 214                        return NULL;
 215                desc->mux_usecount--;
 216                if (desc->mux_usecount)
 217                        return NULL;
 218        }
 219
 220        /*
 221         * If there is no kind of request function for the pin we just assume
 222         * we got it by default and proceed.
 223         */
 224        if (gpio_range && ops->gpio_disable_free)
 225                ops->gpio_disable_free(pctldev, gpio_range, pin);
 226        else if (ops->free)
 227                ops->free(pctldev, pin);
 228
 229        if (gpio_range) {
 230                owner = desc->gpio_owner;
 231                desc->gpio_owner = NULL;
 232        } else {
 233                owner = desc->mux_owner;
 234                desc->mux_owner = NULL;
 235                desc->mux_setting = NULL;
 236        }
 237
 238        module_put(pctldev->owner);
 239
 240        return owner;
 241}
 242
 243/**
 244 * pinmux_request_gpio() - request pinmuxing for a GPIO pin
 245 * @pctldev: pin controller device affected
 246 * @pin: the pin to mux in for GPIO
 247 * @range: the applicable GPIO range
 248 */
 249int pinmux_request_gpio(struct pinctrl_dev *pctldev,
 250                        struct pinctrl_gpio_range *range,
 251                        unsigned pin, unsigned gpio)
 252{
 253        const char *owner;
 254        int ret;
 255
 256        /* Conjure some name stating what chip and pin this is taken by */
 257        owner = kasprintf(GFP_KERNEL, "%s:%d", range->name, gpio);
 258        if (!owner)
 259                return -EINVAL;
 260
 261        ret = pin_request(pctldev, pin, owner, range);
 262        if (ret < 0)
 263                kfree(owner);
 264
 265        return ret;
 266}
 267
 268/**
 269 * pinmux_free_gpio() - release a pin from GPIO muxing
 270 * @pctldev: the pin controller device for the pin
 271 * @pin: the affected currently GPIO-muxed in pin
 272 * @range: applicable GPIO range
 273 */
 274void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
 275                      struct pinctrl_gpio_range *range)
 276{
 277        const char *owner;
 278
 279        owner = pin_free(pctldev, pin, range);
 280        kfree(owner);
 281}
 282
 283/**
 284 * pinmux_gpio_direction() - set the direction of a single muxed-in GPIO pin
 285 * @pctldev: the pin controller handling this pin
 286 * @range: applicable GPIO range
 287 * @pin: the affected GPIO pin in this controller
 288 * @input: true if we set the pin as input, false for output
 289 */
 290int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
 291                          struct pinctrl_gpio_range *range,
 292                          unsigned pin, bool input)
 293{
 294        const struct pinmux_ops *ops;
 295        int ret;
 296
 297        ops = pctldev->desc->pmxops;
 298
 299        if (ops->gpio_set_direction)
 300                ret = ops->gpio_set_direction(pctldev, range, pin, input);
 301        else
 302                ret = 0;
 303
 304        return ret;
 305}
 306
 307static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
 308                                        const char *function)
 309{
 310        const struct pinmux_ops *ops = pctldev->desc->pmxops;
 311        unsigned nfuncs = ops->get_functions_count(pctldev);
 312        unsigned selector = 0;
 313
 314        /* See if this pctldev has this function */
 315        while (selector < nfuncs) {
 316                const char *fname = ops->get_function_name(pctldev, selector);
 317
 318                if (!strcmp(function, fname))
 319                        return selector;
 320
 321                selector++;
 322        }
 323
 324        dev_err(pctldev->dev, "function '%s' not supported\n", function);
 325        return -EINVAL;
 326}
 327
 328int pinmux_map_to_setting(struct pinctrl_map const *map,
 329                          struct pinctrl_setting *setting)
 330{
 331        struct pinctrl_dev *pctldev = setting->pctldev;
 332        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 333        char const * const *groups;
 334        unsigned num_groups;
 335        int ret;
 336        const char *group;
 337
 338        if (!pmxops) {
 339                dev_err(pctldev->dev, "does not support mux function\n");
 340                return -EINVAL;
 341        }
 342
 343        ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function);
 344        if (ret < 0) {
 345                dev_err(pctldev->dev, "invalid function %s in map table\n",
 346                        map->data.mux.function);
 347                return ret;
 348        }
 349        setting->data.mux.func = ret;
 350
 351        ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
 352                                          &groups, &num_groups);
 353        if (ret < 0) {
 354                dev_err(pctldev->dev, "can't query groups for function %s\n",
 355                        map->data.mux.function);
 356                return ret;
 357        }
 358        if (!num_groups) {
 359                dev_err(pctldev->dev,
 360                        "function %s can't be selected on any group\n",
 361                        map->data.mux.function);
 362                return -EINVAL;
 363        }
 364        if (map->data.mux.group) {
 365                group = map->data.mux.group;
 366                ret = match_string(groups, num_groups, group);
 367                if (ret < 0) {
 368                        dev_err(pctldev->dev,
 369                                "invalid group \"%s\" for function \"%s\"\n",
 370                                group, map->data.mux.function);
 371                        return ret;
 372                }
 373        } else {
 374                group = groups[0];
 375        }
 376
 377        ret = pinctrl_get_group_selector(pctldev, group);
 378        if (ret < 0) {
 379                dev_err(pctldev->dev, "invalid group %s in map table\n",
 380                        map->data.mux.group);
 381                return ret;
 382        }
 383        setting->data.mux.group = ret;
 384
 385        return 0;
 386}
 387
 388void pinmux_free_setting(struct pinctrl_setting const *setting)
 389{
 390        /* This function is currently unused */
 391}
 392
 393int pinmux_enable_setting(struct pinctrl_setting const *setting)
 394{
 395        struct pinctrl_dev *pctldev = setting->pctldev;
 396        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 397        const struct pinmux_ops *ops = pctldev->desc->pmxops;
 398        int ret = 0;
 399        const unsigned *pins = NULL;
 400        unsigned num_pins = 0;
 401        int i;
 402        struct pin_desc *desc;
 403
 404        if (pctlops->get_group_pins)
 405                ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
 406                                              &pins, &num_pins);
 407
 408        if (ret) {
 409                const char *gname;
 410
 411                /* errors only affect debug data, so just warn */
 412                gname = pctlops->get_group_name(pctldev,
 413                                                setting->data.mux.group);
 414                dev_warn(pctldev->dev,
 415                         "could not get pins for group %s\n",
 416                         gname);
 417                num_pins = 0;
 418        }
 419
 420        /* Try to allocate all pins in this group, one by one */
 421        for (i = 0; i < num_pins; i++) {
 422                ret = pin_request(pctldev, pins[i], setting->dev_name, NULL);
 423                if (ret) {
 424                        const char *gname;
 425                        const char *pname;
 426
 427                        desc = pin_desc_get(pctldev, pins[i]);
 428                        pname = desc ? desc->name : "non-existing";
 429                        gname = pctlops->get_group_name(pctldev,
 430                                                setting->data.mux.group);
 431                        dev_err(pctldev->dev,
 432                                "could not request pin %d (%s) from group %s "
 433                                " on device %s\n",
 434                                pins[i], pname, gname,
 435                                pinctrl_dev_get_name(pctldev));
 436                        goto err_pin_request;
 437                }
 438        }
 439
 440        /* Now that we have acquired the pins, encode the mux setting */
 441        for (i = 0; i < num_pins; i++) {
 442                desc = pin_desc_get(pctldev, pins[i]);
 443                if (desc == NULL) {
 444                        dev_warn(pctldev->dev,
 445                                 "could not get pin desc for pin %d\n",
 446                                 pins[i]);
 447                        continue;
 448                }
 449                desc->mux_setting = &(setting->data.mux);
 450        }
 451
 452        ret = ops->set_mux(pctldev, setting->data.mux.func,
 453                           setting->data.mux.group);
 454
 455        if (ret)
 456                goto err_set_mux;
 457
 458        return 0;
 459
 460err_set_mux:
 461        for (i = 0; i < num_pins; i++) {
 462                desc = pin_desc_get(pctldev, pins[i]);
 463                if (desc)
 464                        desc->mux_setting = NULL;
 465        }
 466err_pin_request:
 467        /* On error release all taken pins */
 468        while (--i >= 0)
 469                pin_free(pctldev, pins[i], NULL);
 470
 471        return ret;
 472}
 473
 474void pinmux_disable_setting(struct pinctrl_setting const *setting)
 475{
 476        struct pinctrl_dev *pctldev = setting->pctldev;
 477        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 478        int ret = 0;
 479        const unsigned *pins = NULL;
 480        unsigned num_pins = 0;
 481        int i;
 482        struct pin_desc *desc;
 483
 484        if (pctlops->get_group_pins)
 485                ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
 486                                              &pins, &num_pins);
 487        if (ret) {
 488                const char *gname;
 489
 490                /* errors only affect debug data, so just warn */
 491                gname = pctlops->get_group_name(pctldev,
 492                                                setting->data.mux.group);
 493                dev_warn(pctldev->dev,
 494                         "could not get pins for group %s\n",
 495                         gname);
 496                num_pins = 0;
 497        }
 498
 499        /* Flag the descs that no setting is active */
 500        for (i = 0; i < num_pins; i++) {
 501                desc = pin_desc_get(pctldev, pins[i]);
 502                if (desc == NULL) {
 503                        dev_warn(pctldev->dev,
 504                                 "could not get pin desc for pin %d\n",
 505                                 pins[i]);
 506                        continue;
 507                }
 508                if (desc->mux_setting == &(setting->data.mux)) {
 509                        desc->mux_setting = NULL;
 510                        /* And release the pin */
 511                        pin_free(pctldev, pins[i], NULL);
 512                } else {
 513                        const char *gname;
 514
 515                        gname = pctlops->get_group_name(pctldev,
 516                                                setting->data.mux.group);
 517                        dev_warn(pctldev->dev,
 518                                 "not freeing pin %d (%s) as part of "
 519                                 "deactivating group %s - it is already "
 520                                 "used for some other setting",
 521                                 pins[i], desc->name, gname);
 522                }
 523        }
 524}
 525
 526#ifdef CONFIG_DEBUG_FS
 527
 528/* Called from pincontrol core */
 529static int pinmux_functions_show(struct seq_file *s, void *what)
 530{
 531        struct pinctrl_dev *pctldev = s->private;
 532        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 533        unsigned nfuncs;
 534        unsigned func_selector = 0;
 535
 536        if (!pmxops)
 537                return 0;
 538
 539        mutex_lock(&pctldev->mutex);
 540        nfuncs = pmxops->get_functions_count(pctldev);
 541        while (func_selector < nfuncs) {
 542                const char *func = pmxops->get_function_name(pctldev,
 543                                                          func_selector);
 544                const char * const *groups;
 545                unsigned num_groups;
 546                int ret;
 547                int i;
 548
 549                ret = pmxops->get_function_groups(pctldev, func_selector,
 550                                                  &groups, &num_groups);
 551                if (ret) {
 552                        seq_printf(s, "function %s: COULD NOT GET GROUPS\n",
 553                                   func);
 554                        func_selector++;
 555                        continue;
 556                }
 557
 558                seq_printf(s, "function: %s, groups = [ ", func);
 559                for (i = 0; i < num_groups; i++)
 560                        seq_printf(s, "%s ", groups[i]);
 561                seq_puts(s, "]\n");
 562
 563                func_selector++;
 564        }
 565
 566        mutex_unlock(&pctldev->mutex);
 567
 568        return 0;
 569}
 570
 571static int pinmux_pins_show(struct seq_file *s, void *what)
 572{
 573        struct pinctrl_dev *pctldev = s->private;
 574        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 575        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 576        unsigned i, pin;
 577
 578        if (!pmxops)
 579                return 0;
 580
 581        seq_puts(s, "Pinmux settings per pin\n");
 582        if (pmxops->strict)
 583                seq_puts(s,
 584                 "Format: pin (name): mux_owner|gpio_owner (strict) hog?\n");
 585        else
 586                seq_puts(s,
 587                "Format: pin (name): mux_owner gpio_owner hog?\n");
 588
 589        mutex_lock(&pctldev->mutex);
 590
 591        /* The pin number can be retrived from the pin controller descriptor */
 592        for (i = 0; i < pctldev->desc->npins; i++) {
 593                struct pin_desc *desc;
 594                bool is_hog = false;
 595
 596                pin = pctldev->desc->pins[i].number;
 597                desc = pin_desc_get(pctldev, pin);
 598                /* Skip if we cannot search the pin */
 599                if (desc == NULL)
 600                        continue;
 601
 602                if (desc->mux_owner &&
 603                    !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev)))
 604                        is_hog = true;
 605
 606                if (pmxops->strict) {
 607                        if (desc->mux_owner)
 608                                seq_printf(s, "pin %d (%s): device %s%s",
 609                                           pin,
 610                                           desc->name ? desc->name : "unnamed",
 611                                           desc->mux_owner,
 612                                           is_hog ? " (HOG)" : "");
 613                        else if (desc->gpio_owner)
 614                                seq_printf(s, "pin %d (%s): GPIO %s",
 615                                           pin,
 616                                           desc->name ? desc->name : "unnamed",
 617                                           desc->gpio_owner);
 618                        else
 619                                seq_printf(s, "pin %d (%s): UNCLAIMED",
 620                                           pin,
 621                                           desc->name ? desc->name : "unnamed");
 622                } else {
 623                        /* For non-strict controllers */
 624                        seq_printf(s, "pin %d (%s): %s %s%s", pin,
 625                                   desc->name ? desc->name : "unnamed",
 626                                   desc->mux_owner ? desc->mux_owner
 627                                   : "(MUX UNCLAIMED)",
 628                                   desc->gpio_owner ? desc->gpio_owner
 629                                   : "(GPIO UNCLAIMED)",
 630                                   is_hog ? " (HOG)" : "");
 631                }
 632
 633                /* If mux: print function+group claiming the pin */
 634                if (desc->mux_setting)
 635                        seq_printf(s, " function %s group %s\n",
 636                                   pmxops->get_function_name(pctldev,
 637                                        desc->mux_setting->func),
 638                                   pctlops->get_group_name(pctldev,
 639                                        desc->mux_setting->group));
 640                else
 641                        seq_printf(s, "\n");
 642        }
 643
 644        mutex_unlock(&pctldev->mutex);
 645
 646        return 0;
 647}
 648
 649void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map)
 650{
 651        seq_printf(s, "group %s\nfunction %s\n",
 652                map->data.mux.group ? map->data.mux.group : "(default)",
 653                map->data.mux.function);
 654}
 655
 656void pinmux_show_setting(struct seq_file *s,
 657                         struct pinctrl_setting const *setting)
 658{
 659        struct pinctrl_dev *pctldev = setting->pctldev;
 660        const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
 661        const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
 662
 663        seq_printf(s, "group: %s (%u) function: %s (%u)\n",
 664                   pctlops->get_group_name(pctldev, setting->data.mux.group),
 665                   setting->data.mux.group,
 666                   pmxops->get_function_name(pctldev, setting->data.mux.func),
 667                   setting->data.mux.func);
 668}
 669
 670static int pinmux_functions_open(struct inode *inode, struct file *file)
 671{
 672        return single_open(file, pinmux_functions_show, inode->i_private);
 673}
 674
 675static int pinmux_pins_open(struct inode *inode, struct file *file)
 676{
 677        return single_open(file, pinmux_pins_show, inode->i_private);
 678}
 679
 680static const struct file_operations pinmux_functions_ops = {
 681        .open           = pinmux_functions_open,
 682        .read           = seq_read,
 683        .llseek         = seq_lseek,
 684        .release        = single_release,
 685};
 686
 687static const struct file_operations pinmux_pins_ops = {
 688        .open           = pinmux_pins_open,
 689        .read           = seq_read,
 690        .llseek         = seq_lseek,
 691        .release        = single_release,
 692};
 693
 694void pinmux_init_device_debugfs(struct dentry *devroot,
 695                         struct pinctrl_dev *pctldev)
 696{
 697        debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
 698                            devroot, pctldev, &pinmux_functions_ops);
 699        debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
 700                            devroot, pctldev, &pinmux_pins_ops);
 701}
 702
 703#endif /* CONFIG_DEBUG_FS */
 704