max8998.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. // SPDX-License-Identifier: GPL-2.0+
  2. //
  3. // max8998.c - Voltage regulator driver for the Maxim 8998
  4. //
  5. // Copyright (C) 2009-2010 Samsung Electronics
  6. // Kyungmin Park <[email protected]>
  7. // Marek Szyprowski <[email protected]>
  8. #include <linux/module.h>
  9. #include <linux/init.h>
  10. #include <linux/i2c.h>
  11. #include <linux/err.h>
  12. #include <linux/gpio.h>
  13. #include <linux/slab.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/mutex.h>
  16. #include <linux/of.h>
  17. #include <linux/of_gpio.h>
  18. #include <linux/platform_device.h>
  19. #include <linux/regulator/driver.h>
  20. #include <linux/regulator/of_regulator.h>
  21. #include <linux/mfd/max8998.h>
  22. #include <linux/mfd/max8998-private.h>
  23. struct max8998_data {
  24. struct device *dev;
  25. struct max8998_dev *iodev;
  26. int num_regulators;
  27. u8 buck1_vol[4]; /* voltages for selection */
  28. u8 buck2_vol[2];
  29. unsigned int buck1_idx; /* index to last changed voltage */
  30. /* value in a set */
  31. unsigned int buck2_idx;
  32. };
  33. static const unsigned int charger_current_table[] = {
  34. 90000, 380000, 475000, 550000, 570000, 600000, 700000, 800000,
  35. };
  36. static int max8998_get_enable_register(struct regulator_dev *rdev,
  37. int *reg, int *shift)
  38. {
  39. int ldo = rdev_get_id(rdev);
  40. switch (ldo) {
  41. case MAX8998_LDO2 ... MAX8998_LDO5:
  42. *reg = MAX8998_REG_ONOFF1;
  43. *shift = 3 - (ldo - MAX8998_LDO2);
  44. break;
  45. case MAX8998_LDO6 ... MAX8998_LDO13:
  46. *reg = MAX8998_REG_ONOFF2;
  47. *shift = 7 - (ldo - MAX8998_LDO6);
  48. break;
  49. case MAX8998_LDO14 ... MAX8998_LDO17:
  50. *reg = MAX8998_REG_ONOFF3;
  51. *shift = 7 - (ldo - MAX8998_LDO14);
  52. break;
  53. case MAX8998_BUCK1 ... MAX8998_BUCK4:
  54. *reg = MAX8998_REG_ONOFF1;
  55. *shift = 7 - (ldo - MAX8998_BUCK1);
  56. break;
  57. case MAX8998_EN32KHZ_AP ... MAX8998_ENVICHG:
  58. *reg = MAX8998_REG_ONOFF4;
  59. *shift = 7 - (ldo - MAX8998_EN32KHZ_AP);
  60. break;
  61. case MAX8998_ESAFEOUT1 ... MAX8998_ESAFEOUT2:
  62. *reg = MAX8998_REG_CHGR2;
  63. *shift = 7 - (ldo - MAX8998_ESAFEOUT1);
  64. break;
  65. case MAX8998_CHARGER:
  66. *reg = MAX8998_REG_CHGR2;
  67. *shift = 0;
  68. break;
  69. default:
  70. return -EINVAL;
  71. }
  72. return 0;
  73. }
  74. static int max8998_ldo_is_enabled(struct regulator_dev *rdev)
  75. {
  76. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  77. struct i2c_client *i2c = max8998->iodev->i2c;
  78. int ret, reg, shift = 8;
  79. u8 val;
  80. ret = max8998_get_enable_register(rdev, &reg, &shift);
  81. if (ret)
  82. return ret;
  83. ret = max8998_read_reg(i2c, reg, &val);
  84. if (ret)
  85. return ret;
  86. return val & (1 << shift);
  87. }
  88. static int max8998_ldo_is_enabled_inverted(struct regulator_dev *rdev)
  89. {
  90. return (!max8998_ldo_is_enabled(rdev));
  91. }
  92. static int max8998_ldo_enable(struct regulator_dev *rdev)
  93. {
  94. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  95. struct i2c_client *i2c = max8998->iodev->i2c;
  96. int reg, shift = 8, ret;
  97. ret = max8998_get_enable_register(rdev, &reg, &shift);
  98. if (ret)
  99. return ret;
  100. return max8998_update_reg(i2c, reg, 1<<shift, 1<<shift);
  101. }
  102. static int max8998_ldo_disable(struct regulator_dev *rdev)
  103. {
  104. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  105. struct i2c_client *i2c = max8998->iodev->i2c;
  106. int reg, shift = 8, ret;
  107. ret = max8998_get_enable_register(rdev, &reg, &shift);
  108. if (ret)
  109. return ret;
  110. return max8998_update_reg(i2c, reg, 0, 1<<shift);
  111. }
  112. static int max8998_get_voltage_register(struct regulator_dev *rdev,
  113. int *_reg, int *_shift, int *_mask)
  114. {
  115. int ldo = rdev_get_id(rdev);
  116. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  117. int reg, shift = 0, mask = 0xff;
  118. switch (ldo) {
  119. case MAX8998_LDO2 ... MAX8998_LDO3:
  120. reg = MAX8998_REG_LDO2_LDO3;
  121. mask = 0xf;
  122. if (ldo == MAX8998_LDO2)
  123. shift = 4;
  124. else
  125. shift = 0;
  126. break;
  127. case MAX8998_LDO4 ... MAX8998_LDO7:
  128. reg = MAX8998_REG_LDO4 + (ldo - MAX8998_LDO4);
  129. break;
  130. case MAX8998_LDO8 ... MAX8998_LDO9:
  131. reg = MAX8998_REG_LDO8_LDO9;
  132. mask = 0xf;
  133. if (ldo == MAX8998_LDO8)
  134. shift = 4;
  135. else
  136. shift = 0;
  137. break;
  138. case MAX8998_LDO10 ... MAX8998_LDO11:
  139. reg = MAX8998_REG_LDO10_LDO11;
  140. if (ldo == MAX8998_LDO10) {
  141. shift = 5;
  142. mask = 0x7;
  143. } else {
  144. shift = 0;
  145. mask = 0x1f;
  146. }
  147. break;
  148. case MAX8998_LDO12 ... MAX8998_LDO17:
  149. reg = MAX8998_REG_LDO12 + (ldo - MAX8998_LDO12);
  150. break;
  151. case MAX8998_BUCK1:
  152. reg = MAX8998_REG_BUCK1_VOLTAGE1 + max8998->buck1_idx;
  153. break;
  154. case MAX8998_BUCK2:
  155. reg = MAX8998_REG_BUCK2_VOLTAGE1 + max8998->buck2_idx;
  156. break;
  157. case MAX8998_BUCK3:
  158. reg = MAX8998_REG_BUCK3;
  159. break;
  160. case MAX8998_BUCK4:
  161. reg = MAX8998_REG_BUCK4;
  162. break;
  163. default:
  164. return -EINVAL;
  165. }
  166. *_reg = reg;
  167. *_shift = shift;
  168. *_mask = mask;
  169. return 0;
  170. }
  171. static int max8998_get_voltage_sel(struct regulator_dev *rdev)
  172. {
  173. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  174. struct i2c_client *i2c = max8998->iodev->i2c;
  175. int reg, shift = 0, mask, ret;
  176. u8 val;
  177. ret = max8998_get_voltage_register(rdev, &reg, &shift, &mask);
  178. if (ret)
  179. return ret;
  180. ret = max8998_read_reg(i2c, reg, &val);
  181. if (ret)
  182. return ret;
  183. val >>= shift;
  184. val &= mask;
  185. return val;
  186. }
  187. static int max8998_set_voltage_ldo_sel(struct regulator_dev *rdev,
  188. unsigned selector)
  189. {
  190. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  191. struct i2c_client *i2c = max8998->iodev->i2c;
  192. int reg, shift = 0, mask, ret;
  193. ret = max8998_get_voltage_register(rdev, &reg, &shift, &mask);
  194. if (ret)
  195. return ret;
  196. ret = max8998_update_reg(i2c, reg, selector<<shift, mask<<shift);
  197. return ret;
  198. }
  199. static inline void buck1_gpio_set(int gpio1, int gpio2, int v)
  200. {
  201. gpio_set_value(gpio1, v & 0x1);
  202. gpio_set_value(gpio2, (v >> 1) & 0x1);
  203. }
  204. static inline void buck2_gpio_set(int gpio, int v)
  205. {
  206. gpio_set_value(gpio, v & 0x1);
  207. }
  208. static int max8998_set_voltage_buck_sel(struct regulator_dev *rdev,
  209. unsigned selector)
  210. {
  211. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  212. struct max8998_platform_data *pdata = max8998->iodev->pdata;
  213. struct i2c_client *i2c = max8998->iodev->i2c;
  214. int buck = rdev_get_id(rdev);
  215. int reg, shift = 0, mask, ret, j;
  216. static u8 buck1_last_val;
  217. ret = max8998_get_voltage_register(rdev, &reg, &shift, &mask);
  218. if (ret)
  219. return ret;
  220. switch (buck) {
  221. case MAX8998_BUCK1:
  222. dev_dbg(max8998->dev,
  223. "BUCK1, selector:%d, buck1_vol1:%d, buck1_vol2:%d\n"
  224. "buck1_vol3:%d, buck1_vol4:%d\n",
  225. selector, max8998->buck1_vol[0], max8998->buck1_vol[1],
  226. max8998->buck1_vol[2], max8998->buck1_vol[3]);
  227. if (gpio_is_valid(pdata->buck1_set1) &&
  228. gpio_is_valid(pdata->buck1_set2)) {
  229. /* check if requested voltage */
  230. /* value is already defined */
  231. for (j = 0; j < ARRAY_SIZE(max8998->buck1_vol); j++) {
  232. if (max8998->buck1_vol[j] == selector) {
  233. max8998->buck1_idx = j;
  234. buck1_gpio_set(pdata->buck1_set1,
  235. pdata->buck1_set2, j);
  236. goto buck1_exit;
  237. }
  238. }
  239. if (pdata->buck_voltage_lock)
  240. return -EINVAL;
  241. /* no predefine regulator found */
  242. max8998->buck1_idx = (buck1_last_val % 2) + 2;
  243. dev_dbg(max8998->dev, "max8998->buck1_idx:%d\n",
  244. max8998->buck1_idx);
  245. max8998->buck1_vol[max8998->buck1_idx] = selector;
  246. ret = max8998_get_voltage_register(rdev, &reg,
  247. &shift,
  248. &mask);
  249. ret = max8998_write_reg(i2c, reg, selector);
  250. buck1_gpio_set(pdata->buck1_set1,
  251. pdata->buck1_set2, max8998->buck1_idx);
  252. buck1_last_val++;
  253. buck1_exit:
  254. dev_dbg(max8998->dev, "%s: SET1:%d, SET2:%d\n",
  255. i2c->name, gpio_get_value(pdata->buck1_set1),
  256. gpio_get_value(pdata->buck1_set2));
  257. break;
  258. } else {
  259. ret = max8998_write_reg(i2c, reg, selector);
  260. }
  261. break;
  262. case MAX8998_BUCK2:
  263. dev_dbg(max8998->dev,
  264. "BUCK2, selector:%d buck2_vol1:%d, buck2_vol2:%d\n",
  265. selector, max8998->buck2_vol[0], max8998->buck2_vol[1]);
  266. if (gpio_is_valid(pdata->buck2_set3)) {
  267. /* check if requested voltage */
  268. /* value is already defined */
  269. for (j = 0; j < ARRAY_SIZE(max8998->buck2_vol); j++) {
  270. if (max8998->buck2_vol[j] == selector) {
  271. max8998->buck2_idx = j;
  272. buck2_gpio_set(pdata->buck2_set3, j);
  273. goto buck2_exit;
  274. }
  275. }
  276. if (pdata->buck_voltage_lock)
  277. return -EINVAL;
  278. max8998_get_voltage_register(rdev,
  279. &reg, &shift, &mask);
  280. ret = max8998_write_reg(i2c, reg, selector);
  281. max8998->buck2_vol[max8998->buck2_idx] = selector;
  282. buck2_gpio_set(pdata->buck2_set3, max8998->buck2_idx);
  283. buck2_exit:
  284. dev_dbg(max8998->dev, "%s: SET3:%d\n", i2c->name,
  285. gpio_get_value(pdata->buck2_set3));
  286. } else {
  287. ret = max8998_write_reg(i2c, reg, selector);
  288. }
  289. break;
  290. case MAX8998_BUCK3:
  291. case MAX8998_BUCK4:
  292. ret = max8998_update_reg(i2c, reg, selector<<shift,
  293. mask<<shift);
  294. break;
  295. }
  296. return ret;
  297. }
  298. static int max8998_set_voltage_buck_time_sel(struct regulator_dev *rdev,
  299. unsigned int old_selector,
  300. unsigned int new_selector)
  301. {
  302. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  303. struct i2c_client *i2c = max8998->iodev->i2c;
  304. int buck = rdev_get_id(rdev);
  305. u8 val = 0;
  306. int difference, ret;
  307. if (buck < MAX8998_BUCK1 || buck > MAX8998_BUCK4)
  308. return -EINVAL;
  309. /* Voltage stabilization */
  310. ret = max8998_read_reg(i2c, MAX8998_REG_ONOFF4, &val);
  311. if (ret)
  312. return ret;
  313. /* lp3974 hasn't got ENRAMP bit - ramp is assumed as true */
  314. /* MAX8998 has ENRAMP bit implemented, so test it*/
  315. if (max8998->iodev->type == TYPE_MAX8998 && !(val & MAX8998_ENRAMP))
  316. return 0;
  317. difference = (new_selector - old_selector) * rdev->desc->uV_step / 1000;
  318. if (difference > 0)
  319. return DIV_ROUND_UP(difference, (val & 0x0f) + 1);
  320. return 0;
  321. }
  322. static int max8998_set_current_limit(struct regulator_dev *rdev,
  323. int min_uA, int max_uA)
  324. {
  325. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  326. struct i2c_client *i2c = max8998->iodev->i2c;
  327. unsigned int n_currents = rdev->desc->n_current_limits;
  328. int i, sel = -1;
  329. if (n_currents == 0)
  330. return -EINVAL;
  331. if (rdev->desc->curr_table) {
  332. const unsigned int *curr_table = rdev->desc->curr_table;
  333. bool ascend = curr_table[n_currents - 1] > curr_table[0];
  334. /* search for closest to maximum */
  335. if (ascend) {
  336. for (i = n_currents - 1; i >= 0; i--) {
  337. if (min_uA <= curr_table[i] &&
  338. curr_table[i] <= max_uA) {
  339. sel = i;
  340. break;
  341. }
  342. }
  343. } else {
  344. for (i = 0; i < n_currents; i++) {
  345. if (min_uA <= curr_table[i] &&
  346. curr_table[i] <= max_uA) {
  347. sel = i;
  348. break;
  349. }
  350. }
  351. }
  352. }
  353. if (sel < 0)
  354. return -EINVAL;
  355. sel <<= ffs(rdev->desc->csel_mask) - 1;
  356. return max8998_update_reg(i2c, rdev->desc->csel_reg,
  357. sel, rdev->desc->csel_mask);
  358. }
  359. static int max8998_get_current_limit(struct regulator_dev *rdev)
  360. {
  361. struct max8998_data *max8998 = rdev_get_drvdata(rdev);
  362. struct i2c_client *i2c = max8998->iodev->i2c;
  363. u8 val;
  364. int ret;
  365. ret = max8998_read_reg(i2c, rdev->desc->csel_reg, &val);
  366. if (ret != 0)
  367. return ret;
  368. val &= rdev->desc->csel_mask;
  369. val >>= ffs(rdev->desc->csel_mask) - 1;
  370. if (rdev->desc->curr_table) {
  371. if (val >= rdev->desc->n_current_limits)
  372. return -EINVAL;
  373. return rdev->desc->curr_table[val];
  374. }
  375. return -EINVAL;
  376. }
  377. static const struct regulator_ops max8998_ldo_ops = {
  378. .list_voltage = regulator_list_voltage_linear,
  379. .map_voltage = regulator_map_voltage_linear,
  380. .is_enabled = max8998_ldo_is_enabled,
  381. .enable = max8998_ldo_enable,
  382. .disable = max8998_ldo_disable,
  383. .get_voltage_sel = max8998_get_voltage_sel,
  384. .set_voltage_sel = max8998_set_voltage_ldo_sel,
  385. };
  386. static const struct regulator_ops max8998_buck_ops = {
  387. .list_voltage = regulator_list_voltage_linear,
  388. .map_voltage = regulator_map_voltage_linear,
  389. .is_enabled = max8998_ldo_is_enabled,
  390. .enable = max8998_ldo_enable,
  391. .disable = max8998_ldo_disable,
  392. .get_voltage_sel = max8998_get_voltage_sel,
  393. .set_voltage_sel = max8998_set_voltage_buck_sel,
  394. .set_voltage_time_sel = max8998_set_voltage_buck_time_sel,
  395. };
  396. static const struct regulator_ops max8998_charger_ops = {
  397. .set_current_limit = max8998_set_current_limit,
  398. .get_current_limit = max8998_get_current_limit,
  399. .is_enabled = max8998_ldo_is_enabled_inverted,
  400. /* Swapped as register is inverted */
  401. .enable = max8998_ldo_disable,
  402. .disable = max8998_ldo_enable,
  403. };
  404. static const struct regulator_ops max8998_others_ops = {
  405. .is_enabled = max8998_ldo_is_enabled,
  406. .enable = max8998_ldo_enable,
  407. .disable = max8998_ldo_disable,
  408. };
  409. #define MAX8998_LINEAR_REG(_name, _ops, _min, _step, _max) \
  410. { \
  411. .name = #_name, \
  412. .id = MAX8998_##_name, \
  413. .ops = _ops, \
  414. .min_uV = (_min), \
  415. .uV_step = (_step), \
  416. .n_voltages = ((_max) - (_min)) / (_step) + 1, \
  417. .type = REGULATOR_VOLTAGE, \
  418. .owner = THIS_MODULE, \
  419. }
  420. #define MAX8998_CURRENT_REG(_name, _ops, _table, _reg, _mask) \
  421. { \
  422. .name = #_name, \
  423. .id = MAX8998_##_name, \
  424. .ops = _ops, \
  425. .curr_table = _table, \
  426. .n_current_limits = ARRAY_SIZE(_table), \
  427. .csel_reg = _reg, \
  428. .csel_mask = _mask, \
  429. .type = REGULATOR_CURRENT, \
  430. .owner = THIS_MODULE, \
  431. }
  432. #define MAX8998_OTHERS_REG(_name, _id) \
  433. { \
  434. .name = #_name, \
  435. .id = _id, \
  436. .ops = &max8998_others_ops, \
  437. .type = REGULATOR_VOLTAGE, \
  438. .owner = THIS_MODULE, \
  439. }
  440. static const struct regulator_desc regulators[] = {
  441. MAX8998_LINEAR_REG(LDO2, &max8998_ldo_ops, 800000, 50000, 1300000),
  442. MAX8998_LINEAR_REG(LDO3, &max8998_ldo_ops, 800000, 50000, 1300000),
  443. MAX8998_LINEAR_REG(LDO4, &max8998_ldo_ops, 1600000, 100000, 3600000),
  444. MAX8998_LINEAR_REG(LDO5, &max8998_ldo_ops, 1600000, 100000, 3600000),
  445. MAX8998_LINEAR_REG(LDO6, &max8998_ldo_ops, 1600000, 100000, 3600000),
  446. MAX8998_LINEAR_REG(LDO7, &max8998_ldo_ops, 1600000, 100000, 3600000),
  447. MAX8998_LINEAR_REG(LDO8, &max8998_ldo_ops, 3000000, 100000, 3600000),
  448. MAX8998_LINEAR_REG(LDO9, &max8998_ldo_ops, 2800000, 100000, 3100000),
  449. MAX8998_LINEAR_REG(LDO10, &max8998_ldo_ops, 950000, 50000, 1300000),
  450. MAX8998_LINEAR_REG(LDO11, &max8998_ldo_ops, 1600000, 100000, 3600000),
  451. MAX8998_LINEAR_REG(LDO12, &max8998_ldo_ops, 800000, 100000, 3300000),
  452. MAX8998_LINEAR_REG(LDO13, &max8998_ldo_ops, 800000, 100000, 3300000),
  453. MAX8998_LINEAR_REG(LDO14, &max8998_ldo_ops, 1200000, 100000, 3300000),
  454. MAX8998_LINEAR_REG(LDO15, &max8998_ldo_ops, 1200000, 100000, 3300000),
  455. MAX8998_LINEAR_REG(LDO16, &max8998_ldo_ops, 1600000, 100000, 3600000),
  456. MAX8998_LINEAR_REG(LDO17, &max8998_ldo_ops, 1600000, 100000, 3600000),
  457. MAX8998_LINEAR_REG(BUCK1, &max8998_buck_ops, 750000, 25000, 1525000),
  458. MAX8998_LINEAR_REG(BUCK2, &max8998_buck_ops, 750000, 25000, 1525000),
  459. MAX8998_LINEAR_REG(BUCK3, &max8998_buck_ops, 1600000, 100000, 3600000),
  460. MAX8998_LINEAR_REG(BUCK4, &max8998_buck_ops, 800000, 100000, 2300000),
  461. MAX8998_OTHERS_REG(EN32KHz-AP, MAX8998_EN32KHZ_AP),
  462. MAX8998_OTHERS_REG(EN32KHz-CP, MAX8998_EN32KHZ_CP),
  463. MAX8998_OTHERS_REG(ENVICHG, MAX8998_ENVICHG),
  464. MAX8998_OTHERS_REG(ESAFEOUT1, MAX8998_ESAFEOUT1),
  465. MAX8998_OTHERS_REG(ESAFEOUT2, MAX8998_ESAFEOUT2),
  466. MAX8998_CURRENT_REG(CHARGER, &max8998_charger_ops,
  467. charger_current_table, MAX8998_REG_CHGR1, 0x7),
  468. };
  469. static int max8998_pmic_dt_parse_dvs_gpio(struct max8998_dev *iodev,
  470. struct max8998_platform_data *pdata,
  471. struct device_node *pmic_np)
  472. {
  473. int gpio;
  474. gpio = of_get_named_gpio(pmic_np, "max8998,pmic-buck1-dvs-gpios", 0);
  475. if (!gpio_is_valid(gpio)) {
  476. dev_err(iodev->dev, "invalid buck1 gpio[0]: %d\n", gpio);
  477. return -EINVAL;
  478. }
  479. pdata->buck1_set1 = gpio;
  480. gpio = of_get_named_gpio(pmic_np, "max8998,pmic-buck1-dvs-gpios", 1);
  481. if (!gpio_is_valid(gpio)) {
  482. dev_err(iodev->dev, "invalid buck1 gpio[1]: %d\n", gpio);
  483. return -EINVAL;
  484. }
  485. pdata->buck1_set2 = gpio;
  486. gpio = of_get_named_gpio(pmic_np, "max8998,pmic-buck2-dvs-gpio", 0);
  487. if (!gpio_is_valid(gpio)) {
  488. dev_err(iodev->dev, "invalid buck 2 gpio: %d\n", gpio);
  489. return -EINVAL;
  490. }
  491. pdata->buck2_set3 = gpio;
  492. return 0;
  493. }
  494. static int max8998_pmic_dt_parse_pdata(struct max8998_dev *iodev,
  495. struct max8998_platform_data *pdata)
  496. {
  497. struct device_node *pmic_np = iodev->dev->of_node;
  498. struct device_node *regulators_np, *reg_np;
  499. struct max8998_regulator_data *rdata;
  500. unsigned int i;
  501. int ret;
  502. regulators_np = of_get_child_by_name(pmic_np, "regulators");
  503. if (!regulators_np) {
  504. dev_err(iodev->dev, "could not find regulators sub-node\n");
  505. return -EINVAL;
  506. }
  507. /* count the number of regulators to be supported in pmic */
  508. pdata->num_regulators = of_get_child_count(regulators_np);
  509. rdata = devm_kcalloc(iodev->dev,
  510. pdata->num_regulators, sizeof(*rdata),
  511. GFP_KERNEL);
  512. if (!rdata) {
  513. of_node_put(regulators_np);
  514. return -ENOMEM;
  515. }
  516. pdata->regulators = rdata;
  517. for (i = 0; i < ARRAY_SIZE(regulators); ++i) {
  518. reg_np = of_get_child_by_name(regulators_np,
  519. regulators[i].name);
  520. if (!reg_np)
  521. continue;
  522. rdata->id = regulators[i].id;
  523. rdata->initdata = of_get_regulator_init_data(iodev->dev,
  524. reg_np,
  525. &regulators[i]);
  526. rdata->reg_node = reg_np;
  527. ++rdata;
  528. }
  529. pdata->num_regulators = rdata - pdata->regulators;
  530. of_node_put(reg_np);
  531. of_node_put(regulators_np);
  532. ret = max8998_pmic_dt_parse_dvs_gpio(iodev, pdata, pmic_np);
  533. if (ret)
  534. return -EINVAL;
  535. if (of_find_property(pmic_np, "max8998,pmic-buck-voltage-lock", NULL))
  536. pdata->buck_voltage_lock = true;
  537. ret = of_property_read_u32(pmic_np,
  538. "max8998,pmic-buck1-default-dvs-idx",
  539. &pdata->buck1_default_idx);
  540. if (!ret && pdata->buck1_default_idx >= 4) {
  541. pdata->buck1_default_idx = 0;
  542. dev_warn(iodev->dev, "invalid value for default dvs index, using 0 instead\n");
  543. }
  544. ret = of_property_read_u32(pmic_np,
  545. "max8998,pmic-buck2-default-dvs-idx",
  546. &pdata->buck2_default_idx);
  547. if (!ret && pdata->buck2_default_idx >= 2) {
  548. pdata->buck2_default_idx = 0;
  549. dev_warn(iodev->dev, "invalid value for default dvs index, using 0 instead\n");
  550. }
  551. ret = of_property_read_u32_array(pmic_np,
  552. "max8998,pmic-buck1-dvs-voltage",
  553. pdata->buck1_voltage,
  554. ARRAY_SIZE(pdata->buck1_voltage));
  555. if (ret) {
  556. dev_err(iodev->dev, "buck1 voltages not specified\n");
  557. return -EINVAL;
  558. }
  559. ret = of_property_read_u32_array(pmic_np,
  560. "max8998,pmic-buck2-dvs-voltage",
  561. pdata->buck2_voltage,
  562. ARRAY_SIZE(pdata->buck2_voltage));
  563. if (ret) {
  564. dev_err(iodev->dev, "buck2 voltages not specified\n");
  565. return -EINVAL;
  566. }
  567. return 0;
  568. }
  569. static int max8998_pmic_probe(struct platform_device *pdev)
  570. {
  571. struct max8998_dev *iodev = dev_get_drvdata(pdev->dev.parent);
  572. struct max8998_platform_data *pdata = iodev->pdata;
  573. struct regulator_config config = { };
  574. struct regulator_dev *rdev;
  575. struct max8998_data *max8998;
  576. struct i2c_client *i2c;
  577. int i, ret;
  578. unsigned int v;
  579. if (!pdata) {
  580. dev_err(pdev->dev.parent, "No platform init data supplied\n");
  581. return -ENODEV;
  582. }
  583. if (IS_ENABLED(CONFIG_OF) && iodev->dev->of_node) {
  584. ret = max8998_pmic_dt_parse_pdata(iodev, pdata);
  585. if (ret)
  586. return ret;
  587. }
  588. max8998 = devm_kzalloc(&pdev->dev, sizeof(struct max8998_data),
  589. GFP_KERNEL);
  590. if (!max8998)
  591. return -ENOMEM;
  592. max8998->dev = &pdev->dev;
  593. max8998->iodev = iodev;
  594. max8998->num_regulators = pdata->num_regulators;
  595. platform_set_drvdata(pdev, max8998);
  596. i2c = max8998->iodev->i2c;
  597. max8998->buck1_idx = pdata->buck1_default_idx;
  598. max8998->buck2_idx = pdata->buck2_default_idx;
  599. /* NOTE: */
  600. /* For unused GPIO NOT marked as -1 (thereof equal to 0) WARN_ON */
  601. /* will be displayed */
  602. /* Check if MAX8998 voltage selection GPIOs are defined */
  603. if (gpio_is_valid(pdata->buck1_set1) &&
  604. gpio_is_valid(pdata->buck1_set2)) {
  605. /* Check if SET1 is not equal to 0 */
  606. if (!pdata->buck1_set1) {
  607. dev_err(&pdev->dev,
  608. "MAX8998 SET1 GPIO defined as 0 !\n");
  609. WARN_ON(!pdata->buck1_set1);
  610. return -EIO;
  611. }
  612. /* Check if SET2 is not equal to 0 */
  613. if (!pdata->buck1_set2) {
  614. dev_err(&pdev->dev,
  615. "MAX8998 SET2 GPIO defined as 0 !\n");
  616. WARN_ON(!pdata->buck1_set2);
  617. return -EIO;
  618. }
  619. gpio_request(pdata->buck1_set1, "MAX8998 BUCK1_SET1");
  620. gpio_direction_output(pdata->buck1_set1,
  621. max8998->buck1_idx & 0x1);
  622. gpio_request(pdata->buck1_set2, "MAX8998 BUCK1_SET2");
  623. gpio_direction_output(pdata->buck1_set2,
  624. (max8998->buck1_idx >> 1) & 0x1);
  625. /* Set predefined values for BUCK1 registers */
  626. for (v = 0; v < ARRAY_SIZE(pdata->buck1_voltage); ++v) {
  627. int index = MAX8998_BUCK1 - MAX8998_LDO2;
  628. i = 0;
  629. while (regulators[index].min_uV +
  630. regulators[index].uV_step * i
  631. < pdata->buck1_voltage[v])
  632. i++;
  633. max8998->buck1_vol[v] = i;
  634. ret = max8998_write_reg(i2c,
  635. MAX8998_REG_BUCK1_VOLTAGE1 + v, i);
  636. if (ret)
  637. return ret;
  638. }
  639. }
  640. if (gpio_is_valid(pdata->buck2_set3)) {
  641. /* Check if SET3 is not equal to 0 */
  642. if (!pdata->buck2_set3) {
  643. dev_err(&pdev->dev,
  644. "MAX8998 SET3 GPIO defined as 0 !\n");
  645. WARN_ON(!pdata->buck2_set3);
  646. return -EIO;
  647. }
  648. gpio_request(pdata->buck2_set3, "MAX8998 BUCK2_SET3");
  649. gpio_direction_output(pdata->buck2_set3,
  650. max8998->buck2_idx & 0x1);
  651. /* Set predefined values for BUCK2 registers */
  652. for (v = 0; v < ARRAY_SIZE(pdata->buck2_voltage); ++v) {
  653. int index = MAX8998_BUCK2 - MAX8998_LDO2;
  654. i = 0;
  655. while (regulators[index].min_uV +
  656. regulators[index].uV_step * i
  657. < pdata->buck2_voltage[v])
  658. i++;
  659. max8998->buck2_vol[v] = i;
  660. ret = max8998_write_reg(i2c,
  661. MAX8998_REG_BUCK2_VOLTAGE1 + v, i);
  662. if (ret)
  663. return ret;
  664. }
  665. }
  666. for (i = 0; i < pdata->num_regulators; i++) {
  667. int index = pdata->regulators[i].id - MAX8998_LDO2;
  668. config.dev = max8998->dev;
  669. config.of_node = pdata->regulators[i].reg_node;
  670. config.init_data = pdata->regulators[i].initdata;
  671. config.driver_data = max8998;
  672. rdev = devm_regulator_register(&pdev->dev, &regulators[index],
  673. &config);
  674. if (IS_ERR(rdev)) {
  675. ret = PTR_ERR(rdev);
  676. dev_err(max8998->dev, "regulator %s init failed (%d)\n",
  677. regulators[index].name, ret);
  678. return ret;
  679. }
  680. }
  681. return 0;
  682. }
  683. static const struct platform_device_id max8998_pmic_id[] = {
  684. { "max8998-pmic", TYPE_MAX8998 },
  685. { "lp3974-pmic", TYPE_LP3974 },
  686. { }
  687. };
  688. MODULE_DEVICE_TABLE(platform, max8998_pmic_id);
  689. static struct platform_driver max8998_pmic_driver = {
  690. .driver = {
  691. .name = "max8998-pmic",
  692. },
  693. .probe = max8998_pmic_probe,
  694. .id_table = max8998_pmic_id,
  695. };
  696. static int __init max8998_pmic_init(void)
  697. {
  698. return platform_driver_register(&max8998_pmic_driver);
  699. }
  700. subsys_initcall(max8998_pmic_init);
  701. static void __exit max8998_pmic_cleanup(void)
  702. {
  703. platform_driver_unregister(&max8998_pmic_driver);
  704. }
  705. module_exit(max8998_pmic_cleanup);
  706. MODULE_DESCRIPTION("MAXIM 8998 voltage regulator driver");
  707. MODULE_AUTHOR("Kyungmin Park <[email protected]>");
  708. MODULE_LICENSE("GPL");