max8998.c 21 KB

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