lp8755.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * LP8755 High Performance Power Management Unit : System Interface Driver
  4. * (based on rev. 0.26)
  5. * Copyright 2012 Texas Instruments
  6. *
  7. * Author: Daniel(Geon Si) Jeong <[email protected]>
  8. */
  9. #include <linux/module.h>
  10. #include <linux/slab.h>
  11. #include <linux/i2c.h>
  12. #include <linux/err.h>
  13. #include <linux/irq.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/gpio.h>
  16. #include <linux/regmap.h>
  17. #include <linux/uaccess.h>
  18. #include <linux/regulator/driver.h>
  19. #include <linux/regulator/machine.h>
  20. #include <linux/platform_data/lp8755.h>
  21. #define LP8755_REG_BUCK0 0x00
  22. #define LP8755_REG_BUCK1 0x03
  23. #define LP8755_REG_BUCK2 0x04
  24. #define LP8755_REG_BUCK3 0x01
  25. #define LP8755_REG_BUCK4 0x05
  26. #define LP8755_REG_BUCK5 0x02
  27. #define LP8755_REG_MAX 0xFF
  28. #define LP8755_BUCK_EN_M BIT(7)
  29. #define LP8755_BUCK_LINEAR_OUT_MAX 0x76
  30. #define LP8755_BUCK_VOUT_M 0x7F
  31. struct lp8755_mphase {
  32. int nreg;
  33. int buck_num[LP8755_BUCK_MAX];
  34. };
  35. struct lp8755_chip {
  36. struct device *dev;
  37. struct regmap *regmap;
  38. struct lp8755_platform_data *pdata;
  39. int irq;
  40. unsigned int irqmask;
  41. int mphase;
  42. struct regulator_dev *rdev[LP8755_BUCK_MAX];
  43. };
  44. static int lp8755_buck_enable_time(struct regulator_dev *rdev)
  45. {
  46. int ret;
  47. unsigned int regval;
  48. enum lp8755_bucks id = rdev_get_id(rdev);
  49. ret = regmap_read(rdev->regmap, 0x12 + id, &regval);
  50. if (ret < 0) {
  51. dev_err(&rdev->dev, "i2c access error %s\n", __func__);
  52. return ret;
  53. }
  54. return (regval & 0xff) * 100;
  55. }
  56. static int lp8755_buck_set_mode(struct regulator_dev *rdev, unsigned int mode)
  57. {
  58. int ret;
  59. unsigned int regbval = 0x0;
  60. enum lp8755_bucks id = rdev_get_id(rdev);
  61. struct lp8755_chip *pchip = rdev_get_drvdata(rdev);
  62. switch (mode) {
  63. case REGULATOR_MODE_FAST:
  64. /* forced pwm mode */
  65. regbval = (0x01 << id);
  66. break;
  67. case REGULATOR_MODE_NORMAL:
  68. /* enable automatic pwm/pfm mode */
  69. ret = regmap_update_bits(rdev->regmap, 0x08 + id, 0x20, 0x00);
  70. if (ret < 0)
  71. goto err_i2c;
  72. break;
  73. case REGULATOR_MODE_IDLE:
  74. /* enable automatic pwm/pfm/lppfm mode */
  75. ret = regmap_update_bits(rdev->regmap, 0x08 + id, 0x20, 0x20);
  76. if (ret < 0)
  77. goto err_i2c;
  78. ret = regmap_update_bits(rdev->regmap, 0x10, 0x01, 0x01);
  79. if (ret < 0)
  80. goto err_i2c;
  81. break;
  82. default:
  83. dev_err(pchip->dev, "Not supported buck mode %s\n", __func__);
  84. /* forced pwm mode */
  85. regbval = (0x01 << id);
  86. }
  87. ret = regmap_update_bits(rdev->regmap, 0x06, 0x01 << id, regbval);
  88. if (ret < 0)
  89. goto err_i2c;
  90. return ret;
  91. err_i2c:
  92. dev_err(&rdev->dev, "i2c access error %s\n", __func__);
  93. return ret;
  94. }
  95. static unsigned int lp8755_buck_get_mode(struct regulator_dev *rdev)
  96. {
  97. int ret;
  98. unsigned int regval;
  99. enum lp8755_bucks id = rdev_get_id(rdev);
  100. ret = regmap_read(rdev->regmap, 0x06, &regval);
  101. if (ret < 0)
  102. goto err_i2c;
  103. /* mode fast means forced pwm mode */
  104. if (regval & (0x01 << id))
  105. return REGULATOR_MODE_FAST;
  106. ret = regmap_read(rdev->regmap, 0x08 + id, &regval);
  107. if (ret < 0)
  108. goto err_i2c;
  109. /* mode idle means automatic pwm/pfm/lppfm mode */
  110. if (regval & 0x20)
  111. return REGULATOR_MODE_IDLE;
  112. /* mode normal means automatic pwm/pfm mode */
  113. return REGULATOR_MODE_NORMAL;
  114. err_i2c:
  115. dev_err(&rdev->dev, "i2c access error %s\n", __func__);
  116. return 0;
  117. }
  118. static const unsigned int lp8755_buck_ramp_table[] = {
  119. 30000, 15000, 7500, 3800, 1900, 940, 470, 230
  120. };
  121. static const struct regulator_ops lp8755_buck_ops = {
  122. .map_voltage = regulator_map_voltage_linear,
  123. .list_voltage = regulator_list_voltage_linear,
  124. .set_voltage_sel = regulator_set_voltage_sel_regmap,
  125. .get_voltage_sel = regulator_get_voltage_sel_regmap,
  126. .enable = regulator_enable_regmap,
  127. .disable = regulator_disable_regmap,
  128. .is_enabled = regulator_is_enabled_regmap,
  129. .enable_time = lp8755_buck_enable_time,
  130. .set_mode = lp8755_buck_set_mode,
  131. .get_mode = lp8755_buck_get_mode,
  132. .set_ramp_delay = regulator_set_ramp_delay_regmap,
  133. };
  134. #define lp8755_rail(_id) "lp8755_buck"#_id
  135. #define lp8755_buck_init(_id)\
  136. {\
  137. .constraints = {\
  138. .name = lp8755_rail(_id),\
  139. .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,\
  140. .min_uV = 500000,\
  141. .max_uV = 1675000,\
  142. },\
  143. }
  144. static struct regulator_init_data lp8755_reg_default[LP8755_BUCK_MAX] = {
  145. [LP8755_BUCK0] = lp8755_buck_init(0),
  146. [LP8755_BUCK1] = lp8755_buck_init(1),
  147. [LP8755_BUCK2] = lp8755_buck_init(2),
  148. [LP8755_BUCK3] = lp8755_buck_init(3),
  149. [LP8755_BUCK4] = lp8755_buck_init(4),
  150. [LP8755_BUCK5] = lp8755_buck_init(5),
  151. };
  152. static const struct lp8755_mphase mphase_buck[MPHASE_CONF_MAX] = {
  153. { 3, { LP8755_BUCK0, LP8755_BUCK3, LP8755_BUCK5 } },
  154. { 6, { LP8755_BUCK0, LP8755_BUCK1, LP8755_BUCK2, LP8755_BUCK3,
  155. LP8755_BUCK4, LP8755_BUCK5 } },
  156. { 5, { LP8755_BUCK0, LP8755_BUCK2, LP8755_BUCK3, LP8755_BUCK4,
  157. LP8755_BUCK5} },
  158. { 4, { LP8755_BUCK0, LP8755_BUCK3, LP8755_BUCK4, LP8755_BUCK5} },
  159. { 3, { LP8755_BUCK0, LP8755_BUCK4, LP8755_BUCK5} },
  160. { 2, { LP8755_BUCK0, LP8755_BUCK5} },
  161. { 1, { LP8755_BUCK0} },
  162. { 2, { LP8755_BUCK0, LP8755_BUCK3} },
  163. { 4, { LP8755_BUCK0, LP8755_BUCK2, LP8755_BUCK3, LP8755_BUCK5} },
  164. };
  165. static int lp8755_init_data(struct lp8755_chip *pchip)
  166. {
  167. unsigned int regval;
  168. int ret, icnt, buck_num;
  169. struct lp8755_platform_data *pdata = pchip->pdata;
  170. /* read back muti-phase configuration */
  171. ret = regmap_read(pchip->regmap, 0x3D, &regval);
  172. if (ret < 0)
  173. goto out_i2c_error;
  174. pchip->mphase = regval & 0x0F;
  175. /* set default data based on multi-phase config */
  176. for (icnt = 0; icnt < mphase_buck[pchip->mphase].nreg; icnt++) {
  177. buck_num = mphase_buck[pchip->mphase].buck_num[icnt];
  178. pdata->buck_data[buck_num] = &lp8755_reg_default[buck_num];
  179. }
  180. return ret;
  181. out_i2c_error:
  182. dev_err(pchip->dev, "i2c access error %s\n", __func__);
  183. return ret;
  184. }
  185. #define lp8755_buck_desc(_id)\
  186. {\
  187. .name = lp8755_rail(_id),\
  188. .id = LP8755_BUCK##_id,\
  189. .ops = &lp8755_buck_ops,\
  190. .n_voltages = LP8755_BUCK_LINEAR_OUT_MAX+1,\
  191. .uV_step = 10000,\
  192. .min_uV = 500000,\
  193. .type = REGULATOR_VOLTAGE,\
  194. .owner = THIS_MODULE,\
  195. .enable_reg = LP8755_REG_BUCK##_id,\
  196. .enable_mask = LP8755_BUCK_EN_M,\
  197. .vsel_reg = LP8755_REG_BUCK##_id,\
  198. .vsel_mask = LP8755_BUCK_VOUT_M,\
  199. .ramp_reg = (LP8755_BUCK##_id) + 0x7,\
  200. .ramp_mask = 0x7,\
  201. .ramp_delay_table = lp8755_buck_ramp_table,\
  202. .n_ramp_values = ARRAY_SIZE(lp8755_buck_ramp_table),\
  203. }
  204. static const struct regulator_desc lp8755_regulators[] = {
  205. lp8755_buck_desc(0),
  206. lp8755_buck_desc(1),
  207. lp8755_buck_desc(2),
  208. lp8755_buck_desc(3),
  209. lp8755_buck_desc(4),
  210. lp8755_buck_desc(5),
  211. };
  212. static int lp8755_regulator_init(struct lp8755_chip *pchip)
  213. {
  214. int ret, icnt, buck_num;
  215. struct lp8755_platform_data *pdata = pchip->pdata;
  216. struct regulator_config rconfig = { };
  217. rconfig.regmap = pchip->regmap;
  218. rconfig.dev = pchip->dev;
  219. rconfig.driver_data = pchip;
  220. for (icnt = 0; icnt < mphase_buck[pchip->mphase].nreg; icnt++) {
  221. buck_num = mphase_buck[pchip->mphase].buck_num[icnt];
  222. rconfig.init_data = pdata->buck_data[buck_num];
  223. rconfig.of_node = pchip->dev->of_node;
  224. pchip->rdev[buck_num] =
  225. devm_regulator_register(pchip->dev,
  226. &lp8755_regulators[buck_num], &rconfig);
  227. if (IS_ERR(pchip->rdev[buck_num])) {
  228. ret = PTR_ERR(pchip->rdev[buck_num]);
  229. pchip->rdev[buck_num] = NULL;
  230. dev_err(pchip->dev, "regulator init failed: buck %d\n",
  231. buck_num);
  232. return ret;
  233. }
  234. }
  235. return 0;
  236. }
  237. static irqreturn_t lp8755_irq_handler(int irq, void *data)
  238. {
  239. int ret, icnt;
  240. unsigned int flag0, flag1;
  241. struct lp8755_chip *pchip = data;
  242. /* read flag0 register */
  243. ret = regmap_read(pchip->regmap, 0x0D, &flag0);
  244. if (ret < 0)
  245. goto err_i2c;
  246. /* clear flag register to pull up int. pin */
  247. ret = regmap_write(pchip->regmap, 0x0D, 0x00);
  248. if (ret < 0)
  249. goto err_i2c;
  250. /* sent power fault detection event to specific regulator */
  251. for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
  252. if ((flag0 & (0x4 << icnt))
  253. && (pchip->irqmask & (0x04 << icnt))
  254. && (pchip->rdev[icnt] != NULL)) {
  255. regulator_notifier_call_chain(pchip->rdev[icnt],
  256. LP8755_EVENT_PWR_FAULT,
  257. NULL);
  258. }
  259. /* read flag1 register */
  260. ret = regmap_read(pchip->regmap, 0x0E, &flag1);
  261. if (ret < 0)
  262. goto err_i2c;
  263. /* clear flag register to pull up int. pin */
  264. ret = regmap_write(pchip->regmap, 0x0E, 0x00);
  265. if (ret < 0)
  266. goto err_i2c;
  267. /* send OCP event to all regulator devices */
  268. if ((flag1 & 0x01) && (pchip->irqmask & 0x01))
  269. for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
  270. if (pchip->rdev[icnt] != NULL) {
  271. regulator_notifier_call_chain(pchip->rdev[icnt],
  272. LP8755_EVENT_OCP,
  273. NULL);
  274. }
  275. /* send OVP event to all regulator devices */
  276. if ((flag1 & 0x02) && (pchip->irqmask & 0x02))
  277. for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
  278. if (pchip->rdev[icnt] != NULL) {
  279. regulator_notifier_call_chain(pchip->rdev[icnt],
  280. LP8755_EVENT_OVP,
  281. NULL);
  282. }
  283. return IRQ_HANDLED;
  284. err_i2c:
  285. dev_err(pchip->dev, "i2c access error %s\n", __func__);
  286. return IRQ_NONE;
  287. }
  288. static int lp8755_int_config(struct lp8755_chip *pchip)
  289. {
  290. int ret;
  291. unsigned int regval;
  292. if (pchip->irq == 0) {
  293. dev_warn(pchip->dev, "not use interrupt : %s\n", __func__);
  294. return 0;
  295. }
  296. ret = regmap_read(pchip->regmap, 0x0F, &regval);
  297. if (ret < 0) {
  298. dev_err(pchip->dev, "i2c access error %s\n", __func__);
  299. return ret;
  300. }
  301. pchip->irqmask = regval;
  302. return devm_request_threaded_irq(pchip->dev, pchip->irq, NULL,
  303. lp8755_irq_handler,
  304. IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
  305. "lp8755-irq", pchip);
  306. }
  307. static const struct regmap_config lp8755_regmap = {
  308. .reg_bits = 8,
  309. .val_bits = 8,
  310. .max_register = LP8755_REG_MAX,
  311. };
  312. static int lp8755_probe(struct i2c_client *client,
  313. const struct i2c_device_id *id)
  314. {
  315. int ret, icnt;
  316. struct lp8755_chip *pchip;
  317. struct lp8755_platform_data *pdata = dev_get_platdata(&client->dev);
  318. if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  319. dev_err(&client->dev, "i2c functionality check fail.\n");
  320. return -EOPNOTSUPP;
  321. }
  322. pchip = devm_kzalloc(&client->dev,
  323. sizeof(struct lp8755_chip), GFP_KERNEL);
  324. if (!pchip)
  325. return -ENOMEM;
  326. pchip->dev = &client->dev;
  327. pchip->regmap = devm_regmap_init_i2c(client, &lp8755_regmap);
  328. if (IS_ERR(pchip->regmap)) {
  329. ret = PTR_ERR(pchip->regmap);
  330. dev_err(&client->dev, "fail to allocate regmap %d\n", ret);
  331. return ret;
  332. }
  333. i2c_set_clientdata(client, pchip);
  334. if (pdata != NULL) {
  335. pchip->pdata = pdata;
  336. pchip->mphase = pdata->mphase;
  337. } else {
  338. pchip->pdata = devm_kzalloc(pchip->dev,
  339. sizeof(struct lp8755_platform_data),
  340. GFP_KERNEL);
  341. if (!pchip->pdata)
  342. return -ENOMEM;
  343. ret = lp8755_init_data(pchip);
  344. if (ret < 0) {
  345. dev_err(&client->dev, "fail to initialize chip\n");
  346. return ret;
  347. }
  348. }
  349. ret = lp8755_regulator_init(pchip);
  350. if (ret < 0) {
  351. dev_err(&client->dev, "fail to initialize regulators\n");
  352. goto err;
  353. }
  354. pchip->irq = client->irq;
  355. ret = lp8755_int_config(pchip);
  356. if (ret < 0) {
  357. dev_err(&client->dev, "fail to irq config\n");
  358. goto err;
  359. }
  360. return ret;
  361. err:
  362. /* output disable */
  363. for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
  364. regmap_write(pchip->regmap, icnt, 0x00);
  365. return ret;
  366. }
  367. static void lp8755_remove(struct i2c_client *client)
  368. {
  369. int icnt;
  370. struct lp8755_chip *pchip = i2c_get_clientdata(client);
  371. for (icnt = 0; icnt < LP8755_BUCK_MAX; icnt++)
  372. regmap_write(pchip->regmap, icnt, 0x00);
  373. }
  374. static const struct i2c_device_id lp8755_id[] = {
  375. {LP8755_NAME, 0},
  376. {}
  377. };
  378. MODULE_DEVICE_TABLE(i2c, lp8755_id);
  379. static struct i2c_driver lp8755_i2c_driver = {
  380. .driver = {
  381. .name = LP8755_NAME,
  382. },
  383. .probe = lp8755_probe,
  384. .remove = lp8755_remove,
  385. .id_table = lp8755_id,
  386. };
  387. static int __init lp8755_init(void)
  388. {
  389. return i2c_add_driver(&lp8755_i2c_driver);
  390. }
  391. subsys_initcall(lp8755_init);
  392. static void __exit lp8755_exit(void)
  393. {
  394. i2c_del_driver(&lp8755_i2c_driver);
  395. }
  396. module_exit(lp8755_exit);
  397. MODULE_DESCRIPTION("Texas Instruments lp8755 driver");
  398. MODULE_AUTHOR("Daniel Jeong <[email protected]>");
  399. MODULE_LICENSE("GPL v2");