Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * Driver for Regulator part of Palmas PMIC Chips
0004  *
0005  * Copyright 2011-2013 Texas Instruments Inc.
0006  *
0007  * Author: Graeme Gregory <gg@slimlogic.co.uk>
0008  * Author: Ian Lartey <ian@slimlogic.co.uk>
0009  */
0010 
0011 #include <linux/kernel.h>
0012 #include <linux/module.h>
0013 #include <linux/init.h>
0014 #include <linux/err.h>
0015 #include <linux/platform_device.h>
0016 #include <linux/regulator/driver.h>
0017 #include <linux/regulator/machine.h>
0018 #include <linux/slab.h>
0019 #include <linux/regmap.h>
0020 #include <linux/mfd/palmas.h>
0021 #include <linux/of.h>
0022 #include <linux/of_platform.h>
0023 #include <linux/regulator/of_regulator.h>
0024 
0025 static const struct linear_range smps_low_ranges[] = {
0026     REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
0027     REGULATOR_LINEAR_RANGE(500000, 0x1, 0x6, 0),
0028     REGULATOR_LINEAR_RANGE(510000, 0x7, 0x79, 10000),
0029     REGULATOR_LINEAR_RANGE(1650000, 0x7A, 0x7f, 0),
0030 };
0031 
0032 static const struct linear_range smps_high_ranges[] = {
0033     REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
0034     REGULATOR_LINEAR_RANGE(1000000, 0x1, 0x6, 0),
0035     REGULATOR_LINEAR_RANGE(1020000, 0x7, 0x79, 20000),
0036     REGULATOR_LINEAR_RANGE(3300000, 0x7A, 0x7f, 0),
0037 };
0038 
0039 static struct palmas_regs_info palmas_generic_regs_info[] = {
0040     {
0041         .name       = "SMPS12",
0042         .sname      = "smps1-in",
0043         .vsel_addr  = PALMAS_SMPS12_VOLTAGE,
0044         .ctrl_addr  = PALMAS_SMPS12_CTRL,
0045         .tstep_addr = PALMAS_SMPS12_TSTEP,
0046         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS12,
0047     },
0048     {
0049         .name       = "SMPS123",
0050         .sname      = "smps1-in",
0051         .vsel_addr  = PALMAS_SMPS12_VOLTAGE,
0052         .ctrl_addr  = PALMAS_SMPS12_CTRL,
0053         .tstep_addr = PALMAS_SMPS12_TSTEP,
0054         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS12,
0055     },
0056     {
0057         .name       = "SMPS3",
0058         .sname      = "smps3-in",
0059         .vsel_addr  = PALMAS_SMPS3_VOLTAGE,
0060         .ctrl_addr  = PALMAS_SMPS3_CTRL,
0061         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS3,
0062     },
0063     {
0064         .name       = "SMPS45",
0065         .sname      = "smps4-in",
0066         .vsel_addr  = PALMAS_SMPS45_VOLTAGE,
0067         .ctrl_addr  = PALMAS_SMPS45_CTRL,
0068         .tstep_addr = PALMAS_SMPS45_TSTEP,
0069         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS45,
0070     },
0071     {
0072         .name       = "SMPS457",
0073         .sname      = "smps4-in",
0074         .vsel_addr  = PALMAS_SMPS45_VOLTAGE,
0075         .ctrl_addr  = PALMAS_SMPS45_CTRL,
0076         .tstep_addr = PALMAS_SMPS45_TSTEP,
0077         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS45,
0078     },
0079     {
0080         .name       = "SMPS6",
0081         .sname      = "smps6-in",
0082         .vsel_addr  = PALMAS_SMPS6_VOLTAGE,
0083         .ctrl_addr  = PALMAS_SMPS6_CTRL,
0084         .tstep_addr = PALMAS_SMPS6_TSTEP,
0085         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS6,
0086     },
0087     {
0088         .name       = "SMPS7",
0089         .sname      = "smps7-in",
0090         .vsel_addr  = PALMAS_SMPS7_VOLTAGE,
0091         .ctrl_addr  = PALMAS_SMPS7_CTRL,
0092         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS7,
0093     },
0094     {
0095         .name       = "SMPS8",
0096         .sname      = "smps8-in",
0097         .vsel_addr  = PALMAS_SMPS8_VOLTAGE,
0098         .ctrl_addr  = PALMAS_SMPS8_CTRL,
0099         .tstep_addr = PALMAS_SMPS8_TSTEP,
0100         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS8,
0101     },
0102     {
0103         .name       = "SMPS9",
0104         .sname      = "smps9-in",
0105         .vsel_addr  = PALMAS_SMPS9_VOLTAGE,
0106         .ctrl_addr  = PALMAS_SMPS9_CTRL,
0107         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS9,
0108     },
0109     {
0110         .name       = "SMPS10_OUT2",
0111         .sname      = "smps10-in",
0112         .ctrl_addr  = PALMAS_SMPS10_CTRL,
0113         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS10,
0114     },
0115     {
0116         .name       = "SMPS10_OUT1",
0117         .sname      = "smps10-out2",
0118         .ctrl_addr  = PALMAS_SMPS10_CTRL,
0119         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SMPS10,
0120     },
0121     {
0122         .name       = "LDO1",
0123         .sname      = "ldo1-in",
0124         .vsel_addr  = PALMAS_LDO1_VOLTAGE,
0125         .ctrl_addr  = PALMAS_LDO1_CTRL,
0126         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO1,
0127     },
0128     {
0129         .name       = "LDO2",
0130         .sname      = "ldo2-in",
0131         .vsel_addr  = PALMAS_LDO2_VOLTAGE,
0132         .ctrl_addr  = PALMAS_LDO2_CTRL,
0133         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO2,
0134     },
0135     {
0136         .name       = "LDO3",
0137         .sname      = "ldo3-in",
0138         .vsel_addr  = PALMAS_LDO3_VOLTAGE,
0139         .ctrl_addr  = PALMAS_LDO3_CTRL,
0140         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO3,
0141     },
0142     {
0143         .name       = "LDO4",
0144         .sname      = "ldo4-in",
0145         .vsel_addr  = PALMAS_LDO4_VOLTAGE,
0146         .ctrl_addr  = PALMAS_LDO4_CTRL,
0147         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO4,
0148     },
0149     {
0150         .name       = "LDO5",
0151         .sname      = "ldo5-in",
0152         .vsel_addr  = PALMAS_LDO5_VOLTAGE,
0153         .ctrl_addr  = PALMAS_LDO5_CTRL,
0154         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO5,
0155     },
0156     {
0157         .name       = "LDO6",
0158         .sname      = "ldo6-in",
0159         .vsel_addr  = PALMAS_LDO6_VOLTAGE,
0160         .ctrl_addr  = PALMAS_LDO6_CTRL,
0161         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO6,
0162     },
0163     {
0164         .name       = "LDO7",
0165         .sname      = "ldo7-in",
0166         .vsel_addr  = PALMAS_LDO7_VOLTAGE,
0167         .ctrl_addr  = PALMAS_LDO7_CTRL,
0168         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO7,
0169     },
0170     {
0171         .name       = "LDO8",
0172         .sname      = "ldo8-in",
0173         .vsel_addr  = PALMAS_LDO8_VOLTAGE,
0174         .ctrl_addr  = PALMAS_LDO8_CTRL,
0175         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO8,
0176     },
0177     {
0178         .name       = "LDO9",
0179         .sname      = "ldo9-in",
0180         .vsel_addr  = PALMAS_LDO9_VOLTAGE,
0181         .ctrl_addr  = PALMAS_LDO9_CTRL,
0182         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDO9,
0183     },
0184     {
0185         .name       = "LDOLN",
0186         .sname      = "ldoln-in",
0187         .vsel_addr  = PALMAS_LDOLN_VOLTAGE,
0188         .ctrl_addr  = PALMAS_LDOLN_CTRL,
0189         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDOLN,
0190     },
0191     {
0192         .name       = "LDOUSB",
0193         .sname      = "ldousb-in",
0194         .vsel_addr  = PALMAS_LDOUSB_VOLTAGE,
0195         .ctrl_addr  = PALMAS_LDOUSB_CTRL,
0196         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_LDOUSB,
0197     },
0198     {
0199         .name       = "REGEN1",
0200         .ctrl_addr  = PALMAS_REGEN1_CTRL,
0201         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_REGEN1,
0202     },
0203     {
0204         .name       = "REGEN2",
0205         .ctrl_addr  = PALMAS_REGEN2_CTRL,
0206         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_REGEN2,
0207     },
0208     {
0209         .name       = "REGEN3",
0210         .ctrl_addr  = PALMAS_REGEN3_CTRL,
0211         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_REGEN3,
0212     },
0213     {
0214         .name       = "SYSEN1",
0215         .ctrl_addr  = PALMAS_SYSEN1_CTRL,
0216         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SYSEN1,
0217     },
0218     {
0219         .name       = "SYSEN2",
0220         .ctrl_addr  = PALMAS_SYSEN2_CTRL,
0221         .sleep_id   = PALMAS_EXTERNAL_REQSTR_ID_SYSEN2,
0222     },
0223 };
0224 
0225 static struct palmas_regs_info tps65917_regs_info[] = {
0226     {
0227         .name       = "SMPS1",
0228         .sname      = "smps1-in",
0229         .vsel_addr  = TPS65917_SMPS1_VOLTAGE,
0230         .ctrl_addr  = TPS65917_SMPS1_CTRL,
0231         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_SMPS1,
0232     },
0233     {
0234         .name       = "SMPS2",
0235         .sname      = "smps2-in",
0236         .vsel_addr  = TPS65917_SMPS2_VOLTAGE,
0237         .ctrl_addr  = TPS65917_SMPS2_CTRL,
0238         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_SMPS2,
0239     },
0240     {
0241         .name       = "SMPS3",
0242         .sname      = "smps3-in",
0243         .vsel_addr  = TPS65917_SMPS3_VOLTAGE,
0244         .ctrl_addr  = TPS65917_SMPS3_CTRL,
0245         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_SMPS3,
0246     },
0247     {
0248         .name       = "SMPS4",
0249         .sname      = "smps4-in",
0250         .vsel_addr  = TPS65917_SMPS4_VOLTAGE,
0251         .ctrl_addr  = TPS65917_SMPS4_CTRL,
0252         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_SMPS4,
0253     },
0254     {
0255         .name       = "SMPS5",
0256         .sname      = "smps5-in",
0257         .vsel_addr  = TPS65917_SMPS5_VOLTAGE,
0258         .ctrl_addr  = TPS65917_SMPS5_CTRL,
0259         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_SMPS5,
0260     },
0261     {
0262         .name       = "SMPS12",
0263         .sname      = "smps1-in",
0264         .vsel_addr  = TPS65917_SMPS1_VOLTAGE,
0265         .ctrl_addr  = TPS65917_SMPS1_CTRL,
0266         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_SMPS12,
0267     },
0268     {
0269         .name       = "LDO1",
0270         .sname      = "ldo1-in",
0271         .vsel_addr  = TPS65917_LDO1_VOLTAGE,
0272         .ctrl_addr  = TPS65917_LDO1_CTRL,
0273         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_LDO1,
0274     },
0275     {
0276         .name       = "LDO2",
0277         .sname      = "ldo2-in",
0278         .vsel_addr  = TPS65917_LDO2_VOLTAGE,
0279         .ctrl_addr  = TPS65917_LDO2_CTRL,
0280         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_LDO2,
0281     },
0282     {
0283         .name       = "LDO3",
0284         .sname      = "ldo3-in",
0285         .vsel_addr  = TPS65917_LDO3_VOLTAGE,
0286         .ctrl_addr  = TPS65917_LDO3_CTRL,
0287         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_LDO3,
0288     },
0289     {
0290         .name       = "LDO4",
0291         .sname      = "ldo4-in",
0292         .vsel_addr  = TPS65917_LDO4_VOLTAGE,
0293         .ctrl_addr  = TPS65917_LDO4_CTRL,
0294         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_LDO4,
0295     },
0296     {
0297         .name       = "LDO5",
0298         .sname      = "ldo5-in",
0299         .vsel_addr  = TPS65917_LDO5_VOLTAGE,
0300         .ctrl_addr  = TPS65917_LDO5_CTRL,
0301         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_LDO5,
0302     },
0303     {
0304         .name       = "REGEN1",
0305         .ctrl_addr  = TPS65917_REGEN1_CTRL,
0306         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_REGEN1,
0307     },
0308     {
0309         .name       = "REGEN2",
0310         .ctrl_addr  = TPS65917_REGEN2_CTRL,
0311         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_REGEN2,
0312     },
0313     {
0314         .name       = "REGEN3",
0315         .ctrl_addr  = TPS65917_REGEN3_CTRL,
0316         .sleep_id   = TPS65917_EXTERNAL_REQSTR_ID_REGEN3,
0317     },
0318 };
0319 
0320 #define EXTERNAL_REQUESTOR(_id, _offset, _pos)      \
0321     [PALMAS_EXTERNAL_REQSTR_ID_##_id] = {       \
0322         .id = PALMAS_EXTERNAL_REQSTR_ID_##_id,  \
0323         .reg_offset = _offset,          \
0324         .bit_pos = _pos,            \
0325     }
0326 
0327 static struct palmas_sleep_requestor_info palma_sleep_req_info[] = {
0328     EXTERNAL_REQUESTOR(REGEN1, 0, 0),
0329     EXTERNAL_REQUESTOR(REGEN2, 0, 1),
0330     EXTERNAL_REQUESTOR(SYSEN1, 0, 2),
0331     EXTERNAL_REQUESTOR(SYSEN2, 0, 3),
0332     EXTERNAL_REQUESTOR(CLK32KG, 0, 4),
0333     EXTERNAL_REQUESTOR(CLK32KGAUDIO, 0, 5),
0334     EXTERNAL_REQUESTOR(REGEN3, 0, 6),
0335     EXTERNAL_REQUESTOR(SMPS12, 1, 0),
0336     EXTERNAL_REQUESTOR(SMPS3, 1, 1),
0337     EXTERNAL_REQUESTOR(SMPS45, 1, 2),
0338     EXTERNAL_REQUESTOR(SMPS6, 1, 3),
0339     EXTERNAL_REQUESTOR(SMPS7, 1, 4),
0340     EXTERNAL_REQUESTOR(SMPS8, 1, 5),
0341     EXTERNAL_REQUESTOR(SMPS9, 1, 6),
0342     EXTERNAL_REQUESTOR(SMPS10, 1, 7),
0343     EXTERNAL_REQUESTOR(LDO1, 2, 0),
0344     EXTERNAL_REQUESTOR(LDO2, 2, 1),
0345     EXTERNAL_REQUESTOR(LDO3, 2, 2),
0346     EXTERNAL_REQUESTOR(LDO4, 2, 3),
0347     EXTERNAL_REQUESTOR(LDO5, 2, 4),
0348     EXTERNAL_REQUESTOR(LDO6, 2, 5),
0349     EXTERNAL_REQUESTOR(LDO7, 2, 6),
0350     EXTERNAL_REQUESTOR(LDO8, 2, 7),
0351     EXTERNAL_REQUESTOR(LDO9, 3, 0),
0352     EXTERNAL_REQUESTOR(LDOLN, 3, 1),
0353     EXTERNAL_REQUESTOR(LDOUSB, 3, 2),
0354 };
0355 
0356 #define EXTERNAL_REQUESTOR_TPS65917(_id, _offset, _pos)     \
0357     [TPS65917_EXTERNAL_REQSTR_ID_##_id] = {     \
0358         .id = TPS65917_EXTERNAL_REQSTR_ID_##_id,    \
0359         .reg_offset = _offset,          \
0360         .bit_pos = _pos,            \
0361     }
0362 
0363 static struct palmas_sleep_requestor_info tps65917_sleep_req_info[] = {
0364     EXTERNAL_REQUESTOR_TPS65917(REGEN1, 0, 0),
0365     EXTERNAL_REQUESTOR_TPS65917(REGEN2, 0, 1),
0366     EXTERNAL_REQUESTOR_TPS65917(REGEN3, 0, 6),
0367     EXTERNAL_REQUESTOR_TPS65917(SMPS1, 1, 0),
0368     EXTERNAL_REQUESTOR_TPS65917(SMPS2, 1, 1),
0369     EXTERNAL_REQUESTOR_TPS65917(SMPS3, 1, 2),
0370     EXTERNAL_REQUESTOR_TPS65917(SMPS4, 1, 3),
0371     EXTERNAL_REQUESTOR_TPS65917(SMPS5, 1, 4),
0372     EXTERNAL_REQUESTOR_TPS65917(SMPS12, 1, 5),
0373     EXTERNAL_REQUESTOR_TPS65917(LDO1, 2, 0),
0374     EXTERNAL_REQUESTOR_TPS65917(LDO2, 2, 1),
0375     EXTERNAL_REQUESTOR_TPS65917(LDO3, 2, 2),
0376     EXTERNAL_REQUESTOR_TPS65917(LDO4, 2, 3),
0377     EXTERNAL_REQUESTOR_TPS65917(LDO5, 2, 4),
0378 };
0379 
0380 static const unsigned int palmas_smps_ramp_delay[4] = {0, 10000, 5000, 2500};
0381 
0382 #define SMPS_CTRL_MODE_OFF      0x00
0383 #define SMPS_CTRL_MODE_ON       0x01
0384 #define SMPS_CTRL_MODE_ECO      0x02
0385 #define SMPS_CTRL_MODE_PWM      0x03
0386 
0387 #define PALMAS_SMPS_NUM_VOLTAGES    122
0388 #define PALMAS_SMPS10_NUM_VOLTAGES  2
0389 #define PALMAS_LDO_NUM_VOLTAGES     50
0390 
0391 #define SMPS10_VSEL         (1<<3)
0392 #define SMPS10_BOOST_EN         (1<<2)
0393 #define SMPS10_BYPASS_EN        (1<<1)
0394 #define SMPS10_SWITCH_EN        (1<<0)
0395 
0396 #define REGULATOR_SLAVE         0
0397 
0398 static int palmas_smps_read(struct palmas *palmas, unsigned int reg,
0399         unsigned int *dest)
0400 {
0401     unsigned int addr;
0402 
0403     addr = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, reg);
0404 
0405     return regmap_read(palmas->regmap[REGULATOR_SLAVE], addr, dest);
0406 }
0407 
0408 static int palmas_smps_write(struct palmas *palmas, unsigned int reg,
0409         unsigned int value)
0410 {
0411     unsigned int addr;
0412 
0413     addr = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE, reg);
0414 
0415     return regmap_write(palmas->regmap[REGULATOR_SLAVE], addr, value);
0416 }
0417 
0418 static int palmas_ldo_read(struct palmas *palmas, unsigned int reg,
0419         unsigned int *dest)
0420 {
0421     unsigned int addr;
0422 
0423     addr = PALMAS_BASE_TO_REG(PALMAS_LDO_BASE, reg);
0424 
0425     return regmap_read(palmas->regmap[REGULATOR_SLAVE], addr, dest);
0426 }
0427 
0428 static int palmas_ldo_write(struct palmas *palmas, unsigned int reg,
0429         unsigned int value)
0430 {
0431     unsigned int addr;
0432 
0433     addr = PALMAS_BASE_TO_REG(PALMAS_LDO_BASE, reg);
0434 
0435     return regmap_write(palmas->regmap[REGULATOR_SLAVE], addr, value);
0436 }
0437 
0438 static int palmas_set_mode_smps(struct regulator_dev *dev, unsigned int mode)
0439 {
0440     int id = rdev_get_id(dev);
0441     int ret;
0442     struct palmas_pmic *pmic = rdev_get_drvdata(dev);
0443     struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata;
0444     struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id];
0445     unsigned int reg;
0446     bool rail_enable = true;
0447 
0448     ret = palmas_smps_read(pmic->palmas, rinfo->ctrl_addr, &reg);
0449     if (ret)
0450         return ret;
0451 
0452     reg &= ~PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
0453 
0454     if (reg == SMPS_CTRL_MODE_OFF)
0455         rail_enable = false;
0456 
0457     switch (mode) {
0458     case REGULATOR_MODE_NORMAL:
0459         reg |= SMPS_CTRL_MODE_ON;
0460         break;
0461     case REGULATOR_MODE_IDLE:
0462         reg |= SMPS_CTRL_MODE_ECO;
0463         break;
0464     case REGULATOR_MODE_FAST:
0465         reg |= SMPS_CTRL_MODE_PWM;
0466         break;
0467     default:
0468         return -EINVAL;
0469     }
0470 
0471     pmic->current_reg_mode[id] = reg & PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
0472     if (rail_enable)
0473         palmas_smps_write(pmic->palmas, rinfo->ctrl_addr, reg);
0474 
0475     /* Switch the enable value to ensure this is used for enable */
0476     pmic->desc[id].enable_val = pmic->current_reg_mode[id];
0477 
0478     return 0;
0479 }
0480 
0481 static unsigned int palmas_get_mode_smps(struct regulator_dev *dev)
0482 {
0483     struct palmas_pmic *pmic = rdev_get_drvdata(dev);
0484     int id = rdev_get_id(dev);
0485     unsigned int reg;
0486 
0487     reg = pmic->current_reg_mode[id] & PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
0488 
0489     switch (reg) {
0490     case SMPS_CTRL_MODE_ON:
0491         return REGULATOR_MODE_NORMAL;
0492     case SMPS_CTRL_MODE_ECO:
0493         return REGULATOR_MODE_IDLE;
0494     case SMPS_CTRL_MODE_PWM:
0495         return REGULATOR_MODE_FAST;
0496     }
0497 
0498     return 0;
0499 }
0500 
0501 static int palmas_smps_set_ramp_delay(struct regulator_dev *rdev,
0502          int ramp_delay)
0503 {
0504     int id = rdev_get_id(rdev);
0505     struct palmas_pmic *pmic = rdev_get_drvdata(rdev);
0506     struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata;
0507     struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id];
0508     unsigned int reg = 0;
0509     int ret;
0510 
0511     /* SMPS3 and SMPS7 do not have tstep_addr setting */
0512     switch (id) {
0513     case PALMAS_REG_SMPS3:
0514     case PALMAS_REG_SMPS7:
0515         return 0;
0516     }
0517 
0518     if (ramp_delay <= 0)
0519         reg = 0;
0520     else if (ramp_delay <= 2500)
0521         reg = 3;
0522     else if (ramp_delay <= 5000)
0523         reg = 2;
0524     else
0525         reg = 1;
0526 
0527     ret = palmas_smps_write(pmic->palmas, rinfo->tstep_addr, reg);
0528     if (ret < 0) {
0529         dev_err(pmic->palmas->dev, "TSTEP write failed: %d\n", ret);
0530         return ret;
0531     }
0532 
0533     pmic->ramp_delay[id] = palmas_smps_ramp_delay[reg];
0534     return ret;
0535 }
0536 
0537 static const struct regulator_ops palmas_ops_smps = {
0538     .is_enabled     = regulator_is_enabled_regmap,
0539     .enable         = regulator_enable_regmap,
0540     .disable        = regulator_disable_regmap,
0541     .set_mode       = palmas_set_mode_smps,
0542     .get_mode       = palmas_get_mode_smps,
0543     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0544     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0545     .list_voltage       = regulator_list_voltage_linear_range,
0546     .map_voltage        = regulator_map_voltage_linear_range,
0547     .set_voltage_time_sel   = regulator_set_voltage_time_sel,
0548     .set_ramp_delay     = palmas_smps_set_ramp_delay,
0549 };
0550 
0551 static const struct regulator_ops palmas_ops_ext_control_smps = {
0552     .set_mode       = palmas_set_mode_smps,
0553     .get_mode       = palmas_get_mode_smps,
0554     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0555     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0556     .list_voltage       = regulator_list_voltage_linear_range,
0557     .map_voltage        = regulator_map_voltage_linear_range,
0558     .set_voltage_time_sel   = regulator_set_voltage_time_sel,
0559     .set_ramp_delay     = palmas_smps_set_ramp_delay,
0560 };
0561 
0562 static const struct regulator_ops palmas_ops_smps10 = {
0563     .is_enabled     = regulator_is_enabled_regmap,
0564     .enable         = regulator_enable_regmap,
0565     .disable        = regulator_disable_regmap,
0566     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0567     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0568     .list_voltage       = regulator_list_voltage_linear,
0569     .map_voltage        = regulator_map_voltage_linear,
0570     .set_bypass     = regulator_set_bypass_regmap,
0571     .get_bypass     = regulator_get_bypass_regmap,
0572 };
0573 
0574 static const struct regulator_ops tps65917_ops_smps = {
0575     .is_enabled     = regulator_is_enabled_regmap,
0576     .enable         = regulator_enable_regmap,
0577     .disable        = regulator_disable_regmap,
0578     .set_mode       = palmas_set_mode_smps,
0579     .get_mode       = palmas_get_mode_smps,
0580     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0581     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0582     .list_voltage       = regulator_list_voltage_linear_range,
0583     .map_voltage        = regulator_map_voltage_linear_range,
0584     .set_voltage_time_sel   = regulator_set_voltage_time_sel,
0585 };
0586 
0587 static const struct regulator_ops tps65917_ops_ext_control_smps = {
0588     .set_mode       = palmas_set_mode_smps,
0589     .get_mode       = palmas_get_mode_smps,
0590     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0591     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0592     .list_voltage       = regulator_list_voltage_linear_range,
0593     .map_voltage        = regulator_map_voltage_linear_range,
0594 };
0595 
0596 static int palmas_is_enabled_ldo(struct regulator_dev *dev)
0597 {
0598     int id = rdev_get_id(dev);
0599     struct palmas_pmic *pmic = rdev_get_drvdata(dev);
0600     struct palmas_pmic_driver_data *ddata = pmic->palmas->pmic_ddata;
0601     struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id];
0602     unsigned int reg;
0603 
0604     palmas_ldo_read(pmic->palmas, rinfo->ctrl_addr, &reg);
0605 
0606     reg &= PALMAS_LDO1_CTRL_STATUS;
0607 
0608     return !!(reg);
0609 }
0610 
0611 static const struct regulator_ops palmas_ops_ldo = {
0612     .is_enabled     = palmas_is_enabled_ldo,
0613     .enable         = regulator_enable_regmap,
0614     .disable        = regulator_disable_regmap,
0615     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0616     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0617     .list_voltage       = regulator_list_voltage_linear,
0618     .map_voltage        = regulator_map_voltage_linear,
0619 };
0620 
0621 static const struct regulator_ops palmas_ops_ldo9 = {
0622     .is_enabled     = palmas_is_enabled_ldo,
0623     .enable         = regulator_enable_regmap,
0624     .disable        = regulator_disable_regmap,
0625     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0626     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0627     .list_voltage       = regulator_list_voltage_linear,
0628     .map_voltage        = regulator_map_voltage_linear,
0629     .set_bypass     = regulator_set_bypass_regmap,
0630     .get_bypass     = regulator_get_bypass_regmap,
0631 };
0632 
0633 static const struct regulator_ops palmas_ops_ext_control_ldo = {
0634     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0635     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0636     .list_voltage       = regulator_list_voltage_linear,
0637     .map_voltage        = regulator_map_voltage_linear,
0638 };
0639 
0640 static const struct regulator_ops palmas_ops_extreg = {
0641     .is_enabled     = regulator_is_enabled_regmap,
0642     .enable         = regulator_enable_regmap,
0643     .disable        = regulator_disable_regmap,
0644 };
0645 
0646 static const struct regulator_ops palmas_ops_ext_control_extreg = {
0647 };
0648 
0649 static const struct regulator_ops tps65917_ops_ldo = {
0650     .is_enabled     = palmas_is_enabled_ldo,
0651     .enable         = regulator_enable_regmap,
0652     .disable        = regulator_disable_regmap,
0653     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0654     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0655     .list_voltage       = regulator_list_voltage_linear,
0656     .map_voltage        = regulator_map_voltage_linear,
0657     .set_voltage_time_sel   = regulator_set_voltage_time_sel,
0658 };
0659 
0660 static const struct regulator_ops tps65917_ops_ldo_1_2 = {
0661     .is_enabled     = palmas_is_enabled_ldo,
0662     .enable         = regulator_enable_regmap,
0663     .disable        = regulator_disable_regmap,
0664     .get_voltage_sel    = regulator_get_voltage_sel_regmap,
0665     .set_voltage_sel    = regulator_set_voltage_sel_regmap,
0666     .list_voltage       = regulator_list_voltage_linear,
0667     .map_voltage        = regulator_map_voltage_linear,
0668     .set_voltage_time_sel   = regulator_set_voltage_time_sel,
0669     .set_bypass     = regulator_set_bypass_regmap,
0670     .get_bypass     = regulator_get_bypass_regmap,
0671 };
0672 
0673 static int palmas_regulator_config_external(struct palmas *palmas, int id,
0674         struct palmas_reg_init *reg_init)
0675 {
0676     struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata;
0677     struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id];
0678     int ret;
0679 
0680     ret = palmas_ext_control_req_config(palmas, rinfo->sleep_id,
0681                         reg_init->roof_floor, true);
0682     if (ret < 0)
0683         dev_err(palmas->dev,
0684             "Ext control config for regulator %d failed %d\n",
0685             id, ret);
0686     return ret;
0687 }
0688 
0689 /*
0690  * setup the hardware based sleep configuration of the SMPS/LDO regulators
0691  * from the platform data. This is different to the software based control
0692  * supported by the regulator framework as it is controlled by toggling
0693  * pins on the PMIC such as PREQ, SYSEN, ...
0694  */
0695 static int palmas_smps_init(struct palmas *palmas, int id,
0696         struct palmas_reg_init *reg_init)
0697 {
0698     unsigned int reg;
0699     int ret;
0700     struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata;
0701     struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id];
0702     unsigned int addr = rinfo->ctrl_addr;
0703 
0704     ret = palmas_smps_read(palmas, addr, &reg);
0705     if (ret)
0706         return ret;
0707 
0708     switch (id) {
0709     case PALMAS_REG_SMPS10_OUT1:
0710     case PALMAS_REG_SMPS10_OUT2:
0711         reg &= ~PALMAS_SMPS10_CTRL_MODE_SLEEP_MASK;
0712         if (reg_init->mode_sleep)
0713             reg |= reg_init->mode_sleep <<
0714                     PALMAS_SMPS10_CTRL_MODE_SLEEP_SHIFT;
0715         break;
0716     default:
0717         if (reg_init->warm_reset)
0718             reg |= PALMAS_SMPS12_CTRL_WR_S;
0719         else
0720             reg &= ~PALMAS_SMPS12_CTRL_WR_S;
0721 
0722         if (reg_init->roof_floor)
0723             reg |= PALMAS_SMPS12_CTRL_ROOF_FLOOR_EN;
0724         else
0725             reg &= ~PALMAS_SMPS12_CTRL_ROOF_FLOOR_EN;
0726 
0727         reg &= ~PALMAS_SMPS12_CTRL_MODE_SLEEP_MASK;
0728         if (reg_init->mode_sleep)
0729             reg |= reg_init->mode_sleep <<
0730                     PALMAS_SMPS12_CTRL_MODE_SLEEP_SHIFT;
0731     }
0732 
0733     ret = palmas_smps_write(palmas, addr, reg);
0734     if (ret)
0735         return ret;
0736 
0737     if (rinfo->vsel_addr && reg_init->vsel) {
0738 
0739         reg = reg_init->vsel;
0740 
0741         ret = palmas_smps_write(palmas, rinfo->vsel_addr, reg);
0742         if (ret)
0743             return ret;
0744     }
0745 
0746     if (reg_init->roof_floor && (id != PALMAS_REG_SMPS10_OUT1) &&
0747             (id != PALMAS_REG_SMPS10_OUT2)) {
0748         /* Enable externally controlled regulator */
0749         ret = palmas_smps_read(palmas, addr, &reg);
0750         if (ret < 0)
0751             return ret;
0752 
0753         if (!(reg & PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK)) {
0754             reg |= SMPS_CTRL_MODE_ON;
0755             ret = palmas_smps_write(palmas, addr, reg);
0756             if (ret < 0)
0757                 return ret;
0758         }
0759         return palmas_regulator_config_external(palmas, id, reg_init);
0760     }
0761     return 0;
0762 }
0763 
0764 static int palmas_ldo_init(struct palmas *palmas, int id,
0765         struct palmas_reg_init *reg_init)
0766 {
0767     unsigned int reg;
0768     unsigned int addr;
0769     int ret;
0770     struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata;
0771     struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id];
0772 
0773     addr = rinfo->ctrl_addr;
0774 
0775     ret = palmas_ldo_read(palmas, addr, &reg);
0776     if (ret)
0777         return ret;
0778 
0779     if (reg_init->warm_reset)
0780         reg |= PALMAS_LDO1_CTRL_WR_S;
0781     else
0782         reg &= ~PALMAS_LDO1_CTRL_WR_S;
0783 
0784     if (reg_init->mode_sleep)
0785         reg |= PALMAS_LDO1_CTRL_MODE_SLEEP;
0786     else
0787         reg &= ~PALMAS_LDO1_CTRL_MODE_SLEEP;
0788 
0789     ret = palmas_ldo_write(palmas, addr, reg);
0790     if (ret)
0791         return ret;
0792 
0793     if (reg_init->roof_floor) {
0794         /* Enable externally controlled regulator */
0795         ret = palmas_update_bits(palmas, PALMAS_LDO_BASE,
0796                 addr, PALMAS_LDO1_CTRL_MODE_ACTIVE,
0797                 PALMAS_LDO1_CTRL_MODE_ACTIVE);
0798         if (ret < 0) {
0799             dev_err(palmas->dev,
0800                 "LDO Register 0x%02x update failed %d\n",
0801                 addr, ret);
0802             return ret;
0803         }
0804         return palmas_regulator_config_external(palmas, id, reg_init);
0805     }
0806     return 0;
0807 }
0808 
0809 static int palmas_extreg_init(struct palmas *palmas, int id,
0810         struct palmas_reg_init *reg_init)
0811 {
0812     unsigned int addr;
0813     int ret;
0814     unsigned int val = 0;
0815     struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata;
0816     struct palmas_regs_info *rinfo = &ddata->palmas_regs_info[id];
0817 
0818     addr = rinfo->ctrl_addr;
0819 
0820     if (reg_init->mode_sleep)
0821         val = PALMAS_REGEN1_CTRL_MODE_SLEEP;
0822 
0823     ret = palmas_update_bits(palmas, PALMAS_RESOURCE_BASE,
0824             addr, PALMAS_REGEN1_CTRL_MODE_SLEEP, val);
0825     if (ret < 0) {
0826         dev_err(palmas->dev, "Resource reg 0x%02x update failed %d\n",
0827             addr, ret);
0828         return ret;
0829     }
0830 
0831     if (reg_init->roof_floor) {
0832         /* Enable externally controlled regulator */
0833         ret = palmas_update_bits(palmas, PALMAS_RESOURCE_BASE,
0834                 addr, PALMAS_REGEN1_CTRL_MODE_ACTIVE,
0835                 PALMAS_REGEN1_CTRL_MODE_ACTIVE);
0836         if (ret < 0) {
0837             dev_err(palmas->dev,
0838                 "Resource Register 0x%02x update failed %d\n",
0839                 addr, ret);
0840             return ret;
0841         }
0842         return palmas_regulator_config_external(palmas, id, reg_init);
0843     }
0844     return 0;
0845 }
0846 
0847 static void palmas_enable_ldo8_track(struct palmas *palmas)
0848 {
0849     unsigned int reg;
0850     unsigned int addr;
0851     int ret;
0852     struct palmas_pmic_driver_data *ddata = palmas->pmic_ddata;
0853     struct palmas_regs_info *rinfo;
0854 
0855     rinfo = &ddata->palmas_regs_info[PALMAS_REG_LDO8];
0856     addr = rinfo->ctrl_addr;
0857 
0858     ret = palmas_ldo_read(palmas, addr, &reg);
0859     if (ret) {
0860         dev_err(palmas->dev, "Error in reading ldo8 control reg\n");
0861         return;
0862     }
0863 
0864     reg |= PALMAS_LDO8_CTRL_LDO_TRACKING_EN;
0865     ret = palmas_ldo_write(palmas, addr, reg);
0866     if (ret < 0) {
0867         dev_err(palmas->dev, "Error in enabling tracking mode\n");
0868         return;
0869     }
0870     /*
0871      * When SMPS45 is set to off and LDO8 tracking is enabled, the LDO8
0872      * output is defined by the LDO8_VOLTAGE.VSEL register divided by two,
0873      * and can be set from 0.45 to 1.65 V.
0874      */
0875     addr = rinfo->vsel_addr;
0876     ret = palmas_ldo_read(palmas, addr, &reg);
0877     if (ret) {
0878         dev_err(palmas->dev, "Error in reading ldo8 voltage reg\n");
0879         return;
0880     }
0881 
0882     reg = (reg << 1) & PALMAS_LDO8_VOLTAGE_VSEL_MASK;
0883     ret = palmas_ldo_write(palmas, addr, reg);
0884     if (ret < 0)
0885         dev_err(palmas->dev, "Error in setting ldo8 voltage reg\n");
0886 
0887     return;
0888 }
0889 
0890 static int palmas_ldo_registration(struct palmas_pmic *pmic,
0891                    struct palmas_pmic_driver_data *ddata,
0892                    struct palmas_pmic_platform_data *pdata,
0893                    const char *pdev_name,
0894                    struct regulator_config config)
0895 {
0896     int id, ret;
0897     struct regulator_dev *rdev;
0898     struct palmas_reg_init *reg_init;
0899     struct palmas_regs_info *rinfo;
0900     struct regulator_desc *desc;
0901 
0902     for (id = ddata->ldo_begin; id < ddata->max_reg; id++) {
0903         if (pdata && pdata->reg_init[id])
0904             reg_init = pdata->reg_init[id];
0905         else
0906             reg_init = NULL;
0907 
0908         rinfo = &ddata->palmas_regs_info[id];
0909         /* Miss out regulators which are not available due
0910          * to alternate functions.
0911          */
0912 
0913         /* Register the regulators */
0914         desc = &pmic->desc[id];
0915         desc->name = rinfo->name;
0916         desc->id = id;
0917         desc->type = REGULATOR_VOLTAGE;
0918         desc->owner = THIS_MODULE;
0919 
0920         if (id < PALMAS_REG_REGEN1) {
0921             desc->n_voltages = PALMAS_LDO_NUM_VOLTAGES;
0922             if (reg_init && reg_init->roof_floor)
0923                 desc->ops = &palmas_ops_ext_control_ldo;
0924             else
0925                 desc->ops = &palmas_ops_ldo;
0926             desc->min_uV = 900000;
0927             desc->uV_step = 50000;
0928             desc->linear_min_sel = 1;
0929             desc->enable_time = 500;
0930             desc->vsel_reg = PALMAS_BASE_TO_REG(PALMAS_LDO_BASE,
0931                                 rinfo->vsel_addr);
0932             desc->vsel_mask = PALMAS_LDO1_VOLTAGE_VSEL_MASK;
0933             desc->enable_reg = PALMAS_BASE_TO_REG(PALMAS_LDO_BASE,
0934                                   rinfo->ctrl_addr);
0935             desc->enable_mask = PALMAS_LDO1_CTRL_MODE_ACTIVE;
0936 
0937             /* Check if LDO8 is in tracking mode or not */
0938             if (pdata && (id == PALMAS_REG_LDO8) &&
0939                 pdata->enable_ldo8_tracking) {
0940                 palmas_enable_ldo8_track(pmic->palmas);
0941                 desc->min_uV = 450000;
0942                 desc->uV_step = 25000;
0943             }
0944 
0945             /* LOD6 in vibrator mode will have enable time 2000us */
0946             if (pdata && pdata->ldo6_vibrator &&
0947                 (id == PALMAS_REG_LDO6))
0948                 desc->enable_time = 2000;
0949 
0950             if (id == PALMAS_REG_LDO9) {
0951                 desc->ops = &palmas_ops_ldo9;
0952                 desc->bypass_reg = desc->enable_reg;
0953                 desc->bypass_val_on =
0954                         PALMAS_LDO9_CTRL_LDO_BYPASS_EN;
0955                 desc->bypass_mask =
0956                         PALMAS_LDO9_CTRL_LDO_BYPASS_EN;
0957             }
0958         } else {
0959             if (!ddata->has_regen3 && id == PALMAS_REG_REGEN3)
0960                 continue;
0961 
0962             desc->n_voltages = 1;
0963             if (reg_init && reg_init->roof_floor)
0964                 desc->ops = &palmas_ops_ext_control_extreg;
0965             else
0966                 desc->ops = &palmas_ops_extreg;
0967             desc->enable_reg =
0968                     PALMAS_BASE_TO_REG(PALMAS_RESOURCE_BASE,
0969                                rinfo->ctrl_addr);
0970             desc->enable_mask = PALMAS_REGEN1_CTRL_MODE_ACTIVE;
0971         }
0972 
0973         if (pdata)
0974             config.init_data = pdata->reg_data[id];
0975         else
0976             config.init_data = NULL;
0977 
0978         desc->supply_name = rinfo->sname;
0979         config.of_node = ddata->palmas_matches[id].of_node;
0980 
0981         rdev = devm_regulator_register(pmic->dev, desc, &config);
0982         if (IS_ERR(rdev)) {
0983             dev_err(pmic->dev,
0984                 "failed to register %s regulator\n",
0985                 pdev_name);
0986             return PTR_ERR(rdev);
0987         }
0988 
0989         /* Initialise sleep/init values from platform data */
0990         if (pdata) {
0991             reg_init = pdata->reg_init[id];
0992             if (reg_init) {
0993                 if (id <= ddata->ldo_end)
0994                     ret = palmas_ldo_init(pmic->palmas, id,
0995                                   reg_init);
0996                 else
0997                     ret = palmas_extreg_init(pmic->palmas,
0998                                  id, reg_init);
0999                 if (ret)
1000                     return ret;
1001             }
1002         }
1003     }
1004 
1005     return 0;
1006 }
1007 
1008 static int tps65917_ldo_registration(struct palmas_pmic *pmic,
1009                      struct palmas_pmic_driver_data *ddata,
1010                      struct palmas_pmic_platform_data *pdata,
1011                      const char *pdev_name,
1012                      struct regulator_config config)
1013 {
1014     int id, ret;
1015     struct regulator_dev *rdev;
1016     struct palmas_reg_init *reg_init;
1017     struct palmas_regs_info *rinfo;
1018     struct regulator_desc *desc;
1019 
1020     for (id = ddata->ldo_begin; id < ddata->max_reg; id++) {
1021         if (pdata && pdata->reg_init[id])
1022             reg_init = pdata->reg_init[id];
1023         else
1024             reg_init = NULL;
1025 
1026         /* Miss out regulators which are not available due
1027          * to alternate functions.
1028          */
1029         rinfo = &ddata->palmas_regs_info[id];
1030 
1031         /* Register the regulators */
1032         desc = &pmic->desc[id];
1033         desc->name = rinfo->name;
1034         desc->id = id;
1035         desc->type = REGULATOR_VOLTAGE;
1036         desc->owner = THIS_MODULE;
1037 
1038         if (id < TPS65917_REG_REGEN1) {
1039             desc->n_voltages = PALMAS_LDO_NUM_VOLTAGES;
1040             if (reg_init && reg_init->roof_floor)
1041                 desc->ops = &palmas_ops_ext_control_ldo;
1042             else
1043                 desc->ops = &tps65917_ops_ldo;
1044             desc->min_uV = 900000;
1045             desc->uV_step = 50000;
1046             desc->linear_min_sel = 1;
1047             desc->enable_time = 500;
1048             desc->vsel_reg = PALMAS_BASE_TO_REG(PALMAS_LDO_BASE,
1049                                 rinfo->vsel_addr);
1050             desc->vsel_mask = PALMAS_LDO1_VOLTAGE_VSEL_MASK;
1051             desc->enable_reg = PALMAS_BASE_TO_REG(PALMAS_LDO_BASE,
1052                                   rinfo->ctrl_addr);
1053             desc->enable_mask = PALMAS_LDO1_CTRL_MODE_ACTIVE;
1054             /*
1055              * To be confirmed. Discussion on going with PMIC Team.
1056              * It is of the order of ~60mV/uS.
1057              */
1058             desc->ramp_delay = 2500;
1059             if (id == TPS65917_REG_LDO1 ||
1060                 id == TPS65917_REG_LDO2) {
1061                 desc->ops = &tps65917_ops_ldo_1_2;
1062                 desc->bypass_reg = desc->enable_reg;
1063                 desc->bypass_val_on =
1064                         TPS65917_LDO1_CTRL_BYPASS_EN;
1065                 desc->bypass_mask =
1066                         TPS65917_LDO1_CTRL_BYPASS_EN;
1067             }
1068         } else {
1069             desc->n_voltages = 1;
1070             if (reg_init && reg_init->roof_floor)
1071                 desc->ops = &palmas_ops_ext_control_extreg;
1072             else
1073                 desc->ops = &palmas_ops_extreg;
1074             desc->enable_reg =
1075                     PALMAS_BASE_TO_REG(PALMAS_RESOURCE_BASE,
1076                                rinfo->ctrl_addr);
1077             desc->enable_mask = PALMAS_REGEN1_CTRL_MODE_ACTIVE;
1078         }
1079 
1080         if (pdata)
1081             config.init_data = pdata->reg_data[id];
1082         else
1083             config.init_data = NULL;
1084 
1085         desc->supply_name = rinfo->sname;
1086         config.of_node = ddata->palmas_matches[id].of_node;
1087 
1088         rdev = devm_regulator_register(pmic->dev, desc, &config);
1089         if (IS_ERR(rdev)) {
1090             dev_err(pmic->dev,
1091                 "failed to register %s regulator\n",
1092                 pdev_name);
1093             return PTR_ERR(rdev);
1094         }
1095 
1096         /* Initialise sleep/init values from platform data */
1097         if (pdata) {
1098             reg_init = pdata->reg_init[id];
1099             if (reg_init) {
1100                 if (id < TPS65917_REG_REGEN1)
1101                     ret = palmas_ldo_init(pmic->palmas,
1102                                   id, reg_init);
1103                 else
1104                     ret = palmas_extreg_init(pmic->palmas,
1105                                  id, reg_init);
1106                 if (ret)
1107                     return ret;
1108             }
1109         }
1110     }
1111 
1112     return 0;
1113 }
1114 
1115 static int palmas_smps_registration(struct palmas_pmic *pmic,
1116                     struct palmas_pmic_driver_data *ddata,
1117                     struct palmas_pmic_platform_data *pdata,
1118                     const char *pdev_name,
1119                     struct regulator_config config)
1120 {
1121     int id, ret;
1122     unsigned int addr, reg;
1123     struct regulator_dev *rdev;
1124     struct palmas_reg_init *reg_init;
1125     struct palmas_regs_info *rinfo;
1126     struct regulator_desc *desc;
1127 
1128     for (id = ddata->smps_start; id <= ddata->smps_end; id++) {
1129         bool ramp_delay_support = false;
1130 
1131         /*
1132          * Miss out regulators which are not available due
1133          * to slaving configurations.
1134          */
1135         switch (id) {
1136         case PALMAS_REG_SMPS12:
1137         case PALMAS_REG_SMPS3:
1138             if (pmic->smps123)
1139                 continue;
1140             if (id == PALMAS_REG_SMPS12)
1141                 ramp_delay_support = true;
1142             break;
1143         case PALMAS_REG_SMPS123:
1144             if (!pmic->smps123)
1145                 continue;
1146             ramp_delay_support = true;
1147             break;
1148         case PALMAS_REG_SMPS45:
1149         case PALMAS_REG_SMPS7:
1150             if (pmic->smps457)
1151                 continue;
1152             if (id == PALMAS_REG_SMPS45)
1153                 ramp_delay_support = true;
1154             break;
1155         case PALMAS_REG_SMPS457:
1156             if (!pmic->smps457)
1157                 continue;
1158             ramp_delay_support = true;
1159             break;
1160         case PALMAS_REG_SMPS10_OUT1:
1161         case PALMAS_REG_SMPS10_OUT2:
1162             if (!PALMAS_PMIC_HAS(pmic->palmas, SMPS10_BOOST))
1163                 continue;
1164         }
1165         rinfo = &ddata->palmas_regs_info[id];
1166         desc = &pmic->desc[id];
1167 
1168         if ((id == PALMAS_REG_SMPS6) || (id == PALMAS_REG_SMPS8))
1169             ramp_delay_support = true;
1170 
1171         if (ramp_delay_support) {
1172             addr = rinfo->tstep_addr;
1173             ret = palmas_smps_read(pmic->palmas, addr, &reg);
1174             if (ret < 0) {
1175                 dev_err(pmic->dev,
1176                     "reading TSTEP reg failed: %d\n", ret);
1177                 return ret;
1178             }
1179             desc->ramp_delay = palmas_smps_ramp_delay[reg & 0x3];
1180             pmic->ramp_delay[id] = desc->ramp_delay;
1181         }
1182 
1183         /* Initialise sleep/init values from platform data */
1184         if (pdata && pdata->reg_init[id]) {
1185             reg_init = pdata->reg_init[id];
1186             ret = palmas_smps_init(pmic->palmas, id, reg_init);
1187             if (ret)
1188                 return ret;
1189         } else {
1190             reg_init = NULL;
1191         }
1192 
1193         /* Register the regulators */
1194         desc->name = rinfo->name;
1195         desc->id = id;
1196 
1197         switch (id) {
1198         case PALMAS_REG_SMPS10_OUT1:
1199         case PALMAS_REG_SMPS10_OUT2:
1200             desc->n_voltages = PALMAS_SMPS10_NUM_VOLTAGES;
1201             desc->ops = &palmas_ops_smps10;
1202             desc->vsel_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
1203                                 PALMAS_SMPS10_CTRL);
1204             desc->vsel_mask = SMPS10_VSEL;
1205             desc->enable_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
1206                                 PALMAS_SMPS10_CTRL);
1207             if (id == PALMAS_REG_SMPS10_OUT1)
1208                 desc->enable_mask = SMPS10_SWITCH_EN;
1209             else
1210                 desc->enable_mask = SMPS10_BOOST_EN;
1211             desc->bypass_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
1212                                 PALMAS_SMPS10_CTRL);
1213             desc->bypass_val_on = SMPS10_BYPASS_EN;
1214             desc->bypass_mask = SMPS10_BYPASS_EN;
1215             desc->min_uV = 3750000;
1216             desc->uV_step = 1250000;
1217             break;
1218         default:
1219             /*
1220              * Read and store the RANGE bit for later use
1221              * This must be done before regulator is probed,
1222              * otherwise we error in probe with unsupportable
1223              * ranges. Read the current smps mode for later use.
1224              */
1225             addr = rinfo->vsel_addr;
1226             desc->n_linear_ranges = 3;
1227 
1228             ret = palmas_smps_read(pmic->palmas, addr, &reg);
1229             if (ret)
1230                 return ret;
1231             if (reg & PALMAS_SMPS12_VOLTAGE_RANGE)
1232                 pmic->range[id] = 1;
1233             if (pmic->range[id])
1234                 desc->linear_ranges = smps_high_ranges;
1235             else
1236                 desc->linear_ranges = smps_low_ranges;
1237 
1238             if (reg_init && reg_init->roof_floor)
1239                 desc->ops = &palmas_ops_ext_control_smps;
1240             else
1241                 desc->ops = &palmas_ops_smps;
1242             desc->n_voltages = PALMAS_SMPS_NUM_VOLTAGES;
1243             desc->vsel_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
1244                                 rinfo->vsel_addr);
1245             desc->vsel_mask = PALMAS_SMPS12_VOLTAGE_VSEL_MASK;
1246 
1247             /* Read the smps mode for later use. */
1248             addr = rinfo->ctrl_addr;
1249             ret = palmas_smps_read(pmic->palmas, addr, &reg);
1250             if (ret)
1251                 return ret;
1252             pmic->current_reg_mode[id] = reg &
1253                     PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
1254 
1255             desc->enable_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
1256                                   rinfo->ctrl_addr);
1257             desc->enable_mask = PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
1258             /* set_mode overrides this value */
1259             desc->enable_val = SMPS_CTRL_MODE_ON;
1260         }
1261 
1262         desc->type = REGULATOR_VOLTAGE;
1263         desc->owner = THIS_MODULE;
1264 
1265         if (pdata)
1266             config.init_data = pdata->reg_data[id];
1267         else
1268             config.init_data = NULL;
1269 
1270         desc->supply_name = rinfo->sname;
1271         config.of_node = ddata->palmas_matches[id].of_node;
1272 
1273         rdev = devm_regulator_register(pmic->dev, desc, &config);
1274         if (IS_ERR(rdev)) {
1275             dev_err(pmic->dev,
1276                 "failed to register %s regulator\n",
1277                 pdev_name);
1278             return PTR_ERR(rdev);
1279         }
1280     }
1281 
1282     return 0;
1283 }
1284 
1285 static int tps65917_smps_registration(struct palmas_pmic *pmic,
1286                       struct palmas_pmic_driver_data *ddata,
1287                       struct palmas_pmic_platform_data *pdata,
1288                       const char *pdev_name,
1289                       struct regulator_config config)
1290 {
1291     int id, ret;
1292     unsigned int addr, reg;
1293     struct regulator_dev *rdev;
1294     struct palmas_reg_init *reg_init;
1295     struct palmas_regs_info *rinfo;
1296     struct regulator_desc *desc;
1297 
1298     for (id = ddata->smps_start; id <= ddata->smps_end; id++) {
1299         /*
1300          * Miss out regulators which are not available due
1301          * to slaving configurations.
1302          */
1303         desc = &pmic->desc[id];
1304         desc->n_linear_ranges = 3;
1305         if ((id == TPS65917_REG_SMPS2 || id == TPS65917_REG_SMPS1) &&
1306             pmic->smps12)
1307             continue;
1308 
1309         /* Initialise sleep/init values from platform data */
1310         if (pdata && pdata->reg_init[id]) {
1311             reg_init = pdata->reg_init[id];
1312             ret = palmas_smps_init(pmic->palmas, id, reg_init);
1313             if (ret)
1314                 return ret;
1315         } else {
1316             reg_init = NULL;
1317         }
1318         rinfo = &ddata->palmas_regs_info[id];
1319 
1320         /* Register the regulators */
1321         desc->name = rinfo->name;
1322         desc->id = id;
1323 
1324         /*
1325          * Read and store the RANGE bit for later use
1326          * This must be done before regulator is probed,
1327          * otherwise we error in probe with unsupportable
1328          * ranges. Read the current smps mode for later use.
1329          */
1330         addr = rinfo->vsel_addr;
1331 
1332         ret = palmas_smps_read(pmic->palmas, addr, &reg);
1333         if (ret)
1334             return ret;
1335         if (reg & TPS65917_SMPS1_VOLTAGE_RANGE)
1336             pmic->range[id] = 1;
1337 
1338         if (pmic->range[id])
1339             desc->linear_ranges = smps_high_ranges;
1340         else
1341             desc->linear_ranges = smps_low_ranges;
1342 
1343         if (reg_init && reg_init->roof_floor)
1344             desc->ops = &tps65917_ops_ext_control_smps;
1345         else
1346             desc->ops = &tps65917_ops_smps;
1347         desc->n_voltages = PALMAS_SMPS_NUM_VOLTAGES;
1348         desc->vsel_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
1349                             rinfo->vsel_addr);
1350         desc->vsel_mask = PALMAS_SMPS12_VOLTAGE_VSEL_MASK;
1351         desc->ramp_delay = 2500;
1352 
1353         /* Read the smps mode for later use. */
1354         addr = rinfo->ctrl_addr;
1355         ret = palmas_smps_read(pmic->palmas, addr, &reg);
1356         if (ret)
1357             return ret;
1358         pmic->current_reg_mode[id] = reg &
1359                 PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
1360         desc->enable_reg = PALMAS_BASE_TO_REG(PALMAS_SMPS_BASE,
1361                               rinfo->ctrl_addr);
1362         desc->enable_mask = PALMAS_SMPS12_CTRL_MODE_ACTIVE_MASK;
1363         /* set_mode overrides this value */
1364         desc->enable_val = SMPS_CTRL_MODE_ON;
1365 
1366         desc->type = REGULATOR_VOLTAGE;
1367         desc->owner = THIS_MODULE;
1368 
1369         if (pdata)
1370             config.init_data = pdata->reg_data[id];
1371         else
1372             config.init_data = NULL;
1373 
1374         desc->supply_name = rinfo->sname;
1375         config.of_node = ddata->palmas_matches[id].of_node;
1376 
1377         rdev = devm_regulator_register(pmic->dev, desc, &config);
1378         if (IS_ERR(rdev)) {
1379             dev_err(pmic->dev,
1380                 "failed to register %s regulator\n",
1381                 pdev_name);
1382             return PTR_ERR(rdev);
1383         }
1384     }
1385 
1386     return 0;
1387 }
1388 
1389 static struct of_regulator_match palmas_matches[] = {
1390     { .name = "smps12", },
1391     { .name = "smps123", },
1392     { .name = "smps3", },
1393     { .name = "smps45", },
1394     { .name = "smps457", },
1395     { .name = "smps6", },
1396     { .name = "smps7", },
1397     { .name = "smps8", },
1398     { .name = "smps9", },
1399     { .name = "smps10_out2", },
1400     { .name = "smps10_out1", },
1401     { .name = "ldo1", },
1402     { .name = "ldo2", },
1403     { .name = "ldo3", },
1404     { .name = "ldo4", },
1405     { .name = "ldo5", },
1406     { .name = "ldo6", },
1407     { .name = "ldo7", },
1408     { .name = "ldo8", },
1409     { .name = "ldo9", },
1410     { .name = "ldoln", },
1411     { .name = "ldousb", },
1412     { .name = "regen1", },
1413     { .name = "regen2", },
1414     { .name = "regen3", },
1415     { .name = "sysen1", },
1416     { .name = "sysen2", },
1417 };
1418 
1419 static struct of_regulator_match tps65917_matches[] = {
1420     { .name = "smps1", },
1421     { .name = "smps2", },
1422     { .name = "smps3", },
1423     { .name = "smps4", },
1424     { .name = "smps5", },
1425     { .name = "smps12",},
1426     { .name = "ldo1", },
1427     { .name = "ldo2", },
1428     { .name = "ldo3", },
1429     { .name = "ldo4", },
1430     { .name = "ldo5", },
1431     { .name = "regen1", },
1432     { .name = "regen2", },
1433     { .name = "regen3", },
1434     { .name = "sysen1", },
1435     { .name = "sysen2", },
1436 };
1437 
1438 static struct palmas_pmic_driver_data palmas_ddata = {
1439     .smps_start = PALMAS_REG_SMPS12,
1440     .smps_end = PALMAS_REG_SMPS10_OUT1,
1441     .ldo_begin = PALMAS_REG_LDO1,
1442     .ldo_end = PALMAS_REG_LDOUSB,
1443     .max_reg = PALMAS_NUM_REGS,
1444     .has_regen3 = true,
1445     .palmas_regs_info = palmas_generic_regs_info,
1446     .palmas_matches = palmas_matches,
1447     .sleep_req_info = palma_sleep_req_info,
1448     .smps_register = palmas_smps_registration,
1449     .ldo_register = palmas_ldo_registration,
1450 };
1451 
1452 static struct palmas_pmic_driver_data tps65917_ddata = {
1453     .smps_start = TPS65917_REG_SMPS1,
1454     .smps_end = TPS65917_REG_SMPS12,
1455     .ldo_begin = TPS65917_REG_LDO1,
1456     .ldo_end = TPS65917_REG_LDO5,
1457     .max_reg = TPS65917_NUM_REGS,
1458     .has_regen3 = true,
1459     .palmas_regs_info = tps65917_regs_info,
1460     .palmas_matches = tps65917_matches,
1461     .sleep_req_info = tps65917_sleep_req_info,
1462     .smps_register = tps65917_smps_registration,
1463     .ldo_register = tps65917_ldo_registration,
1464 };
1465 
1466 static int palmas_dt_to_pdata(struct device *dev,
1467                   struct device_node *node,
1468                   struct palmas_pmic_platform_data *pdata,
1469                   struct palmas_pmic_driver_data *ddata)
1470 {
1471     struct device_node *regulators;
1472     u32 prop;
1473     int idx, ret;
1474 
1475     regulators = of_get_child_by_name(node, "regulators");
1476     if (!regulators) {
1477         dev_info(dev, "regulator node not found\n");
1478         return 0;
1479     }
1480 
1481     ret = of_regulator_match(dev, regulators, ddata->palmas_matches,
1482                  ddata->max_reg);
1483     of_node_put(regulators);
1484     if (ret < 0) {
1485         dev_err(dev, "Error parsing regulator init data: %d\n", ret);
1486         return 0;
1487     }
1488 
1489     for (idx = 0; idx < ddata->max_reg; idx++) {
1490         struct of_regulator_match *match;
1491         struct palmas_reg_init *rinit;
1492         struct device_node *np;
1493 
1494         match = &ddata->palmas_matches[idx];
1495         np = match->of_node;
1496 
1497         if (!match->init_data || !np)
1498             continue;
1499 
1500         rinit = devm_kzalloc(dev, sizeof(*rinit), GFP_KERNEL);
1501         if (!rinit)
1502             return -ENOMEM;
1503 
1504         pdata->reg_data[idx] = match->init_data;
1505         pdata->reg_init[idx] = rinit;
1506 
1507         rinit->warm_reset = of_property_read_bool(np, "ti,warm-reset");
1508         ret = of_property_read_u32(np, "ti,roof-floor", &prop);
1509         /* EINVAL: Property not found */
1510         if (ret != -EINVAL) {
1511             int econtrol;
1512 
1513             /* use default value, when no value is specified */
1514             econtrol = PALMAS_EXT_CONTROL_NSLEEP;
1515             if (!ret) {
1516                 switch (prop) {
1517                 case 1:
1518                     econtrol = PALMAS_EXT_CONTROL_ENABLE1;
1519                     break;
1520                 case 2:
1521                     econtrol = PALMAS_EXT_CONTROL_ENABLE2;
1522                     break;
1523                 case 3:
1524                     econtrol = PALMAS_EXT_CONTROL_NSLEEP;
1525                     break;
1526                 default:
1527                     WARN_ON(1);
1528                     dev_warn(dev,
1529                          "%s: Invalid roof-floor option: %u\n",
1530                          match->name, prop);
1531                     break;
1532                 }
1533             }
1534             rinit->roof_floor = econtrol;
1535         }
1536 
1537         ret = of_property_read_u32(np, "ti,mode-sleep", &prop);
1538         if (!ret)
1539             rinit->mode_sleep = prop;
1540 
1541         ret = of_property_read_bool(np, "ti,smps-range");
1542         if (ret)
1543             rinit->vsel = PALMAS_SMPS12_VOLTAGE_RANGE;
1544 
1545         if (idx == PALMAS_REG_LDO8)
1546             pdata->enable_ldo8_tracking = of_property_read_bool(
1547                         np, "ti,enable-ldo8-tracking");
1548     }
1549 
1550     pdata->ldo6_vibrator = of_property_read_bool(node, "ti,ldo6-vibrator");
1551 
1552     return 0;
1553 }
1554 
1555 static const struct of_device_id of_palmas_match_tbl[] = {
1556     {
1557         .compatible = "ti,palmas-pmic",
1558         .data = &palmas_ddata,
1559     },
1560     {
1561         .compatible = "ti,twl6035-pmic",
1562         .data = &palmas_ddata,
1563     },
1564     {
1565         .compatible = "ti,twl6036-pmic",
1566         .data = &palmas_ddata,
1567     },
1568     {
1569         .compatible = "ti,twl6037-pmic",
1570         .data = &palmas_ddata,
1571     },
1572     {
1573         .compatible = "ti,tps65913-pmic",
1574         .data = &palmas_ddata,
1575     },
1576     {
1577         .compatible = "ti,tps65914-pmic",
1578         .data = &palmas_ddata,
1579     },
1580     {
1581         .compatible = "ti,tps80036-pmic",
1582         .data = &palmas_ddata,
1583     },
1584     {
1585         .compatible = "ti,tps659038-pmic",
1586         .data = &palmas_ddata,
1587     },
1588      {
1589         .compatible = "ti,tps65917-pmic",
1590         .data = &tps65917_ddata,
1591     },
1592     { /* end */ }
1593 };
1594 
1595 static int palmas_regulators_probe(struct platform_device *pdev)
1596 {
1597     struct palmas *palmas = dev_get_drvdata(pdev->dev.parent);
1598     struct palmas_pmic_platform_data *pdata = dev_get_platdata(&pdev->dev);
1599     struct device_node *node = pdev->dev.of_node;
1600     struct palmas_pmic_driver_data *driver_data;
1601     struct regulator_config config = { };
1602     struct palmas_pmic *pmic;
1603     const char *pdev_name;
1604     const struct of_device_id *match;
1605     int ret = 0;
1606     unsigned int reg;
1607 
1608     match = of_match_device(of_match_ptr(of_palmas_match_tbl), &pdev->dev);
1609 
1610     if (!match)
1611         return -ENODATA;
1612 
1613     driver_data = (struct palmas_pmic_driver_data *)match->data;
1614     pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1615     if (!pdata)
1616         return -ENOMEM;
1617 
1618     pmic = devm_kzalloc(&pdev->dev, sizeof(*pmic), GFP_KERNEL);
1619     if (!pmic)
1620         return -ENOMEM;
1621 
1622     if (of_device_is_compatible(node, "ti,tps659038-pmic")) {
1623         palmas_generic_regs_info[PALMAS_REG_REGEN2].ctrl_addr =
1624                             TPS659038_REGEN2_CTRL;
1625         palmas_ddata.has_regen3 = false;
1626     }
1627 
1628     pmic->dev = &pdev->dev;
1629     pmic->palmas = palmas;
1630     palmas->pmic = pmic;
1631     platform_set_drvdata(pdev, pmic);
1632     pmic->palmas->pmic_ddata = driver_data;
1633 
1634     ret = palmas_dt_to_pdata(&pdev->dev, node, pdata, driver_data);
1635     if (ret)
1636         return ret;
1637 
1638     ret = palmas_smps_read(palmas, PALMAS_SMPS_CTRL, &reg);
1639     if (ret)
1640         return ret;
1641 
1642     if (reg & PALMAS_SMPS_CTRL_SMPS12_SMPS123_EN) {
1643         pmic->smps123 = 1;
1644         pmic->smps12 = 1;
1645     }
1646 
1647     if (reg & PALMAS_SMPS_CTRL_SMPS45_SMPS457_EN)
1648         pmic->smps457 = 1;
1649 
1650     config.regmap = palmas->regmap[REGULATOR_SLAVE];
1651     config.dev = &pdev->dev;
1652     config.driver_data = pmic;
1653     pdev_name = pdev->name;
1654 
1655     ret = driver_data->smps_register(pmic, driver_data, pdata, pdev_name,
1656                      config);
1657     if (ret)
1658         return ret;
1659 
1660     ret = driver_data->ldo_register(pmic, driver_data, pdata, pdev_name,
1661                     config);
1662 
1663     return ret;
1664 }
1665 
1666 static struct platform_driver palmas_driver = {
1667     .driver = {
1668         .name = "palmas-pmic",
1669         .of_match_table = of_palmas_match_tbl,
1670     },
1671     .probe = palmas_regulators_probe,
1672 };
1673 
1674 static int __init palmas_init(void)
1675 {
1676     return platform_driver_register(&palmas_driver);
1677 }
1678 subsys_initcall(palmas_init);
1679 
1680 static void __exit palmas_exit(void)
1681 {
1682     platform_driver_unregister(&palmas_driver);
1683 }
1684 module_exit(palmas_exit);
1685 
1686 MODULE_AUTHOR("Graeme Gregory <gg@slimlogic.co.uk>");
1687 MODULE_DESCRIPTION("Palmas voltage regulator driver");
1688 MODULE_LICENSE("GPL");
1689 MODULE_ALIAS("platform:palmas-pmic");
1690 MODULE_DEVICE_TABLE(of, of_palmas_match_tbl);