linux/drivers/pwm/core.c
<<
>>
Prefs
   1/*
   2 * Generic pwmlib implementation
   3 *
   4 * Copyright (C) 2011 Sascha Hauer <s.hauer@pengutronix.de>
   5 * Copyright (C) 2011-2012 Avionic Design GmbH
   6 *
   7 *  This program is free software; you can redistribute it and/or modify
   8 *  it under the terms of the GNU General Public License as published by
   9 *  the Free Software Foundation; either version 2, or (at your option)
  10 *  any later version.
  11 *
  12 *  This program is distributed in the hope that it will be useful,
  13 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 *  GNU General Public License for more details.
  16 *
  17 *  You should have received a copy of the GNU General Public License
  18 *  along with this program; see the file COPYING.  If not, write to
  19 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  20 */
  21
  22#include <linux/module.h>
  23#include <linux/pwm.h>
  24#include <linux/radix-tree.h>
  25#include <linux/list.h>
  26#include <linux/mutex.h>
  27#include <linux/err.h>
  28#include <linux/slab.h>
  29#include <linux/device.h>
  30#include <linux/debugfs.h>
  31#include <linux/seq_file.h>
  32
  33#include <dt-bindings/pwm/pwm.h>
  34
  35#define MAX_PWMS 1024
  36
  37static DEFINE_MUTEX(pwm_lookup_lock);
  38static LIST_HEAD(pwm_lookup_list);
  39static DEFINE_MUTEX(pwm_lock);
  40static LIST_HEAD(pwm_chips);
  41static DECLARE_BITMAP(allocated_pwms, MAX_PWMS);
  42static RADIX_TREE(pwm_tree, GFP_KERNEL);
  43
  44static struct pwm_device *pwm_to_device(unsigned int pwm)
  45{
  46        return radix_tree_lookup(&pwm_tree, pwm);
  47}
  48
  49static int alloc_pwms(int pwm, unsigned int count)
  50{
  51        unsigned int from = 0;
  52        unsigned int start;
  53
  54        if (pwm >= MAX_PWMS)
  55                return -EINVAL;
  56
  57        if (pwm >= 0)
  58                from = pwm;
  59
  60        start = bitmap_find_next_zero_area(allocated_pwms, MAX_PWMS, from,
  61                                           count, 0);
  62
  63        if (pwm >= 0 && start != pwm)
  64                return -EEXIST;
  65
  66        if (start + count > MAX_PWMS)
  67                return -ENOSPC;
  68
  69        return start;
  70}
  71
  72static void free_pwms(struct pwm_chip *chip)
  73{
  74        unsigned int i;
  75
  76        for (i = 0; i < chip->npwm; i++) {
  77                struct pwm_device *pwm = &chip->pwms[i];
  78                radix_tree_delete(&pwm_tree, pwm->pwm);
  79        }
  80
  81        bitmap_clear(allocated_pwms, chip->base, chip->npwm);
  82
  83        kfree(chip->pwms);
  84        chip->pwms = NULL;
  85}
  86
  87static struct pwm_chip *pwmchip_find_by_name(const char *name)
  88{
  89        struct pwm_chip *chip;
  90
  91        if (!name)
  92                return NULL;
  93
  94        mutex_lock(&pwm_lock);
  95
  96        list_for_each_entry(chip, &pwm_chips, list) {
  97                const char *chip_name = dev_name(chip->dev);
  98
  99                if (chip_name && strcmp(chip_name, name) == 0) {
 100                        mutex_unlock(&pwm_lock);
 101                        return chip;
 102                }
 103        }
 104
 105        mutex_unlock(&pwm_lock);
 106
 107        return NULL;
 108}
 109
 110static int pwm_device_request(struct pwm_device *pwm, const char *label)
 111{
 112        int err;
 113
 114        if (test_bit(PWMF_REQUESTED, &pwm->flags))
 115                return -EBUSY;
 116
 117        if (!try_module_get(pwm->chip->ops->owner))
 118                return -ENODEV;
 119
 120        if (pwm->chip->ops->request) {
 121                err = pwm->chip->ops->request(pwm->chip, pwm);
 122                if (err) {
 123                        module_put(pwm->chip->ops->owner);
 124                        return err;
 125                }
 126        }
 127
 128        set_bit(PWMF_REQUESTED, &pwm->flags);
 129        pwm->label = label;
 130
 131        return 0;
 132}
 133
 134struct pwm_device *
 135of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args)
 136{
 137        struct pwm_device *pwm;
 138
 139        if (pc->of_pwm_n_cells < 3)
 140                return ERR_PTR(-EINVAL);
 141
 142        if (args->args[0] >= pc->npwm)
 143                return ERR_PTR(-EINVAL);
 144
 145        pwm = pwm_request_from_chip(pc, args->args[0], NULL);
 146        if (IS_ERR(pwm))
 147                return pwm;
 148
 149        pwm_set_period(pwm, args->args[1]);
 150
 151        if (args->args[2] & PWM_POLARITY_INVERTED)
 152                pwm_set_polarity(pwm, PWM_POLARITY_INVERSED);
 153        else
 154                pwm_set_polarity(pwm, PWM_POLARITY_NORMAL);
 155
 156        return pwm;
 157}
 158EXPORT_SYMBOL_GPL(of_pwm_xlate_with_flags);
 159
 160static struct pwm_device *
 161of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args)
 162{
 163        struct pwm_device *pwm;
 164
 165        if (pc->of_pwm_n_cells < 2)
 166                return ERR_PTR(-EINVAL);
 167
 168        if (args->args[0] >= pc->npwm)
 169                return ERR_PTR(-EINVAL);
 170
 171        pwm = pwm_request_from_chip(pc, args->args[0], NULL);
 172        if (IS_ERR(pwm))
 173                return pwm;
 174
 175        pwm_set_period(pwm, args->args[1]);
 176
 177        return pwm;
 178}
 179
 180static void of_pwmchip_add(struct pwm_chip *chip)
 181{
 182        if (!chip->dev || !chip->dev->of_node)
 183                return;
 184
 185        if (!chip->of_xlate) {
 186                chip->of_xlate = of_pwm_simple_xlate;
 187                chip->of_pwm_n_cells = 2;
 188        }
 189
 190        of_node_get(chip->dev->of_node);
 191}
 192
 193static void of_pwmchip_remove(struct pwm_chip *chip)
 194{
 195        if (chip->dev)
 196                of_node_put(chip->dev->of_node);
 197}
 198
 199/**
 200 * pwm_set_chip_data() - set private chip data for a PWM
 201 * @pwm: PWM device
 202 * @data: pointer to chip-specific data
 203 *
 204 * Returns: 0 on success or a negative error code on failure.
 205 */
 206int pwm_set_chip_data(struct pwm_device *pwm, void *data)
 207{
 208        if (!pwm)
 209                return -EINVAL;
 210
 211        pwm->chip_data = data;
 212
 213        return 0;
 214}
 215EXPORT_SYMBOL_GPL(pwm_set_chip_data);
 216
 217/**
 218 * pwm_get_chip_data() - get private chip data for a PWM
 219 * @pwm: PWM device
 220 *
 221 * Returns: A pointer to the chip-private data for the PWM device.
 222 */
 223void *pwm_get_chip_data(struct pwm_device *pwm)
 224{
 225        return pwm ? pwm->chip_data : NULL;
 226}
 227EXPORT_SYMBOL_GPL(pwm_get_chip_data);
 228
 229/**
 230 * pwmchip_add_with_polarity() - register a new PWM chip
 231 * @chip: the PWM chip to add
 232 * @polarity: initial polarity of PWM channels
 233 *
 234 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base
 235 * will be used. The initial polarity for all channels is specified by the
 236 * @polarity parameter.
 237 *
 238 * Returns: 0 on success or a negative error code on failure.
 239 */
 240int pwmchip_add_with_polarity(struct pwm_chip *chip,
 241                              enum pwm_polarity polarity)
 242{
 243        struct pwm_device *pwm;
 244        unsigned int i;
 245        int ret;
 246
 247        if (!chip || !chip->dev || !chip->ops || !chip->ops->config ||
 248            !chip->ops->enable || !chip->ops->disable || !chip->npwm)
 249                return -EINVAL;
 250
 251        mutex_lock(&pwm_lock);
 252
 253        ret = alloc_pwms(chip->base, chip->npwm);
 254        if (ret < 0)
 255                goto out;
 256
 257        chip->pwms = kzalloc(chip->npwm * sizeof(*pwm), GFP_KERNEL);
 258        if (!chip->pwms) {
 259                ret = -ENOMEM;
 260                goto out;
 261        }
 262
 263        chip->base = ret;
 264
 265        for (i = 0; i < chip->npwm; i++) {
 266                pwm = &chip->pwms[i];
 267
 268                pwm->chip = chip;
 269                pwm->pwm = chip->base + i;
 270                pwm->hwpwm = i;
 271                pwm->polarity = polarity;
 272                mutex_init(&pwm->lock);
 273
 274                radix_tree_insert(&pwm_tree, pwm->pwm, pwm);
 275        }
 276
 277        bitmap_set(allocated_pwms, chip->base, chip->npwm);
 278
 279        INIT_LIST_HEAD(&chip->list);
 280        list_add(&chip->list, &pwm_chips);
 281
 282        ret = 0;
 283
 284        if (IS_ENABLED(CONFIG_OF))
 285                of_pwmchip_add(chip);
 286
 287        pwmchip_sysfs_export(chip);
 288
 289out:
 290        mutex_unlock(&pwm_lock);
 291        return ret;
 292}
 293EXPORT_SYMBOL_GPL(pwmchip_add_with_polarity);
 294
 295/**
 296 * pwmchip_add() - register a new PWM chip
 297 * @chip: the PWM chip to add
 298 *
 299 * Register a new PWM chip. If chip->base < 0 then a dynamically assigned base
 300 * will be used. The initial polarity for all channels is normal.
 301 *
 302 * Returns: 0 on success or a negative error code on failure.
 303 */
 304int pwmchip_add(struct pwm_chip *chip)
 305{
 306        return pwmchip_add_with_polarity(chip, PWM_POLARITY_NORMAL);
 307}
 308EXPORT_SYMBOL_GPL(pwmchip_add);
 309
 310/**
 311 * pwmchip_remove() - remove a PWM chip
 312 * @chip: the PWM chip to remove
 313 *
 314 * Removes a PWM chip. This function may return busy if the PWM chip provides
 315 * a PWM device that is still requested.
 316 *
 317 * Returns: 0 on success or a negative error code on failure.
 318 */
 319int pwmchip_remove(struct pwm_chip *chip)
 320{
 321        unsigned int i;
 322        int ret = 0;
 323
 324        mutex_lock(&pwm_lock);
 325
 326        for (i = 0; i < chip->npwm; i++) {
 327                struct pwm_device *pwm = &chip->pwms[i];
 328
 329                if (test_bit(PWMF_REQUESTED, &pwm->flags)) {
 330                        ret = -EBUSY;
 331                        goto out;
 332                }
 333        }
 334
 335        list_del_init(&chip->list);
 336
 337        if (IS_ENABLED(CONFIG_OF))
 338                of_pwmchip_remove(chip);
 339
 340        free_pwms(chip);
 341
 342        pwmchip_sysfs_unexport(chip);
 343
 344out:
 345        mutex_unlock(&pwm_lock);
 346        return ret;
 347}
 348EXPORT_SYMBOL_GPL(pwmchip_remove);
 349
 350/**
 351 * pwm_request() - request a PWM device
 352 * @pwm: global PWM device index
 353 * @label: PWM device label
 354 *
 355 * This function is deprecated, use pwm_get() instead.
 356 *
 357 * Returns: A pointer to a PWM device or an ERR_PTR()-encoded error code on
 358 * failure.
 359 */
 360struct pwm_device *pwm_request(int pwm, const char *label)
 361{
 362        struct pwm_device *dev;
 363        int err;
 364
 365        if (pwm < 0 || pwm >= MAX_PWMS)
 366                return ERR_PTR(-EINVAL);
 367
 368        mutex_lock(&pwm_lock);
 369
 370        dev = pwm_to_device(pwm);
 371        if (!dev) {
 372                dev = ERR_PTR(-EPROBE_DEFER);
 373                goto out;
 374        }
 375
 376        err = pwm_device_request(dev, label);
 377        if (err < 0)
 378                dev = ERR_PTR(err);
 379
 380out:
 381        mutex_unlock(&pwm_lock);
 382
 383        return dev;
 384}
 385EXPORT_SYMBOL_GPL(pwm_request);
 386
 387/**
 388 * pwm_request_from_chip() - request a PWM device relative to a PWM chip
 389 * @chip: PWM chip
 390 * @index: per-chip index of the PWM to request
 391 * @label: a literal description string of this PWM
 392 *
 393 * Returns: A pointer to the PWM device at the given index of the given PWM
 394 * chip. A negative error code is returned if the index is not valid for the
 395 * specified PWM chip or if the PWM device cannot be requested.
 396 */
 397struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
 398                                         unsigned int index,
 399                                         const char *label)
 400{
 401        struct pwm_device *pwm;
 402        int err;
 403
 404        if (!chip || index >= chip->npwm)
 405                return ERR_PTR(-EINVAL);
 406
 407        mutex_lock(&pwm_lock);
 408        pwm = &chip->pwms[index];
 409
 410        err = pwm_device_request(pwm, label);
 411        if (err < 0)
 412                pwm = ERR_PTR(err);
 413
 414        mutex_unlock(&pwm_lock);
 415        return pwm;
 416}
 417EXPORT_SYMBOL_GPL(pwm_request_from_chip);
 418
 419/**
 420 * pwm_free() - free a PWM device
 421 * @pwm: PWM device
 422 *
 423 * This function is deprecated, use pwm_put() instead.
 424 */
 425void pwm_free(struct pwm_device *pwm)
 426{
 427        pwm_put(pwm);
 428}
 429EXPORT_SYMBOL_GPL(pwm_free);
 430
 431/**
 432 * pwm_config() - change a PWM device configuration
 433 * @pwm: PWM device
 434 * @duty_ns: "on" time (in nanoseconds)
 435 * @period_ns: duration (in nanoseconds) of one cycle
 436 *
 437 * Returns: 0 on success or a negative error code on failure.
 438 */
 439int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
 440{
 441        int err;
 442
 443        if (!pwm || duty_ns < 0 || period_ns <= 0 || duty_ns > period_ns)
 444                return -EINVAL;
 445
 446        err = pwm->chip->ops->config(pwm->chip, pwm, duty_ns, period_ns);
 447        if (err)
 448                return err;
 449
 450        pwm->duty_cycle = duty_ns;
 451        pwm->period = period_ns;
 452
 453        return 0;
 454}
 455EXPORT_SYMBOL_GPL(pwm_config);
 456
 457/**
 458 * pwm_set_polarity() - configure the polarity of a PWM signal
 459 * @pwm: PWM device
 460 * @polarity: new polarity of the PWM signal
 461 *
 462 * Note that the polarity cannot be configured while the PWM device is
 463 * enabled.
 464 *
 465 * Returns: 0 on success or a negative error code on failure.
 466 */
 467int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity)
 468{
 469        int err;
 470
 471        if (!pwm || !pwm->chip->ops)
 472                return -EINVAL;
 473
 474        if (!pwm->chip->ops->set_polarity)
 475                return -ENOSYS;
 476
 477        mutex_lock(&pwm->lock);
 478
 479        if (pwm_is_enabled(pwm)) {
 480                err = -EBUSY;
 481                goto unlock;
 482        }
 483
 484        err = pwm->chip->ops->set_polarity(pwm->chip, pwm, polarity);
 485        if (err)
 486                goto unlock;
 487
 488        pwm->polarity = polarity;
 489
 490unlock:
 491        mutex_unlock(&pwm->lock);
 492        return err;
 493}
 494EXPORT_SYMBOL_GPL(pwm_set_polarity);
 495
 496/**
 497 * pwm_enable() - start a PWM output toggling
 498 * @pwm: PWM device
 499 *
 500 * Returns: 0 on success or a negative error code on failure.
 501 */
 502int pwm_enable(struct pwm_device *pwm)
 503{
 504        int err = 0;
 505
 506        if (!pwm)
 507                return -EINVAL;
 508
 509        mutex_lock(&pwm->lock);
 510
 511        if (!test_and_set_bit(PWMF_ENABLED, &pwm->flags)) {
 512                err = pwm->chip->ops->enable(pwm->chip, pwm);
 513                if (err)
 514                        clear_bit(PWMF_ENABLED, &pwm->flags);
 515        }
 516
 517        mutex_unlock(&pwm->lock);
 518
 519        return err;
 520}
 521EXPORT_SYMBOL_GPL(pwm_enable);
 522
 523/**
 524 * pwm_disable() - stop a PWM output toggling
 525 * @pwm: PWM device
 526 */
 527void pwm_disable(struct pwm_device *pwm)
 528{
 529        if (pwm && test_and_clear_bit(PWMF_ENABLED, &pwm->flags))
 530                pwm->chip->ops->disable(pwm->chip, pwm);
 531}
 532EXPORT_SYMBOL_GPL(pwm_disable);
 533
 534static struct pwm_chip *of_node_to_pwmchip(struct device_node *np)
 535{
 536        struct pwm_chip *chip;
 537
 538        mutex_lock(&pwm_lock);
 539
 540        list_for_each_entry(chip, &pwm_chips, list)
 541                if (chip->dev && chip->dev->of_node == np) {
 542                        mutex_unlock(&pwm_lock);
 543                        return chip;
 544                }
 545
 546        mutex_unlock(&pwm_lock);
 547
 548        return ERR_PTR(-EPROBE_DEFER);
 549}
 550
 551/**
 552 * of_pwm_get() - request a PWM via the PWM framework
 553 * @np: device node to get the PWM from
 554 * @con_id: consumer name
 555 *
 556 * Returns the PWM device parsed from the phandle and index specified in the
 557 * "pwms" property of a device tree node or a negative error-code on failure.
 558 * Values parsed from the device tree are stored in the returned PWM device
 559 * object.
 560 *
 561 * If con_id is NULL, the first PWM device listed in the "pwms" property will
 562 * be requested. Otherwise the "pwm-names" property is used to do a reverse
 563 * lookup of the PWM index. This also means that the "pwm-names" property
 564 * becomes mandatory for devices that look up the PWM device via the con_id
 565 * parameter.
 566 *
 567 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
 568 * error code on failure.
 569 */
 570struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id)
 571{
 572        struct pwm_device *pwm = NULL;
 573        struct of_phandle_args args;
 574        struct pwm_chip *pc;
 575        int index = 0;
 576        int err;
 577
 578        if (con_id) {
 579                index = of_property_match_string(np, "pwm-names", con_id);
 580                if (index < 0)
 581                        return ERR_PTR(index);
 582        }
 583
 584        err = of_parse_phandle_with_args(np, "pwms", "#pwm-cells", index,
 585                                         &args);
 586        if (err) {
 587                pr_debug("%s(): can't parse \"pwms\" property\n", __func__);
 588                return ERR_PTR(err);
 589        }
 590
 591        pc = of_node_to_pwmchip(args.np);
 592        if (IS_ERR(pc)) {
 593                pr_debug("%s(): PWM chip not found\n", __func__);
 594                pwm = ERR_CAST(pc);
 595                goto put;
 596        }
 597
 598        if (args.args_count != pc->of_pwm_n_cells) {
 599                pr_debug("%s: wrong #pwm-cells for %s\n", np->full_name,
 600                         args.np->full_name);
 601                pwm = ERR_PTR(-EINVAL);
 602                goto put;
 603        }
 604
 605        pwm = pc->of_xlate(pc, &args);
 606        if (IS_ERR(pwm))
 607                goto put;
 608
 609        /*
 610         * If a consumer name was not given, try to look it up from the
 611         * "pwm-names" property if it exists. Otherwise use the name of
 612         * the user device node.
 613         */
 614        if (!con_id) {
 615                err = of_property_read_string_index(np, "pwm-names", index,
 616                                                    &con_id);
 617                if (err < 0)
 618                        con_id = np->name;
 619        }
 620
 621        pwm->label = con_id;
 622
 623put:
 624        of_node_put(args.np);
 625
 626        return pwm;
 627}
 628EXPORT_SYMBOL_GPL(of_pwm_get);
 629
 630/**
 631 * pwm_add_table() - register PWM device consumers
 632 * @table: array of consumers to register
 633 * @num: number of consumers in table
 634 */
 635void pwm_add_table(struct pwm_lookup *table, size_t num)
 636{
 637        mutex_lock(&pwm_lookup_lock);
 638
 639        while (num--) {
 640                list_add_tail(&table->list, &pwm_lookup_list);
 641                table++;
 642        }
 643
 644        mutex_unlock(&pwm_lookup_lock);
 645}
 646
 647/**
 648 * pwm_remove_table() - unregister PWM device consumers
 649 * @table: array of consumers to unregister
 650 * @num: number of consumers in table
 651 */
 652void pwm_remove_table(struct pwm_lookup *table, size_t num)
 653{
 654        mutex_lock(&pwm_lookup_lock);
 655
 656        while (num--) {
 657                list_del(&table->list);
 658                table++;
 659        }
 660
 661        mutex_unlock(&pwm_lookup_lock);
 662}
 663
 664/**
 665 * pwm_get() - look up and request a PWM device
 666 * @dev: device for PWM consumer
 667 * @con_id: consumer name
 668 *
 669 * Lookup is first attempted using DT. If the device was not instantiated from
 670 * a device tree, a PWM chip and a relative index is looked up via a table
 671 * supplied by board setup code (see pwm_add_table()).
 672 *
 673 * Once a PWM chip has been found the specified PWM device will be requested
 674 * and is ready to be used.
 675 *
 676 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
 677 * error code on failure.
 678 */
 679struct pwm_device *pwm_get(struct device *dev, const char *con_id)
 680{
 681        struct pwm_device *pwm = ERR_PTR(-EPROBE_DEFER);
 682        const char *dev_id = dev ? dev_name(dev) : NULL;
 683        struct pwm_chip *chip = NULL;
 684        unsigned int best = 0;
 685        struct pwm_lookup *p, *chosen = NULL;
 686        unsigned int match;
 687
 688        /* look up via DT first */
 689        if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
 690                return of_pwm_get(dev->of_node, con_id);
 691
 692        /*
 693         * We look up the provider in the static table typically provided by
 694         * board setup code. We first try to lookup the consumer device by
 695         * name. If the consumer device was passed in as NULL or if no match
 696         * was found, we try to find the consumer by directly looking it up
 697         * by name.
 698         *
 699         * If a match is found, the provider PWM chip is looked up by name
 700         * and a PWM device is requested using the PWM device per-chip index.
 701         *
 702         * The lookup algorithm was shamelessly taken from the clock
 703         * framework:
 704         *
 705         * We do slightly fuzzy matching here:
 706         *  An entry with a NULL ID is assumed to be a wildcard.
 707         *  If an entry has a device ID, it must match
 708         *  If an entry has a connection ID, it must match
 709         * Then we take the most specific entry - with the following order
 710         * of precedence: dev+con > dev only > con only.
 711         */
 712        mutex_lock(&pwm_lookup_lock);
 713
 714        list_for_each_entry(p, &pwm_lookup_list, list) {
 715                match = 0;
 716
 717                if (p->dev_id) {
 718                        if (!dev_id || strcmp(p->dev_id, dev_id))
 719                                continue;
 720
 721                        match += 2;
 722                }
 723
 724                if (p->con_id) {
 725                        if (!con_id || strcmp(p->con_id, con_id))
 726                                continue;
 727
 728                        match += 1;
 729                }
 730
 731                if (match > best) {
 732                        chosen = p;
 733
 734                        if (match != 3)
 735                                best = match;
 736                        else
 737                                break;
 738                }
 739        }
 740
 741        if (!chosen) {
 742                pwm = ERR_PTR(-ENODEV);
 743                goto out;
 744        }
 745
 746        chip = pwmchip_find_by_name(chosen->provider);
 747        if (!chip)
 748                goto out;
 749
 750        pwm = pwm_request_from_chip(chip, chosen->index, con_id ?: dev_id);
 751        if (IS_ERR(pwm))
 752                goto out;
 753
 754        pwm_set_period(pwm, chosen->period);
 755        pwm_set_polarity(pwm, chosen->polarity);
 756
 757out:
 758        mutex_unlock(&pwm_lookup_lock);
 759        return pwm;
 760}
 761EXPORT_SYMBOL_GPL(pwm_get);
 762
 763/**
 764 * pwm_put() - release a PWM device
 765 * @pwm: PWM device
 766 */
 767void pwm_put(struct pwm_device *pwm)
 768{
 769        if (!pwm)
 770                return;
 771
 772        mutex_lock(&pwm_lock);
 773
 774        if (!test_and_clear_bit(PWMF_REQUESTED, &pwm->flags)) {
 775                pr_warn("PWM device already freed\n");
 776                goto out;
 777        }
 778
 779        if (pwm->chip->ops->free)
 780                pwm->chip->ops->free(pwm->chip, pwm);
 781
 782        pwm->label = NULL;
 783
 784        module_put(pwm->chip->ops->owner);
 785out:
 786        mutex_unlock(&pwm_lock);
 787}
 788EXPORT_SYMBOL_GPL(pwm_put);
 789
 790static void devm_pwm_release(struct device *dev, void *res)
 791{
 792        pwm_put(*(struct pwm_device **)res);
 793}
 794
 795/**
 796 * devm_pwm_get() - resource managed pwm_get()
 797 * @dev: device for PWM consumer
 798 * @con_id: consumer name
 799 *
 800 * This function performs like pwm_get() but the acquired PWM device will
 801 * automatically be released on driver detach.
 802 *
 803 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
 804 * error code on failure.
 805 */
 806struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id)
 807{
 808        struct pwm_device **ptr, *pwm;
 809
 810        ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL);
 811        if (!ptr)
 812                return ERR_PTR(-ENOMEM);
 813
 814        pwm = pwm_get(dev, con_id);
 815        if (!IS_ERR(pwm)) {
 816                *ptr = pwm;
 817                devres_add(dev, ptr);
 818        } else {
 819                devres_free(ptr);
 820        }
 821
 822        return pwm;
 823}
 824EXPORT_SYMBOL_GPL(devm_pwm_get);
 825
 826/**
 827 * devm_of_pwm_get() - resource managed of_pwm_get()
 828 * @dev: device for PWM consumer
 829 * @np: device node to get the PWM from
 830 * @con_id: consumer name
 831 *
 832 * This function performs like of_pwm_get() but the acquired PWM device will
 833 * automatically be released on driver detach.
 834 *
 835 * Returns: A pointer to the requested PWM device or an ERR_PTR()-encoded
 836 * error code on failure.
 837 */
 838struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np,
 839                                   const char *con_id)
 840{
 841        struct pwm_device **ptr, *pwm;
 842
 843        ptr = devres_alloc(devm_pwm_release, sizeof(*ptr), GFP_KERNEL);
 844        if (!ptr)
 845                return ERR_PTR(-ENOMEM);
 846
 847        pwm = of_pwm_get(np, con_id);
 848        if (!IS_ERR(pwm)) {
 849                *ptr = pwm;
 850                devres_add(dev, ptr);
 851        } else {
 852                devres_free(ptr);
 853        }
 854
 855        return pwm;
 856}
 857EXPORT_SYMBOL_GPL(devm_of_pwm_get);
 858
 859static int devm_pwm_match(struct device *dev, void *res, void *data)
 860{
 861        struct pwm_device **p = res;
 862
 863        if (WARN_ON(!p || !*p))
 864                return 0;
 865
 866        return *p == data;
 867}
 868
 869/**
 870 * devm_pwm_put() - resource managed pwm_put()
 871 * @dev: device for PWM consumer
 872 * @pwm: PWM device
 873 *
 874 * Release a PWM previously allocated using devm_pwm_get(). Calling this
 875 * function is usually not needed because devm-allocated resources are
 876 * automatically released on driver detach.
 877 */
 878void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
 879{
 880        WARN_ON(devres_release(dev, devm_pwm_release, devm_pwm_match, pwm));
 881}
 882EXPORT_SYMBOL_GPL(devm_pwm_put);
 883
 884/**
 885  * pwm_can_sleep() - report whether PWM access will sleep
 886  * @pwm: PWM device
 887  *
 888  * Returns: True if accessing the PWM can sleep, false otherwise.
 889  */
 890bool pwm_can_sleep(struct pwm_device *pwm)
 891{
 892        return pwm->chip->can_sleep;
 893}
 894EXPORT_SYMBOL_GPL(pwm_can_sleep);
 895
 896#ifdef CONFIG_DEBUG_FS
 897static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s)
 898{
 899        unsigned int i;
 900
 901        for (i = 0; i < chip->npwm; i++) {
 902                struct pwm_device *pwm = &chip->pwms[i];
 903
 904                seq_printf(s, " pwm-%-3d (%-20.20s):", i, pwm->label);
 905
 906                if (test_bit(PWMF_REQUESTED, &pwm->flags))
 907                        seq_puts(s, " requested");
 908
 909                if (pwm_is_enabled(pwm))
 910                        seq_puts(s, " enabled");
 911
 912                seq_puts(s, "\n");
 913        }
 914}
 915
 916static void *pwm_seq_start(struct seq_file *s, loff_t *pos)
 917{
 918        mutex_lock(&pwm_lock);
 919        s->private = "";
 920
 921        return seq_list_start(&pwm_chips, *pos);
 922}
 923
 924static void *pwm_seq_next(struct seq_file *s, void *v, loff_t *pos)
 925{
 926        s->private = "\n";
 927
 928        return seq_list_next(v, &pwm_chips, pos);
 929}
 930
 931static void pwm_seq_stop(struct seq_file *s, void *v)
 932{
 933        mutex_unlock(&pwm_lock);
 934}
 935
 936static int pwm_seq_show(struct seq_file *s, void *v)
 937{
 938        struct pwm_chip *chip = list_entry(v, struct pwm_chip, list);
 939
 940        seq_printf(s, "%s%s/%s, %d PWM device%s\n", (char *)s->private,
 941                   chip->dev->bus ? chip->dev->bus->name : "no-bus",
 942                   dev_name(chip->dev), chip->npwm,
 943                   (chip->npwm != 1) ? "s" : "");
 944
 945        if (chip->ops->dbg_show)
 946                chip->ops->dbg_show(chip, s);
 947        else
 948                pwm_dbg_show(chip, s);
 949
 950        return 0;
 951}
 952
 953static const struct seq_operations pwm_seq_ops = {
 954        .start = pwm_seq_start,
 955        .next = pwm_seq_next,
 956        .stop = pwm_seq_stop,
 957        .show = pwm_seq_show,
 958};
 959
 960static int pwm_seq_open(struct inode *inode, struct file *file)
 961{
 962        return seq_open(file, &pwm_seq_ops);
 963}
 964
 965static const struct file_operations pwm_debugfs_ops = {
 966        .owner = THIS_MODULE,
 967        .open = pwm_seq_open,
 968        .read = seq_read,
 969        .llseek = seq_lseek,
 970        .release = seq_release,
 971};
 972
 973static int __init pwm_debugfs_init(void)
 974{
 975        debugfs_create_file("pwm", S_IFREG | S_IRUGO, NULL, NULL,
 976                            &pwm_debugfs_ops);
 977
 978        return 0;
 979}
 980subsys_initcall(pwm_debugfs_init);
 981#endif /* CONFIG_DEBUG_FS */
 982