tps65086-regulator.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2015 Texas Instruments Incorporated - https://www.ti.com/
  4. *
  5. * Author: Andrew F. Davis <afd@ti.com>
  6. *
  7. * Based on the TPS65912 driver
  8. */
  9. #include <linux/module.h>
  10. #include <linux/of.h>
  11. #include <linux/platform_device.h>
  12. #include <linux/regulator/driver.h>
  13. #include <linux/mfd/tps65086.h>
  14. enum tps65086_regulators { BUCK1, BUCK2, BUCK3, BUCK4, BUCK5, BUCK6, LDOA1,
  15. LDOA2, LDOA3, VTT, SWA1, SWB1, SWB2 };
  16. /* Selector for regulator configuration regarding PMIC chip ID. */
  17. enum tps65086_ids {
  18. TPS6508640 = 0,
  19. TPS65086401,
  20. TPS6508641,
  21. TPS65086470,
  22. };
  23. #define TPS65086_REGULATOR(_name, _of, _id, _nv, _vr, _vm, _er, _em, _lr, _dr, _dm) \
  24. [_id] = { \
  25. .desc = { \
  26. .name = _name, \
  27. .of_match = of_match_ptr(_of), \
  28. .regulators_node = "regulators", \
  29. .of_parse_cb = tps65086_of_parse_cb, \
  30. .id = _id, \
  31. .ops = &reg_ops, \
  32. .n_voltages = _nv, \
  33. .type = REGULATOR_VOLTAGE, \
  34. .owner = THIS_MODULE, \
  35. .vsel_reg = _vr, \
  36. .vsel_mask = _vm, \
  37. .enable_reg = _er, \
  38. .enable_mask = _em, \
  39. .volt_table = NULL, \
  40. .linear_ranges = _lr, \
  41. .n_linear_ranges = ARRAY_SIZE(_lr), \
  42. }, \
  43. .decay_reg = _dr, \
  44. .decay_mask = _dm, \
  45. }
  46. #define TPS65086_SWITCH(_name, _of, _id, _er, _em) \
  47. [_id] = { \
  48. .desc = { \
  49. .name = _name, \
  50. .of_match = of_match_ptr(_of), \
  51. .regulators_node = "regulators", \
  52. .of_parse_cb = tps65086_of_parse_cb, \
  53. .id = _id, \
  54. .ops = &switch_ops, \
  55. .type = REGULATOR_VOLTAGE, \
  56. .owner = THIS_MODULE, \
  57. .enable_reg = _er, \
  58. .enable_mask = _em, \
  59. }, \
  60. }
  61. #define TPS65086_REGULATOR_CONFIG(_chip_id, _config) \
  62. [_chip_id] = { \
  63. .config = _config, \
  64. .num_elems = ARRAY_SIZE(_config), \
  65. }
  66. struct tps65086_regulator {
  67. struct regulator_desc desc;
  68. unsigned int decay_reg;
  69. unsigned int decay_mask;
  70. };
  71. struct tps65086_regulator_config {
  72. struct tps65086_regulator * const config;
  73. const unsigned int num_elems;
  74. };
  75. static const struct linear_range tps65086_10mv_ranges[] = {
  76. REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
  77. REGULATOR_LINEAR_RANGE(410000, 0x1, 0x7F, 10000),
  78. };
  79. static const struct linear_range tps65086_buck126_25mv_ranges[] = {
  80. REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
  81. REGULATOR_LINEAR_RANGE(1000000, 0x1, 0x18, 0),
  82. REGULATOR_LINEAR_RANGE(1025000, 0x19, 0x7F, 25000),
  83. };
  84. static const struct linear_range tps65086_buck345_25mv_ranges[] = {
  85. REGULATOR_LINEAR_RANGE(0, 0x0, 0x0, 0),
  86. REGULATOR_LINEAR_RANGE(425000, 0x1, 0x7F, 25000),
  87. };
  88. static const struct linear_range tps65086_ldoa1_ranges[] = {
  89. REGULATOR_LINEAR_RANGE(1350000, 0x0, 0x0, 0),
  90. REGULATOR_LINEAR_RANGE(1500000, 0x1, 0x7, 100000),
  91. REGULATOR_LINEAR_RANGE(2300000, 0x8, 0xB, 100000),
  92. REGULATOR_LINEAR_RANGE(2850000, 0xC, 0xD, 150000),
  93. REGULATOR_LINEAR_RANGE(3300000, 0xE, 0xE, 0),
  94. };
  95. static const struct linear_range tps65086_ldoa23_ranges[] = {
  96. REGULATOR_LINEAR_RANGE(700000, 0x0, 0xD, 50000),
  97. REGULATOR_LINEAR_RANGE(1400000, 0xE, 0xF, 100000),
  98. };
  99. /* Operations permitted on regulators */
  100. static const struct regulator_ops reg_ops = {
  101. .enable = regulator_enable_regmap,
  102. .disable = regulator_disable_regmap,
  103. .is_enabled = regulator_is_enabled_regmap,
  104. .set_voltage_sel = regulator_set_voltage_sel_regmap,
  105. .map_voltage = regulator_map_voltage_linear_range,
  106. .get_voltage_sel = regulator_get_voltage_sel_regmap,
  107. .list_voltage = regulator_list_voltage_linear_range,
  108. };
  109. /* Operations permitted on load switches */
  110. static const struct regulator_ops switch_ops = {
  111. .enable = regulator_enable_regmap,
  112. .disable = regulator_disable_regmap,
  113. .is_enabled = regulator_is_enabled_regmap,
  114. };
  115. static int tps65086_of_parse_cb(struct device_node *dev,
  116. const struct regulator_desc *desc,
  117. struct regulator_config *config);
  118. static struct tps65086_regulator tps6508640_regulator_config[] = {
  119. TPS65086_REGULATOR("BUCK1", "buck1", BUCK1, 0x80, TPS65086_BUCK1CTRL,
  120. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(0),
  121. tps65086_10mv_ranges, TPS65086_BUCK1CTRL,
  122. BIT(0)),
  123. TPS65086_REGULATOR("BUCK2", "buck2", BUCK2, 0x80, TPS65086_BUCK2CTRL,
  124. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(1),
  125. tps65086_10mv_ranges, TPS65086_BUCK2CTRL,
  126. BIT(0)),
  127. TPS65086_REGULATOR("BUCK3", "buck3", BUCK3, 0x80, TPS65086_BUCK3VID,
  128. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(2),
  129. tps65086_10mv_ranges, TPS65086_BUCK3DECAY,
  130. BIT(0)),
  131. TPS65086_REGULATOR("BUCK4", "buck4", BUCK4, 0x80, TPS65086_BUCK4VID,
  132. BUCK_VID_MASK, TPS65086_BUCK4CTRL, BIT(0),
  133. tps65086_10mv_ranges, TPS65086_BUCK4VID,
  134. BIT(0)),
  135. TPS65086_REGULATOR("BUCK5", "buck5", BUCK5, 0x80, TPS65086_BUCK5VID,
  136. BUCK_VID_MASK, TPS65086_BUCK5CTRL, BIT(0),
  137. tps65086_10mv_ranges, TPS65086_BUCK5CTRL,
  138. BIT(0)),
  139. TPS65086_REGULATOR("BUCK6", "buck6", BUCK6, 0x80, TPS65086_BUCK6VID,
  140. BUCK_VID_MASK, TPS65086_BUCK6CTRL, BIT(0),
  141. tps65086_10mv_ranges, TPS65086_BUCK6CTRL,
  142. BIT(0)),
  143. TPS65086_REGULATOR("LDOA1", "ldoa1", LDOA1, 0xF, TPS65086_LDOA1CTRL,
  144. VDOA1_VID_MASK, TPS65086_SWVTT_EN, BIT(7),
  145. tps65086_ldoa1_ranges, 0, 0),
  146. TPS65086_REGULATOR("LDOA2", "ldoa2", LDOA2, 0x10, TPS65086_LDOA2VID,
  147. VDOA23_VID_MASK, TPS65086_LDOA2CTRL, BIT(0),
  148. tps65086_ldoa23_ranges, 0, 0),
  149. TPS65086_REGULATOR("LDOA3", "ldoa3", LDOA3, 0x10, TPS65086_LDOA3VID,
  150. VDOA23_VID_MASK, TPS65086_LDOA3CTRL, BIT(0),
  151. tps65086_ldoa23_ranges, 0, 0),
  152. TPS65086_SWITCH("VTT", "vtt", VTT, TPS65086_SWVTT_EN, BIT(4)),
  153. TPS65086_SWITCH("SWA1", "swa1", SWA1, TPS65086_SWVTT_EN, BIT(5)),
  154. TPS65086_SWITCH("SWB1", "swb1", SWB1, TPS65086_SWVTT_EN, BIT(6)),
  155. TPS65086_SWITCH("SWB2", "swb2", SWB2, TPS65086_LDOA1CTRL, BIT(0)),
  156. };
  157. static struct tps65086_regulator tps65086401_regulator_config[] = {
  158. TPS65086_REGULATOR("BUCK1", "buck1", BUCK1, 0x80, TPS65086_BUCK1CTRL,
  159. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(0),
  160. tps65086_10mv_ranges, TPS65086_BUCK1CTRL,
  161. BIT(0)),
  162. TPS65086_REGULATOR("BUCK2", "buck2", BUCK2, 0x80, TPS65086_BUCK2CTRL,
  163. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(1),
  164. tps65086_10mv_ranges, TPS65086_BUCK2CTRL,
  165. BIT(0)),
  166. TPS65086_REGULATOR("BUCK3", "buck3", BUCK3, 0x80, TPS65086_BUCK3VID,
  167. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(2),
  168. tps65086_10mv_ranges, TPS65086_BUCK3DECAY,
  169. BIT(0)),
  170. TPS65086_REGULATOR("BUCK4", "buck4", BUCK4, 0x80, TPS65086_BUCK4VID,
  171. BUCK_VID_MASK, TPS65086_BUCK4CTRL, BIT(0),
  172. tps65086_10mv_ranges, TPS65086_BUCK4VID,
  173. BIT(0)),
  174. TPS65086_REGULATOR("BUCK5", "buck5", BUCK5, 0x80, TPS65086_BUCK5VID,
  175. BUCK_VID_MASK, TPS65086_BUCK5CTRL, BIT(0),
  176. tps65086_10mv_ranges, TPS65086_BUCK5CTRL,
  177. BIT(0)),
  178. TPS65086_REGULATOR("BUCK6", "buck6", BUCK6, 0x80, TPS65086_BUCK6VID,
  179. BUCK_VID_MASK, TPS65086_BUCK6CTRL, BIT(0),
  180. tps65086_10mv_ranges, TPS65086_BUCK6CTRL,
  181. BIT(0)),
  182. TPS65086_REGULATOR("LDOA1", "ldoa1", LDOA1, 0xF, TPS65086_LDOA1CTRL,
  183. VDOA1_VID_MASK, TPS65086_SWVTT_EN, BIT(7),
  184. tps65086_ldoa1_ranges, 0, 0),
  185. TPS65086_REGULATOR("LDOA2", "ldoa2", LDOA2, 0x10, TPS65086_LDOA2VID,
  186. VDOA23_VID_MASK, TPS65086_LDOA2CTRL, BIT(0),
  187. tps65086_ldoa23_ranges, 0, 0),
  188. TPS65086_REGULATOR("LDOA3", "ldoa3", LDOA3, 0x10, TPS65086_LDOA3VID,
  189. VDOA23_VID_MASK, TPS65086_LDOA3CTRL, BIT(0),
  190. tps65086_ldoa23_ranges, 0, 0),
  191. TPS65086_SWITCH("VTT", "vtt", VTT, TPS65086_SWVTT_EN, BIT(4)),
  192. TPS65086_SWITCH("SWA1", "swa1", SWA1, TPS65086_SWVTT_EN, BIT(5)),
  193. TPS65086_SWITCH("SWB1", "swb1", SWB1, TPS65086_SWVTT_EN, BIT(6)),
  194. };
  195. static struct tps65086_regulator tps6508641_regulator_config[] = {
  196. TPS65086_REGULATOR("BUCK1", "buck1", BUCK1, 0x80, TPS65086_BUCK1CTRL,
  197. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(0),
  198. tps65086_10mv_ranges, TPS65086_BUCK1CTRL,
  199. BIT(0)),
  200. TPS65086_REGULATOR("BUCK2", "buck2", BUCK2, 0x80, TPS65086_BUCK2CTRL,
  201. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(1),
  202. tps65086_10mv_ranges, TPS65086_BUCK2CTRL,
  203. BIT(0)),
  204. TPS65086_REGULATOR("BUCK3", "buck3", BUCK3, 0x80, TPS65086_BUCK3VID,
  205. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(2),
  206. tps65086_10mv_ranges, TPS65086_BUCK3DECAY,
  207. BIT(0)),
  208. TPS65086_REGULATOR("BUCK4", "buck4", BUCK4, 0x80, TPS65086_BUCK4VID,
  209. BUCK_VID_MASK, TPS65086_BUCK4CTRL, BIT(0),
  210. tps65086_10mv_ranges, TPS65086_BUCK4VID,
  211. BIT(0)),
  212. TPS65086_REGULATOR("BUCK5", "buck5", BUCK5, 0x80, TPS65086_BUCK5VID,
  213. BUCK_VID_MASK, TPS65086_BUCK5CTRL, BIT(0),
  214. tps65086_10mv_ranges, TPS65086_BUCK5CTRL,
  215. BIT(0)),
  216. TPS65086_REGULATOR("BUCK6", "buck6", BUCK6, 0x80, TPS65086_BUCK6VID,
  217. BUCK_VID_MASK, TPS65086_BUCK6CTRL, BIT(0),
  218. tps65086_10mv_ranges, TPS65086_BUCK6CTRL,
  219. BIT(0)),
  220. TPS65086_REGULATOR("LDOA1", "ldoa1", LDOA1, 0xF, TPS65086_LDOA1CTRL,
  221. VDOA1_VID_MASK, TPS65086_SWVTT_EN, BIT(7),
  222. tps65086_ldoa1_ranges, 0, 0),
  223. TPS65086_REGULATOR("LDOA2", "ldoa2", LDOA2, 0x10, TPS65086_LDOA2VID,
  224. VDOA23_VID_MASK, TPS65086_LDOA2CTRL, BIT(0),
  225. tps65086_ldoa23_ranges, 0, 0),
  226. TPS65086_REGULATOR("LDOA3", "ldoa3", LDOA3, 0x10, TPS65086_LDOA3VID,
  227. VDOA23_VID_MASK, TPS65086_LDOA3CTRL, BIT(0),
  228. tps65086_ldoa23_ranges, 0, 0),
  229. TPS65086_SWITCH("VTT", "vtt", VTT, TPS65086_SWVTT_EN, BIT(4)),
  230. TPS65086_SWITCH("SWA1", "swa1", SWA1, TPS65086_SWVTT_EN, BIT(5)),
  231. TPS65086_SWITCH("SWB1", "swb1", SWB1, TPS65086_SWVTT_EN, BIT(6)),
  232. };
  233. static struct tps65086_regulator tps65086470_regulator_config[] = {
  234. TPS65086_REGULATOR("BUCK1", "buck1", BUCK1, 0x80, TPS65086_BUCK1CTRL,
  235. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(0),
  236. tps65086_10mv_ranges, TPS65086_BUCK1CTRL,
  237. BIT(0)),
  238. TPS65086_REGULATOR("BUCK2", "buck2", BUCK2, 0x80, TPS65086_BUCK2CTRL,
  239. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(1),
  240. tps65086_10mv_ranges, TPS65086_BUCK2CTRL,
  241. BIT(0)),
  242. TPS65086_REGULATOR("BUCK3", "buck3", BUCK3, 0x80, TPS65086_BUCK3VID,
  243. BUCK_VID_MASK, TPS65086_BUCK123CTRL, BIT(2),
  244. tps65086_10mv_ranges, TPS65086_BUCK3DECAY,
  245. BIT(0)),
  246. TPS65086_REGULATOR("BUCK4", "buck4", BUCK4, 0x80, TPS65086_BUCK4VID,
  247. BUCK_VID_MASK, TPS65086_BUCK4CTRL, BIT(0),
  248. tps65086_10mv_ranges, TPS65086_BUCK4VID,
  249. BIT(0)),
  250. TPS65086_REGULATOR("BUCK5", "buck5", BUCK5, 0x80, TPS65086_BUCK5VID,
  251. BUCK_VID_MASK, TPS65086_BUCK5CTRL, BIT(0),
  252. tps65086_10mv_ranges, TPS65086_BUCK5CTRL,
  253. BIT(0)),
  254. TPS65086_REGULATOR("BUCK6", "buck6", BUCK6, 0x80, TPS65086_BUCK6VID,
  255. BUCK_VID_MASK, TPS65086_BUCK6CTRL, BIT(0),
  256. tps65086_10mv_ranges, TPS65086_BUCK6CTRL,
  257. BIT(0)),
  258. TPS65086_REGULATOR("LDOA1", "ldoa1", LDOA1, 0xF, TPS65086_LDOA1CTRL,
  259. VDOA1_VID_MASK, TPS65086_LDOA1CTRL, BIT(0),
  260. tps65086_ldoa1_ranges, 0, 0),
  261. TPS65086_REGULATOR("LDOA2", "ldoa2", LDOA2, 0x10, TPS65086_LDOA2VID,
  262. VDOA23_VID_MASK, TPS65086_LDOA2CTRL, BIT(0),
  263. tps65086_ldoa23_ranges, 0, 0),
  264. TPS65086_REGULATOR("LDOA3", "ldoa3", LDOA3, 0x10, TPS65086_LDOA3VID,
  265. VDOA23_VID_MASK, TPS65086_LDOA3CTRL, BIT(0),
  266. tps65086_ldoa23_ranges, 0, 0),
  267. TPS65086_SWITCH("VTT", "vtt", VTT, TPS65086_SWVTT_EN, BIT(4)),
  268. TPS65086_SWITCH("SWA1", "swa1", SWA1, TPS65086_SWVTT_EN, BIT(5)),
  269. TPS65086_SWITCH("SWB1", "swb1", SWB1, TPS65086_SWVTT_EN, BIT(6)),
  270. TPS65086_SWITCH("SWB2", "swb2", SWB2, TPS65086_SWVTT_EN, BIT(7)),
  271. };
  272. static const struct tps65086_regulator_config regulator_configs[] = {
  273. TPS65086_REGULATOR_CONFIG(TPS6508640, tps6508640_regulator_config),
  274. TPS65086_REGULATOR_CONFIG(TPS65086401, tps65086401_regulator_config),
  275. TPS65086_REGULATOR_CONFIG(TPS6508641, tps6508641_regulator_config),
  276. TPS65086_REGULATOR_CONFIG(TPS65086470, tps65086470_regulator_config)
  277. };
  278. static int tps65086_of_parse_cb(struct device_node *node,
  279. const struct regulator_desc *desc,
  280. struct regulator_config *config)
  281. {
  282. struct tps65086 * const tps = dev_get_drvdata(config->dev);
  283. struct tps65086_regulator *regulators = tps->reg_config->config;
  284. int ret;
  285. /* Check for 25mV step mode */
  286. if (of_property_read_bool(node, "ti,regulator-step-size-25mv")) {
  287. switch (desc->id) {
  288. case BUCK1:
  289. case BUCK2:
  290. case BUCK6:
  291. regulators[desc->id].desc.linear_ranges =
  292. tps65086_buck126_25mv_ranges;
  293. regulators[desc->id].desc.n_linear_ranges =
  294. ARRAY_SIZE(tps65086_buck126_25mv_ranges);
  295. break;
  296. case BUCK3:
  297. case BUCK4:
  298. case BUCK5:
  299. regulators[desc->id].desc.linear_ranges =
  300. tps65086_buck345_25mv_ranges;
  301. regulators[desc->id].desc.n_linear_ranges =
  302. ARRAY_SIZE(tps65086_buck345_25mv_ranges);
  303. break;
  304. default:
  305. dev_warn(config->dev, "25mV step mode only valid for BUCK regulators\n");
  306. }
  307. }
  308. /* Check for decay mode */
  309. if (desc->id <= BUCK6 && of_property_read_bool(node, "ti,regulator-decay")) {
  310. ret = regmap_write_bits(config->regmap,
  311. regulators[desc->id].decay_reg,
  312. regulators[desc->id].decay_mask,
  313. regulators[desc->id].decay_mask);
  314. if (ret) {
  315. dev_err(config->dev, "Error setting decay\n");
  316. return ret;
  317. }
  318. }
  319. return 0;
  320. }
  321. static int tps65086_regulator_probe(struct platform_device *pdev)
  322. {
  323. struct tps65086 *tps = dev_get_drvdata(pdev->dev.parent);
  324. struct regulator_config config = { };
  325. unsigned int selector_reg_config;
  326. struct regulator_dev *rdev;
  327. int i;
  328. /* Select regulator configuration for used PMIC device */
  329. switch (tps->chip_id) {
  330. case TPS6508640_ID:
  331. selector_reg_config = TPS6508640;
  332. break;
  333. case TPS65086401_ID:
  334. selector_reg_config = TPS65086401;
  335. break;
  336. case TPS6508641_ID:
  337. selector_reg_config = TPS6508641;
  338. break;
  339. case TPS65086470_ID:
  340. selector_reg_config = TPS65086470;
  341. break;
  342. default:
  343. dev_err(tps->dev, "Unknown device ID. Cannot determine regulator config.\n");
  344. return -ENODEV;
  345. }
  346. tps->reg_config = &regulator_configs[selector_reg_config];
  347. platform_set_drvdata(pdev, tps);
  348. config.dev = &pdev->dev;
  349. config.dev->of_node = tps->dev->of_node;
  350. config.driver_data = tps;
  351. config.regmap = tps->regmap;
  352. for (i = 0; i < tps->reg_config->num_elems; ++i) {
  353. struct regulator_desc * const desc_ptr = &tps->reg_config->config[i].desc;
  354. dev_dbg(tps->dev, "Index: %u; Regulator name: \"%s\"; Regulator ID: %d\n",
  355. i, desc_ptr->name, desc_ptr->id);
  356. rdev = devm_regulator_register(&pdev->dev, desc_ptr, &config);
  357. if (IS_ERR(rdev)) {
  358. dev_err(tps->dev, "failed to register %d \"%s\" regulator\n",
  359. i, desc_ptr->name);
  360. return PTR_ERR(rdev);
  361. }
  362. }
  363. return 0;
  364. }
  365. static const struct platform_device_id tps65086_regulator_id_table[] = {
  366. { "tps65086-regulator", },
  367. { /* sentinel */ }
  368. };
  369. MODULE_DEVICE_TABLE(platform, tps65086_regulator_id_table);
  370. static struct platform_driver tps65086_regulator_driver = {
  371. .driver = {
  372. .name = "tps65086-regulator",
  373. .probe_type = PROBE_PREFER_ASYNCHRONOUS,
  374. },
  375. .probe = tps65086_regulator_probe,
  376. .id_table = tps65086_regulator_id_table,
  377. };
  378. module_platform_driver(tps65086_regulator_driver);
  379. MODULE_AUTHOR("Andrew F. Davis <afd@ti.com>");
  380. MODULE_DESCRIPTION("TPS65086 Regulator driver");
  381. MODULE_LICENSE("GPL v2");