1 /* 2 * tps6507x-regulator.c 3 * 4 * Regulator driver for TPS65073 PMIC 5 * 6 * Copyright (C) 2009 Texas Instrument Incorporated - http://www.ti.com/ 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as 10 * published by the Free Software Foundation version 2. 11 * 12 * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind, 13 * whether express or implied; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 */ 17 18 #include <linux/kernel.h> 19 #include <linux/module.h> 20 #include <linux/init.h> 21 #include <linux/err.h> 22 #include <linux/platform_device.h> 23 #include <linux/regulator/driver.h> 24 #include <linux/regulator/machine.h> 25 #include <linux/regulator/tps6507x.h> 26 #include <linux/delay.h> 27 #include <linux/slab.h> 28 #include <linux/mfd/tps6507x.h> 29 30 /* DCDC's */ 31 #define TPS6507X_DCDC_1 0 32 #define TPS6507X_DCDC_2 1 33 #define TPS6507X_DCDC_3 2 34 /* LDOs */ 35 #define TPS6507X_LDO_1 3 36 #define TPS6507X_LDO_2 4 37 38 #define TPS6507X_MAX_REG_ID TPS6507X_LDO_2 39 40 /* Number of step-down converters available */ 41 #define TPS6507X_NUM_DCDC 3 42 /* Number of LDO voltage regulators available */ 43 #define TPS6507X_NUM_LDO 2 44 /* Number of total regulators available */ 45 #define TPS6507X_NUM_REGULATOR (TPS6507X_NUM_DCDC + TPS6507X_NUM_LDO) 46 47 /* Supported voltage values for regulators (in milliVolts) */ 48 static const u16 VDCDCx_VSEL_table[] = { 49 725, 750, 775, 800, 50 825, 850, 875, 900, 51 925, 950, 975, 1000, 52 1025, 1050, 1075, 1100, 53 1125, 1150, 1175, 1200, 54 1225, 1250, 1275, 1300, 55 1325, 1350, 1375, 1400, 56 1425, 1450, 1475, 1500, 57 1550, 1600, 1650, 1700, 58 1750, 1800, 1850, 1900, 59 1950, 2000, 2050, 2100, 60 2150, 2200, 2250, 2300, 61 2350, 2400, 2450, 2500, 62 2550, 2600, 2650, 2700, 63 2750, 2800, 2850, 2900, 64 3000, 3100, 3200, 3300, 65 }; 66 67 static const u16 LDO1_VSEL_table[] = { 68 1000, 1100, 1200, 1250, 69 1300, 1350, 1400, 1500, 70 1600, 1800, 2500, 2750, 71 2800, 3000, 3100, 3300, 72 }; 73 74 static const u16 LDO2_VSEL_table[] = { 75 725, 750, 775, 800, 76 825, 850, 875, 900, 77 925, 950, 975, 1000, 78 1025, 1050, 1075, 1100, 79 1125, 1150, 1175, 1200, 80 1225, 1250, 1275, 1300, 81 1325, 1350, 1375, 1400, 82 1425, 1450, 1475, 1500, 83 1550, 1600, 1650, 1700, 84 1750, 1800, 1850, 1900, 85 1950, 2000, 2050, 2100, 86 2150, 2200, 2250, 2300, 87 2350, 2400, 2450, 2500, 88 2550, 2600, 2650, 2700, 89 2750, 2800, 2850, 2900, 90 3000, 3100, 3200, 3300, 91 }; 92 93 static unsigned int num_voltages[] = {ARRAY_SIZE(VDCDCx_VSEL_table), 94 ARRAY_SIZE(VDCDCx_VSEL_table), 95 ARRAY_SIZE(VDCDCx_VSEL_table), 96 ARRAY_SIZE(LDO1_VSEL_table), 97 ARRAY_SIZE(LDO2_VSEL_table)}; 98 99 struct tps_info { 100 const char *name; 101 unsigned min_uV; 102 unsigned max_uV; 103 u8 table_len; 104 const u16 *table; 105 106 /* Does DCDC high or the low register defines output voltage? */ 107 bool defdcdc_default; 108 }; 109 110 static struct tps_info tps6507x_pmic_regs[] = { 111 { 112 .name = "VDCDC1", 113 .min_uV = 725000, 114 .max_uV = 3300000, 115 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table), 116 .table = VDCDCx_VSEL_table, 117 }, 118 { 119 .name = "VDCDC2", 120 .min_uV = 725000, 121 .max_uV = 3300000, 122 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table), 123 .table = VDCDCx_VSEL_table, 124 }, 125 { 126 .name = "VDCDC3", 127 .min_uV = 725000, 128 .max_uV = 3300000, 129 .table_len = ARRAY_SIZE(VDCDCx_VSEL_table), 130 .table = VDCDCx_VSEL_table, 131 }, 132 { 133 .name = "LDO1", 134 .min_uV = 1000000, 135 .max_uV = 3300000, 136 .table_len = ARRAY_SIZE(LDO1_VSEL_table), 137 .table = LDO1_VSEL_table, 138 }, 139 { 140 .name = "LDO2", 141 .min_uV = 725000, 142 .max_uV = 3300000, 143 .table_len = ARRAY_SIZE(LDO2_VSEL_table), 144 .table = LDO2_VSEL_table, 145 }, 146 }; 147 148 struct tps6507x_pmic { 149 struct regulator_desc desc[TPS6507X_NUM_REGULATOR]; 150 struct tps6507x_dev *mfd; 151 struct regulator_dev *rdev[TPS6507X_NUM_REGULATOR]; 152 struct tps_info *info[TPS6507X_NUM_REGULATOR]; 153 struct mutex io_lock; 154 }; 155 static inline int tps6507x_pmic_read(struct tps6507x_pmic *tps, u8 reg) 156 { 157 u8 val; 158 int err; 159 160 err = tps->mfd->read_dev(tps->mfd, reg, 1, &val); 161 162 if (err) 163 return err; 164 165 return val; 166 } 167 168 static inline int tps6507x_pmic_write(struct tps6507x_pmic *tps, u8 reg, u8 val) 169 { 170 return tps->mfd->write_dev(tps->mfd, reg, 1, &val); 171 } 172 173 static int tps6507x_pmic_set_bits(struct tps6507x_pmic *tps, u8 reg, u8 mask) 174 { 175 int err, data; 176 177 mutex_lock(&tps->io_lock); 178 179 data = tps6507x_pmic_read(tps, reg); 180 if (data < 0) { 181 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); 182 err = data; 183 goto out; 184 } 185 186 data |= mask; 187 err = tps6507x_pmic_write(tps, reg, data); 188 if (err) 189 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); 190 191 out: 192 mutex_unlock(&tps->io_lock); 193 return err; 194 } 195 196 static int tps6507x_pmic_clear_bits(struct tps6507x_pmic *tps, u8 reg, u8 mask) 197 { 198 int err, data; 199 200 mutex_lock(&tps->io_lock); 201 202 data = tps6507x_pmic_read(tps, reg); 203 if (data < 0) { 204 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); 205 err = data; 206 goto out; 207 } 208 209 data &= ~mask; 210 err = tps6507x_pmic_write(tps, reg, data); 211 if (err) 212 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); 213 214 out: 215 mutex_unlock(&tps->io_lock); 216 return err; 217 } 218 219 static int tps6507x_pmic_reg_read(struct tps6507x_pmic *tps, u8 reg) 220 { 221 int data; 222 223 mutex_lock(&tps->io_lock); 224 225 data = tps6507x_pmic_read(tps, reg); 226 if (data < 0) 227 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); 228 229 mutex_unlock(&tps->io_lock); 230 return data; 231 } 232 233 static int tps6507x_pmic_reg_write(struct tps6507x_pmic *tps, u8 reg, u8 val) 234 { 235 int err; 236 237 mutex_lock(&tps->io_lock); 238 239 err = tps6507x_pmic_write(tps, reg, val); 240 if (err < 0) 241 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); 242 243 mutex_unlock(&tps->io_lock); 244 return err; 245 } 246 247 static int tps6507x_pmic_dcdc_is_enabled(struct regulator_dev *dev) 248 { 249 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 250 int data, dcdc = rdev_get_id(dev); 251 u8 shift; 252 253 if (dcdc < TPS6507X_DCDC_1 || dcdc > TPS6507X_DCDC_3) 254 return -EINVAL; 255 256 shift = TPS6507X_MAX_REG_ID - dcdc; 257 data = tps6507x_pmic_reg_read(tps, TPS6507X_REG_CON_CTRL1); 258 259 if (data < 0) 260 return data; 261 else 262 return (data & 1<<shift) ? 1 : 0; 263 } 264 265 static int tps6507x_pmic_ldo_is_enabled(struct regulator_dev *dev) 266 { 267 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 268 int data, ldo = rdev_get_id(dev); 269 u8 shift; 270 271 if (ldo < TPS6507X_LDO_1 || ldo > TPS6507X_LDO_2) 272 return -EINVAL; 273 274 shift = TPS6507X_MAX_REG_ID - ldo; 275 data = tps6507x_pmic_reg_read(tps, TPS6507X_REG_CON_CTRL1); 276 277 if (data < 0) 278 return data; 279 else 280 return (data & 1<<shift) ? 1 : 0; 281 } 282 283 static int tps6507x_pmic_dcdc_enable(struct regulator_dev *dev) 284 { 285 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 286 int dcdc = rdev_get_id(dev); 287 u8 shift; 288 289 if (dcdc < TPS6507X_DCDC_1 || dcdc > TPS6507X_DCDC_3) 290 return -EINVAL; 291 292 shift = TPS6507X_MAX_REG_ID - dcdc; 293 return tps6507x_pmic_set_bits(tps, TPS6507X_REG_CON_CTRL1, 1 << shift); 294 } 295 296 static int tps6507x_pmic_dcdc_disable(struct regulator_dev *dev) 297 { 298 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 299 int dcdc = rdev_get_id(dev); 300 u8 shift; 301 302 if (dcdc < TPS6507X_DCDC_1 || dcdc > TPS6507X_DCDC_3) 303 return -EINVAL; 304 305 shift = TPS6507X_MAX_REG_ID - dcdc; 306 return tps6507x_pmic_clear_bits(tps, TPS6507X_REG_CON_CTRL1, 307 1 << shift); 308 } 309 310 static int tps6507x_pmic_ldo_enable(struct regulator_dev *dev) 311 { 312 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 313 int ldo = rdev_get_id(dev); 314 u8 shift; 315 316 if (ldo < TPS6507X_LDO_1 || ldo > TPS6507X_LDO_2) 317 return -EINVAL; 318 319 shift = TPS6507X_MAX_REG_ID - ldo; 320 return tps6507x_pmic_set_bits(tps, TPS6507X_REG_CON_CTRL1, 1 << shift); 321 } 322 323 static int tps6507x_pmic_ldo_disable(struct regulator_dev *dev) 324 { 325 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 326 int ldo = rdev_get_id(dev); 327 u8 shift; 328 329 if (ldo < TPS6507X_LDO_1 || ldo > TPS6507X_LDO_2) 330 return -EINVAL; 331 332 shift = TPS6507X_MAX_REG_ID - ldo; 333 return tps6507x_pmic_clear_bits(tps, TPS6507X_REG_CON_CTRL1, 334 1 << shift); 335 } 336 337 static int tps6507x_pmic_dcdc_get_voltage(struct regulator_dev *dev) 338 { 339 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 340 int data, dcdc = rdev_get_id(dev); 341 u8 reg; 342 343 switch (dcdc) { 344 case TPS6507X_DCDC_1: 345 reg = TPS6507X_REG_DEFDCDC1; 346 break; 347 case TPS6507X_DCDC_2: 348 if (tps->info[dcdc]->defdcdc_default) 349 reg = TPS6507X_REG_DEFDCDC2_HIGH; 350 else 351 reg = TPS6507X_REG_DEFDCDC2_LOW; 352 break; 353 case TPS6507X_DCDC_3: 354 if (tps->info[dcdc]->defdcdc_default) 355 reg = TPS6507X_REG_DEFDCDC3_HIGH; 356 else 357 reg = TPS6507X_REG_DEFDCDC3_LOW; 358 break; 359 default: 360 return -EINVAL; 361 } 362 363 data = tps6507x_pmic_reg_read(tps, reg); 364 if (data < 0) 365 return data; 366 367 data &= TPS6507X_DEFDCDCX_DCDC_MASK; 368 return tps->info[dcdc]->table[data] * 1000; 369 } 370 371 static int tps6507x_pmic_dcdc_set_voltage(struct regulator_dev *dev, 372 int min_uV, int max_uV) 373 { 374 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 375 int data, vsel, dcdc = rdev_get_id(dev); 376 u8 reg; 377 378 switch (dcdc) { 379 case TPS6507X_DCDC_1: 380 reg = TPS6507X_REG_DEFDCDC1; 381 break; 382 case TPS6507X_DCDC_2: 383 if (tps->info[dcdc]->defdcdc_default) 384 reg = TPS6507X_REG_DEFDCDC2_HIGH; 385 else 386 reg = TPS6507X_REG_DEFDCDC2_LOW; 387 break; 388 case TPS6507X_DCDC_3: 389 if (tps->info[dcdc]->defdcdc_default) 390 reg = TPS6507X_REG_DEFDCDC3_HIGH; 391 else 392 reg = TPS6507X_REG_DEFDCDC3_LOW; 393 break; 394 default: 395 return -EINVAL; 396 } 397 398 if (min_uV < tps->info[dcdc]->min_uV 399 || min_uV > tps->info[dcdc]->max_uV) 400 return -EINVAL; 401 if (max_uV < tps->info[dcdc]->min_uV 402 || max_uV > tps->info[dcdc]->max_uV) 403 return -EINVAL; 404 405 for (vsel = 0; vsel < tps->info[dcdc]->table_len; vsel++) { 406 int mV = tps->info[dcdc]->table[vsel]; 407 int uV = mV * 1000; 408 409 /* Break at the first in-range value */ 410 if (min_uV <= uV && uV <= max_uV) 411 break; 412 } 413 414 /* write to the register in case we found a match */ 415 if (vsel == tps->info[dcdc]->table_len) 416 return -EINVAL; 417 418 data = tps6507x_pmic_reg_read(tps, reg); 419 if (data < 0) 420 return data; 421 422 data &= ~TPS6507X_DEFDCDCX_DCDC_MASK; 423 data |= vsel; 424 425 return tps6507x_pmic_reg_write(tps, reg, data); 426 } 427 428 static int tps6507x_pmic_ldo_get_voltage(struct regulator_dev *dev) 429 { 430 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 431 int data, ldo = rdev_get_id(dev); 432 u8 reg, mask; 433 434 if (ldo < TPS6507X_LDO_1 || ldo > TPS6507X_LDO_2) 435 return -EINVAL; 436 else { 437 reg = (ldo == TPS6507X_LDO_1 ? 438 TPS6507X_REG_LDO_CTRL1 : TPS6507X_REG_DEFLDO2); 439 mask = (ldo == TPS6507X_LDO_1 ? 440 TPS6507X_REG_LDO_CTRL1_LDO1_MASK : 441 TPS6507X_REG_DEFLDO2_LDO2_MASK); 442 } 443 444 data = tps6507x_pmic_reg_read(tps, reg); 445 if (data < 0) 446 return data; 447 448 data &= mask; 449 return tps->info[ldo]->table[data] * 1000; 450 } 451 452 static int tps6507x_pmic_ldo_set_voltage(struct regulator_dev *dev, 453 int min_uV, int max_uV) 454 { 455 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 456 int data, vsel, ldo = rdev_get_id(dev); 457 u8 reg, mask; 458 459 if (ldo < TPS6507X_LDO_1 || ldo > TPS6507X_LDO_2) 460 return -EINVAL; 461 else { 462 reg = (ldo == TPS6507X_LDO_1 ? 463 TPS6507X_REG_LDO_CTRL1 : TPS6507X_REG_DEFLDO2); 464 mask = (ldo == TPS6507X_LDO_1 ? 465 TPS6507X_REG_LDO_CTRL1_LDO1_MASK : 466 TPS6507X_REG_DEFLDO2_LDO2_MASK); 467 } 468 469 if (min_uV < tps->info[ldo]->min_uV || min_uV > tps->info[ldo]->max_uV) 470 return -EINVAL; 471 if (max_uV < tps->info[ldo]->min_uV || max_uV > tps->info[ldo]->max_uV) 472 return -EINVAL; 473 474 for (vsel = 0; vsel < tps->info[ldo]->table_len; vsel++) { 475 int mV = tps->info[ldo]->table[vsel]; 476 int uV = mV * 1000; 477 478 /* Break at the first in-range value */ 479 if (min_uV <= uV && uV <= max_uV) 480 break; 481 } 482 483 if (vsel == tps->info[ldo]->table_len) 484 return -EINVAL; 485 486 data = tps6507x_pmic_reg_read(tps, reg); 487 if (data < 0) 488 return data; 489 490 data &= ~mask; 491 data |= vsel; 492 493 return tps6507x_pmic_reg_write(tps, reg, data); 494 } 495 496 static int tps6507x_pmic_dcdc_list_voltage(struct regulator_dev *dev, 497 unsigned selector) 498 { 499 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 500 int dcdc = rdev_get_id(dev); 501 502 if (dcdc < TPS6507X_DCDC_1 || dcdc > TPS6507X_DCDC_3) 503 return -EINVAL; 504 505 if (selector >= tps->info[dcdc]->table_len) 506 return -EINVAL; 507 else 508 return tps->info[dcdc]->table[selector] * 1000; 509 } 510 511 static int tps6507x_pmic_ldo_list_voltage(struct regulator_dev *dev, 512 unsigned selector) 513 { 514 struct tps6507x_pmic *tps = rdev_get_drvdata(dev); 515 int ldo = rdev_get_id(dev); 516 517 if (ldo < TPS6507X_LDO_1 || ldo > TPS6507X_LDO_2) 518 return -EINVAL; 519 520 if (selector >= tps->info[ldo]->table_len) 521 return -EINVAL; 522 else 523 return tps->info[ldo]->table[selector] * 1000; 524 } 525 526 /* Operations permitted on VDCDCx */ 527 static struct regulator_ops tps6507x_pmic_dcdc_ops = { 528 .is_enabled = tps6507x_pmic_dcdc_is_enabled, 529 .enable = tps6507x_pmic_dcdc_enable, 530 .disable = tps6507x_pmic_dcdc_disable, 531 .get_voltage = tps6507x_pmic_dcdc_get_voltage, 532 .set_voltage = tps6507x_pmic_dcdc_set_voltage, 533 .list_voltage = tps6507x_pmic_dcdc_list_voltage, 534 }; 535 536 /* Operations permitted on LDOx */ 537 static struct regulator_ops tps6507x_pmic_ldo_ops = { 538 .is_enabled = tps6507x_pmic_ldo_is_enabled, 539 .enable = tps6507x_pmic_ldo_enable, 540 .disable = tps6507x_pmic_ldo_disable, 541 .get_voltage = tps6507x_pmic_ldo_get_voltage, 542 .set_voltage = tps6507x_pmic_ldo_set_voltage, 543 .list_voltage = tps6507x_pmic_ldo_list_voltage, 544 }; 545 546 static __devinit 547 int tps6507x_pmic_probe(struct platform_device *pdev) 548 { 549 struct tps6507x_dev *tps6507x_dev = dev_get_drvdata(pdev->dev.parent); 550 static int desc_id; 551 struct tps_info *info = &tps6507x_pmic_regs[0]; 552 struct regulator_init_data *init_data; 553 struct regulator_dev *rdev; 554 struct tps6507x_pmic *tps; 555 struct tps6507x_board *tps_board; 556 int i; 557 int error; 558 559 /** 560 * tps_board points to pmic related constants 561 * coming from the board-evm file. 562 */ 563 564 tps_board = dev_get_platdata(tps6507x_dev->dev); 565 if (!tps_board) 566 return -EINVAL; 567 568 /** 569 * init_data points to array of regulator_init structures 570 * coming from the board-evm file. 571 */ 572 init_data = tps_board->tps6507x_pmic_init_data; 573 if (!init_data) 574 return -EINVAL; 575 576 tps = kzalloc(sizeof(*tps), GFP_KERNEL); 577 if (!tps) 578 return -ENOMEM; 579 580 mutex_init(&tps->io_lock); 581 582 /* common for all regulators */ 583 tps->mfd = tps6507x_dev; 584 585 for (i = 0; i < TPS6507X_NUM_REGULATOR; i++, info++, init_data++) { 586 /* Register the regulators */ 587 tps->info[i] = info; 588 if (init_data->driver_data) { 589 struct tps6507x_reg_platform_data *data = 590 init_data->driver_data; 591 tps->info[i]->defdcdc_default = data->defdcdc_default; 592 } 593 594 tps->desc[i].name = info->name; 595 tps->desc[i].id = desc_id++; 596 tps->desc[i].n_voltages = num_voltages[i]; 597 tps->desc[i].ops = (i > TPS6507X_DCDC_3 ? 598 &tps6507x_pmic_ldo_ops : &tps6507x_pmic_dcdc_ops); 599 tps->desc[i].type = REGULATOR_VOLTAGE; 600 tps->desc[i].owner = THIS_MODULE; 601 602 rdev = regulator_register(&tps->desc[i], 603 tps6507x_dev->dev, init_data, tps); 604 if (IS_ERR(rdev)) { 605 dev_err(tps6507x_dev->dev, 606 "failed to register %s regulator\n", 607 pdev->name); 608 error = PTR_ERR(rdev); 609 goto fail; 610 } 611 612 /* Save regulator for cleanup */ 613 tps->rdev[i] = rdev; 614 } 615 616 tps6507x_dev->pmic = tps; 617 platform_set_drvdata(pdev, tps6507x_dev); 618 619 return 0; 620 621 fail: 622 while (--i >= 0) 623 regulator_unregister(tps->rdev[i]); 624 625 kfree(tps); 626 return error; 627 } 628 629 static int __devexit tps6507x_pmic_remove(struct platform_device *pdev) 630 { 631 struct tps6507x_dev *tps6507x_dev = platform_get_drvdata(pdev); 632 struct tps6507x_pmic *tps = tps6507x_dev->pmic; 633 int i; 634 635 for (i = 0; i < TPS6507X_NUM_REGULATOR; i++) 636 regulator_unregister(tps->rdev[i]); 637 638 kfree(tps); 639 640 return 0; 641 } 642 643 static struct platform_driver tps6507x_pmic_driver = { 644 .driver = { 645 .name = "tps6507x-pmic", 646 .owner = THIS_MODULE, 647 }, 648 .probe = tps6507x_pmic_probe, 649 .remove = __devexit_p(tps6507x_pmic_remove), 650 }; 651 652 /** 653 * tps6507x_pmic_init 654 * 655 * Module init function 656 */ 657 static int __init tps6507x_pmic_init(void) 658 { 659 return platform_driver_register(&tps6507x_pmic_driver); 660 } 661 subsys_initcall(tps6507x_pmic_init); 662 663 /** 664 * tps6507x_pmic_cleanup 665 * 666 * Module exit function 667 */ 668 static void __exit tps6507x_pmic_cleanup(void) 669 { 670 platform_driver_unregister(&tps6507x_pmic_driver); 671 } 672 module_exit(tps6507x_pmic_cleanup); 673 674 MODULE_AUTHOR("Texas Instruments"); 675 MODULE_DESCRIPTION("TPS6507x voltage regulator driver"); 676 MODULE_LICENSE("GPL v2"); 677 MODULE_ALIAS("platform:tps6507x-pmic"); 678