root/drivers/regulator/max77620-regulator.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. max77620_regulator_get_fps_src
  2. max77620_regulator_set_fps_src
  3. max77620_regulator_set_fps_slots
  4. max77620_regulator_set_power_mode
  5. max77620_regulator_get_power_mode
  6. max77620_read_slew_rate
  7. max77620_set_slew_rate
  8. max77620_config_power_ok
  9. max77620_init_pmic
  10. max77620_regulator_enable
  11. max77620_regulator_disable
  12. max77620_regulator_is_enabled
  13. max77620_regulator_set_mode
  14. max77620_regulator_get_mode
  15. max77620_regulator_set_ramp_delay
  16. max77620_of_parse_cb
  17. max77620_regulator_probe
  18. max77620_regulator_suspend
  19. max77620_regulator_resume

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Maxim MAX77620 Regulator driver
   4  *
   5  * Copyright (c) 2016-2018, NVIDIA CORPORATION.  All rights reserved.
   6  *
   7  * Author: Mallikarjun Kasoju <mkasoju@nvidia.com>
   8  *      Laxman Dewangan <ldewangan@nvidia.com>
   9  */
  10 
  11 #include <linux/init.h>
  12 #include <linux/mfd/max77620.h>
  13 #include <linux/module.h>
  14 #include <linux/of.h>
  15 #include <linux/platform_device.h>
  16 #include <linux/regmap.h>
  17 #include <linux/regulator/driver.h>
  18 #include <linux/regulator/machine.h>
  19 #include <linux/regulator/of_regulator.h>
  20 
  21 #define max77620_rails(_name)   "max77620-"#_name
  22 
  23 /* Power Mode */
  24 #define MAX77620_POWER_MODE_NORMAL              3
  25 #define MAX77620_POWER_MODE_LPM                 2
  26 #define MAX77620_POWER_MODE_GLPM                1
  27 #define MAX77620_POWER_MODE_DISABLE             0
  28 
  29 /* SD Slew Rate */
  30 #define MAX77620_SD_SR_13_75                    0
  31 #define MAX77620_SD_SR_27_5                     1
  32 #define MAX77620_SD_SR_55                       2
  33 #define MAX77620_SD_SR_100                      3
  34 
  35 enum max77620_regulators {
  36         MAX77620_REGULATOR_ID_SD0,
  37         MAX77620_REGULATOR_ID_SD1,
  38         MAX77620_REGULATOR_ID_SD2,
  39         MAX77620_REGULATOR_ID_SD3,
  40         MAX77620_REGULATOR_ID_SD4,
  41         MAX77620_REGULATOR_ID_LDO0,
  42         MAX77620_REGULATOR_ID_LDO1,
  43         MAX77620_REGULATOR_ID_LDO2,
  44         MAX77620_REGULATOR_ID_LDO3,
  45         MAX77620_REGULATOR_ID_LDO4,
  46         MAX77620_REGULATOR_ID_LDO5,
  47         MAX77620_REGULATOR_ID_LDO6,
  48         MAX77620_REGULATOR_ID_LDO7,
  49         MAX77620_REGULATOR_ID_LDO8,
  50         MAX77620_NUM_REGS,
  51 };
  52 
  53 /* Regulator types */
  54 enum max77620_regulator_type {
  55         MAX77620_REGULATOR_TYPE_SD,
  56         MAX77620_REGULATOR_TYPE_LDO_N,
  57         MAX77620_REGULATOR_TYPE_LDO_P,
  58 };
  59 
  60 struct max77620_regulator_info {
  61         u8 type;
  62         u8 fps_addr;
  63         u8 volt_addr;
  64         u8 cfg_addr;
  65         u8 power_mode_mask;
  66         u8 power_mode_shift;
  67         u8 remote_sense_addr;
  68         u8 remote_sense_mask;
  69         struct regulator_desc desc;
  70 };
  71 
  72 struct max77620_regulator_pdata {
  73         int active_fps_src;
  74         int active_fps_pd_slot;
  75         int active_fps_pu_slot;
  76         int suspend_fps_src;
  77         int suspend_fps_pd_slot;
  78         int suspend_fps_pu_slot;
  79         int current_mode;
  80         int power_ok;
  81         int ramp_rate_setting;
  82 };
  83 
  84 struct max77620_regulator {
  85         struct device *dev;
  86         struct regmap *rmap;
  87         struct max77620_regulator_info *rinfo[MAX77620_NUM_REGS];
  88         struct max77620_regulator_pdata reg_pdata[MAX77620_NUM_REGS];
  89         int enable_power_mode[MAX77620_NUM_REGS];
  90         int current_power_mode[MAX77620_NUM_REGS];
  91         int active_fps_src[MAX77620_NUM_REGS];
  92 };
  93 
  94 #define fps_src_name(fps_src)   \
  95         (fps_src == MAX77620_FPS_SRC_0 ? "FPS_SRC_0" :  \
  96         fps_src == MAX77620_FPS_SRC_1 ? "FPS_SRC_1" :   \
  97         fps_src == MAX77620_FPS_SRC_2 ? "FPS_SRC_2" : "FPS_SRC_NONE")
  98 
  99 static int max77620_regulator_get_fps_src(struct max77620_regulator *pmic,
 100                                           int id)
 101 {
 102         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 103         unsigned int val;
 104         int ret;
 105 
 106         ret = regmap_read(pmic->rmap, rinfo->fps_addr, &val);
 107         if (ret < 0) {
 108                 dev_err(pmic->dev, "Reg 0x%02x read failed %d\n",
 109                         rinfo->fps_addr, ret);
 110                 return ret;
 111         }
 112 
 113         return (val & MAX77620_FPS_SRC_MASK) >> MAX77620_FPS_SRC_SHIFT;
 114 }
 115 
 116 static int max77620_regulator_set_fps_src(struct max77620_regulator *pmic,
 117                                           int fps_src, int id)
 118 {
 119         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 120         unsigned int val;
 121         int ret;
 122 
 123         if (!rinfo)
 124                 return 0;
 125 
 126         switch (fps_src) {
 127         case MAX77620_FPS_SRC_0:
 128         case MAX77620_FPS_SRC_1:
 129         case MAX77620_FPS_SRC_2:
 130         case MAX77620_FPS_SRC_NONE:
 131                 break;
 132 
 133         case MAX77620_FPS_SRC_DEF:
 134                 ret = regmap_read(pmic->rmap, rinfo->fps_addr, &val);
 135                 if (ret < 0) {
 136                         dev_err(pmic->dev, "Reg 0x%02x read failed %d\n",
 137                                 rinfo->fps_addr, ret);
 138                         return ret;
 139                 }
 140                 ret = (val & MAX77620_FPS_SRC_MASK) >> MAX77620_FPS_SRC_SHIFT;
 141                 pmic->active_fps_src[id] = ret;
 142                 return 0;
 143 
 144         default:
 145                 dev_err(pmic->dev, "Invalid FPS %d for regulator %d\n",
 146                         fps_src, id);
 147                 return -EINVAL;
 148         }
 149 
 150         ret = regmap_update_bits(pmic->rmap, rinfo->fps_addr,
 151                                  MAX77620_FPS_SRC_MASK,
 152                                  fps_src << MAX77620_FPS_SRC_SHIFT);
 153         if (ret < 0) {
 154                 dev_err(pmic->dev, "Reg 0x%02x update failed %d\n",
 155                         rinfo->fps_addr, ret);
 156                 return ret;
 157         }
 158         pmic->active_fps_src[id] = fps_src;
 159 
 160         return 0;
 161 }
 162 
 163 static int max77620_regulator_set_fps_slots(struct max77620_regulator *pmic,
 164                                             int id, bool is_suspend)
 165 {
 166         struct max77620_regulator_pdata *rpdata = &pmic->reg_pdata[id];
 167         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 168         unsigned int val = 0;
 169         unsigned int mask = 0;
 170         int pu = rpdata->active_fps_pu_slot;
 171         int pd = rpdata->active_fps_pd_slot;
 172         int ret = 0;
 173 
 174         if (!rinfo)
 175                 return 0;
 176 
 177         if (is_suspend) {
 178                 pu = rpdata->suspend_fps_pu_slot;
 179                 pd = rpdata->suspend_fps_pd_slot;
 180         }
 181 
 182         /* FPS power up period setting */
 183         if (pu >= 0) {
 184                 val |= (pu << MAX77620_FPS_PU_PERIOD_SHIFT);
 185                 mask |= MAX77620_FPS_PU_PERIOD_MASK;
 186         }
 187 
 188         /* FPS power down period setting */
 189         if (pd >= 0) {
 190                 val |= (pd << MAX77620_FPS_PD_PERIOD_SHIFT);
 191                 mask |= MAX77620_FPS_PD_PERIOD_MASK;
 192         }
 193 
 194         if (mask) {
 195                 ret = regmap_update_bits(pmic->rmap, rinfo->fps_addr,
 196                                          mask, val);
 197                 if (ret < 0) {
 198                         dev_err(pmic->dev, "Reg 0x%02x update failed: %d\n",
 199                                 rinfo->fps_addr, ret);
 200                         return ret;
 201                 }
 202         }
 203 
 204         return ret;
 205 }
 206 
 207 static int max77620_regulator_set_power_mode(struct max77620_regulator *pmic,
 208                                              int power_mode, int id)
 209 {
 210         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 211         u8 mask = rinfo->power_mode_mask;
 212         u8 shift = rinfo->power_mode_shift;
 213         u8 addr;
 214         int ret;
 215 
 216         switch (rinfo->type) {
 217         case MAX77620_REGULATOR_TYPE_SD:
 218                 addr = rinfo->cfg_addr;
 219                 break;
 220         default:
 221                 addr = rinfo->volt_addr;
 222                 break;
 223         }
 224 
 225         ret = regmap_update_bits(pmic->rmap, addr, mask, power_mode << shift);
 226         if (ret < 0) {
 227                 dev_err(pmic->dev, "Regulator %d mode set failed: %d\n",
 228                         id, ret);
 229                 return ret;
 230         }
 231         pmic->current_power_mode[id] = power_mode;
 232 
 233         return ret;
 234 }
 235 
 236 static int max77620_regulator_get_power_mode(struct max77620_regulator *pmic,
 237                                              int id)
 238 {
 239         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 240         unsigned int val, addr;
 241         u8 mask = rinfo->power_mode_mask;
 242         u8 shift = rinfo->power_mode_shift;
 243         int ret;
 244 
 245         switch (rinfo->type) {
 246         case MAX77620_REGULATOR_TYPE_SD:
 247                 addr = rinfo->cfg_addr;
 248                 break;
 249         default:
 250                 addr = rinfo->volt_addr;
 251                 break;
 252         }
 253 
 254         ret = regmap_read(pmic->rmap, addr, &val);
 255         if (ret < 0) {
 256                 dev_err(pmic->dev, "Regulator %d: Reg 0x%02x read failed: %d\n",
 257                         id, addr, ret);
 258                 return ret;
 259         }
 260 
 261         return (val & mask) >> shift;
 262 }
 263 
 264 static int max77620_read_slew_rate(struct max77620_regulator *pmic, int id)
 265 {
 266         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 267         unsigned int rval;
 268         int slew_rate;
 269         int ret;
 270 
 271         ret = regmap_read(pmic->rmap, rinfo->cfg_addr, &rval);
 272         if (ret < 0) {
 273                 dev_err(pmic->dev, "Register 0x%02x read failed: %d\n",
 274                         rinfo->cfg_addr, ret);
 275                 return ret;
 276         }
 277 
 278         switch (rinfo->type) {
 279         case MAX77620_REGULATOR_TYPE_SD:
 280                 slew_rate = (rval >> MAX77620_SD_SR_SHIFT) & 0x3;
 281                 switch (slew_rate) {
 282                 case 0:
 283                         slew_rate = 13750;
 284                         break;
 285                 case 1:
 286                         slew_rate = 27500;
 287                         break;
 288                 case 2:
 289                         slew_rate = 55000;
 290                         break;
 291                 case 3:
 292                         slew_rate = 100000;
 293                         break;
 294                 }
 295                 rinfo->desc.ramp_delay = slew_rate;
 296                 break;
 297         default:
 298                 slew_rate = rval & 0x1;
 299                 switch (slew_rate) {
 300                 case 0:
 301                         slew_rate = 100000;
 302                         break;
 303                 case 1:
 304                         slew_rate = 5000;
 305                         break;
 306                 }
 307                 rinfo->desc.ramp_delay = slew_rate;
 308                 break;
 309         }
 310 
 311         return 0;
 312 }
 313 
 314 static int max77620_set_slew_rate(struct max77620_regulator *pmic, int id,
 315                                   int slew_rate)
 316 {
 317         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 318         unsigned int val;
 319         int ret;
 320         u8 mask;
 321 
 322         if (rinfo->type == MAX77620_REGULATOR_TYPE_SD) {
 323                 if (slew_rate <= 13750)
 324                         val = 0;
 325                 else if (slew_rate <= 27500)
 326                         val = 1;
 327                 else if (slew_rate <= 55000)
 328                         val = 2;
 329                 else
 330                         val = 3;
 331                 val <<= MAX77620_SD_SR_SHIFT;
 332                 mask = MAX77620_SD_SR_MASK;
 333         } else {
 334                 if (slew_rate <= 5000)
 335                         val = 1;
 336                 else
 337                         val = 0;
 338                 mask = MAX77620_LDO_SLEW_RATE_MASK;
 339         }
 340 
 341         ret = regmap_update_bits(pmic->rmap, rinfo->cfg_addr, mask, val);
 342         if (ret < 0) {
 343                 dev_err(pmic->dev, "Regulator %d slew rate set failed: %d\n",
 344                         id, ret);
 345                 return ret;
 346         }
 347 
 348         return 0;
 349 }
 350 
 351 static int max77620_config_power_ok(struct max77620_regulator *pmic, int id)
 352 {
 353         struct max77620_regulator_pdata *rpdata = &pmic->reg_pdata[id];
 354         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 355         struct max77620_chip *chip = dev_get_drvdata(pmic->dev->parent);
 356         u8 val, mask;
 357         int ret;
 358 
 359         switch (chip->chip_id) {
 360         case MAX20024:
 361                 if (rpdata->power_ok >= 0) {
 362                         if (rinfo->type == MAX77620_REGULATOR_TYPE_SD)
 363                                 mask = MAX20024_SD_CFG1_MPOK_MASK;
 364                         else
 365                                 mask = MAX20024_LDO_CFG2_MPOK_MASK;
 366 
 367                         val = rpdata->power_ok ? mask : 0;
 368 
 369                         ret = regmap_update_bits(pmic->rmap, rinfo->cfg_addr,
 370                                                  mask, val);
 371                         if (ret < 0) {
 372                                 dev_err(pmic->dev, "Reg 0x%02x update failed %d\n",
 373                                         rinfo->cfg_addr, ret);
 374                                 return ret;
 375                         }
 376                 }
 377                 break;
 378 
 379         default:
 380                 break;
 381         }
 382 
 383         return 0;
 384 }
 385 
 386 static int max77620_init_pmic(struct max77620_regulator *pmic, int id)
 387 {
 388         struct max77620_regulator_pdata *rpdata = &pmic->reg_pdata[id];
 389         int ret;
 390 
 391         max77620_config_power_ok(pmic, id);
 392 
 393         /* Update power mode */
 394         ret = max77620_regulator_get_power_mode(pmic, id);
 395         if (ret < 0)
 396                 return ret;
 397 
 398         pmic->current_power_mode[id] = ret;
 399         pmic->enable_power_mode[id] = MAX77620_POWER_MODE_NORMAL;
 400 
 401         if (rpdata->active_fps_src == MAX77620_FPS_SRC_DEF) {
 402                 ret = max77620_regulator_get_fps_src(pmic, id);
 403                 if (ret < 0)
 404                         return ret;
 405                 rpdata->active_fps_src = ret;
 406         }
 407 
 408          /* If rails are externally control of FPS then enable it always. */
 409         if (rpdata->active_fps_src == MAX77620_FPS_SRC_NONE) {
 410                 ret = max77620_regulator_set_power_mode(pmic,
 411                                         pmic->enable_power_mode[id], id);
 412                 if (ret < 0)
 413                         return ret;
 414         } else {
 415                 if (pmic->current_power_mode[id] !=
 416                      pmic->enable_power_mode[id]) {
 417                         ret = max77620_regulator_set_power_mode(pmic,
 418                                         pmic->enable_power_mode[id], id);
 419                         if (ret < 0)
 420                                 return ret;
 421                 }
 422         }
 423 
 424         ret = max77620_regulator_set_fps_src(pmic, rpdata->active_fps_src, id);
 425         if (ret < 0)
 426                 return ret;
 427 
 428         ret = max77620_regulator_set_fps_slots(pmic, id, false);
 429         if (ret < 0)
 430                 return ret;
 431 
 432         if (rpdata->ramp_rate_setting) {
 433                 ret = max77620_set_slew_rate(pmic, id,
 434                                              rpdata->ramp_rate_setting);
 435                 if (ret < 0)
 436                         return ret;
 437         }
 438 
 439         return 0;
 440 }
 441 
 442 static int max77620_regulator_enable(struct regulator_dev *rdev)
 443 {
 444         struct max77620_regulator *pmic = rdev_get_drvdata(rdev);
 445         int id = rdev_get_id(rdev);
 446 
 447         if (pmic->active_fps_src[id] != MAX77620_FPS_SRC_NONE)
 448                 return 0;
 449 
 450         return max77620_regulator_set_power_mode(pmic,
 451                         pmic->enable_power_mode[id], id);
 452 }
 453 
 454 static int max77620_regulator_disable(struct regulator_dev *rdev)
 455 {
 456         struct max77620_regulator *pmic = rdev_get_drvdata(rdev);
 457         int id = rdev_get_id(rdev);
 458 
 459         if (pmic->active_fps_src[id] != MAX77620_FPS_SRC_NONE)
 460                 return 0;
 461 
 462         return max77620_regulator_set_power_mode(pmic,
 463                         MAX77620_POWER_MODE_DISABLE, id);
 464 }
 465 
 466 static int max77620_regulator_is_enabled(struct regulator_dev *rdev)
 467 {
 468         struct max77620_regulator *pmic = rdev_get_drvdata(rdev);
 469         int id = rdev_get_id(rdev);
 470         int ret;
 471 
 472         if (pmic->active_fps_src[id] != MAX77620_FPS_SRC_NONE)
 473                 return 1;
 474 
 475         ret = max77620_regulator_get_power_mode(pmic, id);
 476         if (ret < 0)
 477                 return ret;
 478 
 479         if (ret != MAX77620_POWER_MODE_DISABLE)
 480                 return 1;
 481 
 482         return 0;
 483 }
 484 
 485 static int max77620_regulator_set_mode(struct regulator_dev *rdev,
 486                                        unsigned int mode)
 487 {
 488         struct max77620_regulator *pmic = rdev_get_drvdata(rdev);
 489         int id = rdev_get_id(rdev);
 490         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 491         struct max77620_regulator_pdata *rpdata = &pmic->reg_pdata[id];
 492         bool fpwm = false;
 493         int power_mode;
 494         int ret;
 495         u8 val;
 496 
 497         switch (mode) {
 498         case REGULATOR_MODE_FAST:
 499                 fpwm = true;
 500                 power_mode = MAX77620_POWER_MODE_NORMAL;
 501                 break;
 502 
 503         case REGULATOR_MODE_NORMAL:
 504                 power_mode = MAX77620_POWER_MODE_NORMAL;
 505                 break;
 506 
 507         case REGULATOR_MODE_IDLE:
 508                 power_mode = MAX77620_POWER_MODE_LPM;
 509                 break;
 510 
 511         default:
 512                 dev_err(pmic->dev, "Regulator %d mode %d is invalid\n",
 513                         id, mode);
 514                 return -EINVAL;
 515         }
 516 
 517         if (rinfo->type != MAX77620_REGULATOR_TYPE_SD)
 518                 goto skip_fpwm;
 519 
 520         val = (fpwm) ? MAX77620_SD_FPWM_MASK : 0;
 521         ret = regmap_update_bits(pmic->rmap, rinfo->cfg_addr,
 522                                  MAX77620_SD_FPWM_MASK, val);
 523         if (ret < 0) {
 524                 dev_err(pmic->dev, "Reg 0x%02x update failed: %d\n",
 525                         rinfo->cfg_addr, ret);
 526                 return ret;
 527         }
 528         rpdata->current_mode = mode;
 529 
 530 skip_fpwm:
 531         ret = max77620_regulator_set_power_mode(pmic, power_mode, id);
 532         if (ret < 0)
 533                 return ret;
 534 
 535         pmic->enable_power_mode[id] = power_mode;
 536 
 537         return 0;
 538 }
 539 
 540 static unsigned int max77620_regulator_get_mode(struct regulator_dev *rdev)
 541 {
 542         struct max77620_regulator *pmic = rdev_get_drvdata(rdev);
 543         int id = rdev_get_id(rdev);
 544         struct max77620_regulator_info *rinfo = pmic->rinfo[id];
 545         int fpwm = 0;
 546         int ret;
 547         int pm_mode, reg_mode;
 548         unsigned int val;
 549 
 550         ret = max77620_regulator_get_power_mode(pmic, id);
 551         if (ret < 0)
 552                 return 0;
 553 
 554         pm_mode = ret;
 555 
 556         if (rinfo->type == MAX77620_REGULATOR_TYPE_SD) {
 557                 ret = regmap_read(pmic->rmap, rinfo->cfg_addr, &val);
 558                 if (ret < 0) {
 559                         dev_err(pmic->dev, "Reg 0x%02x read failed: %d\n",
 560                                 rinfo->cfg_addr, ret);
 561                         return ret;
 562                 }
 563                 fpwm = !!(val & MAX77620_SD_FPWM_MASK);
 564         }
 565 
 566         switch (pm_mode) {
 567         case MAX77620_POWER_MODE_NORMAL:
 568         case MAX77620_POWER_MODE_DISABLE:
 569                 if (fpwm)
 570                         reg_mode = REGULATOR_MODE_FAST;
 571                 else
 572                         reg_mode = REGULATOR_MODE_NORMAL;
 573                 break;
 574         case MAX77620_POWER_MODE_LPM:
 575         case MAX77620_POWER_MODE_GLPM:
 576                 reg_mode = REGULATOR_MODE_IDLE;
 577                 break;
 578         default:
 579                 return 0;
 580         }
 581 
 582         return reg_mode;
 583 }
 584 
 585 static int max77620_regulator_set_ramp_delay(struct regulator_dev *rdev,
 586                                              int ramp_delay)
 587 {
 588         struct max77620_regulator *pmic = rdev_get_drvdata(rdev);
 589         int id = rdev_get_id(rdev);
 590         struct max77620_regulator_pdata *rpdata = &pmic->reg_pdata[id];
 591 
 592         /* Device specific ramp rate setting tells that platform has
 593          * different ramp rate from advertised value. In this case,
 594          * do not configure anything and just return success.
 595          */
 596         if (rpdata->ramp_rate_setting)
 597                 return 0;
 598 
 599         return max77620_set_slew_rate(pmic, id, ramp_delay);
 600 }
 601 
 602 static int max77620_of_parse_cb(struct device_node *np,
 603                                 const struct regulator_desc *desc,
 604                                 struct regulator_config *config)
 605 {
 606         struct max77620_regulator *pmic = config->driver_data;
 607         struct max77620_regulator_pdata *rpdata = &pmic->reg_pdata[desc->id];
 608         u32 pval;
 609         int ret;
 610 
 611         ret = of_property_read_u32(np, "maxim,active-fps-source", &pval);
 612         rpdata->active_fps_src = (!ret) ? pval : MAX77620_FPS_SRC_DEF;
 613 
 614         ret = of_property_read_u32(np, "maxim,active-fps-power-up-slot", &pval);
 615         rpdata->active_fps_pu_slot = (!ret) ? pval : -1;
 616 
 617         ret = of_property_read_u32(
 618                         np, "maxim,active-fps-power-down-slot", &pval);
 619         rpdata->active_fps_pd_slot = (!ret) ? pval : -1;
 620 
 621         ret = of_property_read_u32(np, "maxim,suspend-fps-source", &pval);
 622         rpdata->suspend_fps_src = (!ret) ? pval : -1;
 623 
 624         ret = of_property_read_u32(
 625                         np, "maxim,suspend-fps-power-up-slot", &pval);
 626         rpdata->suspend_fps_pu_slot = (!ret) ? pval : -1;
 627 
 628         ret = of_property_read_u32(
 629                         np, "maxim,suspend-fps-power-down-slot", &pval);
 630         rpdata->suspend_fps_pd_slot = (!ret) ? pval : -1;
 631 
 632         ret = of_property_read_u32(np, "maxim,power-ok-control", &pval);
 633         if (!ret)
 634                 rpdata->power_ok = pval;
 635         else
 636                 rpdata->power_ok = -1;
 637 
 638         ret = of_property_read_u32(np, "maxim,ramp-rate-setting", &pval);
 639         rpdata->ramp_rate_setting = (!ret) ? pval : 0;
 640 
 641         return max77620_init_pmic(pmic, desc->id);
 642 }
 643 
 644 static const struct regulator_ops max77620_regulator_ops = {
 645         .is_enabled = max77620_regulator_is_enabled,
 646         .enable = max77620_regulator_enable,
 647         .disable = max77620_regulator_disable,
 648         .list_voltage = regulator_list_voltage_linear,
 649         .map_voltage = regulator_map_voltage_linear,
 650         .get_voltage_sel = regulator_get_voltage_sel_regmap,
 651         .set_voltage_sel = regulator_set_voltage_sel_regmap,
 652         .set_mode = max77620_regulator_set_mode,
 653         .get_mode = max77620_regulator_get_mode,
 654         .set_ramp_delay = max77620_regulator_set_ramp_delay,
 655         .set_voltage_time_sel = regulator_set_voltage_time_sel,
 656         .set_active_discharge = regulator_set_active_discharge_regmap,
 657 };
 658 
 659 #define MAX77620_SD_CNF2_ROVS_EN_NONE   0
 660 #define RAIL_SD(_id, _name, _sname, _volt_mask, _min_uV, _max_uV,       \
 661                 _step_uV, _rs_add, _rs_mask)                            \
 662         [MAX77620_REGULATOR_ID_##_id] = {                               \
 663                 .type = MAX77620_REGULATOR_TYPE_SD,                     \
 664                 .volt_addr = MAX77620_REG_##_id,                        \
 665                 .cfg_addr = MAX77620_REG_##_id##_CFG,                   \
 666                 .fps_addr = MAX77620_REG_FPS_##_id,                     \
 667                 .remote_sense_addr = _rs_add,                           \
 668                 .remote_sense_mask = MAX77620_SD_CNF2_ROVS_EN_##_rs_mask, \
 669                 .power_mode_mask = MAX77620_SD_POWER_MODE_MASK,         \
 670                 .power_mode_shift = MAX77620_SD_POWER_MODE_SHIFT,       \
 671                 .desc = {                                               \
 672                         .name = max77620_rails(_name),                  \
 673                         .of_match = of_match_ptr(#_name),               \
 674                         .regulators_node = of_match_ptr("regulators"),  \
 675                         .of_parse_cb = max77620_of_parse_cb,            \
 676                         .supply_name = _sname,                          \
 677                         .id = MAX77620_REGULATOR_ID_##_id,              \
 678                         .ops = &max77620_regulator_ops,                 \
 679                         .n_voltages = ((_max_uV - _min_uV) / _step_uV) + 1, \
 680                         .min_uV = _min_uV,                              \
 681                         .uV_step = _step_uV,                            \
 682                         .enable_time = 500,                             \
 683                         .vsel_mask = MAX77620_##_volt_mask##_VOLT_MASK, \
 684                         .vsel_reg = MAX77620_REG_##_id,                 \
 685                         .active_discharge_off = 0,                      \
 686                         .active_discharge_on = MAX77620_SD_CFG1_ADE_ENABLE, \
 687                         .active_discharge_mask = MAX77620_SD_CFG1_ADE_MASK, \
 688                         .active_discharge_reg = MAX77620_REG_##_id##_CFG, \
 689                         .type = REGULATOR_VOLTAGE,                      \
 690                         .owner = THIS_MODULE,                           \
 691                 },                                                      \
 692         }
 693 
 694 #define RAIL_LDO(_id, _name, _sname, _type, _min_uV, _max_uV, _step_uV) \
 695         [MAX77620_REGULATOR_ID_##_id] = {                               \
 696                 .type = MAX77620_REGULATOR_TYPE_LDO_##_type,            \
 697                 .volt_addr = MAX77620_REG_##_id##_CFG,                  \
 698                 .cfg_addr = MAX77620_REG_##_id##_CFG2,                  \
 699                 .fps_addr = MAX77620_REG_FPS_##_id,                     \
 700                 .remote_sense_addr = 0xFF,                              \
 701                 .power_mode_mask = MAX77620_LDO_POWER_MODE_MASK,        \
 702                 .power_mode_shift = MAX77620_LDO_POWER_MODE_SHIFT,      \
 703                 .desc = {                                               \
 704                         .name = max77620_rails(_name),                  \
 705                         .of_match = of_match_ptr(#_name),               \
 706                         .regulators_node = of_match_ptr("regulators"),  \
 707                         .of_parse_cb = max77620_of_parse_cb,            \
 708                         .supply_name = _sname,                          \
 709                         .id = MAX77620_REGULATOR_ID_##_id,              \
 710                         .ops = &max77620_regulator_ops,                 \
 711                         .n_voltages = ((_max_uV - _min_uV) / _step_uV) + 1, \
 712                         .min_uV = _min_uV,                              \
 713                         .uV_step = _step_uV,                            \
 714                         .enable_time = 500,                             \
 715                         .vsel_mask = MAX77620_LDO_VOLT_MASK,            \
 716                         .vsel_reg = MAX77620_REG_##_id##_CFG,           \
 717                         .active_discharge_off = 0,                      \
 718                         .active_discharge_on = MAX77620_LDO_CFG2_ADE_ENABLE, \
 719                         .active_discharge_mask = MAX77620_LDO_CFG2_ADE_MASK, \
 720                         .active_discharge_reg = MAX77620_REG_##_id##_CFG2, \
 721                         .type = REGULATOR_VOLTAGE,                      \
 722                         .owner = THIS_MODULE,                           \
 723                 },                                                      \
 724         }
 725 
 726 static struct max77620_regulator_info max77620_regs_info[MAX77620_NUM_REGS] = {
 727         RAIL_SD(SD0, sd0, "in-sd0", SD0, 600000, 1400000, 12500, 0x22, SD0),
 728         RAIL_SD(SD1, sd1, "in-sd1", SD1, 600000, 1550000, 12500, 0x22, SD1),
 729         RAIL_SD(SD2, sd2, "in-sd2", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 730         RAIL_SD(SD3, sd3, "in-sd3", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 731 
 732         RAIL_LDO(LDO0, ldo0, "in-ldo0-1", N, 800000, 2375000, 25000),
 733         RAIL_LDO(LDO1, ldo1, "in-ldo0-1", N, 800000, 2375000, 25000),
 734         RAIL_LDO(LDO2, ldo2, "in-ldo2",   P, 800000, 3950000, 50000),
 735         RAIL_LDO(LDO3, ldo3, "in-ldo3-5", P, 800000, 3950000, 50000),
 736         RAIL_LDO(LDO4, ldo4, "in-ldo4-6", P, 800000, 1587500, 12500),
 737         RAIL_LDO(LDO5, ldo5, "in-ldo3-5", P, 800000, 3950000, 50000),
 738         RAIL_LDO(LDO6, ldo6, "in-ldo4-6", P, 800000, 3950000, 50000),
 739         RAIL_LDO(LDO7, ldo7, "in-ldo7-8", N, 800000, 3950000, 50000),
 740         RAIL_LDO(LDO8, ldo8, "in-ldo7-8", N, 800000, 3950000, 50000),
 741 };
 742 
 743 static struct max77620_regulator_info max20024_regs_info[MAX77620_NUM_REGS] = {
 744         RAIL_SD(SD0, sd0, "in-sd0", SD0, 800000, 1587500, 12500, 0x22, SD0),
 745         RAIL_SD(SD1, sd1, "in-sd1", SD1, 600000, 3387500, 12500, 0x22, SD1),
 746         RAIL_SD(SD2, sd2, "in-sd2", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 747         RAIL_SD(SD3, sd3, "in-sd3", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 748         RAIL_SD(SD4, sd4, "in-sd4", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 749 
 750         RAIL_LDO(LDO0, ldo0, "in-ldo0-1", N, 800000, 2375000, 25000),
 751         RAIL_LDO(LDO1, ldo1, "in-ldo0-1", N, 800000, 2375000, 25000),
 752         RAIL_LDO(LDO2, ldo2, "in-ldo2",   P, 800000, 3950000, 50000),
 753         RAIL_LDO(LDO3, ldo3, "in-ldo3-5", P, 800000, 3950000, 50000),
 754         RAIL_LDO(LDO4, ldo4, "in-ldo4-6", P, 800000, 1587500, 12500),
 755         RAIL_LDO(LDO5, ldo5, "in-ldo3-5", P, 800000, 3950000, 50000),
 756         RAIL_LDO(LDO6, ldo6, "in-ldo4-6", P, 800000, 3950000, 50000),
 757         RAIL_LDO(LDO7, ldo7, "in-ldo7-8", N, 800000, 3950000, 50000),
 758         RAIL_LDO(LDO8, ldo8, "in-ldo7-8", N, 800000, 3950000, 50000),
 759 };
 760 
 761 static struct max77620_regulator_info max77663_regs_info[MAX77620_NUM_REGS] = {
 762         RAIL_SD(SD0, sd0, "in-sd0", SD0, 600000, 3387500, 12500, 0xFF, NONE),
 763         RAIL_SD(SD1, sd1, "in-sd1", SD1, 800000, 1587500, 12500, 0xFF, NONE),
 764         RAIL_SD(SD2, sd2, "in-sd2", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 765         RAIL_SD(SD3, sd3, "in-sd3", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 766         RAIL_SD(SD4, sd4, "in-sd4", SDX, 600000, 3787500, 12500, 0xFF, NONE),
 767 
 768         RAIL_LDO(LDO0, ldo0, "in-ldo0-1", N, 800000, 2375000, 25000),
 769         RAIL_LDO(LDO1, ldo1, "in-ldo0-1", N, 800000, 2375000, 25000),
 770         RAIL_LDO(LDO2, ldo2, "in-ldo2",   P, 800000, 3950000, 50000),
 771         RAIL_LDO(LDO3, ldo3, "in-ldo3-5", P, 800000, 3950000, 50000),
 772         RAIL_LDO(LDO4, ldo4, "in-ldo4-6", P, 800000, 1587500, 12500),
 773         RAIL_LDO(LDO5, ldo5, "in-ldo3-5", P, 800000, 3950000, 50000),
 774         RAIL_LDO(LDO6, ldo6, "in-ldo4-6", P, 800000, 3950000, 50000),
 775         RAIL_LDO(LDO7, ldo7, "in-ldo7-8", N, 800000, 3950000, 50000),
 776         RAIL_LDO(LDO8, ldo8, "in-ldo7-8", N, 800000, 3950000, 50000),
 777 };
 778 
 779 static int max77620_regulator_probe(struct platform_device *pdev)
 780 {
 781         struct max77620_chip *max77620_chip = dev_get_drvdata(pdev->dev.parent);
 782         struct max77620_regulator_info *rinfo;
 783         struct device *dev = &pdev->dev;
 784         struct regulator_config config = { };
 785         struct max77620_regulator *pmic;
 786         int ret = 0;
 787         int id;
 788 
 789         pmic = devm_kzalloc(dev, sizeof(*pmic), GFP_KERNEL);
 790         if (!pmic)
 791                 return -ENOMEM;
 792 
 793         platform_set_drvdata(pdev, pmic);
 794         pmic->dev = dev;
 795         pmic->rmap = max77620_chip->rmap;
 796         if (!dev->of_node)
 797                 dev->of_node = pdev->dev.parent->of_node;
 798 
 799         switch (max77620_chip->chip_id) {
 800         case MAX77620:
 801                 rinfo = max77620_regs_info;
 802                 break;
 803         case MAX20024:
 804                 rinfo = max20024_regs_info;
 805                 break;
 806         case MAX77663:
 807                 rinfo = max77663_regs_info;
 808                 break;
 809         default:
 810                 return -EINVAL;
 811         }
 812 
 813         config.regmap = pmic->rmap;
 814         config.dev = dev;
 815         config.driver_data = pmic;
 816 
 817         for (id = 0; id < MAX77620_NUM_REGS; id++) {
 818                 struct regulator_dev *rdev;
 819                 struct regulator_desc *rdesc;
 820 
 821                 if ((max77620_chip->chip_id == MAX77620) &&
 822                     (id == MAX77620_REGULATOR_ID_SD4))
 823                         continue;
 824 
 825                 rdesc = &rinfo[id].desc;
 826                 pmic->rinfo[id] = &rinfo[id];
 827                 pmic->enable_power_mode[id] = MAX77620_POWER_MODE_NORMAL;
 828                 pmic->reg_pdata[id].active_fps_src = -1;
 829                 pmic->reg_pdata[id].active_fps_pd_slot = -1;
 830                 pmic->reg_pdata[id].active_fps_pu_slot = -1;
 831                 pmic->reg_pdata[id].suspend_fps_src = -1;
 832                 pmic->reg_pdata[id].suspend_fps_pd_slot = -1;
 833                 pmic->reg_pdata[id].suspend_fps_pu_slot = -1;
 834                 pmic->reg_pdata[id].power_ok = -1;
 835                 pmic->reg_pdata[id].ramp_rate_setting = -1;
 836 
 837                 ret = max77620_read_slew_rate(pmic, id);
 838                 if (ret < 0)
 839                         return ret;
 840 
 841                 rdev = devm_regulator_register(dev, rdesc, &config);
 842                 if (IS_ERR(rdev)) {
 843                         ret = PTR_ERR(rdev);
 844                         dev_err(dev, "Regulator registration %s failed: %d\n",
 845                                 rdesc->name, ret);
 846                         return ret;
 847                 }
 848         }
 849 
 850         return 0;
 851 }
 852 
 853 #ifdef CONFIG_PM_SLEEP
 854 static int max77620_regulator_suspend(struct device *dev)
 855 {
 856         struct max77620_regulator *pmic = dev_get_drvdata(dev);
 857         struct max77620_regulator_pdata *reg_pdata;
 858         int id;
 859 
 860         for (id = 0; id < MAX77620_NUM_REGS; id++) {
 861                 reg_pdata = &pmic->reg_pdata[id];
 862 
 863                 max77620_regulator_set_fps_slots(pmic, id, true);
 864                 if (reg_pdata->suspend_fps_src < 0)
 865                         continue;
 866 
 867                 max77620_regulator_set_fps_src(pmic, reg_pdata->suspend_fps_src,
 868                                                id);
 869         }
 870 
 871         return 0;
 872 }
 873 
 874 static int max77620_regulator_resume(struct device *dev)
 875 {
 876         struct max77620_regulator *pmic = dev_get_drvdata(dev);
 877         struct max77620_regulator_pdata *reg_pdata;
 878         int id;
 879 
 880         for (id = 0; id < MAX77620_NUM_REGS; id++) {
 881                 reg_pdata = &pmic->reg_pdata[id];
 882 
 883                 max77620_config_power_ok(pmic, id);
 884 
 885                 max77620_regulator_set_fps_slots(pmic, id, false);
 886                 if (reg_pdata->active_fps_src < 0)
 887                         continue;
 888                 max77620_regulator_set_fps_src(pmic, reg_pdata->active_fps_src,
 889                                                id);
 890         }
 891 
 892         return 0;
 893 }
 894 #endif
 895 
 896 static const struct dev_pm_ops max77620_regulator_pm_ops = {
 897         SET_SYSTEM_SLEEP_PM_OPS(max77620_regulator_suspend,
 898                                 max77620_regulator_resume)
 899 };
 900 
 901 static const struct platform_device_id max77620_regulator_devtype[] = {
 902         { .name = "max77620-pmic", },
 903         { .name = "max20024-pmic", },
 904         { .name = "max77663-pmic", },
 905         {},
 906 };
 907 MODULE_DEVICE_TABLE(platform, max77620_regulator_devtype);
 908 
 909 static struct platform_driver max77620_regulator_driver = {
 910         .probe = max77620_regulator_probe,
 911         .id_table = max77620_regulator_devtype,
 912         .driver = {
 913                 .name = "max77620-pmic",
 914                 .pm = &max77620_regulator_pm_ops,
 915         },
 916 };
 917 
 918 module_platform_driver(max77620_regulator_driver);
 919 
 920 MODULE_DESCRIPTION("MAX77620/MAX20024 regulator driver");
 921 MODULE_AUTHOR("Mallikarjun Kasoju <mkasoju@nvidia.com>");
 922 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
 923 MODULE_LICENSE("GPL v2");

/* [<][>][^][v][top][bottom][index][help] */