tps65910-regulator.c 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240
  1. /*
  2. * tps65910.c -- TI tps65910
  3. *
  4. * Copyright 2010 Texas Instruments Inc.
  5. *
  6. * Author: Graeme Gregory <gg@slimlogic.co.uk>
  7. * Author: Jorge Eduardo Candelaria <jedu@slimlogic.co.uk>
  8. *
  9. * This program is free software; you can redistribute it and/or modify it
  10. * under the terms of the GNU General Public License as published by the
  11. * Free Software Foundation; either version 2 of the License, or (at your
  12. * option) any later version.
  13. *
  14. */
  15. #include <linux/kernel.h>
  16. #include <linux/module.h>
  17. #include <linux/init.h>
  18. #include <linux/err.h>
  19. #include <linux/platform_device.h>
  20. #include <linux/regulator/driver.h>
  21. #include <linux/regulator/machine.h>
  22. #include <linux/delay.h>
  23. #include <linux/slab.h>
  24. #include <linux/gpio.h>
  25. #include <linux/mfd/tps65910.h>
  26. #define TPS65910_SUPPLY_STATE_ENABLED 0x1
  27. #define EXT_SLEEP_CONTROL (TPS65910_SLEEP_CONTROL_EXT_INPUT_EN1 | \
  28. TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2 | \
  29. TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3)
  30. /* supported VIO voltages in milivolts */
  31. static const u16 VIO_VSEL_table[] = {
  32. 1500, 1800, 2500, 3300,
  33. };
  34. /* VSEL tables for TPS65910 specific LDOs and dcdc's */
  35. /* supported VDD3 voltages in milivolts */
  36. static const u16 VDD3_VSEL_table[] = {
  37. 5000,
  38. };
  39. /* supported VDIG1 voltages in milivolts */
  40. static const u16 VDIG1_VSEL_table[] = {
  41. 1200, 1500, 1800, 2700,
  42. };
  43. /* supported VDIG2 voltages in milivolts */
  44. static const u16 VDIG2_VSEL_table[] = {
  45. 1000, 1100, 1200, 1800,
  46. };
  47. /* supported VPLL voltages in milivolts */
  48. static const u16 VPLL_VSEL_table[] = {
  49. 1000, 1100, 1800, 2500,
  50. };
  51. /* supported VDAC voltages in milivolts */
  52. static const u16 VDAC_VSEL_table[] = {
  53. 1800, 2600, 2800, 2850,
  54. };
  55. /* supported VAUX1 voltages in milivolts */
  56. static const u16 VAUX1_VSEL_table[] = {
  57. 1800, 2500, 2800, 2850,
  58. };
  59. /* supported VAUX2 voltages in milivolts */
  60. static const u16 VAUX2_VSEL_table[] = {
  61. 1800, 2800, 2900, 3300,
  62. };
  63. /* supported VAUX33 voltages in milivolts */
  64. static const u16 VAUX33_VSEL_table[] = {
  65. 1800, 2000, 2800, 3300,
  66. };
  67. /* supported VMMC voltages in milivolts */
  68. static const u16 VMMC_VSEL_table[] = {
  69. 1800, 2800, 3000, 3300,
  70. };
  71. struct tps_info {
  72. const char *name;
  73. unsigned min_uV;
  74. unsigned max_uV;
  75. u8 n_voltages;
  76. const u16 *voltage_table;
  77. };
  78. static struct tps_info tps65910_regs[] = {
  79. {
  80. .name = "VRTC",
  81. },
  82. {
  83. .name = "VIO",
  84. .min_uV = 1500000,
  85. .max_uV = 3300000,
  86. .n_voltages = ARRAY_SIZE(VIO_VSEL_table),
  87. .voltage_table = VIO_VSEL_table,
  88. },
  89. {
  90. .name = "VDD1",
  91. .min_uV = 600000,
  92. .max_uV = 4500000,
  93. },
  94. {
  95. .name = "VDD2",
  96. .min_uV = 600000,
  97. .max_uV = 4500000,
  98. },
  99. {
  100. .name = "VDD3",
  101. .min_uV = 5000000,
  102. .max_uV = 5000000,
  103. .n_voltages = ARRAY_SIZE(VDD3_VSEL_table),
  104. .voltage_table = VDD3_VSEL_table,
  105. },
  106. {
  107. .name = "VDIG1",
  108. .min_uV = 1200000,
  109. .max_uV = 2700000,
  110. .n_voltages = ARRAY_SIZE(VDIG1_VSEL_table),
  111. .voltage_table = VDIG1_VSEL_table,
  112. },
  113. {
  114. .name = "VDIG2",
  115. .min_uV = 1000000,
  116. .max_uV = 1800000,
  117. .n_voltages = ARRAY_SIZE(VDIG2_VSEL_table),
  118. .voltage_table = VDIG2_VSEL_table,
  119. },
  120. {
  121. .name = "VPLL",
  122. .min_uV = 1000000,
  123. .max_uV = 2500000,
  124. .n_voltages = ARRAY_SIZE(VPLL_VSEL_table),
  125. .voltage_table = VPLL_VSEL_table,
  126. },
  127. {
  128. .name = "VDAC",
  129. .min_uV = 1800000,
  130. .max_uV = 2850000,
  131. .n_voltages = ARRAY_SIZE(VDAC_VSEL_table),
  132. .voltage_table = VDAC_VSEL_table,
  133. },
  134. {
  135. .name = "VAUX1",
  136. .min_uV = 1800000,
  137. .max_uV = 2850000,
  138. .n_voltages = ARRAY_SIZE(VAUX1_VSEL_table),
  139. .voltage_table = VAUX1_VSEL_table,
  140. },
  141. {
  142. .name = "VAUX2",
  143. .min_uV = 1800000,
  144. .max_uV = 3300000,
  145. .n_voltages = ARRAY_SIZE(VAUX2_VSEL_table),
  146. .voltage_table = VAUX2_VSEL_table,
  147. },
  148. {
  149. .name = "VAUX33",
  150. .min_uV = 1800000,
  151. .max_uV = 3300000,
  152. .n_voltages = ARRAY_SIZE(VAUX33_VSEL_table),
  153. .voltage_table = VAUX33_VSEL_table,
  154. },
  155. {
  156. .name = "VMMC",
  157. .min_uV = 1800000,
  158. .max_uV = 3300000,
  159. .n_voltages = ARRAY_SIZE(VMMC_VSEL_table),
  160. .voltage_table = VMMC_VSEL_table,
  161. },
  162. };
  163. static struct tps_info tps65911_regs[] = {
  164. {
  165. .name = "VRTC",
  166. },
  167. {
  168. .name = "VIO",
  169. .min_uV = 1500000,
  170. .max_uV = 3300000,
  171. .n_voltages = ARRAY_SIZE(VIO_VSEL_table),
  172. .voltage_table = VIO_VSEL_table,
  173. },
  174. {
  175. .name = "VDD1",
  176. .min_uV = 600000,
  177. .max_uV = 4500000,
  178. .n_voltages = 73,
  179. },
  180. {
  181. .name = "VDD2",
  182. .min_uV = 600000,
  183. .max_uV = 4500000,
  184. .n_voltages = 73,
  185. },
  186. {
  187. .name = "VDDCTRL",
  188. .min_uV = 600000,
  189. .max_uV = 1400000,
  190. .n_voltages = 65,
  191. },
  192. {
  193. .name = "LDO1",
  194. .min_uV = 1000000,
  195. .max_uV = 3300000,
  196. .n_voltages = 47,
  197. },
  198. {
  199. .name = "LDO2",
  200. .min_uV = 1000000,
  201. .max_uV = 3300000,
  202. .n_voltages = 47,
  203. },
  204. {
  205. .name = "LDO3",
  206. .min_uV = 1000000,
  207. .max_uV = 3300000,
  208. .n_voltages = 24,
  209. },
  210. {
  211. .name = "LDO4",
  212. .min_uV = 1000000,
  213. .max_uV = 3300000,
  214. .n_voltages = 47,
  215. },
  216. {
  217. .name = "LDO5",
  218. .min_uV = 1000000,
  219. .max_uV = 3300000,
  220. .n_voltages = 24,
  221. },
  222. {
  223. .name = "LDO6",
  224. .min_uV = 1000000,
  225. .max_uV = 3300000,
  226. .n_voltages = 24,
  227. },
  228. {
  229. .name = "LDO7",
  230. .min_uV = 1000000,
  231. .max_uV = 3300000,
  232. .n_voltages = 24,
  233. },
  234. {
  235. .name = "LDO8",
  236. .min_uV = 1000000,
  237. .max_uV = 3300000,
  238. .n_voltages = 24,
  239. },
  240. };
  241. #define EXT_CONTROL_REG_BITS(id, regs_offs, bits) (((regs_offs) << 8) | (bits))
  242. static unsigned int tps65910_ext_sleep_control[] = {
  243. 0,
  244. EXT_CONTROL_REG_BITS(VIO, 1, 0),
  245. EXT_CONTROL_REG_BITS(VDD1, 1, 1),
  246. EXT_CONTROL_REG_BITS(VDD2, 1, 2),
  247. EXT_CONTROL_REG_BITS(VDD3, 1, 3),
  248. EXT_CONTROL_REG_BITS(VDIG1, 0, 1),
  249. EXT_CONTROL_REG_BITS(VDIG2, 0, 2),
  250. EXT_CONTROL_REG_BITS(VPLL, 0, 6),
  251. EXT_CONTROL_REG_BITS(VDAC, 0, 7),
  252. EXT_CONTROL_REG_BITS(VAUX1, 0, 3),
  253. EXT_CONTROL_REG_BITS(VAUX2, 0, 4),
  254. EXT_CONTROL_REG_BITS(VAUX33, 0, 5),
  255. EXT_CONTROL_REG_BITS(VMMC, 0, 0),
  256. };
  257. static unsigned int tps65911_ext_sleep_control[] = {
  258. 0,
  259. EXT_CONTROL_REG_BITS(VIO, 1, 0),
  260. EXT_CONTROL_REG_BITS(VDD1, 1, 1),
  261. EXT_CONTROL_REG_BITS(VDD2, 1, 2),
  262. EXT_CONTROL_REG_BITS(VDDCTRL, 1, 3),
  263. EXT_CONTROL_REG_BITS(LDO1, 0, 1),
  264. EXT_CONTROL_REG_BITS(LDO2, 0, 2),
  265. EXT_CONTROL_REG_BITS(LDO3, 0, 7),
  266. EXT_CONTROL_REG_BITS(LDO4, 0, 6),
  267. EXT_CONTROL_REG_BITS(LDO5, 0, 3),
  268. EXT_CONTROL_REG_BITS(LDO6, 0, 0),
  269. EXT_CONTROL_REG_BITS(LDO7, 0, 5),
  270. EXT_CONTROL_REG_BITS(LDO8, 0, 4),
  271. };
  272. struct tps65910_reg {
  273. struct regulator_desc *desc;
  274. struct tps65910 *mfd;
  275. struct regulator_dev **rdev;
  276. struct tps_info **info;
  277. struct mutex mutex;
  278. int num_regulators;
  279. int mode;
  280. int (*get_ctrl_reg)(int);
  281. unsigned int *ext_sleep_control;
  282. unsigned int board_ext_control[TPS65910_NUM_REGS];
  283. };
  284. static inline int tps65910_read(struct tps65910_reg *pmic, u8 reg)
  285. {
  286. u8 val;
  287. int err;
  288. err = pmic->mfd->read(pmic->mfd, reg, 1, &val);
  289. if (err)
  290. return err;
  291. return val;
  292. }
  293. static inline int tps65910_write(struct tps65910_reg *pmic, u8 reg, u8 val)
  294. {
  295. return pmic->mfd->write(pmic->mfd, reg, 1, &val);
  296. }
  297. static int tps65910_modify_bits(struct tps65910_reg *pmic, u8 reg,
  298. u8 set_mask, u8 clear_mask)
  299. {
  300. int err, data;
  301. mutex_lock(&pmic->mutex);
  302. data = tps65910_read(pmic, reg);
  303. if (data < 0) {
  304. dev_err(pmic->mfd->dev, "Read from reg 0x%x failed\n", reg);
  305. err = data;
  306. goto out;
  307. }
  308. data &= ~clear_mask;
  309. data |= set_mask;
  310. err = tps65910_write(pmic, reg, data);
  311. if (err)
  312. dev_err(pmic->mfd->dev, "Write for reg 0x%x failed\n", reg);
  313. out:
  314. mutex_unlock(&pmic->mutex);
  315. return err;
  316. }
  317. static int tps65910_reg_read(struct tps65910_reg *pmic, u8 reg)
  318. {
  319. int data;
  320. mutex_lock(&pmic->mutex);
  321. data = tps65910_read(pmic, reg);
  322. if (data < 0)
  323. dev_err(pmic->mfd->dev, "Read from reg 0x%x failed\n", reg);
  324. mutex_unlock(&pmic->mutex);
  325. return data;
  326. }
  327. static int tps65910_reg_write(struct tps65910_reg *pmic, u8 reg, u8 val)
  328. {
  329. int err;
  330. mutex_lock(&pmic->mutex);
  331. err = tps65910_write(pmic, reg, val);
  332. if (err < 0)
  333. dev_err(pmic->mfd->dev, "Write for reg 0x%x failed\n", reg);
  334. mutex_unlock(&pmic->mutex);
  335. return err;
  336. }
  337. static int tps65910_get_ctrl_register(int id)
  338. {
  339. switch (id) {
  340. case TPS65910_REG_VRTC:
  341. return TPS65910_VRTC;
  342. case TPS65910_REG_VIO:
  343. return TPS65910_VIO;
  344. case TPS65910_REG_VDD1:
  345. return TPS65910_VDD1;
  346. case TPS65910_REG_VDD2:
  347. return TPS65910_VDD2;
  348. case TPS65910_REG_VDD3:
  349. return TPS65910_VDD3;
  350. case TPS65910_REG_VDIG1:
  351. return TPS65910_VDIG1;
  352. case TPS65910_REG_VDIG2:
  353. return TPS65910_VDIG2;
  354. case TPS65910_REG_VPLL:
  355. return TPS65910_VPLL;
  356. case TPS65910_REG_VDAC:
  357. return TPS65910_VDAC;
  358. case TPS65910_REG_VAUX1:
  359. return TPS65910_VAUX1;
  360. case TPS65910_REG_VAUX2:
  361. return TPS65910_VAUX2;
  362. case TPS65910_REG_VAUX33:
  363. return TPS65910_VAUX33;
  364. case TPS65910_REG_VMMC:
  365. return TPS65910_VMMC;
  366. default:
  367. return -EINVAL;
  368. }
  369. }
  370. static int tps65911_get_ctrl_register(int id)
  371. {
  372. switch (id) {
  373. case TPS65910_REG_VRTC:
  374. return TPS65910_VRTC;
  375. case TPS65910_REG_VIO:
  376. return TPS65910_VIO;
  377. case TPS65910_REG_VDD1:
  378. return TPS65910_VDD1;
  379. case TPS65910_REG_VDD2:
  380. return TPS65910_VDD2;
  381. case TPS65911_REG_VDDCTRL:
  382. return TPS65911_VDDCTRL;
  383. case TPS65911_REG_LDO1:
  384. return TPS65911_LDO1;
  385. case TPS65911_REG_LDO2:
  386. return TPS65911_LDO2;
  387. case TPS65911_REG_LDO3:
  388. return TPS65911_LDO3;
  389. case TPS65911_REG_LDO4:
  390. return TPS65911_LDO4;
  391. case TPS65911_REG_LDO5:
  392. return TPS65911_LDO5;
  393. case TPS65911_REG_LDO6:
  394. return TPS65911_LDO6;
  395. case TPS65911_REG_LDO7:
  396. return TPS65911_LDO7;
  397. case TPS65911_REG_LDO8:
  398. return TPS65911_LDO8;
  399. default:
  400. return -EINVAL;
  401. }
  402. }
  403. static int tps65910_is_enabled(struct regulator_dev *dev)
  404. {
  405. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  406. int reg, value, id = rdev_get_id(dev);
  407. reg = pmic->get_ctrl_reg(id);
  408. if (reg < 0)
  409. return reg;
  410. value = tps65910_reg_read(pmic, reg);
  411. if (value < 0)
  412. return value;
  413. return value & TPS65910_SUPPLY_STATE_ENABLED;
  414. }
  415. static int tps65910_enable(struct regulator_dev *dev)
  416. {
  417. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  418. struct tps65910 *mfd = pmic->mfd;
  419. int reg, id = rdev_get_id(dev);
  420. reg = pmic->get_ctrl_reg(id);
  421. if (reg < 0)
  422. return reg;
  423. return tps65910_set_bits(mfd, reg, TPS65910_SUPPLY_STATE_ENABLED);
  424. }
  425. static int tps65910_disable(struct regulator_dev *dev)
  426. {
  427. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  428. struct tps65910 *mfd = pmic->mfd;
  429. int reg, id = rdev_get_id(dev);
  430. reg = pmic->get_ctrl_reg(id);
  431. if (reg < 0)
  432. return reg;
  433. return tps65910_clear_bits(mfd, reg, TPS65910_SUPPLY_STATE_ENABLED);
  434. }
  435. static int tps65910_set_mode(struct regulator_dev *dev, unsigned int mode)
  436. {
  437. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  438. struct tps65910 *mfd = pmic->mfd;
  439. int reg, value, id = rdev_get_id(dev);
  440. reg = pmic->get_ctrl_reg(id);
  441. if (reg < 0)
  442. return reg;
  443. switch (mode) {
  444. case REGULATOR_MODE_NORMAL:
  445. return tps65910_modify_bits(pmic, reg, LDO_ST_ON_BIT,
  446. LDO_ST_MODE_BIT);
  447. case REGULATOR_MODE_IDLE:
  448. value = LDO_ST_ON_BIT | LDO_ST_MODE_BIT;
  449. return tps65910_set_bits(mfd, reg, value);
  450. case REGULATOR_MODE_STANDBY:
  451. return tps65910_clear_bits(mfd, reg, LDO_ST_ON_BIT);
  452. }
  453. return -EINVAL;
  454. }
  455. static unsigned int tps65910_get_mode(struct regulator_dev *dev)
  456. {
  457. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  458. int reg, value, id = rdev_get_id(dev);
  459. reg = pmic->get_ctrl_reg(id);
  460. if (reg < 0)
  461. return reg;
  462. value = tps65910_reg_read(pmic, reg);
  463. if (value < 0)
  464. return value;
  465. if (value & LDO_ST_ON_BIT)
  466. return REGULATOR_MODE_STANDBY;
  467. else if (value & LDO_ST_MODE_BIT)
  468. return REGULATOR_MODE_IDLE;
  469. else
  470. return REGULATOR_MODE_NORMAL;
  471. }
  472. static int tps65910_get_voltage_dcdc(struct regulator_dev *dev)
  473. {
  474. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  475. int id = rdev_get_id(dev), voltage = 0;
  476. int opvsel = 0, srvsel = 0, vselmax = 0, mult = 0, sr = 0;
  477. switch (id) {
  478. case TPS65910_REG_VDD1:
  479. opvsel = tps65910_reg_read(pmic, TPS65910_VDD1_OP);
  480. mult = tps65910_reg_read(pmic, TPS65910_VDD1);
  481. mult = (mult & VDD1_VGAIN_SEL_MASK) >> VDD1_VGAIN_SEL_SHIFT;
  482. srvsel = tps65910_reg_read(pmic, TPS65910_VDD1_SR);
  483. sr = opvsel & VDD1_OP_CMD_MASK;
  484. opvsel &= VDD1_OP_SEL_MASK;
  485. srvsel &= VDD1_SR_SEL_MASK;
  486. vselmax = 75;
  487. break;
  488. case TPS65910_REG_VDD2:
  489. opvsel = tps65910_reg_read(pmic, TPS65910_VDD2_OP);
  490. mult = tps65910_reg_read(pmic, TPS65910_VDD2);
  491. mult = (mult & VDD2_VGAIN_SEL_MASK) >> VDD2_VGAIN_SEL_SHIFT;
  492. srvsel = tps65910_reg_read(pmic, TPS65910_VDD2_SR);
  493. sr = opvsel & VDD2_OP_CMD_MASK;
  494. opvsel &= VDD2_OP_SEL_MASK;
  495. srvsel &= VDD2_SR_SEL_MASK;
  496. vselmax = 75;
  497. break;
  498. case TPS65911_REG_VDDCTRL:
  499. opvsel = tps65910_reg_read(pmic, TPS65911_VDDCTRL_OP);
  500. srvsel = tps65910_reg_read(pmic, TPS65911_VDDCTRL_SR);
  501. sr = opvsel & VDDCTRL_OP_CMD_MASK;
  502. opvsel &= VDDCTRL_OP_SEL_MASK;
  503. srvsel &= VDDCTRL_SR_SEL_MASK;
  504. vselmax = 64;
  505. break;
  506. }
  507. /* multiplier 0 == 1 but 2,3 normal */
  508. if (!mult)
  509. mult=1;
  510. if (sr) {
  511. /* normalise to valid range */
  512. if (srvsel < 3)
  513. srvsel = 3;
  514. if (srvsel > vselmax)
  515. srvsel = vselmax;
  516. srvsel -= 3;
  517. voltage = (srvsel * VDD1_2_OFFSET + VDD1_2_MIN_VOLT) * 100;
  518. } else {
  519. /* normalise to valid range*/
  520. if (opvsel < 3)
  521. opvsel = 3;
  522. if (opvsel > vselmax)
  523. opvsel = vselmax;
  524. opvsel -= 3;
  525. voltage = (opvsel * VDD1_2_OFFSET + VDD1_2_MIN_VOLT) * 100;
  526. }
  527. voltage *= mult;
  528. return voltage;
  529. }
  530. static int tps65910_get_voltage(struct regulator_dev *dev)
  531. {
  532. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  533. int reg, value, id = rdev_get_id(dev), voltage = 0;
  534. reg = pmic->get_ctrl_reg(id);
  535. if (reg < 0)
  536. return reg;
  537. value = tps65910_reg_read(pmic, reg);
  538. if (value < 0)
  539. return value;
  540. switch (id) {
  541. case TPS65910_REG_VIO:
  542. case TPS65910_REG_VDIG1:
  543. case TPS65910_REG_VDIG2:
  544. case TPS65910_REG_VPLL:
  545. case TPS65910_REG_VDAC:
  546. case TPS65910_REG_VAUX1:
  547. case TPS65910_REG_VAUX2:
  548. case TPS65910_REG_VAUX33:
  549. case TPS65910_REG_VMMC:
  550. value &= LDO_SEL_MASK;
  551. value >>= LDO_SEL_SHIFT;
  552. break;
  553. default:
  554. return -EINVAL;
  555. }
  556. voltage = pmic->info[id]->voltage_table[value] * 1000;
  557. return voltage;
  558. }
  559. static int tps65910_get_voltage_vdd3(struct regulator_dev *dev)
  560. {
  561. return 5 * 1000 * 1000;
  562. }
  563. static int tps65911_get_voltage(struct regulator_dev *dev)
  564. {
  565. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  566. int step_mv, id = rdev_get_id(dev);
  567. u8 value, reg;
  568. reg = pmic->get_ctrl_reg(id);
  569. value = tps65910_reg_read(pmic, reg);
  570. switch (id) {
  571. case TPS65911_REG_LDO1:
  572. case TPS65911_REG_LDO2:
  573. case TPS65911_REG_LDO4:
  574. value &= LDO1_SEL_MASK;
  575. value >>= LDO_SEL_SHIFT;
  576. /* The first 5 values of the selector correspond to 1V */
  577. if (value < 5)
  578. value = 0;
  579. else
  580. value -= 4;
  581. step_mv = 50;
  582. break;
  583. case TPS65911_REG_LDO3:
  584. case TPS65911_REG_LDO5:
  585. case TPS65911_REG_LDO6:
  586. case TPS65911_REG_LDO7:
  587. case TPS65911_REG_LDO8:
  588. value &= LDO3_SEL_MASK;
  589. value >>= LDO_SEL_SHIFT;
  590. /* The first 3 values of the selector correspond to 1V */
  591. if (value < 3)
  592. value = 0;
  593. else
  594. value -= 2;
  595. step_mv = 100;
  596. break;
  597. case TPS65910_REG_VIO:
  598. value &= LDO_SEL_MASK;
  599. value >>= LDO_SEL_SHIFT;
  600. return pmic->info[id]->voltage_table[value] * 1000;
  601. default:
  602. return -EINVAL;
  603. }
  604. return (LDO_MIN_VOLT + value * step_mv) * 1000;
  605. }
  606. static int tps65910_set_voltage_dcdc(struct regulator_dev *dev,
  607. unsigned selector)
  608. {
  609. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  610. int id = rdev_get_id(dev), vsel;
  611. int dcdc_mult = 0;
  612. switch (id) {
  613. case TPS65910_REG_VDD1:
  614. dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
  615. if (dcdc_mult == 1)
  616. dcdc_mult--;
  617. vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
  618. tps65910_modify_bits(pmic, TPS65910_VDD1,
  619. (dcdc_mult << VDD1_VGAIN_SEL_SHIFT),
  620. VDD1_VGAIN_SEL_MASK);
  621. tps65910_reg_write(pmic, TPS65910_VDD1_OP, vsel);
  622. break;
  623. case TPS65910_REG_VDD2:
  624. dcdc_mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
  625. if (dcdc_mult == 1)
  626. dcdc_mult--;
  627. vsel = (selector % VDD1_2_NUM_VOLT_FINE) + 3;
  628. tps65910_modify_bits(pmic, TPS65910_VDD2,
  629. (dcdc_mult << VDD2_VGAIN_SEL_SHIFT),
  630. VDD1_VGAIN_SEL_MASK);
  631. tps65910_reg_write(pmic, TPS65910_VDD2_OP, vsel);
  632. break;
  633. case TPS65911_REG_VDDCTRL:
  634. vsel = selector;
  635. tps65910_reg_write(pmic, TPS65911_VDDCTRL_OP, vsel);
  636. }
  637. return 0;
  638. }
  639. static int tps65910_set_voltage(struct regulator_dev *dev, unsigned selector)
  640. {
  641. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  642. int reg, id = rdev_get_id(dev);
  643. reg = pmic->get_ctrl_reg(id);
  644. if (reg < 0)
  645. return reg;
  646. switch (id) {
  647. case TPS65910_REG_VIO:
  648. case TPS65910_REG_VDIG1:
  649. case TPS65910_REG_VDIG2:
  650. case TPS65910_REG_VPLL:
  651. case TPS65910_REG_VDAC:
  652. case TPS65910_REG_VAUX1:
  653. case TPS65910_REG_VAUX2:
  654. case TPS65910_REG_VAUX33:
  655. case TPS65910_REG_VMMC:
  656. return tps65910_modify_bits(pmic, reg,
  657. (selector << LDO_SEL_SHIFT), LDO_SEL_MASK);
  658. }
  659. return -EINVAL;
  660. }
  661. static int tps65911_set_voltage(struct regulator_dev *dev, unsigned selector)
  662. {
  663. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  664. int reg, id = rdev_get_id(dev);
  665. reg = pmic->get_ctrl_reg(id);
  666. if (reg < 0)
  667. return reg;
  668. switch (id) {
  669. case TPS65911_REG_LDO1:
  670. case TPS65911_REG_LDO2:
  671. case TPS65911_REG_LDO4:
  672. return tps65910_modify_bits(pmic, reg,
  673. (selector << LDO_SEL_SHIFT), LDO1_SEL_MASK);
  674. case TPS65911_REG_LDO3:
  675. case TPS65911_REG_LDO5:
  676. case TPS65911_REG_LDO6:
  677. case TPS65911_REG_LDO7:
  678. case TPS65911_REG_LDO8:
  679. return tps65910_modify_bits(pmic, reg,
  680. (selector << LDO_SEL_SHIFT), LDO3_SEL_MASK);
  681. case TPS65910_REG_VIO:
  682. return tps65910_modify_bits(pmic, reg,
  683. (selector << LDO_SEL_SHIFT), LDO_SEL_MASK);
  684. }
  685. return -EINVAL;
  686. }
  687. static int tps65910_list_voltage_dcdc(struct regulator_dev *dev,
  688. unsigned selector)
  689. {
  690. int volt, mult = 1, id = rdev_get_id(dev);
  691. switch (id) {
  692. case TPS65910_REG_VDD1:
  693. case TPS65910_REG_VDD2:
  694. mult = (selector / VDD1_2_NUM_VOLT_FINE) + 1;
  695. volt = VDD1_2_MIN_VOLT +
  696. (selector % VDD1_2_NUM_VOLT_FINE) * VDD1_2_OFFSET;
  697. break;
  698. case TPS65911_REG_VDDCTRL:
  699. volt = VDDCTRL_MIN_VOLT + (selector * VDDCTRL_OFFSET);
  700. break;
  701. default:
  702. BUG();
  703. return -EINVAL;
  704. }
  705. return volt * 100 * mult;
  706. }
  707. static int tps65910_list_voltage(struct regulator_dev *dev,
  708. unsigned selector)
  709. {
  710. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  711. int id = rdev_get_id(dev), voltage;
  712. if (id < TPS65910_REG_VIO || id > TPS65910_REG_VMMC)
  713. return -EINVAL;
  714. if (selector >= pmic->info[id]->n_voltages)
  715. return -EINVAL;
  716. else
  717. voltage = pmic->info[id]->voltage_table[selector] * 1000;
  718. return voltage;
  719. }
  720. static int tps65911_list_voltage(struct regulator_dev *dev, unsigned selector)
  721. {
  722. struct tps65910_reg *pmic = rdev_get_drvdata(dev);
  723. int step_mv = 0, id = rdev_get_id(dev);
  724. switch(id) {
  725. case TPS65911_REG_LDO1:
  726. case TPS65911_REG_LDO2:
  727. case TPS65911_REG_LDO4:
  728. /* The first 5 values of the selector correspond to 1V */
  729. if (selector < 5)
  730. selector = 0;
  731. else
  732. selector -= 4;
  733. step_mv = 50;
  734. break;
  735. case TPS65911_REG_LDO3:
  736. case TPS65911_REG_LDO5:
  737. case TPS65911_REG_LDO6:
  738. case TPS65911_REG_LDO7:
  739. case TPS65911_REG_LDO8:
  740. /* The first 3 values of the selector correspond to 1V */
  741. if (selector < 3)
  742. selector = 0;
  743. else
  744. selector -= 2;
  745. step_mv = 100;
  746. break;
  747. case TPS65910_REG_VIO:
  748. return pmic->info[id]->voltage_table[selector] * 1000;
  749. default:
  750. return -EINVAL;
  751. }
  752. return (LDO_MIN_VOLT + selector * step_mv) * 1000;
  753. }
  754. /* Regulator ops (except VRTC) */
  755. static struct regulator_ops tps65910_ops_dcdc = {
  756. .is_enabled = tps65910_is_enabled,
  757. .enable = tps65910_enable,
  758. .disable = tps65910_disable,
  759. .set_mode = tps65910_set_mode,
  760. .get_mode = tps65910_get_mode,
  761. .get_voltage = tps65910_get_voltage_dcdc,
  762. .set_voltage_sel = tps65910_set_voltage_dcdc,
  763. .list_voltage = tps65910_list_voltage_dcdc,
  764. };
  765. static struct regulator_ops tps65910_ops_vdd3 = {
  766. .is_enabled = tps65910_is_enabled,
  767. .enable = tps65910_enable,
  768. .disable = tps65910_disable,
  769. .set_mode = tps65910_set_mode,
  770. .get_mode = tps65910_get_mode,
  771. .get_voltage = tps65910_get_voltage_vdd3,
  772. .list_voltage = tps65910_list_voltage,
  773. };
  774. static struct regulator_ops tps65910_ops = {
  775. .is_enabled = tps65910_is_enabled,
  776. .enable = tps65910_enable,
  777. .disable = tps65910_disable,
  778. .set_mode = tps65910_set_mode,
  779. .get_mode = tps65910_get_mode,
  780. .get_voltage = tps65910_get_voltage,
  781. .set_voltage_sel = tps65910_set_voltage,
  782. .list_voltage = tps65910_list_voltage,
  783. };
  784. static struct regulator_ops tps65911_ops = {
  785. .is_enabled = tps65910_is_enabled,
  786. .enable = tps65910_enable,
  787. .disable = tps65910_disable,
  788. .set_mode = tps65910_set_mode,
  789. .get_mode = tps65910_get_mode,
  790. .get_voltage = tps65911_get_voltage,
  791. .set_voltage_sel = tps65911_set_voltage,
  792. .list_voltage = tps65911_list_voltage,
  793. };
  794. static int tps65910_set_ext_sleep_config(struct tps65910_reg *pmic,
  795. int id, int ext_sleep_config)
  796. {
  797. struct tps65910 *mfd = pmic->mfd;
  798. u8 regoffs = (pmic->ext_sleep_control[id] >> 8) & 0xFF;
  799. u8 bit_pos = (1 << pmic->ext_sleep_control[id] & 0xFF);
  800. int ret;
  801. /*
  802. * Regulator can not be control from multiple external input EN1, EN2
  803. * and EN3 together.
  804. */
  805. if (ext_sleep_config & EXT_SLEEP_CONTROL) {
  806. int en_count;
  807. en_count = ((ext_sleep_config &
  808. TPS65910_SLEEP_CONTROL_EXT_INPUT_EN1) != 0);
  809. en_count += ((ext_sleep_config &
  810. TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2) != 0);
  811. en_count += ((ext_sleep_config &
  812. TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3) != 0);
  813. if (en_count > 1) {
  814. dev_err(mfd->dev,
  815. "External sleep control flag is not proper\n");
  816. return -EINVAL;
  817. }
  818. }
  819. pmic->board_ext_control[id] = ext_sleep_config;
  820. /* External EN1 control */
  821. if (ext_sleep_config & TPS65910_SLEEP_CONTROL_EXT_INPUT_EN1)
  822. ret = tps65910_set_bits(mfd,
  823. TPS65910_EN1_LDO_ASS + regoffs, bit_pos);
  824. else
  825. ret = tps65910_clear_bits(mfd,
  826. TPS65910_EN1_LDO_ASS + regoffs, bit_pos);
  827. if (ret < 0) {
  828. dev_err(mfd->dev,
  829. "Error in configuring external control EN1\n");
  830. return ret;
  831. }
  832. /* External EN2 control */
  833. if (ext_sleep_config & TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2)
  834. ret = tps65910_set_bits(mfd,
  835. TPS65910_EN2_LDO_ASS + regoffs, bit_pos);
  836. else
  837. ret = tps65910_clear_bits(mfd,
  838. TPS65910_EN2_LDO_ASS + regoffs, bit_pos);
  839. if (ret < 0) {
  840. dev_err(mfd->dev,
  841. "Error in configuring external control EN2\n");
  842. return ret;
  843. }
  844. /* External EN3 control for TPS65910 LDO only */
  845. if ((tps65910_chip_id(mfd) == TPS65910) &&
  846. (id >= TPS65910_REG_VDIG1)) {
  847. if (ext_sleep_config & TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3)
  848. ret = tps65910_set_bits(mfd,
  849. TPS65910_EN3_LDO_ASS + regoffs, bit_pos);
  850. else
  851. ret = tps65910_clear_bits(mfd,
  852. TPS65910_EN3_LDO_ASS + regoffs, bit_pos);
  853. if (ret < 0) {
  854. dev_err(mfd->dev,
  855. "Error in configuring external control EN3\n");
  856. return ret;
  857. }
  858. }
  859. /* Return if no external control is selected */
  860. if (!(ext_sleep_config & EXT_SLEEP_CONTROL)) {
  861. /* Clear all sleep controls */
  862. ret = tps65910_clear_bits(mfd,
  863. TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos);
  864. if (!ret)
  865. ret = tps65910_clear_bits(mfd,
  866. TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
  867. if (ret < 0)
  868. dev_err(mfd->dev,
  869. "Error in configuring SLEEP register\n");
  870. return ret;
  871. }
  872. /*
  873. * For regulator that has separate operational and sleep register make
  874. * sure that operational is used and clear sleep register to turn
  875. * regulator off when external control is inactive
  876. */
  877. if ((id == TPS65910_REG_VDD1) ||
  878. (id == TPS65910_REG_VDD2) ||
  879. ((id == TPS65911_REG_VDDCTRL) &&
  880. (tps65910_chip_id(mfd) == TPS65911))) {
  881. int op_reg_add = pmic->get_ctrl_reg(id) + 1;
  882. int sr_reg_add = pmic->get_ctrl_reg(id) + 2;
  883. int opvsel = tps65910_reg_read(pmic, op_reg_add);
  884. int srvsel = tps65910_reg_read(pmic, sr_reg_add);
  885. if (opvsel & VDD1_OP_CMD_MASK) {
  886. u8 reg_val = srvsel & VDD1_OP_SEL_MASK;
  887. ret = tps65910_reg_write(pmic, op_reg_add, reg_val);
  888. if (ret < 0) {
  889. dev_err(mfd->dev,
  890. "Error in configuring op register\n");
  891. return ret;
  892. }
  893. }
  894. ret = tps65910_reg_write(pmic, sr_reg_add, 0);
  895. if (ret < 0) {
  896. dev_err(mfd->dev, "Error in settting sr register\n");
  897. return ret;
  898. }
  899. }
  900. ret = tps65910_clear_bits(mfd,
  901. TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos);
  902. if (!ret)
  903. ret = tps65910_set_bits(mfd,
  904. TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
  905. if (ret < 0)
  906. dev_err(mfd->dev,
  907. "Error in configuring SLEEP register\n");
  908. return ret;
  909. }
  910. static __devinit int tps65910_probe(struct platform_device *pdev)
  911. {
  912. struct tps65910 *tps65910 = dev_get_drvdata(pdev->dev.parent);
  913. struct tps_info *info;
  914. struct regulator_init_data *reg_data;
  915. struct regulator_dev *rdev;
  916. struct tps65910_reg *pmic;
  917. struct tps65910_board *pmic_plat_data;
  918. int i, err;
  919. pmic_plat_data = dev_get_platdata(tps65910->dev);
  920. if (!pmic_plat_data)
  921. return -EINVAL;
  922. pmic = kzalloc(sizeof(*pmic), GFP_KERNEL);
  923. if (!pmic)
  924. return -ENOMEM;
  925. mutex_init(&pmic->mutex);
  926. pmic->mfd = tps65910;
  927. platform_set_drvdata(pdev, pmic);
  928. /* Give control of all register to control port */
  929. tps65910_set_bits(pmic->mfd, TPS65910_DEVCTRL,
  930. DEVCTRL_SR_CTL_I2C_SEL_MASK);
  931. switch(tps65910_chip_id(tps65910)) {
  932. case TPS65910:
  933. pmic->get_ctrl_reg = &tps65910_get_ctrl_register;
  934. pmic->num_regulators = ARRAY_SIZE(tps65910_regs);
  935. pmic->ext_sleep_control = tps65910_ext_sleep_control;
  936. info = tps65910_regs;
  937. break;
  938. case TPS65911:
  939. pmic->get_ctrl_reg = &tps65911_get_ctrl_register;
  940. pmic->num_regulators = ARRAY_SIZE(tps65911_regs);
  941. pmic->ext_sleep_control = tps65911_ext_sleep_control;
  942. info = tps65911_regs;
  943. break;
  944. default:
  945. pr_err("Invalid tps chip version\n");
  946. kfree(pmic);
  947. return -ENODEV;
  948. }
  949. pmic->desc = kcalloc(pmic->num_regulators,
  950. sizeof(struct regulator_desc), GFP_KERNEL);
  951. if (!pmic->desc) {
  952. err = -ENOMEM;
  953. goto err_free_pmic;
  954. }
  955. pmic->info = kcalloc(pmic->num_regulators,
  956. sizeof(struct tps_info *), GFP_KERNEL);
  957. if (!pmic->info) {
  958. err = -ENOMEM;
  959. goto err_free_desc;
  960. }
  961. pmic->rdev = kcalloc(pmic->num_regulators,
  962. sizeof(struct regulator_dev *), GFP_KERNEL);
  963. if (!pmic->rdev) {
  964. err = -ENOMEM;
  965. goto err_free_info;
  966. }
  967. for (i = 0; i < pmic->num_regulators && i < TPS65910_NUM_REGS;
  968. i++, info++) {
  969. reg_data = pmic_plat_data->tps65910_pmic_init_data[i];
  970. /* Regulator API handles empty constraints but not NULL
  971. * constraints */
  972. if (!reg_data)
  973. continue;
  974. /* Register the regulators */
  975. pmic->info[i] = info;
  976. pmic->desc[i].name = info->name;
  977. pmic->desc[i].id = i;
  978. pmic->desc[i].n_voltages = info->n_voltages;
  979. if (i == TPS65910_REG_VDD1 || i == TPS65910_REG_VDD2) {
  980. pmic->desc[i].ops = &tps65910_ops_dcdc;
  981. pmic->desc[i].n_voltages = VDD1_2_NUM_VOLT_FINE *
  982. VDD1_2_NUM_VOLT_COARSE;
  983. } else if (i == TPS65910_REG_VDD3) {
  984. if (tps65910_chip_id(tps65910) == TPS65910)
  985. pmic->desc[i].ops = &tps65910_ops_vdd3;
  986. else
  987. pmic->desc[i].ops = &tps65910_ops_dcdc;
  988. } else {
  989. if (tps65910_chip_id(tps65910) == TPS65910)
  990. pmic->desc[i].ops = &tps65910_ops;
  991. else
  992. pmic->desc[i].ops = &tps65911_ops;
  993. }
  994. err = tps65910_set_ext_sleep_config(pmic, i,
  995. pmic_plat_data->regulator_ext_sleep_control[i]);
  996. /*
  997. * Failing on regulator for configuring externally control
  998. * is not a serious issue, just throw warning.
  999. */
  1000. if (err < 0)
  1001. dev_warn(tps65910->dev,
  1002. "Failed to initialise ext control config\n");
  1003. pmic->desc[i].type = REGULATOR_VOLTAGE;
  1004. pmic->desc[i].owner = THIS_MODULE;
  1005. rdev = regulator_register(&pmic->desc[i],
  1006. tps65910->dev, reg_data, pmic, NULL);
  1007. if (IS_ERR(rdev)) {
  1008. dev_err(tps65910->dev,
  1009. "failed to register %s regulator\n",
  1010. pdev->name);
  1011. err = PTR_ERR(rdev);
  1012. goto err_unregister_regulator;
  1013. }
  1014. /* Save regulator for cleanup */
  1015. pmic->rdev[i] = rdev;
  1016. }
  1017. return 0;
  1018. err_unregister_regulator:
  1019. while (--i >= 0)
  1020. regulator_unregister(pmic->rdev[i]);
  1021. kfree(pmic->rdev);
  1022. err_free_info:
  1023. kfree(pmic->info);
  1024. err_free_desc:
  1025. kfree(pmic->desc);
  1026. err_free_pmic:
  1027. kfree(pmic);
  1028. return err;
  1029. }
  1030. static int __devexit tps65910_remove(struct platform_device *pdev)
  1031. {
  1032. struct tps65910_reg *pmic = platform_get_drvdata(pdev);
  1033. int i;
  1034. for (i = 0; i < pmic->num_regulators; i++)
  1035. regulator_unregister(pmic->rdev[i]);
  1036. kfree(pmic->rdev);
  1037. kfree(pmic->info);
  1038. kfree(pmic->desc);
  1039. kfree(pmic);
  1040. return 0;
  1041. }
  1042. static void tps65910_shutdown(struct platform_device *pdev)
  1043. {
  1044. struct tps65910_reg *pmic = platform_get_drvdata(pdev);
  1045. int i;
  1046. /*
  1047. * Before bootloader jumps to kernel, it makes sure that required
  1048. * external control signals are in desired state so that given rails
  1049. * can be configure accordingly.
  1050. * If rails are configured to be controlled from external control
  1051. * then before shutting down/rebooting the system, the external
  1052. * control configuration need to be remove from the rails so that
  1053. * its output will be available as per register programming even
  1054. * if external controls are removed. This is require when the POR
  1055. * value of the control signals are not in active state and before
  1056. * bootloader initializes it, the system requires the rail output
  1057. * to be active for booting.
  1058. */
  1059. for (i = 0; i < pmic->num_regulators; i++) {
  1060. int err;
  1061. if (!pmic->rdev[i])
  1062. continue;
  1063. err = tps65910_set_ext_sleep_config(pmic, i, 0);
  1064. if (err < 0)
  1065. dev_err(&pdev->dev,
  1066. "Error in clearing external control\n");
  1067. }
  1068. }
  1069. static struct platform_driver tps65910_driver = {
  1070. .driver = {
  1071. .name = "tps65910-pmic",
  1072. .owner = THIS_MODULE,
  1073. },
  1074. .probe = tps65910_probe,
  1075. .remove = __devexit_p(tps65910_remove),
  1076. .shutdown = tps65910_shutdown,
  1077. };
  1078. static int __init tps65910_init(void)
  1079. {
  1080. return platform_driver_register(&tps65910_driver);
  1081. }
  1082. subsys_initcall(tps65910_init);
  1083. static void __exit tps65910_cleanup(void)
  1084. {
  1085. platform_driver_unregister(&tps65910_driver);
  1086. }
  1087. module_exit(tps65910_cleanup);
  1088. MODULE_AUTHOR("Graeme Gregory <gg@slimlogic.co.uk>");
  1089. MODULE_DESCRIPTION("TPS6507x voltage regulator driver");
  1090. MODULE_LICENSE("GPL v2");
  1091. MODULE_ALIAS("platform:tps65910-pmic");