linux/drivers/regulator/core.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2//
   3// core.c  --  Voltage/Current Regulator framework.
   4//
   5// Copyright 2007, 2008 Wolfson Microelectronics PLC.
   6// Copyright 2008 SlimLogic Ltd.
   7//
   8// Author: Liam Girdwood <lrg@slimlogic.co.uk>
   9
  10#include <linux/kernel.h>
  11#include <linux/init.h>
  12#include <linux/debugfs.h>
  13#include <linux/device.h>
  14#include <linux/slab.h>
  15#include <linux/async.h>
  16#include <linux/err.h>
  17#include <linux/mutex.h>
  18#include <linux/suspend.h>
  19#include <linux/delay.h>
  20#include <linux/gpio/consumer.h>
  21#include <linux/of.h>
  22#include <linux/regmap.h>
  23#include <linux/regulator/of_regulator.h>
  24#include <linux/regulator/consumer.h>
  25#include <linux/regulator/coupler.h>
  26#include <linux/regulator/driver.h>
  27#include <linux/regulator/machine.h>
  28#include <linux/module.h>
  29
  30#define CREATE_TRACE_POINTS
  31#include <trace/events/regulator.h>
  32
  33#include "dummy.h"
  34#include "internal.h"
  35
  36static DEFINE_WW_CLASS(regulator_ww_class);
  37static DEFINE_MUTEX(regulator_nesting_mutex);
  38static DEFINE_MUTEX(regulator_list_mutex);
  39static LIST_HEAD(regulator_map_list);
  40static LIST_HEAD(regulator_ena_gpio_list);
  41static LIST_HEAD(regulator_supply_alias_list);
  42static LIST_HEAD(regulator_coupler_list);
  43static bool has_full_constraints;
  44
  45static struct dentry *debugfs_root;
  46
  47/*
  48 * struct regulator_map
  49 *
  50 * Used to provide symbolic supply names to devices.
  51 */
  52struct regulator_map {
  53        struct list_head list;
  54        const char *dev_name;   /* The dev_name() for the consumer */
  55        const char *supply;
  56        struct regulator_dev *regulator;
  57};
  58
  59/*
  60 * struct regulator_enable_gpio
  61 *
  62 * Management for shared enable GPIO pin
  63 */
  64struct regulator_enable_gpio {
  65        struct list_head list;
  66        struct gpio_desc *gpiod;
  67        u32 enable_count;       /* a number of enabled shared GPIO */
  68        u32 request_count;      /* a number of requested shared GPIO */
  69};
  70
  71/*
  72 * struct regulator_supply_alias
  73 *
  74 * Used to map lookups for a supply onto an alternative device.
  75 */
  76struct regulator_supply_alias {
  77        struct list_head list;
  78        struct device *src_dev;
  79        const char *src_supply;
  80        struct device *alias_dev;
  81        const char *alias_supply;
  82};
  83
  84static int _regulator_is_enabled(struct regulator_dev *rdev);
  85static int _regulator_disable(struct regulator *regulator);
  86static int _regulator_get_current_limit(struct regulator_dev *rdev);
  87static unsigned int _regulator_get_mode(struct regulator_dev *rdev);
  88static int _notifier_call_chain(struct regulator_dev *rdev,
  89                                  unsigned long event, void *data);
  90static int _regulator_do_set_voltage(struct regulator_dev *rdev,
  91                                     int min_uV, int max_uV);
  92static int regulator_balance_voltage(struct regulator_dev *rdev,
  93                                     suspend_state_t state);
  94static struct regulator *create_regulator(struct regulator_dev *rdev,
  95                                          struct device *dev,
  96                                          const char *supply_name);
  97static void destroy_regulator(struct regulator *regulator);
  98static void _regulator_put(struct regulator *regulator);
  99
 100const char *rdev_get_name(struct regulator_dev *rdev)
 101{
 102        if (rdev->constraints && rdev->constraints->name)
 103                return rdev->constraints->name;
 104        else if (rdev->desc->name)
 105                return rdev->desc->name;
 106        else
 107                return "";
 108}
 109EXPORT_SYMBOL_GPL(rdev_get_name);
 110
 111static bool have_full_constraints(void)
 112{
 113        return has_full_constraints || of_have_populated_dt();
 114}
 115
 116static bool regulator_ops_is_valid(struct regulator_dev *rdev, int ops)
 117{
 118        if (!rdev->constraints) {
 119                rdev_err(rdev, "no constraints\n");
 120                return false;
 121        }
 122
 123        if (rdev->constraints->valid_ops_mask & ops)
 124                return true;
 125
 126        return false;
 127}
 128
 129/**
 130 * regulator_lock_nested - lock a single regulator
 131 * @rdev:               regulator source
 132 * @ww_ctx:             w/w mutex acquire context
 133 *
 134 * This function can be called many times by one task on
 135 * a single regulator and its mutex will be locked only
 136 * once. If a task, which is calling this function is other
 137 * than the one, which initially locked the mutex, it will
 138 * wait on mutex.
 139 */
 140static inline int regulator_lock_nested(struct regulator_dev *rdev,
 141                                        struct ww_acquire_ctx *ww_ctx)
 142{
 143        bool lock = false;
 144        int ret = 0;
 145
 146        mutex_lock(&regulator_nesting_mutex);
 147
 148        if (ww_ctx || !ww_mutex_trylock(&rdev->mutex)) {
 149                if (rdev->mutex_owner == current)
 150                        rdev->ref_cnt++;
 151                else
 152                        lock = true;
 153
 154                if (lock) {
 155                        mutex_unlock(&regulator_nesting_mutex);
 156                        ret = ww_mutex_lock(&rdev->mutex, ww_ctx);
 157                        mutex_lock(&regulator_nesting_mutex);
 158                }
 159        } else {
 160                lock = true;
 161        }
 162
 163        if (lock && ret != -EDEADLK) {
 164                rdev->ref_cnt++;
 165                rdev->mutex_owner = current;
 166        }
 167
 168        mutex_unlock(&regulator_nesting_mutex);
 169
 170        return ret;
 171}
 172
 173/**
 174 * regulator_lock - lock a single regulator
 175 * @rdev:               regulator source
 176 *
 177 * This function can be called many times by one task on
 178 * a single regulator and its mutex will be locked only
 179 * once. If a task, which is calling this function is other
 180 * than the one, which initially locked the mutex, it will
 181 * wait on mutex.
 182 */
 183static void regulator_lock(struct regulator_dev *rdev)
 184{
 185        regulator_lock_nested(rdev, NULL);
 186}
 187
 188/**
 189 * regulator_unlock - unlock a single regulator
 190 * @rdev:               regulator_source
 191 *
 192 * This function unlocks the mutex when the
 193 * reference counter reaches 0.
 194 */
 195static void regulator_unlock(struct regulator_dev *rdev)
 196{
 197        mutex_lock(&regulator_nesting_mutex);
 198
 199        if (--rdev->ref_cnt == 0) {
 200                rdev->mutex_owner = NULL;
 201                ww_mutex_unlock(&rdev->mutex);
 202        }
 203
 204        WARN_ON_ONCE(rdev->ref_cnt < 0);
 205
 206        mutex_unlock(&regulator_nesting_mutex);
 207}
 208
 209static bool regulator_supply_is_couple(struct regulator_dev *rdev)
 210{
 211        struct regulator_dev *c_rdev;
 212        int i;
 213
 214        for (i = 1; i < rdev->coupling_desc.n_coupled; i++) {
 215                c_rdev = rdev->coupling_desc.coupled_rdevs[i];
 216
 217                if (rdev->supply->rdev == c_rdev)
 218                        return true;
 219        }
 220
 221        return false;
 222}
 223
 224static void regulator_unlock_recursive(struct regulator_dev *rdev,
 225                                       unsigned int n_coupled)
 226{
 227        struct regulator_dev *c_rdev, *supply_rdev;
 228        int i, supply_n_coupled;
 229
 230        for (i = n_coupled; i > 0; i--) {
 231                c_rdev = rdev->coupling_desc.coupled_rdevs[i - 1];
 232
 233                if (!c_rdev)
 234                        continue;
 235
 236                if (c_rdev->supply && !regulator_supply_is_couple(c_rdev)) {
 237                        supply_rdev = c_rdev->supply->rdev;
 238                        supply_n_coupled = supply_rdev->coupling_desc.n_coupled;
 239
 240                        regulator_unlock_recursive(supply_rdev,
 241                                                   supply_n_coupled);
 242                }
 243
 244                regulator_unlock(c_rdev);
 245        }
 246}
 247
 248static int regulator_lock_recursive(struct regulator_dev *rdev,
 249                                    struct regulator_dev **new_contended_rdev,
 250                                    struct regulator_dev **old_contended_rdev,
 251                                    struct ww_acquire_ctx *ww_ctx)
 252{
 253        struct regulator_dev *c_rdev;
 254        int i, err;
 255
 256        for (i = 0; i < rdev->coupling_desc.n_coupled; i++) {
 257                c_rdev = rdev->coupling_desc.coupled_rdevs[i];
 258
 259                if (!c_rdev)
 260                        continue;
 261
 262                if (c_rdev != *old_contended_rdev) {
 263                        err = regulator_lock_nested(c_rdev, ww_ctx);
 264                        if (err) {
 265                                if (err == -EDEADLK) {
 266                                        *new_contended_rdev = c_rdev;
 267                                        goto err_unlock;
 268                                }
 269
 270                                /* shouldn't happen */
 271                                WARN_ON_ONCE(err != -EALREADY);
 272                        }
 273                } else {
 274                        *old_contended_rdev = NULL;
 275                }
 276
 277                if (c_rdev->supply && !regulator_supply_is_couple(c_rdev)) {
 278                        err = regulator_lock_recursive(c_rdev->supply->rdev,
 279                                                       new_contended_rdev,
 280                                                       old_contended_rdev,
 281                                                       ww_ctx);
 282                        if (err) {
 283                                regulator_unlock(c_rdev);
 284                                goto err_unlock;
 285                        }
 286                }
 287        }
 288
 289        return 0;
 290
 291err_unlock:
 292        regulator_unlock_recursive(rdev, i);
 293
 294        return err;
 295}
 296
 297/**
 298 * regulator_unlock_dependent - unlock regulator's suppliers and coupled
 299 *                              regulators
 300 * @rdev:                       regulator source
 301 * @ww_ctx:                     w/w mutex acquire context
 302 *
 303 * Unlock all regulators related with rdev by coupling or supplying.
 304 */
 305static void regulator_unlock_dependent(struct regulator_dev *rdev,
 306                                       struct ww_acquire_ctx *ww_ctx)
 307{
 308        regulator_unlock_recursive(rdev, rdev->coupling_desc.n_coupled);
 309        ww_acquire_fini(ww_ctx);
 310}
 311
 312/**
 313 * regulator_lock_dependent - lock regulator's suppliers and coupled regulators
 314 * @rdev:                       regulator source
 315 * @ww_ctx:                     w/w mutex acquire context
 316 *
 317 * This function as a wrapper on regulator_lock_recursive(), which locks
 318 * all regulators related with rdev by coupling or supplying.
 319 */
 320static void regulator_lock_dependent(struct regulator_dev *rdev,
 321                                     struct ww_acquire_ctx *ww_ctx)
 322{
 323        struct regulator_dev *new_contended_rdev = NULL;
 324        struct regulator_dev *old_contended_rdev = NULL;
 325        int err;
 326
 327        mutex_lock(&regulator_list_mutex);
 328
 329        ww_acquire_init(ww_ctx, &regulator_ww_class);
 330
 331        do {
 332                if (new_contended_rdev) {
 333                        ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx);
 334                        old_contended_rdev = new_contended_rdev;
 335                        old_contended_rdev->ref_cnt++;
 336                }
 337
 338                err = regulator_lock_recursive(rdev,
 339                                               &new_contended_rdev,
 340                                               &old_contended_rdev,
 341                                               ww_ctx);
 342
 343                if (old_contended_rdev)
 344                        regulator_unlock(old_contended_rdev);
 345
 346        } while (err == -EDEADLK);
 347
 348        ww_acquire_done(ww_ctx);
 349
 350        mutex_unlock(&regulator_list_mutex);
 351}
 352
 353/**
 354 * of_get_child_regulator - get a child regulator device node
 355 * based on supply name
 356 * @parent: Parent device node
 357 * @prop_name: Combination regulator supply name and "-supply"
 358 *
 359 * Traverse all child nodes.
 360 * Extract the child regulator device node corresponding to the supply name.
 361 * returns the device node corresponding to the regulator if found, else
 362 * returns NULL.
 363 */
 364static struct device_node *of_get_child_regulator(struct device_node *parent,
 365                                                  const char *prop_name)
 366{
 367        struct device_node *regnode = NULL;
 368        struct device_node *child = NULL;
 369
 370        for_each_child_of_node(parent, child) {
 371                regnode = of_parse_phandle(child, prop_name, 0);
 372
 373                if (!regnode) {
 374                        regnode = of_get_child_regulator(child, prop_name);
 375                        if (regnode)
 376                                goto err_node_put;
 377                } else {
 378                        goto err_node_put;
 379                }
 380        }
 381        return NULL;
 382
 383err_node_put:
 384        of_node_put(child);
 385        return regnode;
 386}
 387
 388/**
 389 * of_get_regulator - get a regulator device node based on supply name
 390 * @dev: Device pointer for the consumer (of regulator) device
 391 * @supply: regulator supply name
 392 *
 393 * Extract the regulator device node corresponding to the supply name.
 394 * returns the device node corresponding to the regulator if found, else
 395 * returns NULL.
 396 */
 397static struct device_node *of_get_regulator(struct device *dev, const char *supply)
 398{
 399        struct device_node *regnode = NULL;
 400        char prop_name[64]; /* 64 is max size of property name */
 401
 402        dev_dbg(dev, "Looking up %s-supply from device tree\n", supply);
 403
 404        snprintf(prop_name, 64, "%s-supply", supply);
 405        regnode = of_parse_phandle(dev->of_node, prop_name, 0);
 406
 407        if (!regnode) {
 408                regnode = of_get_child_regulator(dev->of_node, prop_name);
 409                if (regnode)
 410                        return regnode;
 411
 412                dev_dbg(dev, "Looking up %s property in node %pOF failed\n",
 413                                prop_name, dev->of_node);
 414                return NULL;
 415        }
 416        return regnode;
 417}
 418
 419/* Platform voltage constraint check */
 420int regulator_check_voltage(struct regulator_dev *rdev,
 421                            int *min_uV, int *max_uV)
 422{
 423        BUG_ON(*min_uV > *max_uV);
 424
 425        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) {
 426                rdev_err(rdev, "voltage operation not allowed\n");
 427                return -EPERM;
 428        }
 429
 430        if (*max_uV > rdev->constraints->max_uV)
 431                *max_uV = rdev->constraints->max_uV;
 432        if (*min_uV < rdev->constraints->min_uV)
 433                *min_uV = rdev->constraints->min_uV;
 434
 435        if (*min_uV > *max_uV) {
 436                rdev_err(rdev, "unsupportable voltage range: %d-%duV\n",
 437                         *min_uV, *max_uV);
 438                return -EINVAL;
 439        }
 440
 441        return 0;
 442}
 443
 444/* return 0 if the state is valid */
 445static int regulator_check_states(suspend_state_t state)
 446{
 447        return (state > PM_SUSPEND_MAX || state == PM_SUSPEND_TO_IDLE);
 448}
 449
 450/* Make sure we select a voltage that suits the needs of all
 451 * regulator consumers
 452 */
 453int regulator_check_consumers(struct regulator_dev *rdev,
 454                              int *min_uV, int *max_uV,
 455                              suspend_state_t state)
 456{
 457        struct regulator *regulator;
 458        struct regulator_voltage *voltage;
 459
 460        list_for_each_entry(regulator, &rdev->consumer_list, list) {
 461                voltage = &regulator->voltage[state];
 462                /*
 463                 * Assume consumers that didn't say anything are OK
 464                 * with anything in the constraint range.
 465                 */
 466                if (!voltage->min_uV && !voltage->max_uV)
 467                        continue;
 468
 469                if (*max_uV > voltage->max_uV)
 470                        *max_uV = voltage->max_uV;
 471                if (*min_uV < voltage->min_uV)
 472                        *min_uV = voltage->min_uV;
 473        }
 474
 475        if (*min_uV > *max_uV) {
 476                rdev_err(rdev, "Restricting voltage, %u-%uuV\n",
 477                        *min_uV, *max_uV);
 478                return -EINVAL;
 479        }
 480
 481        return 0;
 482}
 483
 484/* current constraint check */
 485static int regulator_check_current_limit(struct regulator_dev *rdev,
 486                                        int *min_uA, int *max_uA)
 487{
 488        BUG_ON(*min_uA > *max_uA);
 489
 490        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_CURRENT)) {
 491                rdev_err(rdev, "current operation not allowed\n");
 492                return -EPERM;
 493        }
 494
 495        if (*max_uA > rdev->constraints->max_uA)
 496                *max_uA = rdev->constraints->max_uA;
 497        if (*min_uA < rdev->constraints->min_uA)
 498                *min_uA = rdev->constraints->min_uA;
 499
 500        if (*min_uA > *max_uA) {
 501                rdev_err(rdev, "unsupportable current range: %d-%duA\n",
 502                         *min_uA, *max_uA);
 503                return -EINVAL;
 504        }
 505
 506        return 0;
 507}
 508
 509/* operating mode constraint check */
 510static int regulator_mode_constrain(struct regulator_dev *rdev,
 511                                    unsigned int *mode)
 512{
 513        switch (*mode) {
 514        case REGULATOR_MODE_FAST:
 515        case REGULATOR_MODE_NORMAL:
 516        case REGULATOR_MODE_IDLE:
 517        case REGULATOR_MODE_STANDBY:
 518                break;
 519        default:
 520                rdev_err(rdev, "invalid mode %x specified\n", *mode);
 521                return -EINVAL;
 522        }
 523
 524        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_MODE)) {
 525                rdev_err(rdev, "mode operation not allowed\n");
 526                return -EPERM;
 527        }
 528
 529        /* The modes are bitmasks, the most power hungry modes having
 530         * the lowest values. If the requested mode isn't supported
 531         * try higher modes.
 532         */
 533        while (*mode) {
 534                if (rdev->constraints->valid_modes_mask & *mode)
 535                        return 0;
 536                *mode /= 2;
 537        }
 538
 539        return -EINVAL;
 540}
 541
 542static inline struct regulator_state *
 543regulator_get_suspend_state(struct regulator_dev *rdev, suspend_state_t state)
 544{
 545        if (rdev->constraints == NULL)
 546                return NULL;
 547
 548        switch (state) {
 549        case PM_SUSPEND_STANDBY:
 550                return &rdev->constraints->state_standby;
 551        case PM_SUSPEND_MEM:
 552                return &rdev->constraints->state_mem;
 553        case PM_SUSPEND_MAX:
 554                return &rdev->constraints->state_disk;
 555        default:
 556                return NULL;
 557        }
 558}
 559
 560static const struct regulator_state *
 561regulator_get_suspend_state_check(struct regulator_dev *rdev, suspend_state_t state)
 562{
 563        const struct regulator_state *rstate;
 564
 565        rstate = regulator_get_suspend_state(rdev, state);
 566        if (rstate == NULL)
 567                return NULL;
 568
 569        /* If we have no suspend mode configuration don't set anything;
 570         * only warn if the driver implements set_suspend_voltage or
 571         * set_suspend_mode callback.
 572         */
 573        if (rstate->enabled != ENABLE_IN_SUSPEND &&
 574            rstate->enabled != DISABLE_IN_SUSPEND) {
 575                if (rdev->desc->ops->set_suspend_voltage ||
 576                    rdev->desc->ops->set_suspend_mode)
 577                        rdev_warn(rdev, "No configuration\n");
 578                return NULL;
 579        }
 580
 581        return rstate;
 582}
 583
 584static ssize_t microvolts_show(struct device *dev,
 585                               struct device_attribute *attr, char *buf)
 586{
 587        struct regulator_dev *rdev = dev_get_drvdata(dev);
 588        int uV;
 589
 590        regulator_lock(rdev);
 591        uV = regulator_get_voltage_rdev(rdev);
 592        regulator_unlock(rdev);
 593
 594        if (uV < 0)
 595                return uV;
 596        return sprintf(buf, "%d\n", uV);
 597}
 598static DEVICE_ATTR_RO(microvolts);
 599
 600static ssize_t microamps_show(struct device *dev,
 601                              struct device_attribute *attr, char *buf)
 602{
 603        struct regulator_dev *rdev = dev_get_drvdata(dev);
 604
 605        return sprintf(buf, "%d\n", _regulator_get_current_limit(rdev));
 606}
 607static DEVICE_ATTR_RO(microamps);
 608
 609static ssize_t name_show(struct device *dev, struct device_attribute *attr,
 610                         char *buf)
 611{
 612        struct regulator_dev *rdev = dev_get_drvdata(dev);
 613
 614        return sprintf(buf, "%s\n", rdev_get_name(rdev));
 615}
 616static DEVICE_ATTR_RO(name);
 617
 618static const char *regulator_opmode_to_str(int mode)
 619{
 620        switch (mode) {
 621        case REGULATOR_MODE_FAST:
 622                return "fast";
 623        case REGULATOR_MODE_NORMAL:
 624                return "normal";
 625        case REGULATOR_MODE_IDLE:
 626                return "idle";
 627        case REGULATOR_MODE_STANDBY:
 628                return "standby";
 629        }
 630        return "unknown";
 631}
 632
 633static ssize_t regulator_print_opmode(char *buf, int mode)
 634{
 635        return sprintf(buf, "%s\n", regulator_opmode_to_str(mode));
 636}
 637
 638static ssize_t opmode_show(struct device *dev,
 639                           struct device_attribute *attr, char *buf)
 640{
 641        struct regulator_dev *rdev = dev_get_drvdata(dev);
 642
 643        return regulator_print_opmode(buf, _regulator_get_mode(rdev));
 644}
 645static DEVICE_ATTR_RO(opmode);
 646
 647static ssize_t regulator_print_state(char *buf, int state)
 648{
 649        if (state > 0)
 650                return sprintf(buf, "enabled\n");
 651        else if (state == 0)
 652                return sprintf(buf, "disabled\n");
 653        else
 654                return sprintf(buf, "unknown\n");
 655}
 656
 657static ssize_t state_show(struct device *dev,
 658                          struct device_attribute *attr, char *buf)
 659{
 660        struct regulator_dev *rdev = dev_get_drvdata(dev);
 661        ssize_t ret;
 662
 663        regulator_lock(rdev);
 664        ret = regulator_print_state(buf, _regulator_is_enabled(rdev));
 665        regulator_unlock(rdev);
 666
 667        return ret;
 668}
 669static DEVICE_ATTR_RO(state);
 670
 671static ssize_t status_show(struct device *dev,
 672                           struct device_attribute *attr, char *buf)
 673{
 674        struct regulator_dev *rdev = dev_get_drvdata(dev);
 675        int status;
 676        char *label;
 677
 678        status = rdev->desc->ops->get_status(rdev);
 679        if (status < 0)
 680                return status;
 681
 682        switch (status) {
 683        case REGULATOR_STATUS_OFF:
 684                label = "off";
 685                break;
 686        case REGULATOR_STATUS_ON:
 687                label = "on";
 688                break;
 689        case REGULATOR_STATUS_ERROR:
 690                label = "error";
 691                break;
 692        case REGULATOR_STATUS_FAST:
 693                label = "fast";
 694                break;
 695        case REGULATOR_STATUS_NORMAL:
 696                label = "normal";
 697                break;
 698        case REGULATOR_STATUS_IDLE:
 699                label = "idle";
 700                break;
 701        case REGULATOR_STATUS_STANDBY:
 702                label = "standby";
 703                break;
 704        case REGULATOR_STATUS_BYPASS:
 705                label = "bypass";
 706                break;
 707        case REGULATOR_STATUS_UNDEFINED:
 708                label = "undefined";
 709                break;
 710        default:
 711                return -ERANGE;
 712        }
 713
 714        return sprintf(buf, "%s\n", label);
 715}
 716static DEVICE_ATTR_RO(status);
 717
 718static ssize_t min_microamps_show(struct device *dev,
 719                                  struct device_attribute *attr, char *buf)
 720{
 721        struct regulator_dev *rdev = dev_get_drvdata(dev);
 722
 723        if (!rdev->constraints)
 724                return sprintf(buf, "constraint not defined\n");
 725
 726        return sprintf(buf, "%d\n", rdev->constraints->min_uA);
 727}
 728static DEVICE_ATTR_RO(min_microamps);
 729
 730static ssize_t max_microamps_show(struct device *dev,
 731                                  struct device_attribute *attr, char *buf)
 732{
 733        struct regulator_dev *rdev = dev_get_drvdata(dev);
 734
 735        if (!rdev->constraints)
 736                return sprintf(buf, "constraint not defined\n");
 737
 738        return sprintf(buf, "%d\n", rdev->constraints->max_uA);
 739}
 740static DEVICE_ATTR_RO(max_microamps);
 741
 742static ssize_t min_microvolts_show(struct device *dev,
 743                                   struct device_attribute *attr, char *buf)
 744{
 745        struct regulator_dev *rdev = dev_get_drvdata(dev);
 746
 747        if (!rdev->constraints)
 748                return sprintf(buf, "constraint not defined\n");
 749
 750        return sprintf(buf, "%d\n", rdev->constraints->min_uV);
 751}
 752static DEVICE_ATTR_RO(min_microvolts);
 753
 754static ssize_t max_microvolts_show(struct device *dev,
 755                                   struct device_attribute *attr, char *buf)
 756{
 757        struct regulator_dev *rdev = dev_get_drvdata(dev);
 758
 759        if (!rdev->constraints)
 760                return sprintf(buf, "constraint not defined\n");
 761
 762        return sprintf(buf, "%d\n", rdev->constraints->max_uV);
 763}
 764static DEVICE_ATTR_RO(max_microvolts);
 765
 766static ssize_t requested_microamps_show(struct device *dev,
 767                                        struct device_attribute *attr, char *buf)
 768{
 769        struct regulator_dev *rdev = dev_get_drvdata(dev);
 770        struct regulator *regulator;
 771        int uA = 0;
 772
 773        regulator_lock(rdev);
 774        list_for_each_entry(regulator, &rdev->consumer_list, list) {
 775                if (regulator->enable_count)
 776                        uA += regulator->uA_load;
 777        }
 778        regulator_unlock(rdev);
 779        return sprintf(buf, "%d\n", uA);
 780}
 781static DEVICE_ATTR_RO(requested_microamps);
 782
 783static ssize_t num_users_show(struct device *dev, struct device_attribute *attr,
 784                              char *buf)
 785{
 786        struct regulator_dev *rdev = dev_get_drvdata(dev);
 787        return sprintf(buf, "%d\n", rdev->use_count);
 788}
 789static DEVICE_ATTR_RO(num_users);
 790
 791static ssize_t type_show(struct device *dev, struct device_attribute *attr,
 792                         char *buf)
 793{
 794        struct regulator_dev *rdev = dev_get_drvdata(dev);
 795
 796        switch (rdev->desc->type) {
 797        case REGULATOR_VOLTAGE:
 798                return sprintf(buf, "voltage\n");
 799        case REGULATOR_CURRENT:
 800                return sprintf(buf, "current\n");
 801        }
 802        return sprintf(buf, "unknown\n");
 803}
 804static DEVICE_ATTR_RO(type);
 805
 806static ssize_t suspend_mem_microvolts_show(struct device *dev,
 807                                           struct device_attribute *attr, char *buf)
 808{
 809        struct regulator_dev *rdev = dev_get_drvdata(dev);
 810
 811        return sprintf(buf, "%d\n", rdev->constraints->state_mem.uV);
 812}
 813static DEVICE_ATTR_RO(suspend_mem_microvolts);
 814
 815static ssize_t suspend_disk_microvolts_show(struct device *dev,
 816                                            struct device_attribute *attr, char *buf)
 817{
 818        struct regulator_dev *rdev = dev_get_drvdata(dev);
 819
 820        return sprintf(buf, "%d\n", rdev->constraints->state_disk.uV);
 821}
 822static DEVICE_ATTR_RO(suspend_disk_microvolts);
 823
 824static ssize_t suspend_standby_microvolts_show(struct device *dev,
 825                                               struct device_attribute *attr, char *buf)
 826{
 827        struct regulator_dev *rdev = dev_get_drvdata(dev);
 828
 829        return sprintf(buf, "%d\n", rdev->constraints->state_standby.uV);
 830}
 831static DEVICE_ATTR_RO(suspend_standby_microvolts);
 832
 833static ssize_t suspend_mem_mode_show(struct device *dev,
 834                                     struct device_attribute *attr, char *buf)
 835{
 836        struct regulator_dev *rdev = dev_get_drvdata(dev);
 837
 838        return regulator_print_opmode(buf,
 839                rdev->constraints->state_mem.mode);
 840}
 841static DEVICE_ATTR_RO(suspend_mem_mode);
 842
 843static ssize_t suspend_disk_mode_show(struct device *dev,
 844                                      struct device_attribute *attr, char *buf)
 845{
 846        struct regulator_dev *rdev = dev_get_drvdata(dev);
 847
 848        return regulator_print_opmode(buf,
 849                rdev->constraints->state_disk.mode);
 850}
 851static DEVICE_ATTR_RO(suspend_disk_mode);
 852
 853static ssize_t suspend_standby_mode_show(struct device *dev,
 854                                         struct device_attribute *attr, char *buf)
 855{
 856        struct regulator_dev *rdev = dev_get_drvdata(dev);
 857
 858        return regulator_print_opmode(buf,
 859                rdev->constraints->state_standby.mode);
 860}
 861static DEVICE_ATTR_RO(suspend_standby_mode);
 862
 863static ssize_t suspend_mem_state_show(struct device *dev,
 864                                      struct device_attribute *attr, char *buf)
 865{
 866        struct regulator_dev *rdev = dev_get_drvdata(dev);
 867
 868        return regulator_print_state(buf,
 869                        rdev->constraints->state_mem.enabled);
 870}
 871static DEVICE_ATTR_RO(suspend_mem_state);
 872
 873static ssize_t suspend_disk_state_show(struct device *dev,
 874                                       struct device_attribute *attr, char *buf)
 875{
 876        struct regulator_dev *rdev = dev_get_drvdata(dev);
 877
 878        return regulator_print_state(buf,
 879                        rdev->constraints->state_disk.enabled);
 880}
 881static DEVICE_ATTR_RO(suspend_disk_state);
 882
 883static ssize_t suspend_standby_state_show(struct device *dev,
 884                                          struct device_attribute *attr, char *buf)
 885{
 886        struct regulator_dev *rdev = dev_get_drvdata(dev);
 887
 888        return regulator_print_state(buf,
 889                        rdev->constraints->state_standby.enabled);
 890}
 891static DEVICE_ATTR_RO(suspend_standby_state);
 892
 893static ssize_t bypass_show(struct device *dev,
 894                           struct device_attribute *attr, char *buf)
 895{
 896        struct regulator_dev *rdev = dev_get_drvdata(dev);
 897        const char *report;
 898        bool bypass;
 899        int ret;
 900
 901        ret = rdev->desc->ops->get_bypass(rdev, &bypass);
 902
 903        if (ret != 0)
 904                report = "unknown";
 905        else if (bypass)
 906                report = "enabled";
 907        else
 908                report = "disabled";
 909
 910        return sprintf(buf, "%s\n", report);
 911}
 912static DEVICE_ATTR_RO(bypass);
 913
 914/* Calculate the new optimum regulator operating mode based on the new total
 915 * consumer load. All locks held by caller
 916 */
 917static int drms_uA_update(struct regulator_dev *rdev)
 918{
 919        struct regulator *sibling;
 920        int current_uA = 0, output_uV, input_uV, err;
 921        unsigned int mode;
 922
 923        /*
 924         * first check to see if we can set modes at all, otherwise just
 925         * tell the consumer everything is OK.
 926         */
 927        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_DRMS)) {
 928                rdev_dbg(rdev, "DRMS operation not allowed\n");
 929                return 0;
 930        }
 931
 932        if (!rdev->desc->ops->get_optimum_mode &&
 933            !rdev->desc->ops->set_load)
 934                return 0;
 935
 936        if (!rdev->desc->ops->set_mode &&
 937            !rdev->desc->ops->set_load)
 938                return -EINVAL;
 939
 940        /* calc total requested load */
 941        list_for_each_entry(sibling, &rdev->consumer_list, list) {
 942                if (sibling->enable_count)
 943                        current_uA += sibling->uA_load;
 944        }
 945
 946        current_uA += rdev->constraints->system_load;
 947
 948        if (rdev->desc->ops->set_load) {
 949                /* set the optimum mode for our new total regulator load */
 950                err = rdev->desc->ops->set_load(rdev, current_uA);
 951                if (err < 0)
 952                        rdev_err(rdev, "failed to set load %d: %pe\n",
 953                                 current_uA, ERR_PTR(err));
 954        } else {
 955                /* get output voltage */
 956                output_uV = regulator_get_voltage_rdev(rdev);
 957                if (output_uV <= 0) {
 958                        rdev_err(rdev, "invalid output voltage found\n");
 959                        return -EINVAL;
 960                }
 961
 962                /* get input voltage */
 963                input_uV = 0;
 964                if (rdev->supply)
 965                        input_uV = regulator_get_voltage(rdev->supply);
 966                if (input_uV <= 0)
 967                        input_uV = rdev->constraints->input_uV;
 968                if (input_uV <= 0) {
 969                        rdev_err(rdev, "invalid input voltage found\n");
 970                        return -EINVAL;
 971                }
 972
 973                /* now get the optimum mode for our new total regulator load */
 974                mode = rdev->desc->ops->get_optimum_mode(rdev, input_uV,
 975                                                         output_uV, current_uA);
 976
 977                /* check the new mode is allowed */
 978                err = regulator_mode_constrain(rdev, &mode);
 979                if (err < 0) {
 980                        rdev_err(rdev, "failed to get optimum mode @ %d uA %d -> %d uV: %pe\n",
 981                                 current_uA, input_uV, output_uV, ERR_PTR(err));
 982                        return err;
 983                }
 984
 985                err = rdev->desc->ops->set_mode(rdev, mode);
 986                if (err < 0)
 987                        rdev_err(rdev, "failed to set optimum mode %x: %pe\n",
 988                                 mode, ERR_PTR(err));
 989        }
 990
 991        return err;
 992}
 993
 994static int __suspend_set_state(struct regulator_dev *rdev,
 995                               const struct regulator_state *rstate)
 996{
 997        int ret = 0;
 998
 999        if (rstate->enabled == ENABLE_IN_SUSPEND &&
1000                rdev->desc->ops->set_suspend_enable)
1001                ret = rdev->desc->ops->set_suspend_enable(rdev);
1002        else if (rstate->enabled == DISABLE_IN_SUSPEND &&
1003                rdev->desc->ops->set_suspend_disable)
1004                ret = rdev->desc->ops->set_suspend_disable(rdev);
1005        else /* OK if set_suspend_enable or set_suspend_disable is NULL */
1006                ret = 0;
1007
1008        if (ret < 0) {
1009                rdev_err(rdev, "failed to enabled/disable: %pe\n", ERR_PTR(ret));
1010                return ret;
1011        }
1012
1013        if (rdev->desc->ops->set_suspend_voltage && rstate->uV > 0) {
1014                ret = rdev->desc->ops->set_suspend_voltage(rdev, rstate->uV);
1015                if (ret < 0) {
1016                        rdev_err(rdev, "failed to set voltage: %pe\n", ERR_PTR(ret));
1017                        return ret;
1018                }
1019        }
1020
1021        if (rdev->desc->ops->set_suspend_mode && rstate->mode > 0) {
1022                ret = rdev->desc->ops->set_suspend_mode(rdev, rstate->mode);
1023                if (ret < 0) {
1024                        rdev_err(rdev, "failed to set mode: %pe\n", ERR_PTR(ret));
1025                        return ret;
1026                }
1027        }
1028
1029        return ret;
1030}
1031
1032static int suspend_set_initial_state(struct regulator_dev *rdev)
1033{
1034        const struct regulator_state *rstate;
1035
1036        rstate = regulator_get_suspend_state_check(rdev,
1037                        rdev->constraints->initial_state);
1038        if (!rstate)
1039                return 0;
1040
1041        return __suspend_set_state(rdev, rstate);
1042}
1043
1044#if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
1045static void print_constraints_debug(struct regulator_dev *rdev)
1046{
1047        struct regulation_constraints *constraints = rdev->constraints;
1048        char buf[160] = "";
1049        size_t len = sizeof(buf) - 1;
1050        int count = 0;
1051        int ret;
1052
1053        if (constraints->min_uV && constraints->max_uV) {
1054                if (constraints->min_uV == constraints->max_uV)
1055                        count += scnprintf(buf + count, len - count, "%d mV ",
1056                                           constraints->min_uV / 1000);
1057                else
1058                        count += scnprintf(buf + count, len - count,
1059                                           "%d <--> %d mV ",
1060                                           constraints->min_uV / 1000,
1061                                           constraints->max_uV / 1000);
1062        }
1063
1064        if (!constraints->min_uV ||
1065            constraints->min_uV != constraints->max_uV) {
1066                ret = regulator_get_voltage_rdev(rdev);
1067                if (ret > 0)
1068                        count += scnprintf(buf + count, len - count,
1069                                           "at %d mV ", ret / 1000);
1070        }
1071
1072        if (constraints->uV_offset)
1073                count += scnprintf(buf + count, len - count, "%dmV offset ",
1074                                   constraints->uV_offset / 1000);
1075
1076        if (constraints->min_uA && constraints->max_uA) {
1077                if (constraints->min_uA == constraints->max_uA)
1078                        count += scnprintf(buf + count, len - count, "%d mA ",
1079                                           constraints->min_uA / 1000);
1080                else
1081                        count += scnprintf(buf + count, len - count,
1082                                           "%d <--> %d mA ",
1083                                           constraints->min_uA / 1000,
1084                                           constraints->max_uA / 1000);
1085        }
1086
1087        if (!constraints->min_uA ||
1088            constraints->min_uA != constraints->max_uA) {
1089                ret = _regulator_get_current_limit(rdev);
1090                if (ret > 0)
1091                        count += scnprintf(buf + count, len - count,
1092                                           "at %d mA ", ret / 1000);
1093        }
1094
1095        if (constraints->valid_modes_mask & REGULATOR_MODE_FAST)
1096                count += scnprintf(buf + count, len - count, "fast ");
1097        if (constraints->valid_modes_mask & REGULATOR_MODE_NORMAL)
1098                count += scnprintf(buf + count, len - count, "normal ");
1099        if (constraints->valid_modes_mask & REGULATOR_MODE_IDLE)
1100                count += scnprintf(buf + count, len - count, "idle ");
1101        if (constraints->valid_modes_mask & REGULATOR_MODE_STANDBY)
1102                count += scnprintf(buf + count, len - count, "standby ");
1103
1104        if (!count)
1105                count = scnprintf(buf, len, "no parameters");
1106        else
1107                --count;
1108
1109        count += scnprintf(buf + count, len - count, ", %s",
1110                _regulator_is_enabled(rdev) ? "enabled" : "disabled");
1111
1112        rdev_dbg(rdev, "%s\n", buf);
1113}
1114#else /* !DEBUG && !CONFIG_DYNAMIC_DEBUG */
1115static inline void print_constraints_debug(struct regulator_dev *rdev) {}
1116#endif /* !DEBUG && !CONFIG_DYNAMIC_DEBUG */
1117
1118static void print_constraints(struct regulator_dev *rdev)
1119{
1120        struct regulation_constraints *constraints = rdev->constraints;
1121
1122        print_constraints_debug(rdev);
1123
1124        if ((constraints->min_uV != constraints->max_uV) &&
1125            !regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE))
1126                rdev_warn(rdev,
1127                          "Voltage range but no REGULATOR_CHANGE_VOLTAGE\n");
1128}
1129
1130static int machine_constraints_voltage(struct regulator_dev *rdev,
1131        struct regulation_constraints *constraints)
1132{
1133        const struct regulator_ops *ops = rdev->desc->ops;
1134        int ret;
1135
1136        /* do we need to apply the constraint voltage */
1137        if (rdev->constraints->apply_uV &&
1138            rdev->constraints->min_uV && rdev->constraints->max_uV) {
1139                int target_min, target_max;
1140                int current_uV = regulator_get_voltage_rdev(rdev);
1141
1142                if (current_uV == -ENOTRECOVERABLE) {
1143                        /* This regulator can't be read and must be initialized */
1144                        rdev_info(rdev, "Setting %d-%duV\n",
1145                                  rdev->constraints->min_uV,
1146                                  rdev->constraints->max_uV);
1147                        _regulator_do_set_voltage(rdev,
1148                                                  rdev->constraints->min_uV,
1149                                                  rdev->constraints->max_uV);
1150                        current_uV = regulator_get_voltage_rdev(rdev);
1151                }
1152
1153                if (current_uV < 0) {
1154                        rdev_err(rdev,
1155                                 "failed to get the current voltage: %pe\n",
1156                                 ERR_PTR(current_uV));
1157                        return current_uV;
1158                }
1159
1160                /*
1161                 * If we're below the minimum voltage move up to the
1162                 * minimum voltage, if we're above the maximum voltage
1163                 * then move down to the maximum.
1164                 */
1165                target_min = current_uV;
1166                target_max = current_uV;
1167
1168                if (current_uV < rdev->constraints->min_uV) {
1169                        target_min = rdev->constraints->min_uV;
1170                        target_max = rdev->constraints->min_uV;
1171                }
1172
1173                if (current_uV > rdev->constraints->max_uV) {
1174                        target_min = rdev->constraints->max_uV;
1175                        target_max = rdev->constraints->max_uV;
1176                }
1177
1178                if (target_min != current_uV || target_max != current_uV) {
1179                        rdev_info(rdev, "Bringing %duV into %d-%duV\n",
1180                                  current_uV, target_min, target_max);
1181                        ret = _regulator_do_set_voltage(
1182                                rdev, target_min, target_max);
1183                        if (ret < 0) {
1184                                rdev_err(rdev,
1185                                        "failed to apply %d-%duV constraint: %pe\n",
1186                                        target_min, target_max, ERR_PTR(ret));
1187                                return ret;
1188                        }
1189                }
1190        }
1191
1192        /* constrain machine-level voltage specs to fit
1193         * the actual range supported by this regulator.
1194         */
1195        if (ops->list_voltage && rdev->desc->n_voltages) {
1196                int     count = rdev->desc->n_voltages;
1197                int     i;
1198                int     min_uV = INT_MAX;
1199                int     max_uV = INT_MIN;
1200                int     cmin = constraints->min_uV;
1201                int     cmax = constraints->max_uV;
1202
1203                /* it's safe to autoconfigure fixed-voltage supplies
1204                 * and the constraints are used by list_voltage.
1205                 */
1206                if (count == 1 && !cmin) {
1207                        cmin = 1;
1208                        cmax = INT_MAX;
1209                        constraints->min_uV = cmin;
1210                        constraints->max_uV = cmax;
1211                }
1212
1213                /* voltage constraints are optional */
1214                if ((cmin == 0) && (cmax == 0))
1215                        return 0;
1216
1217                /* else require explicit machine-level constraints */
1218                if (cmin <= 0 || cmax <= 0 || cmax < cmin) {
1219                        rdev_err(rdev, "invalid voltage constraints\n");
1220                        return -EINVAL;
1221                }
1222
1223                /* no need to loop voltages if range is continuous */
1224                if (rdev->desc->continuous_voltage_range)
1225                        return 0;
1226
1227                /* initial: [cmin..cmax] valid, [min_uV..max_uV] not */
1228                for (i = 0; i < count; i++) {
1229                        int     value;
1230
1231                        value = ops->list_voltage(rdev, i);
1232                        if (value <= 0)
1233                                continue;
1234
1235                        /* maybe adjust [min_uV..max_uV] */
1236                        if (value >= cmin && value < min_uV)
1237                                min_uV = value;
1238                        if (value <= cmax && value > max_uV)
1239                                max_uV = value;
1240                }
1241
1242                /* final: [min_uV..max_uV] valid iff constraints valid */
1243                if (max_uV < min_uV) {
1244                        rdev_err(rdev,
1245                                 "unsupportable voltage constraints %u-%uuV\n",
1246                                 min_uV, max_uV);
1247                        return -EINVAL;
1248                }
1249
1250                /* use regulator's subset of machine constraints */
1251                if (constraints->min_uV < min_uV) {
1252                        rdev_dbg(rdev, "override min_uV, %d -> %d\n",
1253                                 constraints->min_uV, min_uV);
1254                        constraints->min_uV = min_uV;
1255                }
1256                if (constraints->max_uV > max_uV) {
1257                        rdev_dbg(rdev, "override max_uV, %d -> %d\n",
1258                                 constraints->max_uV, max_uV);
1259                        constraints->max_uV = max_uV;
1260                }
1261        }
1262
1263        return 0;
1264}
1265
1266static int machine_constraints_current(struct regulator_dev *rdev,
1267        struct regulation_constraints *constraints)
1268{
1269        const struct regulator_ops *ops = rdev->desc->ops;
1270        int ret;
1271
1272        if (!constraints->min_uA && !constraints->max_uA)
1273                return 0;
1274
1275        if (constraints->min_uA > constraints->max_uA) {
1276                rdev_err(rdev, "Invalid current constraints\n");
1277                return -EINVAL;
1278        }
1279
1280        if (!ops->set_current_limit || !ops->get_current_limit) {
1281                rdev_warn(rdev, "Operation of current configuration missing\n");
1282                return 0;
1283        }
1284
1285        /* Set regulator current in constraints range */
1286        ret = ops->set_current_limit(rdev, constraints->min_uA,
1287                        constraints->max_uA);
1288        if (ret < 0) {
1289                rdev_err(rdev, "Failed to set current constraint, %d\n", ret);
1290                return ret;
1291        }
1292
1293        return 0;
1294}
1295
1296static int _regulator_do_enable(struct regulator_dev *rdev);
1297
1298static int notif_set_limit(struct regulator_dev *rdev,
1299                           int (*set)(struct regulator_dev *, int, int, bool),
1300                           int limit, int severity)
1301{
1302        bool enable;
1303
1304        if (limit == REGULATOR_NOTIF_LIMIT_DISABLE) {
1305                enable = false;
1306                limit = 0;
1307        } else {
1308                enable = true;
1309        }
1310
1311        if (limit == REGULATOR_NOTIF_LIMIT_ENABLE)
1312                limit = 0;
1313
1314        return set(rdev, limit, severity, enable);
1315}
1316
1317static int handle_notify_limits(struct regulator_dev *rdev,
1318                        int (*set)(struct regulator_dev *, int, int, bool),
1319                        struct notification_limit *limits)
1320{
1321        int ret = 0;
1322
1323        if (!set)
1324                return -EOPNOTSUPP;
1325
1326        if (limits->prot)
1327                ret = notif_set_limit(rdev, set, limits->prot,
1328                                      REGULATOR_SEVERITY_PROT);
1329        if (ret)
1330                return ret;
1331
1332        if (limits->err)
1333                ret = notif_set_limit(rdev, set, limits->err,
1334                                      REGULATOR_SEVERITY_ERR);
1335        if (ret)
1336                return ret;
1337
1338        if (limits->warn)
1339                ret = notif_set_limit(rdev, set, limits->warn,
1340                                      REGULATOR_SEVERITY_WARN);
1341
1342        return ret;
1343}
1344/**
1345 * set_machine_constraints - sets regulator constraints
1346 * @rdev: regulator source
1347 *
1348 * Allows platform initialisation code to define and constrain
1349 * regulator circuits e.g. valid voltage/current ranges, etc.  NOTE:
1350 * Constraints *must* be set by platform code in order for some
1351 * regulator operations to proceed i.e. set_voltage, set_current_limit,
1352 * set_mode.
1353 */
1354static int set_machine_constraints(struct regulator_dev *rdev)
1355{
1356        int ret = 0;
1357        const struct regulator_ops *ops = rdev->desc->ops;
1358
1359        ret = machine_constraints_voltage(rdev, rdev->constraints);
1360        if (ret != 0)
1361                return ret;
1362
1363        ret = machine_constraints_current(rdev, rdev->constraints);
1364        if (ret != 0)
1365                return ret;
1366
1367        if (rdev->constraints->ilim_uA && ops->set_input_current_limit) {
1368                ret = ops->set_input_current_limit(rdev,
1369                                                   rdev->constraints->ilim_uA);
1370                if (ret < 0) {
1371                        rdev_err(rdev, "failed to set input limit: %pe\n", ERR_PTR(ret));
1372                        return ret;
1373                }
1374        }
1375
1376        /* do we need to setup our suspend state */
1377        if (rdev->constraints->initial_state) {
1378                ret = suspend_set_initial_state(rdev);
1379                if (ret < 0) {
1380                        rdev_err(rdev, "failed to set suspend state: %pe\n", ERR_PTR(ret));
1381                        return ret;
1382                }
1383        }
1384
1385        if (rdev->constraints->initial_mode) {
1386                if (!ops->set_mode) {
1387                        rdev_err(rdev, "no set_mode operation\n");
1388                        return -EINVAL;
1389                }
1390
1391                ret = ops->set_mode(rdev, rdev->constraints->initial_mode);
1392                if (ret < 0) {
1393                        rdev_err(rdev, "failed to set initial mode: %pe\n", ERR_PTR(ret));
1394                        return ret;
1395                }
1396        } else if (rdev->constraints->system_load) {
1397                /*
1398                 * We'll only apply the initial system load if an
1399                 * initial mode wasn't specified.
1400                 */
1401                drms_uA_update(rdev);
1402        }
1403
1404        if ((rdev->constraints->ramp_delay || rdev->constraints->ramp_disable)
1405                && ops->set_ramp_delay) {
1406                ret = ops->set_ramp_delay(rdev, rdev->constraints->ramp_delay);
1407                if (ret < 0) {
1408                        rdev_err(rdev, "failed to set ramp_delay: %pe\n", ERR_PTR(ret));
1409                        return ret;
1410                }
1411        }
1412
1413        if (rdev->constraints->pull_down && ops->set_pull_down) {
1414                ret = ops->set_pull_down(rdev);
1415                if (ret < 0) {
1416                        rdev_err(rdev, "failed to set pull down: %pe\n", ERR_PTR(ret));
1417                        return ret;
1418                }
1419        }
1420
1421        if (rdev->constraints->soft_start && ops->set_soft_start) {
1422                ret = ops->set_soft_start(rdev);
1423                if (ret < 0) {
1424                        rdev_err(rdev, "failed to set soft start: %pe\n", ERR_PTR(ret));
1425                        return ret;
1426                }
1427        }
1428
1429        /*
1430         * Existing logic does not warn if over_current_protection is given as
1431         * a constraint but driver does not support that. I think we should
1432         * warn about this type of issues as it is possible someone changes
1433         * PMIC on board to another type - and the another PMIC's driver does
1434         * not support setting protection. Board composer may happily believe
1435         * the DT limits are respected - especially if the new PMIC HW also
1436         * supports protection but the driver does not. I won't change the logic
1437         * without hearing more experienced opinion on this though.
1438         *
1439         * If warning is seen as a good idea then we can merge handling the
1440         * over-curret protection and detection and get rid of this special
1441         * handling.
1442         */
1443        if (rdev->constraints->over_current_protection
1444                && ops->set_over_current_protection) {
1445                int lim = rdev->constraints->over_curr_limits.prot;
1446
1447                ret = ops->set_over_current_protection(rdev, lim,
1448                                                       REGULATOR_SEVERITY_PROT,
1449                                                       true);
1450                if (ret < 0) {
1451                        rdev_err(rdev, "failed to set over current protection: %pe\n",
1452                                 ERR_PTR(ret));
1453                        return ret;
1454                }
1455        }
1456
1457        if (rdev->constraints->over_current_detection)
1458                ret = handle_notify_limits(rdev,
1459                                           ops->set_over_current_protection,
1460                                           &rdev->constraints->over_curr_limits);
1461        if (ret) {
1462                if (ret != -EOPNOTSUPP) {
1463                        rdev_err(rdev, "failed to set over current limits: %pe\n",
1464                                 ERR_PTR(ret));
1465                        return ret;
1466                }
1467                rdev_warn(rdev,
1468                          "IC does not support requested over-current limits\n");
1469        }
1470
1471        if (rdev->constraints->over_voltage_detection)
1472                ret = handle_notify_limits(rdev,
1473                                           ops->set_over_voltage_protection,
1474                                           &rdev->constraints->over_voltage_limits);
1475        if (ret) {
1476                if (ret != -EOPNOTSUPP) {
1477                        rdev_err(rdev, "failed to set over voltage limits %pe\n",
1478                                 ERR_PTR(ret));
1479                        return ret;
1480                }
1481                rdev_warn(rdev,
1482                          "IC does not support requested over voltage limits\n");
1483        }
1484
1485        if (rdev->constraints->under_voltage_detection)
1486                ret = handle_notify_limits(rdev,
1487                                           ops->set_under_voltage_protection,
1488                                           &rdev->constraints->under_voltage_limits);
1489        if (ret) {
1490                if (ret != -EOPNOTSUPP) {
1491                        rdev_err(rdev, "failed to set under voltage limits %pe\n",
1492                                 ERR_PTR(ret));
1493                        return ret;
1494                }
1495                rdev_warn(rdev,
1496                          "IC does not support requested under voltage limits\n");
1497        }
1498
1499        if (rdev->constraints->over_temp_detection)
1500                ret = handle_notify_limits(rdev,
1501                                           ops->set_thermal_protection,
1502                                           &rdev->constraints->temp_limits);
1503        if (ret) {
1504                if (ret != -EOPNOTSUPP) {
1505                        rdev_err(rdev, "failed to set temperature limits %pe\n",
1506                                 ERR_PTR(ret));
1507                        return ret;
1508                }
1509                rdev_warn(rdev,
1510                          "IC does not support requested temperature limits\n");
1511        }
1512
1513        if (rdev->constraints->active_discharge && ops->set_active_discharge) {
1514                bool ad_state = (rdev->constraints->active_discharge ==
1515                              REGULATOR_ACTIVE_DISCHARGE_ENABLE) ? true : false;
1516
1517                ret = ops->set_active_discharge(rdev, ad_state);
1518                if (ret < 0) {
1519                        rdev_err(rdev, "failed to set active discharge: %pe\n", ERR_PTR(ret));
1520                        return ret;
1521                }
1522        }
1523
1524        /* If the constraints say the regulator should be on at this point
1525         * and we have control then make sure it is enabled.
1526         */
1527        if (rdev->constraints->always_on || rdev->constraints->boot_on) {
1528                /* If we want to enable this regulator, make sure that we know
1529                 * the supplying regulator.
1530                 */
1531                if (rdev->supply_name && !rdev->supply)
1532                        return -EPROBE_DEFER;
1533
1534                if (rdev->supply) {
1535                        ret = regulator_enable(rdev->supply);
1536                        if (ret < 0) {
1537                                _regulator_put(rdev->supply);
1538                                rdev->supply = NULL;
1539                                return ret;
1540                        }
1541                }
1542
1543                ret = _regulator_do_enable(rdev);
1544                if (ret < 0 && ret != -EINVAL) {
1545                        rdev_err(rdev, "failed to enable: %pe\n", ERR_PTR(ret));
1546                        return ret;
1547                }
1548
1549                if (rdev->constraints->always_on)
1550                        rdev->use_count++;
1551        } else if (rdev->desc->off_on_delay) {
1552                rdev->last_off = ktime_get();
1553        }
1554
1555        print_constraints(rdev);
1556        return 0;
1557}
1558
1559/**
1560 * set_supply - set regulator supply regulator
1561 * @rdev: regulator name
1562 * @supply_rdev: supply regulator name
1563 *
1564 * Called by platform initialisation code to set the supply regulator for this
1565 * regulator. This ensures that a regulators supply will also be enabled by the
1566 * core if it's child is enabled.
1567 */
1568static int set_supply(struct regulator_dev *rdev,
1569                      struct regulator_dev *supply_rdev)
1570{
1571        int err;
1572
1573        rdev_info(rdev, "supplied by %s\n", rdev_get_name(supply_rdev));
1574
1575        if (!try_module_get(supply_rdev->owner))
1576                return -ENODEV;
1577
1578        rdev->supply = create_regulator(supply_rdev, &rdev->dev, "SUPPLY");
1579        if (rdev->supply == NULL) {
1580                err = -ENOMEM;
1581                return err;
1582        }
1583        supply_rdev->open_count++;
1584
1585        return 0;
1586}
1587
1588/**
1589 * set_consumer_device_supply - Bind a regulator to a symbolic supply
1590 * @rdev:         regulator source
1591 * @consumer_dev_name: dev_name() string for device supply applies to
1592 * @supply:       symbolic name for supply
1593 *
1594 * Allows platform initialisation code to map physical regulator
1595 * sources to symbolic names for supplies for use by devices.  Devices
1596 * should use these symbolic names to request regulators, avoiding the
1597 * need to provide board-specific regulator names as platform data.
1598 */
1599static int set_consumer_device_supply(struct regulator_dev *rdev,
1600                                      const char *consumer_dev_name,
1601                                      const char *supply)
1602{
1603        struct regulator_map *node, *new_node;
1604        int has_dev;
1605
1606        if (supply == NULL)
1607                return -EINVAL;
1608
1609        if (consumer_dev_name != NULL)
1610                has_dev = 1;
1611        else
1612                has_dev = 0;
1613
1614        new_node = kzalloc(sizeof(struct regulator_map), GFP_KERNEL);
1615        if (new_node == NULL)
1616                return -ENOMEM;
1617
1618        new_node->regulator = rdev;
1619        new_node->supply = supply;
1620
1621        if (has_dev) {
1622                new_node->dev_name = kstrdup(consumer_dev_name, GFP_KERNEL);
1623                if (new_node->dev_name == NULL) {
1624                        kfree(new_node);
1625                        return -ENOMEM;
1626                }
1627        }
1628
1629        mutex_lock(&regulator_list_mutex);
1630        list_for_each_entry(node, &regulator_map_list, list) {
1631                if (node->dev_name && consumer_dev_name) {
1632                        if (strcmp(node->dev_name, consumer_dev_name) != 0)
1633                                continue;
1634                } else if (node->dev_name || consumer_dev_name) {
1635                        continue;
1636                }
1637
1638                if (strcmp(node->supply, supply) != 0)
1639                        continue;
1640
1641                pr_debug("%s: %s/%s is '%s' supply; fail %s/%s\n",
1642                         consumer_dev_name,
1643                         dev_name(&node->regulator->dev),
1644                         node->regulator->desc->name,
1645                         supply,
1646                         dev_name(&rdev->dev), rdev_get_name(rdev));
1647                goto fail;
1648        }
1649
1650        list_add(&new_node->list, &regulator_map_list);
1651        mutex_unlock(&regulator_list_mutex);
1652
1653        return 0;
1654
1655fail:
1656        mutex_unlock(&regulator_list_mutex);
1657        kfree(new_node->dev_name);
1658        kfree(new_node);
1659        return -EBUSY;
1660}
1661
1662static void unset_regulator_supplies(struct regulator_dev *rdev)
1663{
1664        struct regulator_map *node, *n;
1665
1666        list_for_each_entry_safe(node, n, &regulator_map_list, list) {
1667                if (rdev == node->regulator) {
1668                        list_del(&node->list);
1669                        kfree(node->dev_name);
1670                        kfree(node);
1671                }
1672        }
1673}
1674
1675#ifdef CONFIG_DEBUG_FS
1676static ssize_t constraint_flags_read_file(struct file *file,
1677                                          char __user *user_buf,
1678                                          size_t count, loff_t *ppos)
1679{
1680        const struct regulator *regulator = file->private_data;
1681        const struct regulation_constraints *c = regulator->rdev->constraints;
1682        char *buf;
1683        ssize_t ret;
1684
1685        if (!c)
1686                return 0;
1687
1688        buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
1689        if (!buf)
1690                return -ENOMEM;
1691
1692        ret = snprintf(buf, PAGE_SIZE,
1693                        "always_on: %u\n"
1694                        "boot_on: %u\n"
1695                        "apply_uV: %u\n"
1696                        "ramp_disable: %u\n"
1697                        "soft_start: %u\n"
1698                        "pull_down: %u\n"
1699                        "over_current_protection: %u\n",
1700                        c->always_on,
1701                        c->boot_on,
1702                        c->apply_uV,
1703                        c->ramp_disable,
1704                        c->soft_start,
1705                        c->pull_down,
1706                        c->over_current_protection);
1707
1708        ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
1709        kfree(buf);
1710
1711        return ret;
1712}
1713
1714#endif
1715
1716static const struct file_operations constraint_flags_fops = {
1717#ifdef CONFIG_DEBUG_FS
1718        .open = simple_open,
1719        .read = constraint_flags_read_file,
1720        .llseek = default_llseek,
1721#endif
1722};
1723
1724#define REG_STR_SIZE    64
1725
1726static struct regulator *create_regulator(struct regulator_dev *rdev,
1727                                          struct device *dev,
1728                                          const char *supply_name)
1729{
1730        struct regulator *regulator;
1731        int err = 0;
1732
1733        if (dev) {
1734                char buf[REG_STR_SIZE];
1735                int size;
1736
1737                size = snprintf(buf, REG_STR_SIZE, "%s-%s",
1738                                dev->kobj.name, supply_name);
1739                if (size >= REG_STR_SIZE)
1740                        return NULL;
1741
1742                supply_name = kstrdup(buf, GFP_KERNEL);
1743                if (supply_name == NULL)
1744                        return NULL;
1745        } else {
1746                supply_name = kstrdup_const(supply_name, GFP_KERNEL);
1747                if (supply_name == NULL)
1748                        return NULL;
1749        }
1750
1751        regulator = kzalloc(sizeof(*regulator), GFP_KERNEL);
1752        if (regulator == NULL) {
1753                kfree(supply_name);
1754                return NULL;
1755        }
1756
1757        regulator->rdev = rdev;
1758        regulator->supply_name = supply_name;
1759
1760        regulator_lock(rdev);
1761        list_add(&regulator->list, &rdev->consumer_list);
1762        regulator_unlock(rdev);
1763
1764        if (dev) {
1765                regulator->dev = dev;
1766
1767                /* Add a link to the device sysfs entry */
1768                err = sysfs_create_link_nowarn(&rdev->dev.kobj, &dev->kobj,
1769                                               supply_name);
1770                if (err) {
1771                        rdev_dbg(rdev, "could not add device link %s: %pe\n",
1772                                  dev->kobj.name, ERR_PTR(err));
1773                        /* non-fatal */
1774                }
1775        }
1776
1777        if (err != -EEXIST)
1778                regulator->debugfs = debugfs_create_dir(supply_name, rdev->debugfs);
1779        if (!regulator->debugfs) {
1780                rdev_dbg(rdev, "Failed to create debugfs directory\n");
1781        } else {
1782                debugfs_create_u32("uA_load", 0444, regulator->debugfs,
1783                                   &regulator->uA_load);
1784                debugfs_create_u32("min_uV", 0444, regulator->debugfs,
1785                                   &regulator->voltage[PM_SUSPEND_ON].min_uV);
1786                debugfs_create_u32("max_uV", 0444, regulator->debugfs,
1787                                   &regulator->voltage[PM_SUSPEND_ON].max_uV);
1788                debugfs_create_file("constraint_flags", 0444,
1789                                    regulator->debugfs, regulator,
1790                                    &constraint_flags_fops);
1791        }
1792
1793        /*
1794         * Check now if the regulator is an always on regulator - if
1795         * it is then we don't need to do nearly so much work for
1796         * enable/disable calls.
1797         */
1798        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS) &&
1799            _regulator_is_enabled(rdev))
1800                regulator->always_on = true;
1801
1802        return regulator;
1803}
1804
1805static int _regulator_get_enable_time(struct regulator_dev *rdev)
1806{
1807        if (rdev->constraints && rdev->constraints->enable_time)
1808                return rdev->constraints->enable_time;
1809        if (rdev->desc->ops->enable_time)
1810                return rdev->desc->ops->enable_time(rdev);
1811        return rdev->desc->enable_time;
1812}
1813
1814static struct regulator_supply_alias *regulator_find_supply_alias(
1815                struct device *dev, const char *supply)
1816{
1817        struct regulator_supply_alias *map;
1818
1819        list_for_each_entry(map, &regulator_supply_alias_list, list)
1820                if (map->src_dev == dev && strcmp(map->src_supply, supply) == 0)
1821                        return map;
1822
1823        return NULL;
1824}
1825
1826static void regulator_supply_alias(struct device **dev, const char **supply)
1827{
1828        struct regulator_supply_alias *map;
1829
1830        map = regulator_find_supply_alias(*dev, *supply);
1831        if (map) {
1832                dev_dbg(*dev, "Mapping supply %s to %s,%s\n",
1833                                *supply, map->alias_supply,
1834                                dev_name(map->alias_dev));
1835                *dev = map->alias_dev;
1836                *supply = map->alias_supply;
1837        }
1838}
1839
1840static int regulator_match(struct device *dev, const void *data)
1841{
1842        struct regulator_dev *r = dev_to_rdev(dev);
1843
1844        return strcmp(rdev_get_name(r), data) == 0;
1845}
1846
1847static struct regulator_dev *regulator_lookup_by_name(const char *name)
1848{
1849        struct device *dev;
1850
1851        dev = class_find_device(&regulator_class, NULL, name, regulator_match);
1852
1853        return dev ? dev_to_rdev(dev) : NULL;
1854}
1855
1856/**
1857 * regulator_dev_lookup - lookup a regulator device.
1858 * @dev: device for regulator "consumer".
1859 * @supply: Supply name or regulator ID.
1860 *
1861 * If successful, returns a struct regulator_dev that corresponds to the name
1862 * @supply and with the embedded struct device refcount incremented by one.
1863 * The refcount must be dropped by calling put_device().
1864 * On failure one of the following ERR-PTR-encoded values is returned:
1865 * -ENODEV if lookup fails permanently, -EPROBE_DEFER if lookup could succeed
1866 * in the future.
1867 */
1868static struct regulator_dev *regulator_dev_lookup(struct device *dev,
1869                                                  const char *supply)
1870{
1871        struct regulator_dev *r = NULL;
1872        struct device_node *node;
1873        struct regulator_map *map;
1874        const char *devname = NULL;
1875
1876        regulator_supply_alias(&dev, &supply);
1877
1878        /* first do a dt based lookup */
1879        if (dev && dev->of_node) {
1880                node = of_get_regulator(dev, supply);
1881                if (node) {
1882                        r = of_find_regulator_by_node(node);
1883                        if (r)
1884                                return r;
1885
1886                        /*
1887                         * We have a node, but there is no device.
1888                         * assume it has not registered yet.
1889                         */
1890                        return ERR_PTR(-EPROBE_DEFER);
1891                }
1892        }
1893
1894        /* if not found, try doing it non-dt way */
1895        if (dev)
1896                devname = dev_name(dev);
1897
1898        mutex_lock(&regulator_list_mutex);
1899        list_for_each_entry(map, &regulator_map_list, list) {
1900                /* If the mapping has a device set up it must match */
1901                if (map->dev_name &&
1902                    (!devname || strcmp(map->dev_name, devname)))
1903                        continue;
1904
1905                if (strcmp(map->supply, supply) == 0 &&
1906                    get_device(&map->regulator->dev)) {
1907                        r = map->regulator;
1908                        break;
1909                }
1910        }
1911        mutex_unlock(&regulator_list_mutex);
1912
1913        if (r)
1914                return r;
1915
1916        r = regulator_lookup_by_name(supply);
1917        if (r)
1918                return r;
1919
1920        return ERR_PTR(-ENODEV);
1921}
1922
1923static int regulator_resolve_supply(struct regulator_dev *rdev)
1924{
1925        struct regulator_dev *r;
1926        struct device *dev = rdev->dev.parent;
1927        int ret = 0;
1928
1929        /* No supply to resolve? */
1930        if (!rdev->supply_name)
1931                return 0;
1932
1933        /* Supply already resolved? (fast-path without locking contention) */
1934        if (rdev->supply)
1935                return 0;
1936
1937        r = regulator_dev_lookup(dev, rdev->supply_name);
1938        if (IS_ERR(r)) {
1939                ret = PTR_ERR(r);
1940
1941                /* Did the lookup explicitly defer for us? */
1942                if (ret == -EPROBE_DEFER)
1943                        goto out;
1944
1945                if (have_full_constraints()) {
1946                        r = dummy_regulator_rdev;
1947                        get_device(&r->dev);
1948                } else {
1949                        dev_err(dev, "Failed to resolve %s-supply for %s\n",
1950                                rdev->supply_name, rdev->desc->name);
1951                        ret = -EPROBE_DEFER;
1952                        goto out;
1953                }
1954        }
1955
1956        if (r == rdev) {
1957                dev_err(dev, "Supply for %s (%s) resolved to itself\n",
1958                        rdev->desc->name, rdev->supply_name);
1959                if (!have_full_constraints()) {
1960                        ret = -EINVAL;
1961                        goto out;
1962                }
1963                r = dummy_regulator_rdev;
1964                get_device(&r->dev);
1965        }
1966
1967        /*
1968         * If the supply's parent device is not the same as the
1969         * regulator's parent device, then ensure the parent device
1970         * is bound before we resolve the supply, in case the parent
1971         * device get probe deferred and unregisters the supply.
1972         */
1973        if (r->dev.parent && r->dev.parent != rdev->dev.parent) {
1974                if (!device_is_bound(r->dev.parent)) {
1975                        put_device(&r->dev);
1976                        ret = -EPROBE_DEFER;
1977                        goto out;
1978                }
1979        }
1980
1981        /* Recursively resolve the supply of the supply */
1982        ret = regulator_resolve_supply(r);
1983        if (ret < 0) {
1984                put_device(&r->dev);
1985                goto out;
1986        }
1987
1988        /*
1989         * Recheck rdev->supply with rdev->mutex lock held to avoid a race
1990         * between rdev->supply null check and setting rdev->supply in
1991         * set_supply() from concurrent tasks.
1992         */
1993        regulator_lock(rdev);
1994
1995        /* Supply just resolved by a concurrent task? */
1996        if (rdev->supply) {
1997                regulator_unlock(rdev);
1998                put_device(&r->dev);
1999                goto out;
2000        }
2001
2002        ret = set_supply(rdev, r);
2003        if (ret < 0) {
2004                regulator_unlock(rdev);
2005                put_device(&r->dev);
2006                goto out;
2007        }
2008
2009        regulator_unlock(rdev);
2010
2011        /*
2012         * In set_machine_constraints() we may have turned this regulator on
2013         * but we couldn't propagate to the supply if it hadn't been resolved
2014         * yet.  Do it now.
2015         */
2016        if (rdev->use_count) {
2017                ret = regulator_enable(rdev->supply);
2018                if (ret < 0) {
2019                        _regulator_put(rdev->supply);
2020                        rdev->supply = NULL;
2021                        goto out;
2022                }
2023        }
2024
2025out:
2026        return ret;
2027}
2028
2029/* Internal regulator request function */
2030struct regulator *_regulator_get(struct device *dev, const char *id,
2031                                 enum regulator_get_type get_type)
2032{
2033        struct regulator_dev *rdev;
2034        struct regulator *regulator;
2035        struct device_link *link;
2036        int ret;
2037
2038        if (get_type >= MAX_GET_TYPE) {
2039                dev_err(dev, "invalid type %d in %s\n", get_type, __func__);
2040                return ERR_PTR(-EINVAL);
2041        }
2042
2043        if (id == NULL) {
2044                pr_err("get() with no identifier\n");
2045                return ERR_PTR(-EINVAL);
2046        }
2047
2048        rdev = regulator_dev_lookup(dev, id);
2049        if (IS_ERR(rdev)) {
2050                ret = PTR_ERR(rdev);
2051
2052                /*
2053                 * If regulator_dev_lookup() fails with error other
2054                 * than -ENODEV our job here is done, we simply return it.
2055                 */
2056                if (ret != -ENODEV)
2057                        return ERR_PTR(ret);
2058
2059                if (!have_full_constraints()) {
2060                        dev_warn(dev,
2061                                 "incomplete constraints, dummy supplies not allowed\n");
2062                        return ERR_PTR(-ENODEV);
2063                }
2064
2065                switch (get_type) {
2066                case NORMAL_GET:
2067                        /*
2068                         * Assume that a regulator is physically present and
2069                         * enabled, even if it isn't hooked up, and just
2070                         * provide a dummy.
2071                         */
2072                        dev_warn(dev, "supply %s not found, using dummy regulator\n", id);
2073                        rdev = dummy_regulator_rdev;
2074                        get_device(&rdev->dev);
2075                        break;
2076
2077                case EXCLUSIVE_GET:
2078                        dev_warn(dev,
2079                                 "dummy supplies not allowed for exclusive requests\n");
2080                        fallthrough;
2081
2082                default:
2083                        return ERR_PTR(-ENODEV);
2084                }
2085        }
2086
2087        if (rdev->exclusive) {
2088                regulator = ERR_PTR(-EPERM);
2089                put_device(&rdev->dev);
2090                return regulator;
2091        }
2092
2093        if (get_type == EXCLUSIVE_GET && rdev->open_count) {
2094                regulator = ERR_PTR(-EBUSY);
2095                put_device(&rdev->dev);
2096                return regulator;
2097        }
2098
2099        mutex_lock(&regulator_list_mutex);
2100        ret = (rdev->coupling_desc.n_resolved != rdev->coupling_desc.n_coupled);
2101        mutex_unlock(&regulator_list_mutex);
2102
2103        if (ret != 0) {
2104                regulator = ERR_PTR(-EPROBE_DEFER);
2105                put_device(&rdev->dev);
2106                return regulator;
2107        }
2108
2109        ret = regulator_resolve_supply(rdev);
2110        if (ret < 0) {
2111                regulator = ERR_PTR(ret);
2112                put_device(&rdev->dev);
2113                return regulator;
2114        }
2115
2116        if (!try_module_get(rdev->owner)) {
2117                regulator = ERR_PTR(-EPROBE_DEFER);
2118                put_device(&rdev->dev);
2119                return regulator;
2120        }
2121
2122        regulator = create_regulator(rdev, dev, id);
2123        if (regulator == NULL) {
2124                regulator = ERR_PTR(-ENOMEM);
2125                module_put(rdev->owner);
2126                put_device(&rdev->dev);
2127                return regulator;
2128        }
2129
2130        rdev->open_count++;
2131        if (get_type == EXCLUSIVE_GET) {
2132                rdev->exclusive = 1;
2133
2134                ret = _regulator_is_enabled(rdev);
2135                if (ret > 0)
2136                        rdev->use_count = 1;
2137                else
2138                        rdev->use_count = 0;
2139        }
2140
2141        link = device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS);
2142        if (!IS_ERR_OR_NULL(link))
2143                regulator->device_link = true;
2144
2145        return regulator;
2146}
2147
2148/**
2149 * regulator_get - lookup and obtain a reference to a regulator.
2150 * @dev: device for regulator "consumer"
2151 * @id: Supply name or regulator ID.
2152 *
2153 * Returns a struct regulator corresponding to the regulator producer,
2154 * or IS_ERR() condition containing errno.
2155 *
2156 * Use of supply names configured via set_consumer_device_supply() is
2157 * strongly encouraged.  It is recommended that the supply name used
2158 * should match the name used for the supply and/or the relevant
2159 * device pins in the datasheet.
2160 */
2161struct regulator *regulator_get(struct device *dev, const char *id)
2162{
2163        return _regulator_get(dev, id, NORMAL_GET);
2164}
2165EXPORT_SYMBOL_GPL(regulator_get);
2166
2167/**
2168 * regulator_get_exclusive - obtain exclusive access to a regulator.
2169 * @dev: device for regulator "consumer"
2170 * @id: Supply name or regulator ID.
2171 *
2172 * Returns a struct regulator corresponding to the regulator producer,
2173 * or IS_ERR() condition containing errno.  Other consumers will be
2174 * unable to obtain this regulator while this reference is held and the
2175 * use count for the regulator will be initialised to reflect the current
2176 * state of the regulator.
2177 *
2178 * This is intended for use by consumers which cannot tolerate shared
2179 * use of the regulator such as those which need to force the
2180 * regulator off for correct operation of the hardware they are
2181 * controlling.
2182 *
2183 * Use of supply names configured via set_consumer_device_supply() is
2184 * strongly encouraged.  It is recommended that the supply name used
2185 * should match the name used for the supply and/or the relevant
2186 * device pins in the datasheet.
2187 */
2188struct regulator *regulator_get_exclusive(struct device *dev, const char *id)
2189{
2190        return _regulator_get(dev, id, EXCLUSIVE_GET);
2191}
2192EXPORT_SYMBOL_GPL(regulator_get_exclusive);
2193
2194/**
2195 * regulator_get_optional - obtain optional access to a regulator.
2196 * @dev: device for regulator "consumer"
2197 * @id: Supply name or regulator ID.
2198 *
2199 * Returns a struct regulator corresponding to the regulator producer,
2200 * or IS_ERR() condition containing errno.
2201 *
2202 * This is intended for use by consumers for devices which can have
2203 * some supplies unconnected in normal use, such as some MMC devices.
2204 * It can allow the regulator core to provide stub supplies for other
2205 * supplies requested using normal regulator_get() calls without
2206 * disrupting the operation of drivers that can handle absent
2207 * supplies.
2208 *
2209 * Use of supply names configured via set_consumer_device_supply() is
2210 * strongly encouraged.  It is recommended that the supply name used
2211 * should match the name used for the supply and/or the relevant
2212 * device pins in the datasheet.
2213 */
2214struct regulator *regulator_get_optional(struct device *dev, const char *id)
2215{
2216        return _regulator_get(dev, id, OPTIONAL_GET);
2217}
2218EXPORT_SYMBOL_GPL(regulator_get_optional);
2219
2220static void destroy_regulator(struct regulator *regulator)
2221{
2222        struct regulator_dev *rdev = regulator->rdev;
2223
2224        debugfs_remove_recursive(regulator->debugfs);
2225
2226        if (regulator->dev) {
2227                if (regulator->device_link)
2228                        device_link_remove(regulator->dev, &rdev->dev);
2229
2230                /* remove any sysfs entries */
2231                sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name);
2232        }
2233
2234        regulator_lock(rdev);
2235        list_del(&regulator->list);
2236
2237        rdev->open_count--;
2238        rdev->exclusive = 0;
2239        regulator_unlock(rdev);
2240
2241        kfree_const(regulator->supply_name);
2242        kfree(regulator);
2243}
2244
2245/* regulator_list_mutex lock held by regulator_put() */
2246static void _regulator_put(struct regulator *regulator)
2247{
2248        struct regulator_dev *rdev;
2249
2250        if (IS_ERR_OR_NULL(regulator))
2251                return;
2252
2253        lockdep_assert_held_once(&regulator_list_mutex);
2254
2255        /* Docs say you must disable before calling regulator_put() */
2256        WARN_ON(regulator->enable_count);
2257
2258        rdev = regulator->rdev;
2259
2260        destroy_regulator(regulator);
2261
2262        module_put(rdev->owner);
2263        put_device(&rdev->dev);
2264}
2265
2266/**
2267 * regulator_put - "free" the regulator source
2268 * @regulator: regulator source
2269 *
2270 * Note: drivers must ensure that all regulator_enable calls made on this
2271 * regulator source are balanced by regulator_disable calls prior to calling
2272 * this function.
2273 */
2274void regulator_put(struct regulator *regulator)
2275{
2276        mutex_lock(&regulator_list_mutex);
2277        _regulator_put(regulator);
2278        mutex_unlock(&regulator_list_mutex);
2279}
2280EXPORT_SYMBOL_GPL(regulator_put);
2281
2282/**
2283 * regulator_register_supply_alias - Provide device alias for supply lookup
2284 *
2285 * @dev: device that will be given as the regulator "consumer"
2286 * @id: Supply name or regulator ID
2287 * @alias_dev: device that should be used to lookup the supply
2288 * @alias_id: Supply name or regulator ID that should be used to lookup the
2289 * supply
2290 *
2291 * All lookups for id on dev will instead be conducted for alias_id on
2292 * alias_dev.
2293 */
2294int regulator_register_supply_alias(struct device *dev, const char *id,
2295                                    struct device *alias_dev,
2296                                    const char *alias_id)
2297{
2298        struct regulator_supply_alias *map;
2299
2300        map = regulator_find_supply_alias(dev, id);
2301        if (map)
2302                return -EEXIST;
2303
2304        map = kzalloc(sizeof(struct regulator_supply_alias), GFP_KERNEL);
2305        if (!map)
2306                return -ENOMEM;
2307
2308        map->src_dev = dev;
2309        map->src_supply = id;
2310        map->alias_dev = alias_dev;
2311        map->alias_supply = alias_id;
2312
2313        list_add(&map->list, &regulator_supply_alias_list);
2314
2315        pr_info("Adding alias for supply %s,%s -> %s,%s\n",
2316                id, dev_name(dev), alias_id, dev_name(alias_dev));
2317
2318        return 0;
2319}
2320EXPORT_SYMBOL_GPL(regulator_register_supply_alias);
2321
2322/**
2323 * regulator_unregister_supply_alias - Remove device alias
2324 *
2325 * @dev: device that will be given as the regulator "consumer"
2326 * @id: Supply name or regulator ID
2327 *
2328 * Remove a lookup alias if one exists for id on dev.
2329 */
2330void regulator_unregister_supply_alias(struct device *dev, const char *id)
2331{
2332        struct regulator_supply_alias *map;
2333
2334        map = regulator_find_supply_alias(dev, id);
2335        if (map) {
2336                list_del(&map->list);
2337                kfree(map);
2338        }
2339}
2340EXPORT_SYMBOL_GPL(regulator_unregister_supply_alias);
2341
2342/**
2343 * regulator_bulk_register_supply_alias - register multiple aliases
2344 *
2345 * @dev: device that will be given as the regulator "consumer"
2346 * @id: List of supply names or regulator IDs
2347 * @alias_dev: device that should be used to lookup the supply
2348 * @alias_id: List of supply names or regulator IDs that should be used to
2349 * lookup the supply
2350 * @num_id: Number of aliases to register
2351 *
2352 * @return 0 on success, an errno on failure.
2353 *
2354 * This helper function allows drivers to register several supply
2355 * aliases in one operation.  If any of the aliases cannot be
2356 * registered any aliases that were registered will be removed
2357 * before returning to the caller.
2358 */
2359int regulator_bulk_register_supply_alias(struct device *dev,
2360                                         const char *const *id,
2361                                         struct device *alias_dev,
2362                                         const char *const *alias_id,
2363                                         int num_id)
2364{
2365        int i;
2366        int ret;
2367
2368        for (i = 0; i < num_id; ++i) {
2369                ret = regulator_register_supply_alias(dev, id[i], alias_dev,
2370                                                      alias_id[i]);
2371                if (ret < 0)
2372                        goto err;
2373        }
2374
2375        return 0;
2376
2377err:
2378        dev_err(dev,
2379                "Failed to create supply alias %s,%s -> %s,%s\n",
2380                id[i], dev_name(dev), alias_id[i], dev_name(alias_dev));
2381
2382        while (--i >= 0)
2383                regulator_unregister_supply_alias(dev, id[i]);
2384
2385        return ret;
2386}
2387EXPORT_SYMBOL_GPL(regulator_bulk_register_supply_alias);
2388
2389/**
2390 * regulator_bulk_unregister_supply_alias - unregister multiple aliases
2391 *
2392 * @dev: device that will be given as the regulator "consumer"
2393 * @id: List of supply names or regulator IDs
2394 * @num_id: Number of aliases to unregister
2395 *
2396 * This helper function allows drivers to unregister several supply
2397 * aliases in one operation.
2398 */
2399void regulator_bulk_unregister_supply_alias(struct device *dev,
2400                                            const char *const *id,
2401                                            int num_id)
2402{
2403        int i;
2404
2405        for (i = 0; i < num_id; ++i)
2406                regulator_unregister_supply_alias(dev, id[i]);
2407}
2408EXPORT_SYMBOL_GPL(regulator_bulk_unregister_supply_alias);
2409
2410
2411/* Manage enable GPIO list. Same GPIO pin can be shared among regulators */
2412static int regulator_ena_gpio_request(struct regulator_dev *rdev,
2413                                const struct regulator_config *config)
2414{
2415        struct regulator_enable_gpio *pin, *new_pin;
2416        struct gpio_desc *gpiod;
2417
2418        gpiod = config->ena_gpiod;
2419        new_pin = kzalloc(sizeof(*new_pin), GFP_KERNEL);
2420
2421        mutex_lock(&regulator_list_mutex);
2422
2423        list_for_each_entry(pin, &regulator_ena_gpio_list, list) {
2424                if (pin->gpiod == gpiod) {
2425                        rdev_dbg(rdev, "GPIO is already used\n");
2426                        goto update_ena_gpio_to_rdev;
2427                }
2428        }
2429
2430        if (new_pin == NULL) {
2431                mutex_unlock(&regulator_list_mutex);
2432                return -ENOMEM;
2433        }
2434
2435        pin = new_pin;
2436        new_pin = NULL;
2437
2438        pin->gpiod = gpiod;
2439        list_add(&pin->list, &regulator_ena_gpio_list);
2440
2441update_ena_gpio_to_rdev:
2442        pin->request_count++;
2443        rdev->ena_pin = pin;
2444
2445        mutex_unlock(&regulator_list_mutex);
2446        kfree(new_pin);
2447
2448        return 0;
2449}
2450
2451static void regulator_ena_gpio_free(struct regulator_dev *rdev)
2452{
2453        struct regulator_enable_gpio *pin, *n;
2454
2455        if (!rdev->ena_pin)
2456                return;
2457
2458        /* Free the GPIO only in case of no use */
2459        list_for_each_entry_safe(pin, n, &regulator_ena_gpio_list, list) {
2460                if (pin != rdev->ena_pin)
2461                        continue;
2462
2463                if (--pin->request_count)
2464                        break;
2465
2466                gpiod_put(pin->gpiod);
2467                list_del(&pin->list);
2468                kfree(pin);
2469                break;
2470        }
2471
2472        rdev->ena_pin = NULL;
2473}
2474
2475/**
2476 * regulator_ena_gpio_ctrl - balance enable_count of each GPIO and actual GPIO pin control
2477 * @rdev: regulator_dev structure
2478 * @enable: enable GPIO at initial use?
2479 *
2480 * GPIO is enabled in case of initial use. (enable_count is 0)
2481 * GPIO is disabled when it is not shared any more. (enable_count <= 1)
2482 */
2483static int regulator_ena_gpio_ctrl(struct regulator_dev *rdev, bool enable)
2484{
2485        struct regulator_enable_gpio *pin = rdev->ena_pin;
2486
2487        if (!pin)
2488                return -EINVAL;
2489
2490        if (enable) {
2491                /* Enable GPIO at initial use */
2492                if (pin->enable_count == 0)
2493                        gpiod_set_value_cansleep(pin->gpiod, 1);
2494
2495                pin->enable_count++;
2496        } else {
2497                if (pin->enable_count > 1) {
2498                        pin->enable_count--;
2499                        return 0;
2500                }
2501
2502                /* Disable GPIO if not used */
2503                if (pin->enable_count <= 1) {
2504                        gpiod_set_value_cansleep(pin->gpiod, 0);
2505                        pin->enable_count = 0;
2506                }
2507        }
2508
2509        return 0;
2510}
2511
2512/**
2513 * _regulator_enable_delay - a delay helper function
2514 * @delay: time to delay in microseconds
2515 *
2516 * Delay for the requested amount of time as per the guidelines in:
2517 *
2518 *     Documentation/timers/timers-howto.rst
2519 *
2520 * The assumption here is that regulators will never be enabled in
2521 * atomic context and therefore sleeping functions can be used.
2522 */
2523static void _regulator_enable_delay(unsigned int delay)
2524{
2525        unsigned int ms = delay / 1000;
2526        unsigned int us = delay % 1000;
2527
2528        if (ms > 0) {
2529                /*
2530                 * For small enough values, handle super-millisecond
2531                 * delays in the usleep_range() call below.
2532                 */
2533                if (ms < 20)
2534                        us += ms * 1000;
2535                else
2536                        msleep(ms);
2537        }
2538
2539        /*
2540         * Give the scheduler some room to coalesce with any other
2541         * wakeup sources. For delays shorter than 10 us, don't even
2542         * bother setting up high-resolution timers and just busy-
2543         * loop.
2544         */
2545        if (us >= 10)
2546                usleep_range(us, us + 100);
2547        else
2548                udelay(us);
2549}
2550
2551/**
2552 * _regulator_check_status_enabled
2553 *
2554 * A helper function to check if the regulator status can be interpreted
2555 * as 'regulator is enabled'.
2556 * @rdev: the regulator device to check
2557 *
2558 * Return:
2559 * * 1                  - if status shows regulator is in enabled state
2560 * * 0                  - if not enabled state
2561 * * Error Value        - as received from ops->get_status()
2562 */
2563static inline int _regulator_check_status_enabled(struct regulator_dev *rdev)
2564{
2565        int ret = rdev->desc->ops->get_status(rdev);
2566
2567        if (ret < 0) {
2568                rdev_info(rdev, "get_status returned error: %d\n", ret);
2569                return ret;
2570        }
2571
2572        switch (ret) {
2573        case REGULATOR_STATUS_OFF:
2574        case REGULATOR_STATUS_ERROR:
2575        case REGULATOR_STATUS_UNDEFINED:
2576                return 0;
2577        default:
2578                return 1;
2579        }
2580}
2581
2582static int _regulator_do_enable(struct regulator_dev *rdev)
2583{
2584        int ret, delay;
2585
2586        /* Query before enabling in case configuration dependent.  */
2587        ret = _regulator_get_enable_time(rdev);
2588        if (ret >= 0) {
2589                delay = ret;
2590        } else {
2591                rdev_warn(rdev, "enable_time() failed: %pe\n", ERR_PTR(ret));
2592                delay = 0;
2593        }
2594
2595        trace_regulator_enable(rdev_get_name(rdev));
2596
2597        if (rdev->desc->off_on_delay && rdev->last_off) {
2598                /* if needed, keep a distance of off_on_delay from last time
2599                 * this regulator was disabled.
2600                 */
2601                ktime_t end = ktime_add_us(rdev->last_off, rdev->desc->off_on_delay);
2602                s64 remaining = ktime_us_delta(end, ktime_get());
2603
2604                if (remaining > 0)
2605                        _regulator_enable_delay(remaining);
2606        }
2607
2608        if (rdev->ena_pin) {
2609                if (!rdev->ena_gpio_state) {
2610                        ret = regulator_ena_gpio_ctrl(rdev, true);
2611                        if (ret < 0)
2612                                return ret;
2613                        rdev->ena_gpio_state = 1;
2614                }
2615        } else if (rdev->desc->ops->enable) {
2616                ret = rdev->desc->ops->enable(rdev);
2617                if (ret < 0)
2618                        return ret;
2619        } else {
2620                return -EINVAL;
2621        }
2622
2623        /* Allow the regulator to ramp; it would be useful to extend
2624         * this for bulk operations so that the regulators can ramp
2625         * together.
2626         */
2627        trace_regulator_enable_delay(rdev_get_name(rdev));
2628
2629        /* If poll_enabled_time is set, poll upto the delay calculated
2630         * above, delaying poll_enabled_time uS to check if the regulator
2631         * actually got enabled.
2632         * If the regulator isn't enabled after enable_delay has
2633         * expired, return -ETIMEDOUT.
2634         */
2635        if (rdev->desc->poll_enabled_time) {
2636                unsigned int time_remaining = delay;
2637
2638                while (time_remaining > 0) {
2639                        _regulator_enable_delay(rdev->desc->poll_enabled_time);
2640
2641                        if (rdev->desc->ops->get_status) {
2642                                ret = _regulator_check_status_enabled(rdev);
2643                                if (ret < 0)
2644                                        return ret;
2645                                else if (ret)
2646                                        break;
2647                        } else if (rdev->desc->ops->is_enabled(rdev))
2648                                break;
2649
2650                        time_remaining -= rdev->desc->poll_enabled_time;
2651                }
2652
2653                if (time_remaining <= 0) {
2654                        rdev_err(rdev, "Enabled check timed out\n");
2655                        return -ETIMEDOUT;
2656                }
2657        } else {
2658                _regulator_enable_delay(delay);
2659        }
2660
2661        trace_regulator_enable_complete(rdev_get_name(rdev));
2662
2663        return 0;
2664}
2665
2666/**
2667 * _regulator_handle_consumer_enable - handle that a consumer enabled
2668 * @regulator: regulator source
2669 *
2670 * Some things on a regulator consumer (like the contribution towards total
2671 * load on the regulator) only have an effect when the consumer wants the
2672 * regulator enabled.  Explained in example with two consumers of the same
2673 * regulator:
2674 *   consumer A: set_load(100);       => total load = 0
2675 *   consumer A: regulator_enable();  => total load = 100
2676 *   consumer B: set_load(1000);      => total load = 100
2677 *   consumer B: regulator_enable();  => total load = 1100
2678 *   consumer A: regulator_disable(); => total_load = 1000
2679 *
2680 * This function (together with _regulator_handle_consumer_disable) is
2681 * responsible for keeping track of the refcount for a given regulator consumer
2682 * and applying / unapplying these things.
2683 *
2684 * Returns 0 upon no error; -error upon error.
2685 */
2686static int _regulator_handle_consumer_enable(struct regulator *regulator)
2687{
2688        struct regulator_dev *rdev = regulator->rdev;
2689
2690        lockdep_assert_held_once(&rdev->mutex.base);
2691
2692        regulator->enable_count++;
2693        if (regulator->uA_load && regulator->enable_count == 1)
2694                return drms_uA_update(rdev);
2695
2696        return 0;
2697}
2698
2699/**
2700 * _regulator_handle_consumer_disable - handle that a consumer disabled
2701 * @regulator: regulator source
2702 *
2703 * The opposite of _regulator_handle_consumer_enable().
2704 *
2705 * Returns 0 upon no error; -error upon error.
2706 */
2707static int _regulator_handle_consumer_disable(struct regulator *regulator)
2708{
2709        struct regulator_dev *rdev = regulator->rdev;
2710
2711        lockdep_assert_held_once(&rdev->mutex.base);
2712
2713        if (!regulator->enable_count) {
2714                rdev_err(rdev, "Underflow of regulator enable count\n");
2715                return -EINVAL;
2716        }
2717
2718        regulator->enable_count--;
2719        if (regulator->uA_load && regulator->enable_count == 0)
2720                return drms_uA_update(rdev);
2721
2722        return 0;
2723}
2724
2725/* locks held by regulator_enable() */
2726static int _regulator_enable(struct regulator *regulator)
2727{
2728        struct regulator_dev *rdev = regulator->rdev;
2729        int ret;
2730
2731        lockdep_assert_held_once(&rdev->mutex.base);
2732
2733        if (rdev->use_count == 0 && rdev->supply) {
2734                ret = _regulator_enable(rdev->supply);
2735                if (ret < 0)
2736                        return ret;
2737        }
2738
2739        /* balance only if there are regulators coupled */
2740        if (rdev->coupling_desc.n_coupled > 1) {
2741                ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
2742                if (ret < 0)
2743                        goto err_disable_supply;
2744        }
2745
2746        ret = _regulator_handle_consumer_enable(regulator);
2747        if (ret < 0)
2748                goto err_disable_supply;
2749
2750        if (rdev->use_count == 0) {
2751                /*
2752                 * The regulator may already be enabled if it's not switchable
2753                 * or was left on
2754                 */
2755                ret = _regulator_is_enabled(rdev);
2756                if (ret == -EINVAL || ret == 0) {
2757                        if (!regulator_ops_is_valid(rdev,
2758                                        REGULATOR_CHANGE_STATUS)) {
2759                                ret = -EPERM;
2760                                goto err_consumer_disable;
2761                        }
2762
2763                        ret = _regulator_do_enable(rdev);
2764                        if (ret < 0)
2765                                goto err_consumer_disable;
2766
2767                        _notifier_call_chain(rdev, REGULATOR_EVENT_ENABLE,
2768                                             NULL);
2769                } else if (ret < 0) {
2770                        rdev_err(rdev, "is_enabled() failed: %pe\n", ERR_PTR(ret));
2771                        goto err_consumer_disable;
2772                }
2773                /* Fallthrough on positive return values - already enabled */
2774        }
2775
2776        rdev->use_count++;
2777
2778        return 0;
2779
2780err_consumer_disable:
2781        _regulator_handle_consumer_disable(regulator);
2782
2783err_disable_supply:
2784        if (rdev->use_count == 0 && rdev->supply)
2785                _regulator_disable(rdev->supply);
2786
2787        return ret;
2788}
2789
2790/**
2791 * regulator_enable - enable regulator output
2792 * @regulator: regulator source
2793 *
2794 * Request that the regulator be enabled with the regulator output at
2795 * the predefined voltage or current value.  Calls to regulator_enable()
2796 * must be balanced with calls to regulator_disable().
2797 *
2798 * NOTE: the output value can be set by other drivers, boot loader or may be
2799 * hardwired in the regulator.
2800 */
2801int regulator_enable(struct regulator *regulator)
2802{
2803        struct regulator_dev *rdev = regulator->rdev;
2804        struct ww_acquire_ctx ww_ctx;
2805        int ret;
2806
2807        regulator_lock_dependent(rdev, &ww_ctx);
2808        ret = _regulator_enable(regulator);
2809        regulator_unlock_dependent(rdev, &ww_ctx);
2810
2811        return ret;
2812}
2813EXPORT_SYMBOL_GPL(regulator_enable);
2814
2815static int _regulator_do_disable(struct regulator_dev *rdev)
2816{
2817        int ret;
2818
2819        trace_regulator_disable(rdev_get_name(rdev));
2820
2821        if (rdev->ena_pin) {
2822                if (rdev->ena_gpio_state) {
2823                        ret = regulator_ena_gpio_ctrl(rdev, false);
2824                        if (ret < 0)
2825                                return ret;
2826                        rdev->ena_gpio_state = 0;
2827                }
2828
2829        } else if (rdev->desc->ops->disable) {
2830                ret = rdev->desc->ops->disable(rdev);
2831                if (ret != 0)
2832                        return ret;
2833        }
2834
2835        if (rdev->desc->off_on_delay)
2836                rdev->last_off = ktime_get();
2837
2838        trace_regulator_disable_complete(rdev_get_name(rdev));
2839
2840        return 0;
2841}
2842
2843/* locks held by regulator_disable() */
2844static int _regulator_disable(struct regulator *regulator)
2845{
2846        struct regulator_dev *rdev = regulator->rdev;
2847        int ret = 0;
2848
2849        lockdep_assert_held_once(&rdev->mutex.base);
2850
2851        if (WARN(rdev->use_count <= 0,
2852                 "unbalanced disables for %s\n", rdev_get_name(rdev)))
2853                return -EIO;
2854
2855        /* are we the last user and permitted to disable ? */
2856        if (rdev->use_count == 1 &&
2857            (rdev->constraints && !rdev->constraints->always_on)) {
2858
2859                /* we are last user */
2860                if (regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS)) {
2861                        ret = _notifier_call_chain(rdev,
2862                                                   REGULATOR_EVENT_PRE_DISABLE,
2863                                                   NULL);
2864                        if (ret & NOTIFY_STOP_MASK)
2865                                return -EINVAL;
2866
2867                        ret = _regulator_do_disable(rdev);
2868                        if (ret < 0) {
2869                                rdev_err(rdev, "failed to disable: %pe\n", ERR_PTR(ret));
2870                                _notifier_call_chain(rdev,
2871                                                REGULATOR_EVENT_ABORT_DISABLE,
2872                                                NULL);
2873                                return ret;
2874                        }
2875                        _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
2876                                        NULL);
2877                }
2878
2879                rdev->use_count = 0;
2880        } else if (rdev->use_count > 1) {
2881                rdev->use_count--;
2882        }
2883
2884        if (ret == 0)
2885                ret = _regulator_handle_consumer_disable(regulator);
2886
2887        if (ret == 0 && rdev->coupling_desc.n_coupled > 1)
2888                ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
2889
2890        if (ret == 0 && rdev->use_count == 0 && rdev->supply)
2891                ret = _regulator_disable(rdev->supply);
2892
2893        return ret;
2894}
2895
2896/**
2897 * regulator_disable - disable regulator output
2898 * @regulator: regulator source
2899 *
2900 * Disable the regulator output voltage or current.  Calls to
2901 * regulator_enable() must be balanced with calls to
2902 * regulator_disable().
2903 *
2904 * NOTE: this will only disable the regulator output if no other consumer
2905 * devices have it enabled, the regulator device supports disabling and
2906 * machine constraints permit this operation.
2907 */
2908int regulator_disable(struct regulator *regulator)
2909{
2910        struct regulator_dev *rdev = regulator->rdev;
2911        struct ww_acquire_ctx ww_ctx;
2912        int ret;
2913
2914        regulator_lock_dependent(rdev, &ww_ctx);
2915        ret = _regulator_disable(regulator);
2916        regulator_unlock_dependent(rdev, &ww_ctx);
2917
2918        return ret;
2919}
2920EXPORT_SYMBOL_GPL(regulator_disable);
2921
2922/* locks held by regulator_force_disable() */
2923static int _regulator_force_disable(struct regulator_dev *rdev)
2924{
2925        int ret = 0;
2926
2927        lockdep_assert_held_once(&rdev->mutex.base);
2928
2929        ret = _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
2930                        REGULATOR_EVENT_PRE_DISABLE, NULL);
2931        if (ret & NOTIFY_STOP_MASK)
2932                return -EINVAL;
2933
2934        ret = _regulator_do_disable(rdev);
2935        if (ret < 0) {
2936                rdev_err(rdev, "failed to force disable: %pe\n", ERR_PTR(ret));
2937                _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
2938                                REGULATOR_EVENT_ABORT_DISABLE, NULL);
2939                return ret;
2940        }
2941
2942        _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
2943                        REGULATOR_EVENT_DISABLE, NULL);
2944
2945        return 0;
2946}
2947
2948/**
2949 * regulator_force_disable - force disable regulator output
2950 * @regulator: regulator source
2951 *
2952 * Forcibly disable the regulator output voltage or current.
2953 * NOTE: this *will* disable the regulator output even if other consumer
2954 * devices have it enabled. This should be used for situations when device
2955 * damage will likely occur if the regulator is not disabled (e.g. over temp).
2956 */
2957int regulator_force_disable(struct regulator *regulator)
2958{
2959        struct regulator_dev *rdev = regulator->rdev;
2960        struct ww_acquire_ctx ww_ctx;
2961        int ret;
2962
2963        regulator_lock_dependent(rdev, &ww_ctx);
2964
2965        ret = _regulator_force_disable(regulator->rdev);
2966
2967        if (rdev->coupling_desc.n_coupled > 1)
2968                regulator_balance_voltage(rdev, PM_SUSPEND_ON);
2969
2970        if (regulator->uA_load) {
2971                regulator->uA_load = 0;
2972                ret = drms_uA_update(rdev);
2973        }
2974
2975        if (rdev->use_count != 0 && rdev->supply)
2976                _regulator_disable(rdev->supply);
2977
2978        regulator_unlock_dependent(rdev, &ww_ctx);
2979
2980        return ret;
2981}
2982EXPORT_SYMBOL_GPL(regulator_force_disable);
2983
2984static void regulator_disable_work(struct work_struct *work)
2985{
2986        struct regulator_dev *rdev = container_of(work, struct regulator_dev,
2987                                                  disable_work.work);
2988        struct ww_acquire_ctx ww_ctx;
2989        int count, i, ret;
2990        struct regulator *regulator;
2991        int total_count = 0;
2992
2993        regulator_lock_dependent(rdev, &ww_ctx);
2994
2995        /*
2996         * Workqueue functions queue the new work instance while the previous
2997         * work instance is being processed. Cancel the queued work instance
2998         * as the work instance under processing does the job of the queued
2999         * work instance.
3000         */
3001        cancel_delayed_work(&rdev->disable_work);
3002
3003        list_for_each_entry(regulator, &rdev->consumer_list, list) {
3004                count = regulator->deferred_disables;
3005
3006                if (!count)
3007                        continue;
3008
3009                total_count += count;
3010                regulator->deferred_disables = 0;
3011
3012                for (i = 0; i < count; i++) {
3013                        ret = _regulator_disable(regulator);
3014                        if (ret != 0)
3015                                rdev_err(rdev, "Deferred disable failed: %pe\n",
3016                                         ERR_PTR(ret));
3017                }
3018        }
3019        WARN_ON(!total_count);
3020
3021        if (rdev->coupling_desc.n_coupled > 1)
3022                regulator_balance_voltage(rdev, PM_SUSPEND_ON);
3023
3024        regulator_unlock_dependent(rdev, &ww_ctx);
3025}
3026
3027/**
3028 * regulator_disable_deferred - disable regulator output with delay
3029 * @regulator: regulator source
3030 * @ms: milliseconds until the regulator is disabled
3031 *
3032 * Execute regulator_disable() on the regulator after a delay.  This
3033 * is intended for use with devices that require some time to quiesce.
3034 *
3035 * NOTE: this will only disable the regulator output if no other consumer
3036 * devices have it enabled, the regulator device supports disabling and
3037 * machine constraints permit this operation.
3038 */
3039int regulator_disable_deferred(struct regulator *regulator, int ms)
3040{
3041        struct regulator_dev *rdev = regulator->rdev;
3042
3043        if (!ms)
3044                return regulator_disable(regulator);
3045
3046        regulator_lock(rdev);
3047        regulator->deferred_disables++;
3048        mod_delayed_work(system_power_efficient_wq, &rdev->disable_work,
3049                         msecs_to_jiffies(ms));
3050        regulator_unlock(rdev);
3051
3052        return 0;
3053}
3054EXPORT_SYMBOL_GPL(regulator_disable_deferred);
3055
3056static int _regulator_is_enabled(struct regulator_dev *rdev)
3057{
3058        /* A GPIO control always takes precedence */
3059        if (rdev->ena_pin)
3060                return rdev->ena_gpio_state;
3061
3062        /* If we don't know then assume that the regulator is always on */
3063        if (!rdev->desc->ops->is_enabled)
3064                return 1;
3065
3066        return rdev->desc->ops->is_enabled(rdev);
3067}
3068
3069static int _regulator_list_voltage(struct regulator_dev *rdev,
3070                                   unsigned selector, int lock)
3071{
3072        const struct regulator_ops *ops = rdev->desc->ops;
3073        int ret;
3074
3075        if (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1 && !selector)
3076                return rdev->desc->fixed_uV;
3077
3078        if (ops->list_voltage) {
3079                if (selector >= rdev->desc->n_voltages)
3080                        return -EINVAL;
3081                if (selector < rdev->desc->linear_min_sel)
3082                        return 0;
3083                if (lock)
3084                        regulator_lock(rdev);
3085                ret = ops->list_voltage(rdev, selector);
3086                if (lock)
3087                        regulator_unlock(rdev);
3088        } else if (rdev->is_switch && rdev->supply) {
3089                ret = _regulator_list_voltage(rdev->supply->rdev,
3090                                              selector, lock);
3091        } else {
3092                return -EINVAL;
3093        }
3094
3095        if (ret > 0) {
3096                if (ret < rdev->constraints->min_uV)
3097                        ret = 0;
3098                else if (ret > rdev->constraints->max_uV)
3099                        ret = 0;
3100        }
3101
3102        return ret;
3103}
3104
3105/**
3106 * regulator_is_enabled - is the regulator output enabled
3107 * @regulator: regulator source
3108 *
3109 * Returns positive if the regulator driver backing the source/client
3110 * has requested that the device be enabled, zero if it hasn't, else a
3111 * negative errno code.
3112 *
3113 * Note that the device backing this regulator handle can have multiple
3114 * users, so it might be enabled even if regulator_enable() was never
3115 * called for this particular source.
3116 */
3117int regulator_is_enabled(struct regulator *regulator)
3118{
3119        int ret;
3120
3121        if (regulator->always_on)
3122                return 1;
3123
3124        regulator_lock(regulator->rdev);
3125        ret = _regulator_is_enabled(regulator->rdev);
3126        regulator_unlock(regulator->rdev);
3127
3128        return ret;
3129}
3130EXPORT_SYMBOL_GPL(regulator_is_enabled);
3131
3132/**
3133 * regulator_count_voltages - count regulator_list_voltage() selectors
3134 * @regulator: regulator source
3135 *
3136 * Returns number of selectors, or negative errno.  Selectors are
3137 * numbered starting at zero, and typically correspond to bitfields
3138 * in hardware registers.
3139 */
3140int regulator_count_voltages(struct regulator *regulator)
3141{
3142        struct regulator_dev    *rdev = regulator->rdev;
3143
3144        if (rdev->desc->n_voltages)
3145                return rdev->desc->n_voltages;
3146
3147        if (!rdev->is_switch || !rdev->supply)
3148                return -EINVAL;
3149
3150        return regulator_count_voltages(rdev->supply);
3151}
3152EXPORT_SYMBOL_GPL(regulator_count_voltages);
3153
3154/**
3155 * regulator_list_voltage - enumerate supported voltages
3156 * @regulator: regulator source
3157 * @selector: identify voltage to list
3158 * Context: can sleep
3159 *
3160 * Returns a voltage that can be passed to @regulator_set_voltage(),
3161 * zero if this selector code can't be used on this system, or a
3162 * negative errno.
3163 */
3164int regulator_list_voltage(struct regulator *regulator, unsigned selector)
3165{
3166        return _regulator_list_voltage(regulator->rdev, selector, 1);
3167}
3168EXPORT_SYMBOL_GPL(regulator_list_voltage);
3169
3170/**
3171 * regulator_get_regmap - get the regulator's register map
3172 * @regulator: regulator source
3173 *
3174 * Returns the register map for the given regulator, or an ERR_PTR value
3175 * if the regulator doesn't use regmap.
3176 */
3177struct regmap *regulator_get_regmap(struct regulator *regulator)
3178{
3179        struct regmap *map = regulator->rdev->regmap;
3180
3181        return map ? map : ERR_PTR(-EOPNOTSUPP);
3182}
3183
3184/**
3185 * regulator_get_hardware_vsel_register - get the HW voltage selector register
3186 * @regulator: regulator source
3187 * @vsel_reg: voltage selector register, output parameter
3188 * @vsel_mask: mask for voltage selector bitfield, output parameter
3189 *
3190 * Returns the hardware register offset and bitmask used for setting the
3191 * regulator voltage. This might be useful when configuring voltage-scaling
3192 * hardware or firmware that can make I2C requests behind the kernel's back,
3193 * for example.
3194 *
3195 * On success, the output parameters @vsel_reg and @vsel_mask are filled in
3196 * and 0 is returned, otherwise a negative errno is returned.
3197 */
3198int regulator_get_hardware_vsel_register(struct regulator *regulator,
3199                                         unsigned *vsel_reg,
3200                                         unsigned *vsel_mask)
3201{
3202        struct regulator_dev *rdev = regulator->rdev;
3203        const struct regulator_ops *ops = rdev->desc->ops;
3204
3205        if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap)
3206                return -EOPNOTSUPP;
3207
3208        *vsel_reg = rdev->desc->vsel_reg;
3209        *vsel_mask = rdev->desc->vsel_mask;
3210
3211        return 0;
3212}
3213EXPORT_SYMBOL_GPL(regulator_get_hardware_vsel_register);
3214
3215/**
3216 * regulator_list_hardware_vsel - get the HW-specific register value for a selector
3217 * @regulator: regulator source
3218 * @selector: identify voltage to list
3219 *
3220 * Converts the selector to a hardware-specific voltage selector that can be
3221 * directly written to the regulator registers. The address of the voltage
3222 * register can be determined by calling @regulator_get_hardware_vsel_register.
3223 *
3224 * On error a negative errno is returned.
3225 */
3226int regulator_list_hardware_vsel(struct regulator *regulator,
3227                                 unsigned selector)
3228{
3229        struct regulator_dev *rdev = regulator->rdev;
3230        const struct regulator_ops *ops = rdev->desc->ops;
3231
3232        if (selector >= rdev->desc->n_voltages)
3233                return -EINVAL;
3234        if (selector < rdev->desc->linear_min_sel)
3235                return 0;
3236        if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap)
3237                return -EOPNOTSUPP;
3238
3239        return selector;
3240}
3241EXPORT_SYMBOL_GPL(regulator_list_hardware_vsel);
3242
3243/**
3244 * regulator_get_linear_step - return the voltage step size between VSEL values
3245 * @regulator: regulator source
3246 *
3247 * Returns the voltage step size between VSEL values for linear
3248 * regulators, or return 0 if the regulator isn't a linear regulator.
3249 */
3250unsigned int regulator_get_linear_step(struct regulator *regulator)
3251{
3252        struct regulator_dev *rdev = regulator->rdev;
3253
3254        return rdev->desc->uV_step;
3255}
3256EXPORT_SYMBOL_GPL(regulator_get_linear_step);
3257
3258/**
3259 * regulator_is_supported_voltage - check if a voltage range can be supported
3260 *
3261 * @regulator: Regulator to check.
3262 * @min_uV: Minimum required voltage in uV.
3263 * @max_uV: Maximum required voltage in uV.
3264 *
3265 * Returns a boolean.
3266 */
3267int regulator_is_supported_voltage(struct regulator *regulator,
3268                                   int min_uV, int max_uV)
3269{
3270        struct regulator_dev *rdev = regulator->rdev;
3271        int i, voltages, ret;
3272
3273        /* If we can't change voltage check the current voltage */
3274        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) {
3275                ret = regulator_get_voltage(regulator);
3276                if (ret >= 0)
3277                        return min_uV <= ret && ret <= max_uV;
3278                else
3279                        return ret;
3280        }
3281
3282        /* Any voltage within constrains range is fine? */
3283        if (rdev->desc->continuous_voltage_range)
3284                return min_uV >= rdev->constraints->min_uV &&
3285                                max_uV <= rdev->constraints->max_uV;
3286
3287        ret = regulator_count_voltages(regulator);
3288        if (ret < 0)
3289                return 0;
3290        voltages = ret;
3291
3292        for (i = 0; i < voltages; i++) {
3293                ret = regulator_list_voltage(regulator, i);
3294
3295                if (ret >= min_uV && ret <= max_uV)
3296                        return 1;
3297        }
3298
3299        return 0;
3300}
3301EXPORT_SYMBOL_GPL(regulator_is_supported_voltage);
3302
3303static int regulator_map_voltage(struct regulator_dev *rdev, int min_uV,
3304                                 int max_uV)
3305{
3306        const struct regulator_desc *desc = rdev->desc;
3307
3308        if (desc->ops->map_voltage)
3309                return desc->ops->map_voltage(rdev, min_uV, max_uV);
3310
3311        if (desc->ops->list_voltage == regulator_list_voltage_linear)
3312                return regulator_map_voltage_linear(rdev, min_uV, max_uV);
3313
3314        if (desc->ops->list_voltage == regulator_list_voltage_linear_range)
3315                return regulator_map_voltage_linear_range(rdev, min_uV, max_uV);
3316
3317        if (desc->ops->list_voltage ==
3318                regulator_list_voltage_pickable_linear_range)
3319                return regulator_map_voltage_pickable_linear_range(rdev,
3320                                                        min_uV, max_uV);
3321
3322        return regulator_map_voltage_iterate(rdev, min_uV, max_uV);
3323}
3324
3325static int _regulator_call_set_voltage(struct regulator_dev *rdev,
3326                                       int min_uV, int max_uV,
3327                                       unsigned *selector)
3328{
3329        struct pre_voltage_change_data data;
3330        int ret;
3331
3332        data.old_uV = regulator_get_voltage_rdev(rdev);
3333        data.min_uV = min_uV;
3334        data.max_uV = max_uV;
3335        ret = _notifier_call_chain(rdev, REGULATOR_EVENT_PRE_VOLTAGE_CHANGE,
3336                                   &data);
3337        if (ret & NOTIFY_STOP_MASK)
3338                return -EINVAL;
3339
3340        ret = rdev->desc->ops->set_voltage(rdev, min_uV, max_uV, selector);
3341        if (ret >= 0)
3342                return ret;
3343
3344        _notifier_call_chain(rdev, REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE,
3345                             (void *)data.old_uV);
3346
3347        return ret;
3348}
3349
3350static int _regulator_call_set_voltage_sel(struct regulator_dev *rdev,
3351                                           int uV, unsigned selector)
3352{
3353        struct pre_voltage_change_data data;
3354        int ret;
3355
3356        data.old_uV = regulator_get_voltage_rdev(rdev);
3357        data.min_uV = uV;
3358        data.max_uV = uV;
3359        ret = _notifier_call_chain(rdev, REGULATOR_EVENT_PRE_VOLTAGE_CHANGE,
3360                                   &data);
3361        if (ret & NOTIFY_STOP_MASK)
3362                return -EINVAL;
3363
3364        ret = rdev->desc->ops->set_voltage_sel(rdev, selector);
3365        if (ret >= 0)
3366                return ret;
3367
3368        _notifier_call_chain(rdev, REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE,
3369                             (void *)data.old_uV);
3370
3371        return ret;
3372}
3373
3374static int _regulator_set_voltage_sel_step(struct regulator_dev *rdev,
3375                                           int uV, int new_selector)
3376{
3377        const struct regulator_ops *ops = rdev->desc->ops;
3378        int diff, old_sel, curr_sel, ret;
3379
3380        /* Stepping is only needed if the regulator is enabled. */
3381        if (!_regulator_is_enabled(rdev))
3382                goto final_set;
3383
3384        if (!ops->get_voltage_sel)
3385                return -EINVAL;
3386
3387        old_sel = ops->get_voltage_sel(rdev);
3388        if (old_sel < 0)
3389                return old_sel;
3390
3391        diff = new_selector - old_sel;
3392        if (diff == 0)
3393                return 0; /* No change needed. */
3394
3395        if (diff > 0) {
3396                /* Stepping up. */
3397                for (curr_sel = old_sel + rdev->desc->vsel_step;
3398                     curr_sel < new_selector;
3399                     curr_sel += rdev->desc->vsel_step) {
3400                        /*
3401                         * Call the callback directly instead of using
3402                         * _regulator_call_set_voltage_sel() as we don't
3403                         * want to notify anyone yet. Same in the branch
3404                         * below.
3405                         */
3406                        ret = ops->set_voltage_sel(rdev, curr_sel);
3407                        if (ret)
3408                                goto try_revert;
3409                }
3410        } else {
3411                /* Stepping down. */
3412                for (curr_sel = old_sel - rdev->desc->vsel_step;
3413                     curr_sel > new_selector;
3414                     curr_sel -= rdev->desc->vsel_step) {
3415                        ret = ops->set_voltage_sel(rdev, curr_sel);
3416                        if (ret)
3417                                goto try_revert;
3418                }
3419        }
3420
3421final_set:
3422        /* The final selector will trigger the notifiers. */
3423        return _regulator_call_set_voltage_sel(rdev, uV, new_selector);
3424
3425try_revert:
3426        /*
3427         * At least try to return to the previous voltage if setting a new
3428         * one failed.
3429         */
3430        (void)ops->set_voltage_sel(rdev, old_sel);
3431        return ret;
3432}
3433
3434static int _regulator_set_voltage_time(struct regulator_dev *rdev,
3435                                       int old_uV, int new_uV)
3436{
3437        unsigned int ramp_delay = 0;
3438
3439        if (rdev->constraints->ramp_delay)
3440                ramp_delay = rdev->constraints->ramp_delay;
3441        else if (rdev->desc->ramp_delay)
3442                ramp_delay = rdev->desc->ramp_delay;
3443        else if (rdev->constraints->settling_time)
3444                return rdev->constraints->settling_time;
3445        else if (rdev->constraints->settling_time_up &&
3446                 (new_uV > old_uV))
3447                return rdev->constraints->settling_time_up;
3448        else if (rdev->constraints->settling_time_down &&
3449                 (new_uV < old_uV))
3450                return rdev->constraints->settling_time_down;
3451
3452        if (ramp_delay == 0) {
3453                rdev_dbg(rdev, "ramp_delay not set\n");
3454                return 0;
3455        }
3456
3457        return DIV_ROUND_UP(abs(new_uV - old_uV), ramp_delay);
3458}
3459
3460static int _regulator_do_set_voltage(struct regulator_dev *rdev,
3461                                     int min_uV, int max_uV)
3462{
3463        int ret;
3464        int delay = 0;
3465        int best_val = 0;
3466        unsigned int selector;
3467        int old_selector = -1;
3468        const struct regulator_ops *ops = rdev->desc->ops;
3469        int old_uV = regulator_get_voltage_rdev(rdev);
3470
3471        trace_regulator_set_voltage(rdev_get_name(rdev), min_uV, max_uV);
3472
3473        min_uV += rdev->constraints->uV_offset;
3474        max_uV += rdev->constraints->uV_offset;
3475
3476        /*
3477         * If we can't obtain the old selector there is not enough
3478         * info to call set_voltage_time_sel().
3479         */
3480        if (_regulator_is_enabled(rdev) &&
3481            ops->set_voltage_time_sel && ops->get_voltage_sel) {
3482                old_selector = ops->get_voltage_sel(rdev);
3483                if (old_selector < 0)
3484                        return old_selector;
3485        }
3486
3487        if (ops->set_voltage) {
3488                ret = _regulator_call_set_voltage(rdev, min_uV, max_uV,
3489                                                  &selector);
3490
3491                if (ret >= 0) {
3492                        if (ops->list_voltage)
3493                                best_val = ops->list_voltage(rdev,
3494                                                             selector);
3495                        else
3496                                best_val = regulator_get_voltage_rdev(rdev);
3497                }
3498
3499        } else if (ops->set_voltage_sel) {
3500                ret = regulator_map_voltage(rdev, min_uV, max_uV);
3501                if (ret >= 0) {
3502                        best_val = ops->list_voltage(rdev, ret);
3503                        if (min_uV <= best_val && max_uV >= best_val) {
3504                                selector = ret;
3505                                if (old_selector == selector)
3506                                        ret = 0;
3507                                else if (rdev->desc->vsel_step)
3508                                        ret = _regulator_set_voltage_sel_step(
3509                                                rdev, best_val, selector);
3510                                else
3511                                        ret = _regulator_call_set_voltage_sel(
3512                                                rdev, best_val, selector);
3513                        } else {
3514                                ret = -EINVAL;
3515                        }
3516                }
3517        } else {
3518                ret = -EINVAL;
3519        }
3520
3521        if (ret)
3522                goto out;
3523
3524        if (ops->set_voltage_time_sel) {
3525                /*
3526                 * Call set_voltage_time_sel if successfully obtained
3527                 * old_selector
3528                 */
3529                if (old_selector >= 0 && old_selector != selector)
3530                        delay = ops->set_voltage_time_sel(rdev, old_selector,
3531                                                          selector);
3532        } else {
3533                if (old_uV != best_val) {
3534                        if (ops->set_voltage_time)
3535                                delay = ops->set_voltage_time(rdev, old_uV,
3536                                                              best_val);
3537                        else
3538                                delay = _regulator_set_voltage_time(rdev,
3539                                                                    old_uV,
3540                                                                    best_val);
3541                }
3542        }
3543
3544        if (delay < 0) {
3545                rdev_warn(rdev, "failed to get delay: %pe\n", ERR_PTR(delay));
3546                delay = 0;
3547        }
3548
3549        /* Insert any necessary delays */
3550        if (delay >= 1000) {
3551                mdelay(delay / 1000);
3552                udelay(delay % 1000);
3553        } else if (delay) {
3554                udelay(delay);
3555        }
3556
3557        if (best_val >= 0) {
3558                unsigned long data = best_val;
3559
3560                _notifier_call_chain(rdev, REGULATOR_EVENT_VOLTAGE_CHANGE,
3561                                     (void *)data);
3562        }
3563
3564out:
3565        trace_regulator_set_voltage_complete(rdev_get_name(rdev), best_val);
3566
3567        return ret;
3568}
3569
3570static int _regulator_do_set_suspend_voltage(struct regulator_dev *rdev,
3571                                  int min_uV, int max_uV, suspend_state_t state)
3572{
3573        struct regulator_state *rstate;
3574        int uV, sel;
3575
3576        rstate = regulator_get_suspend_state(rdev, state);
3577        if (rstate == NULL)
3578                return -EINVAL;
3579
3580        if (min_uV < rstate->min_uV)
3581                min_uV = rstate->min_uV;
3582        if (max_uV > rstate->max_uV)
3583                max_uV = rstate->max_uV;
3584
3585        sel = regulator_map_voltage(rdev, min_uV, max_uV);
3586        if (sel < 0)
3587                return sel;
3588
3589        uV = rdev->desc->ops->list_voltage(rdev, sel);
3590        if (uV >= min_uV && uV <= max_uV)
3591                rstate->uV = uV;
3592
3593        return 0;
3594}
3595
3596static int regulator_set_voltage_unlocked(struct regulator *regulator,
3597                                          int min_uV, int max_uV,
3598                                          suspend_state_t state)
3599{
3600        struct regulator_dev *rdev = regulator->rdev;
3601        struct regulator_voltage *voltage = &regulator->voltage[state];
3602        int ret = 0;
3603        int old_min_uV, old_max_uV;
3604        int current_uV;
3605
3606        /* If we're setting the same range as last time the change
3607         * should be a noop (some cpufreq implementations use the same
3608         * voltage for multiple frequencies, for example).
3609         */
3610        if (voltage->min_uV == min_uV && voltage->max_uV == max_uV)
3611                goto out;
3612
3613        /* If we're trying to set a range that overlaps the current voltage,
3614         * return successfully even though the regulator does not support
3615         * changing the voltage.
3616         */
3617        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) {
3618                current_uV = regulator_get_voltage_rdev(rdev);
3619                if (min_uV <= current_uV && current_uV <= max_uV) {
3620                        voltage->min_uV = min_uV;
3621                        voltage->max_uV = max_uV;
3622                        goto out;
3623                }
3624        }
3625
3626        /* sanity check */
3627        if (!rdev->desc->ops->set_voltage &&
3628            !rdev->desc->ops->set_voltage_sel) {
3629                ret = -EINVAL;
3630                goto out;
3631        }
3632
3633        /* constraints check */
3634        ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
3635        if (ret < 0)
3636                goto out;
3637
3638        /* restore original values in case of error */
3639        old_min_uV = voltage->min_uV;
3640        old_max_uV = voltage->max_uV;
3641        voltage->min_uV = min_uV;
3642        voltage->max_uV = max_uV;
3643
3644        /* for not coupled regulators this will just set the voltage */
3645        ret = regulator_balance_voltage(rdev, state);
3646        if (ret < 0) {
3647                voltage->min_uV = old_min_uV;
3648                voltage->max_uV = old_max_uV;
3649        }
3650
3651out:
3652        return ret;
3653}
3654
3655int regulator_set_voltage_rdev(struct regulator_dev *rdev, int min_uV,
3656                               int max_uV, suspend_state_t state)
3657{
3658        int best_supply_uV = 0;
3659        int supply_change_uV = 0;
3660        int ret;
3661
3662        if (rdev->supply &&
3663            regulator_ops_is_valid(rdev->supply->rdev,
3664                                   REGULATOR_CHANGE_VOLTAGE) &&
3665            (rdev->desc->min_dropout_uV || !(rdev->desc->ops->get_voltage ||
3666                                           rdev->desc->ops->get_voltage_sel))) {
3667                int current_supply_uV;
3668                int selector;
3669
3670                selector = regulator_map_voltage(rdev, min_uV, max_uV);
3671                if (selector < 0) {
3672                        ret = selector;
3673                        goto out;
3674                }
3675
3676                best_supply_uV = _regulator_list_voltage(rdev, selector, 0);
3677                if (best_supply_uV < 0) {
3678                        ret = best_supply_uV;
3679                        goto out;
3680                }
3681
3682                best_supply_uV += rdev->desc->min_dropout_uV;
3683
3684                current_supply_uV = regulator_get_voltage_rdev(rdev->supply->rdev);
3685                if (current_supply_uV < 0) {
3686                        ret = current_supply_uV;
3687                        goto out;
3688                }
3689
3690                supply_change_uV = best_supply_uV - current_supply_uV;
3691        }
3692
3693        if (supply_change_uV > 0) {
3694                ret = regulator_set_voltage_unlocked(rdev->supply,
3695                                best_supply_uV, INT_MAX, state);
3696                if (ret) {
3697                        dev_err(&rdev->dev, "Failed to increase supply voltage: %pe\n",
3698                                ERR_PTR(ret));
3699                        goto out;
3700                }
3701        }
3702
3703        if (state == PM_SUSPEND_ON)
3704                ret = _regulator_do_set_voltage(rdev, min_uV, max_uV);
3705        else
3706                ret = _regulator_do_set_suspend_voltage(rdev, min_uV,
3707                                                        max_uV, state);
3708        if (ret < 0)
3709                goto out;
3710
3711        if (supply_change_uV < 0) {
3712                ret = regulator_set_voltage_unlocked(rdev->supply,
3713                                best_supply_uV, INT_MAX, state);
3714                if (ret)
3715                        dev_warn(&rdev->dev, "Failed to decrease supply voltage: %pe\n",
3716                                 ERR_PTR(ret));
3717                /* No need to fail here */
3718                ret = 0;
3719        }
3720
3721out:
3722        return ret;
3723}
3724EXPORT_SYMBOL_GPL(regulator_set_voltage_rdev);
3725
3726static int regulator_limit_voltage_step(struct regulator_dev *rdev,
3727                                        int *current_uV, int *min_uV)
3728{
3729        struct regulation_constraints *constraints = rdev->constraints;
3730
3731        /* Limit voltage change only if necessary */
3732        if (!constraints->max_uV_step || !_regulator_is_enabled(rdev))
3733                return 1;
3734
3735        if (*current_uV < 0) {
3736                *current_uV = regulator_get_voltage_rdev(rdev);
3737
3738                if (*current_uV < 0)
3739                        return *current_uV;
3740        }
3741
3742        if (abs(*current_uV - *min_uV) <= constraints->max_uV_step)
3743                return 1;
3744
3745        /* Clamp target voltage within the given step */
3746        if (*current_uV < *min_uV)
3747                *min_uV = min(*current_uV + constraints->max_uV_step,
3748                              *min_uV);
3749        else
3750                *min_uV = max(*current_uV - constraints->max_uV_step,
3751                              *min_uV);
3752
3753        return 0;
3754}
3755
3756static int regulator_get_optimal_voltage(struct regulator_dev *rdev,
3757                                         int *current_uV,
3758                                         int *min_uV, int *max_uV,
3759                                         suspend_state_t state,
3760                                         int n_coupled)
3761{
3762        struct coupling_desc *c_desc = &rdev->coupling_desc;
3763        struct regulator_dev **c_rdevs = c_desc->coupled_rdevs;
3764        struct regulation_constraints *constraints = rdev->constraints;
3765        int desired_min_uV = 0, desired_max_uV = INT_MAX;
3766        int max_current_uV = 0, min_current_uV = INT_MAX;
3767        int highest_min_uV = 0, target_uV, possible_uV;
3768        int i, ret, max_spread;
3769        bool done;
3770
3771        *current_uV = -1;
3772
3773        /*
3774         * If there are no coupled regulators, simply set the voltage
3775         * demanded by consumers.
3776         */
3777        if (n_coupled == 1) {
3778                /*
3779                 * If consumers don't provide any demands, set voltage
3780                 * to min_uV
3781                 */
3782                desired_min_uV = constraints->min_uV;
3783                desired_max_uV = constraints->max_uV;
3784
3785                ret = regulator_check_consumers(rdev,
3786                                                &desired_min_uV,
3787                                                &desired_max_uV, state);
3788                if (ret < 0)
3789                        return ret;
3790
3791                possible_uV = desired_min_uV;
3792                done = true;
3793
3794                goto finish;
3795        }
3796
3797        /* Find highest min desired voltage */
3798        for (i = 0; i < n_coupled; i++) {
3799                int tmp_min = 0;
3800                int tmp_max = INT_MAX;
3801
3802                lockdep_assert_held_once(&c_rdevs[i]->mutex.base);
3803
3804                ret = regulator_check_consumers(c_rdevs[i],
3805                                                &tmp_min,
3806                                                &tmp_max, state);
3807                if (ret < 0)
3808                        return ret;
3809
3810                ret = regulator_check_voltage(c_rdevs[i], &tmp_min, &tmp_max);
3811                if (ret < 0)
3812                        return ret;
3813
3814                highest_min_uV = max(highest_min_uV, tmp_min);
3815
3816                if (i == 0) {
3817                        desired_min_uV = tmp_min;
3818                        desired_max_uV = tmp_max;
3819                }
3820        }
3821
3822        max_spread = constraints->max_spread[0];
3823
3824        /*
3825         * Let target_uV be equal to the desired one if possible.
3826         * If not, set it to minimum voltage, allowed by other coupled
3827         * regulators.
3828         */
3829        target_uV = max(desired_min_uV, highest_min_uV - max_spread);
3830
3831        /*
3832         * Find min and max voltages, which currently aren't violating
3833         * max_spread.
3834         */
3835        for (i = 1; i < n_coupled; i++) {
3836                int tmp_act;
3837
3838                if (!_regulator_is_enabled(c_rdevs[i]))
3839                        continue;
3840
3841                tmp_act = regulator_get_voltage_rdev(c_rdevs[i]);
3842                if (tmp_act < 0)
3843                        return tmp_act;
3844
3845                min_current_uV = min(tmp_act, min_current_uV);
3846                max_current_uV = max(tmp_act, max_current_uV);
3847        }
3848
3849        /* There aren't any other regulators enabled */
3850        if (max_current_uV == 0) {
3851                possible_uV = target_uV;
3852        } else {
3853                /*
3854                 * Correct target voltage, so as it currently isn't
3855                 * violating max_spread
3856                 */
3857                possible_uV = max(target_uV, max_current_uV - max_spread);
3858                possible_uV = min(possible_uV, min_current_uV + max_spread);
3859        }
3860
3861        if (possible_uV > desired_max_uV)
3862                return -EINVAL;
3863
3864        done = (possible_uV == target_uV);
3865        desired_min_uV = possible_uV;
3866
3867finish:
3868        /* Apply max_uV_step constraint if necessary */
3869        if (state == PM_SUSPEND_ON) {
3870                ret = regulator_limit_voltage_step(rdev, current_uV,
3871                                                   &desired_min_uV);
3872                if (ret < 0)
3873                        return ret;
3874
3875                if (ret == 0)
3876                        done = false;
3877        }
3878
3879        /* Set current_uV if wasn't done earlier in the code and if necessary */
3880        if (n_coupled > 1 && *current_uV == -1) {
3881
3882                if (_regulator_is_enabled(rdev)) {
3883                        ret = regulator_get_voltage_rdev(rdev);
3884                        if (ret < 0)
3885                                return ret;
3886
3887                        *current_uV = ret;
3888                } else {
3889                        *current_uV = desired_min_uV;
3890                }
3891        }
3892
3893        *min_uV = desired_min_uV;
3894        *max_uV = desired_max_uV;
3895
3896        return done;
3897}
3898
3899int regulator_do_balance_voltage(struct regulator_dev *rdev,
3900                                 suspend_state_t state, bool skip_coupled)
3901{
3902        struct regulator_dev **c_rdevs;
3903        struct regulator_dev *best_rdev;
3904        struct coupling_desc *c_desc = &rdev->coupling_desc;
3905        int i, ret, n_coupled, best_min_uV, best_max_uV, best_c_rdev;
3906        unsigned int delta, best_delta;
3907        unsigned long c_rdev_done = 0;
3908        bool best_c_rdev_done;
3909
3910        c_rdevs = c_desc->coupled_rdevs;
3911        n_coupled = skip_coupled ? 1 : c_desc->n_coupled;
3912
3913        /*
3914         * Find the best possible voltage change on each loop. Leave the loop
3915         * if there isn't any possible change.
3916         */
3917        do {
3918                best_c_rdev_done = false;
3919                best_delta = 0;
3920                best_min_uV = 0;
3921                best_max_uV = 0;
3922                best_c_rdev = 0;
3923                best_rdev = NULL;
3924
3925                /*
3926                 * Find highest difference between optimal voltage
3927                 * and current voltage.
3928                 */
3929                for (i = 0; i < n_coupled; i++) {
3930                        /*
3931                         * optimal_uV is the best voltage that can be set for
3932                         * i-th regulator at the moment without violating
3933                         * max_spread constraint in order to balance
3934                         * the coupled voltages.
3935                         */
3936                        int optimal_uV = 0, optimal_max_uV = 0, current_uV = 0;
3937
3938                        if (test_bit(i, &c_rdev_done))
3939                                continue;
3940
3941                        ret = regulator_get_optimal_voltage(c_rdevs[i],
3942                                                            &current_uV,
3943                                                            &optimal_uV,
3944                                                            &optimal_max_uV,
3945                                                            state, n_coupled);
3946                        if (ret < 0)
3947                                goto out;
3948
3949                        delta = abs(optimal_uV - current_uV);
3950
3951                        if (delta && best_delta <= delta) {
3952                                best_c_rdev_done = ret;
3953                                best_delta = delta;
3954                                best_rdev = c_rdevs[i];
3955                                best_min_uV = optimal_uV;
3956                                best_max_uV = optimal_max_uV;
3957                                best_c_rdev = i;
3958                        }
3959                }
3960
3961                /* Nothing to change, return successfully */
3962                if (!best_rdev) {
3963                        ret = 0;
3964                        goto out;
3965                }
3966
3967                ret = regulator_set_voltage_rdev(best_rdev, best_min_uV,
3968                                                 best_max_uV, state);
3969
3970                if (ret < 0)
3971                        goto out;
3972
3973                if (best_c_rdev_done)
3974                        set_bit(best_c_rdev, &c_rdev_done);
3975
3976        } while (n_coupled > 1);
3977
3978out:
3979        return ret;
3980}
3981
3982static int regulator_balance_voltage(struct regulator_dev *rdev,
3983                                     suspend_state_t state)
3984{
3985        struct coupling_desc *c_desc = &rdev->coupling_desc;
3986        struct regulator_coupler *coupler = c_desc->coupler;
3987        bool skip_coupled = false;
3988
3989        /*
3990         * If system is in a state other than PM_SUSPEND_ON, don't check
3991         * other coupled regulators.
3992         */
3993        if (state != PM_SUSPEND_ON)
3994                skip_coupled = true;
3995
3996        if (c_desc->n_resolved < c_desc->n_coupled) {
3997                rdev_err(rdev, "Not all coupled regulators registered\n");
3998                return -EPERM;
3999        }
4000
4001        /* Invoke custom balancer for customized couplers */
4002        if (coupler && coupler->balance_voltage)
4003                return coupler->balance_voltage(coupler, rdev, state);
4004
4005        return regulator_do_balance_voltage(rdev, state, skip_coupled);
4006}
4007
4008/**
4009 * regulator_set_voltage - set regulator output voltage
4010 * @regulator: regulator source
4011 * @min_uV: Minimum required voltage in uV
4012 * @max_uV: Maximum acceptable voltage in uV
4013 *
4014 * Sets a voltage regulator to the desired output voltage. This can be set
4015 * during any regulator state. IOW, regulator can be disabled or enabled.
4016 *
4017 * If the regulator is enabled then the voltage will change to the new value
4018 * immediately otherwise if the regulator is disabled the regulator will
4019 * output at the new voltage when enabled.
4020 *
4021 * NOTE: If the regulator is shared between several devices then the lowest
4022 * request voltage that meets the system constraints will be used.
4023 * Regulator system constraints must be set for this regulator before
4024 * calling this function otherwise this call will fail.
4025 */
4026int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV)
4027{
4028        struct ww_acquire_ctx ww_ctx;
4029        int ret;
4030
4031        regulator_lock_dependent(regulator->rdev, &ww_ctx);
4032
4033        ret = regulator_set_voltage_unlocked(regulator, min_uV, max_uV,
4034                                             PM_SUSPEND_ON);
4035
4036        regulator_unlock_dependent(regulator->rdev, &ww_ctx);
4037
4038        return ret;
4039}
4040EXPORT_SYMBOL_GPL(regulator_set_voltage);
4041
4042static inline int regulator_suspend_toggle(struct regulator_dev *rdev,
4043                                           suspend_state_t state, bool en)
4044{
4045        struct regulator_state *rstate;
4046
4047        rstate = regulator_get_suspend_state(rdev, state);
4048        if (rstate == NULL)
4049                return -EINVAL;
4050
4051        if (!rstate->changeable)
4052                return -EPERM;
4053
4054        rstate->enabled = (en) ? ENABLE_IN_SUSPEND : DISABLE_IN_SUSPEND;
4055
4056        return 0;
4057}
4058
4059int regulator_suspend_enable(struct regulator_dev *rdev,
4060                                    suspend_state_t state)
4061{
4062        return regulator_suspend_toggle(rdev, state, true);
4063}
4064EXPORT_SYMBOL_GPL(regulator_suspend_enable);
4065
4066int regulator_suspend_disable(struct regulator_dev *rdev,
4067                                     suspend_state_t state)
4068{
4069        struct regulator *regulator;
4070        struct regulator_voltage *voltage;
4071
4072        /*
4073         * if any consumer wants this regulator device keeping on in
4074         * suspend states, don't set it as disabled.
4075         */
4076        list_for_each_entry(regulator, &rdev->consumer_list, list) {
4077                voltage = &regulator->voltage[state];
4078                if (voltage->min_uV || voltage->max_uV)
4079                        return 0;
4080        }
4081
4082        return regulator_suspend_toggle(rdev, state, false);
4083}
4084EXPORT_SYMBOL_GPL(regulator_suspend_disable);
4085
4086static int _regulator_set_suspend_voltage(struct regulator *regulator,
4087                                          int min_uV, int max_uV,
4088                                          suspend_state_t state)
4089{
4090        struct regulator_dev *rdev = regulator->rdev;
4091        struct regulator_state *rstate;
4092
4093        rstate = regulator_get_suspend_state(rdev, state);
4094        if (rstate == NULL)
4095                return -EINVAL;
4096
4097        if (rstate->min_uV == rstate->max_uV) {
4098                rdev_err(rdev, "The suspend voltage can't be changed!\n");
4099                return -EPERM;
4100        }
4101
4102        return regulator_set_voltage_unlocked(regulator, min_uV, max_uV, state);
4103}
4104
4105int regulator_set_suspend_voltage(struct regulator *regulator, int min_uV,
4106                                  int max_uV, suspend_state_t state)
4107{
4108        struct ww_acquire_ctx ww_ctx;
4109        int ret;
4110
4111        /* PM_SUSPEND_ON is handled by regulator_set_voltage() */
4112        if (regulator_check_states(state) || state == PM_SUSPEND_ON)
4113                return -EINVAL;
4114
4115        regulator_lock_dependent(regulator->rdev, &ww_ctx);
4116
4117        ret = _regulator_set_suspend_voltage(regulator, min_uV,
4118                                             max_uV, state);
4119
4120        regulator_unlock_dependent(regulator->rdev, &ww_ctx);
4121
4122        return ret;
4123}
4124EXPORT_SYMBOL_GPL(regulator_set_suspend_voltage);
4125
4126/**
4127 * regulator_set_voltage_time - get raise/fall time
4128 * @regulator: regulator source
4129 * @old_uV: starting voltage in microvolts
4130 * @new_uV: target voltage in microvolts
4131 *
4132 * Provided with the starting and ending voltage, this function attempts to
4133 * calculate the time in microseconds required to rise or fall to this new
4134 * voltage.
4135 */
4136int regulator_set_voltage_time(struct regulator *regulator,
4137                               int old_uV, int new_uV)
4138{
4139        struct regulator_dev *rdev = regulator->rdev;
4140        const struct regulator_ops *ops = rdev->desc->ops;
4141        int old_sel = -1;
4142        int new_sel = -1;
4143        int voltage;
4144        int i;
4145
4146        if (ops->set_voltage_time)
4147                return ops->set_voltage_time(rdev, old_uV, new_uV);
4148        else if (!ops->set_voltage_time_sel)
4149                return _regulator_set_voltage_time(rdev, old_uV, new_uV);
4150
4151        /* Currently requires operations to do this */
4152        if (!ops->list_voltage || !rdev->desc->n_voltages)
4153                return -EINVAL;
4154
4155        for (i = 0; i < rdev->desc->n_voltages; i++) {
4156                /* We only look for exact voltage matches here */
4157                if (i < rdev->desc->linear_min_sel)
4158                        continue;
4159
4160                if (old_sel >= 0 && new_sel >= 0)
4161                        break;
4162
4163                voltage = regulator_list_voltage(regulator, i);
4164                if (voltage < 0)
4165                        return -EINVAL;
4166                if (voltage == 0)
4167                        continue;
4168                if (voltage == old_uV)
4169                        old_sel = i;
4170                if (voltage == new_uV)
4171                        new_sel = i;
4172        }
4173
4174        if (old_sel < 0 || new_sel < 0)
4175                return -EINVAL;
4176
4177        return ops->set_voltage_time_sel(rdev, old_sel, new_sel);
4178}
4179EXPORT_SYMBOL_GPL(regulator_set_voltage_time);
4180
4181/**
4182 * regulator_set_voltage_time_sel - get raise/fall time
4183 * @rdev: regulator source device
4184 * @old_selector: selector for starting voltage
4185 * @new_selector: selector for target voltage
4186 *
4187 * Provided with the starting and target voltage selectors, this function
4188 * returns time in microseconds required to rise or fall to this new voltage
4189 *
4190 * Drivers providing ramp_delay in regulation_constraints can use this as their
4191 * set_voltage_time_sel() operation.
4192 */
4193int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
4194                                   unsigned int old_selector,
4195                                   unsigned int new_selector)
4196{
4197        int old_volt, new_volt;
4198
4199        /* sanity check */
4200        if (!rdev->desc->ops->list_voltage)
4201                return -EINVAL;
4202
4203        old_volt = rdev->desc->ops->list_voltage(rdev, old_selector);
4204        new_volt = rdev->desc->ops->list_voltage(rdev, new_selector);
4205
4206        if (rdev->desc->ops->set_voltage_time)
4207                return rdev->desc->ops->set_voltage_time(rdev, old_volt,
4208                                                         new_volt);
4209        else
4210                return _regulator_set_voltage_time(rdev, old_volt, new_volt);
4211}
4212EXPORT_SYMBOL_GPL(regulator_set_voltage_time_sel);
4213
4214int regulator_sync_voltage_rdev(struct regulator_dev *rdev)
4215{
4216        int ret;
4217
4218        regulator_lock(rdev);
4219
4220        if (!rdev->desc->ops->set_voltage &&
4221            !rdev->desc->ops->set_voltage_sel) {
4222                ret = -EINVAL;
4223                goto out;
4224        }
4225
4226        /* balance only, if regulator is coupled */
4227        if (rdev->coupling_desc.n_coupled > 1)
4228                ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
4229        else
4230                ret = -EOPNOTSUPP;
4231
4232out:
4233        regulator_unlock(rdev);
4234        return ret;
4235}
4236
4237/**
4238 * regulator_sync_voltage - re-apply last regulator output voltage
4239 * @regulator: regulator source
4240 *
4241 * Re-apply the last configured voltage.  This is intended to be used
4242 * where some external control source the consumer is cooperating with
4243 * has caused the configured voltage to change.
4244 */
4245int regulator_sync_voltage(struct regulator *regulator)
4246{
4247        struct regulator_dev *rdev = regulator->rdev;
4248        struct regulator_voltage *voltage = &regulator->voltage[PM_SUSPEND_ON];
4249        int ret, min_uV, max_uV;
4250
4251        regulator_lock(rdev);
4252
4253        if (!rdev->desc->ops->set_voltage &&
4254            !rdev->desc->ops->set_voltage_sel) {
4255                ret = -EINVAL;
4256                goto out;
4257        }
4258
4259        /* This is only going to work if we've had a voltage configured. */
4260        if (!voltage->min_uV && !voltage->max_uV) {
4261                ret = -EINVAL;
4262                goto out;
4263        }
4264
4265        min_uV = voltage->min_uV;
4266        max_uV = voltage->max_uV;
4267
4268        /* This should be a paranoia check... */
4269        ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
4270        if (ret < 0)
4271                goto out;
4272
4273        ret = regulator_check_consumers(rdev, &min_uV, &max_uV, 0);
4274        if (ret < 0)
4275                goto out;
4276
4277        /* balance only, if regulator is coupled */
4278        if (rdev->coupling_desc.n_coupled > 1)
4279                ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
4280        else
4281                ret = _regulator_do_set_voltage(rdev, min_uV, max_uV);
4282
4283out:
4284        regulator_unlock(rdev);
4285        return ret;
4286}
4287EXPORT_SYMBOL_GPL(regulator_sync_voltage);
4288
4289int regulator_get_voltage_rdev(struct regulator_dev *rdev)
4290{
4291        int sel, ret;
4292        bool bypassed;
4293
4294        if (rdev->desc->ops->get_bypass) {
4295                ret = rdev->desc->ops->get_bypass(rdev, &bypassed);
4296                if (ret < 0)
4297                        return ret;
4298                if (bypassed) {
4299                        /* if bypassed the regulator must have a supply */
4300                        if (!rdev->supply) {
4301                                rdev_err(rdev,
4302                                         "bypassed regulator has no supply!\n");
4303                                return -EPROBE_DEFER;
4304                        }
4305
4306                        return regulator_get_voltage_rdev(rdev->supply->rdev);
4307                }
4308        }
4309
4310        if (rdev->desc->ops->get_voltage_sel) {
4311                sel = rdev->desc->ops->get_voltage_sel(rdev);
4312                if (sel < 0)
4313                        return sel;
4314                ret = rdev->desc->ops->list_voltage(rdev, sel);
4315        } else if (rdev->desc->ops->get_voltage) {
4316                ret = rdev->desc->ops->get_voltage(rdev);
4317        } else if (rdev->desc->ops->list_voltage) {
4318                ret = rdev->desc->ops->list_voltage(rdev, 0);
4319        } else if (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1)) {
4320                ret = rdev->desc->fixed_uV;
4321        } else if (rdev->supply) {
4322                ret = regulator_get_voltage_rdev(rdev->supply->rdev);
4323        } else if (rdev->supply_name) {
4324                return -EPROBE_DEFER;
4325        } else {
4326                return -EINVAL;
4327        }
4328
4329        if (ret < 0)
4330                return ret;
4331        return ret - rdev->constraints->uV_offset;
4332}
4333EXPORT_SYMBOL_GPL(regulator_get_voltage_rdev);
4334
4335/**
4336 * regulator_get_voltage - get regulator output voltage
4337 * @regulator: regulator source
4338 *
4339 * This returns the current regulator voltage in uV.
4340 *
4341 * NOTE: If the regulator is disabled it will return the voltage value. This
4342 * function should not be used to determine regulator state.
4343 */
4344int regulator_get_voltage(struct regulator *regulator)
4345{
4346        struct ww_acquire_ctx ww_ctx;
4347        int ret;
4348
4349        regulator_lock_dependent(regulator->rdev, &ww_ctx);
4350        ret = regulator_get_voltage_rdev(regulator->rdev);
4351        regulator_unlock_dependent(regulator->rdev, &ww_ctx);
4352
4353        return ret;
4354}
4355EXPORT_SYMBOL_GPL(regulator_get_voltage);
4356
4357/**
4358 * regulator_set_current_limit - set regulator output current limit
4359 * @regulator: regulator source
4360 * @min_uA: Minimum supported current in uA
4361 * @max_uA: Maximum supported current in uA
4362 *
4363 * Sets current sink to the desired output current. This can be set during
4364 * any regulator state. IOW, regulator can be disabled or enabled.
4365 *
4366 * If the regulator is enabled then the current will change to the new value
4367 * immediately otherwise if the regulator is disabled the regulator will
4368 * output at the new current when enabled.
4369 *
4370 * NOTE: Regulator system constraints must be set for this regulator before
4371 * calling this function otherwise this call will fail.
4372 */
4373int regulator_set_current_limit(struct regulator *regulator,
4374                               int min_uA, int max_uA)
4375{
4376        struct regulator_dev *rdev = regulator->rdev;
4377        int ret;
4378
4379        regulator_lock(rdev);
4380
4381        /* sanity check */
4382        if (!rdev->desc->ops->set_current_limit) {
4383                ret = -EINVAL;
4384                goto out;
4385        }
4386
4387        /* constraints check */
4388        ret = regulator_check_current_limit(rdev, &min_uA, &max_uA);
4389        if (ret < 0)
4390                goto out;
4391
4392        ret = rdev->desc->ops->set_current_limit(rdev, min_uA, max_uA);
4393out:
4394        regulator_unlock(rdev);
4395        return ret;
4396}
4397EXPORT_SYMBOL_GPL(regulator_set_current_limit);
4398
4399static int _regulator_get_current_limit_unlocked(struct regulator_dev *rdev)
4400{
4401        /* sanity check */
4402        if (!rdev->desc->ops->get_current_limit)
4403                return -EINVAL;
4404
4405        return rdev->desc->ops->get_current_limit(rdev);
4406}
4407
4408static int _regulator_get_current_limit(struct regulator_dev *rdev)
4409{
4410        int ret;
4411
4412        regulator_lock(rdev);
4413        ret = _regulator_get_current_limit_unlocked(rdev);
4414        regulator_unlock(rdev);
4415
4416        return ret;
4417}
4418
4419/**
4420 * regulator_get_current_limit - get regulator output current
4421 * @regulator: regulator source
4422 *
4423 * This returns the current supplied by the specified current sink in uA.
4424 *
4425 * NOTE: If the regulator is disabled it will return the current value. This
4426 * function should not be used to determine regulator state.
4427 */
4428int regulator_get_current_limit(struct regulator *regulator)
4429{
4430        return _regulator_get_current_limit(regulator->rdev);
4431}
4432EXPORT_SYMBOL_GPL(regulator_get_current_limit);
4433
4434/**
4435 * regulator_set_mode - set regulator operating mode
4436 * @regulator: regulator source
4437 * @mode: operating mode - one of the REGULATOR_MODE constants
4438 *
4439 * Set regulator operating mode to increase regulator efficiency or improve
4440 * regulation performance.
4441 *
4442 * NOTE: Regulator system constraints must be set for this regulator before
4443 * calling this function otherwise this call will fail.
4444 */
4445int regulator_set_mode(struct regulator *regulator, unsigned int mode)
4446{
4447        struct regulator_dev *rdev = regulator->rdev;
4448        int ret;
4449        int regulator_curr_mode;
4450
4451        regulator_lock(rdev);
4452
4453        /* sanity check */
4454        if (!rdev->desc->ops->set_mode) {
4455                ret = -EINVAL;
4456                goto out;
4457        }
4458
4459        /* return if the same mode is requested */
4460        if (rdev->desc->ops->get_mode) {
4461                regulator_curr_mode = rdev->desc->ops->get_mode(rdev);
4462                if (regulator_curr_mode == mode) {
4463                        ret = 0;
4464                        goto out;
4465                }
4466        }
4467
4468        /* constraints check */
4469        ret = regulator_mode_constrain(rdev, &mode);
4470        if (ret < 0)
4471                goto out;
4472
4473        ret = rdev->desc->ops->set_mode(rdev, mode);
4474out:
4475        regulator_unlock(rdev);
4476        return ret;
4477}
4478EXPORT_SYMBOL_GPL(regulator_set_mode);
4479
4480static unsigned int _regulator_get_mode_unlocked(struct regulator_dev *rdev)
4481{
4482        /* sanity check */
4483        if (!rdev->desc->ops->get_mode)
4484                return -EINVAL;
4485
4486        return rdev->desc->ops->get_mode(rdev);
4487}
4488
4489static unsigned int _regulator_get_mode(struct regulator_dev *rdev)
4490{
4491        int ret;
4492
4493        regulator_lock(rdev);
4494        ret = _regulator_get_mode_unlocked(rdev);
4495        regulator_unlock(rdev);
4496
4497        return ret;
4498}
4499
4500/**
4501 * regulator_get_mode - get regulator operating mode
4502 * @regulator: regulator source
4503 *
4504 * Get the current regulator operating mode.
4505 */
4506unsigned int regulator_get_mode(struct regulator *regulator)
4507{
4508        return _regulator_get_mode(regulator->rdev);
4509}
4510EXPORT_SYMBOL_GPL(regulator_get_mode);
4511
4512static int rdev_get_cached_err_flags(struct regulator_dev *rdev)
4513{
4514        int ret = 0;
4515
4516        if (rdev->use_cached_err) {
4517                spin_lock(&rdev->err_lock);
4518                ret = rdev->cached_err;
4519                spin_unlock(&rdev->err_lock);
4520        }
4521        return ret;
4522}
4523
4524static int _regulator_get_error_flags(struct regulator_dev *rdev,
4525                                        unsigned int *flags)
4526{
4527        int cached_flags, ret = 0;
4528
4529        regulator_lock(rdev);
4530
4531        cached_flags = rdev_get_cached_err_flags(rdev);
4532
4533        if (rdev->desc->ops->get_error_flags)
4534                ret = rdev->desc->ops->get_error_flags(rdev, flags);
4535        else if (!rdev->use_cached_err)
4536                ret = -EINVAL;
4537
4538        *flags |= cached_flags;
4539
4540        regulator_unlock(rdev);
4541
4542        return ret;
4543}
4544
4545/**
4546 * regulator_get_error_flags - get regulator error information
4547 * @regulator: regulator source
4548 * @flags: pointer to store error flags
4549 *
4550 * Get the current regulator error information.
4551 */
4552int regulator_get_error_flags(struct regulator *regulator,
4553                                unsigned int *flags)
4554{
4555        return _regulator_get_error_flags(regulator->rdev, flags);
4556}
4557EXPORT_SYMBOL_GPL(regulator_get_error_flags);
4558
4559/**
4560 * regulator_set_load - set regulator load
4561 * @regulator: regulator source
4562 * @uA_load: load current
4563 *
4564 * Notifies the regulator core of a new device load. This is then used by
4565 * DRMS (if enabled by constraints) to set the most efficient regulator
4566 * operating mode for the new regulator loading.
4567 *
4568 * Consumer devices notify their supply regulator of the maximum power
4569 * they will require (can be taken from device datasheet in the power
4570 * consumption tables) when they change operational status and hence power
4571 * state. Examples of operational state changes that can affect power
4572 * consumption are :-
4573 *
4574 *    o Device is opened / closed.
4575 *    o Device I/O is about to begin or has just finished.
4576 *    o Device is idling in between work.
4577 *
4578 * This information is also exported via sysfs to userspace.
4579 *
4580 * DRMS will sum the total requested load on the regulator and change
4581 * to the most efficient operating mode if platform constraints allow.
4582 *
4583 * NOTE: when a regulator consumer requests to have a regulator
4584 * disabled then any load that consumer requested no longer counts
4585 * toward the total requested load.  If the regulator is re-enabled
4586 * then the previously requested load will start counting again.
4587 *
4588 * If a regulator is an always-on regulator then an individual consumer's
4589 * load will still be removed if that consumer is fully disabled.
4590 *
4591 * On error a negative errno is returned.
4592 */
4593int regulator_set_load(struct regulator *regulator, int uA_load)
4594{
4595        struct regulator_dev *rdev = regulator->rdev;
4596        int old_uA_load;
4597        int ret = 0;
4598
4599        regulator_lock(rdev);
4600        old_uA_load = regulator->uA_load;
4601        regulator->uA_load = uA_load;
4602        if (regulator->enable_count && old_uA_load != uA_load) {
4603                ret = drms_uA_update(rdev);
4604                if (ret < 0)
4605                        regulator->uA_load = old_uA_load;
4606        }
4607        regulator_unlock(rdev);
4608
4609        return ret;
4610}
4611EXPORT_SYMBOL_GPL(regulator_set_load);
4612
4613/**
4614 * regulator_allow_bypass - allow the regulator to go into bypass mode
4615 *
4616 * @regulator: Regulator to configure
4617 * @enable: enable or disable bypass mode
4618 *
4619 * Allow the regulator to go into bypass mode if all other consumers
4620 * for the regulator also enable bypass mode and the machine
4621 * constraints allow this.  Bypass mode means that the regulator is
4622 * simply passing the input directly to the output with no regulation.
4623 */
4624int regulator_allow_bypass(struct regulator *regulator, bool enable)
4625{
4626        struct regulator_dev *rdev = regulator->rdev;
4627        const char *name = rdev_get_name(rdev);
4628        int ret = 0;
4629
4630        if (!rdev->desc->ops->set_bypass)
4631                return 0;
4632
4633        if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_BYPASS))
4634                return 0;
4635
4636        regulator_lock(rdev);
4637
4638        if (enable && !regulator->bypass) {
4639                rdev->bypass_count++;
4640
4641                if (rdev->bypass_count == rdev->open_count) {
4642                        trace_regulator_bypass_enable(name);
4643
4644                        ret = rdev->desc->ops->set_bypass(rdev, enable);
4645                        if (ret != 0)
4646                                rdev->bypass_count--;
4647                        else
4648                                trace_regulator_bypass_enable_complete(name);
4649                }
4650
4651        } else if (!enable && regulator->bypass) {
4652                rdev->bypass_count--;
4653
4654                if (rdev->bypass_count != rdev->open_count) {
4655                        trace_regulator_bypass_disable(name);
4656
4657                        ret = rdev->desc->ops->set_bypass(rdev, enable);
4658                        if (ret != 0)
4659                                rdev->bypass_count++;
4660                        else
4661                                trace_regulator_bypass_disable_complete(name);
4662                }
4663        }
4664
4665        if (ret == 0)
4666                regulator->bypass = enable;
4667
4668        regulator_u