Merge tag 'for-linus' of git://github.com/openrisc/linux
[linux-2.6-microblaze.git] / drivers / regulator / max77686-regulator.c
1 // SPDX-License-Identifier: GPL-2.0+
2 //
3 // max77686.c - Regulator driver for the Maxim 77686
4 //
5 // Copyright (C) 2012 Samsung Electronics
6 // Chiwoong Byun <woong.byun@samsung.com>
7 // Jonghwa Lee <jonghwa3.lee@samsung.com>
8 //
9 // This driver is based on max8997.c
10
11 #include <linux/kernel.h>
12 #include <linux/bug.h>
13 #include <linux/err.h>
14 #include <linux/gpio/consumer.h>
15 #include <linux/slab.h>
16 #include <linux/platform_device.h>
17 #include <linux/regulator/driver.h>
18 #include <linux/regulator/machine.h>
19 #include <linux/regulator/of_regulator.h>
20 #include <linux/mfd/max77686.h>
21 #include <linux/mfd/max77686-private.h>
22
23 #define MAX77686_LDO_MINUV      800000
24 #define MAX77686_LDO_UVSTEP     50000
25 #define MAX77686_LDO_LOW_MINUV  800000
26 #define MAX77686_LDO_LOW_UVSTEP 25000
27 #define MAX77686_BUCK_MINUV     750000
28 #define MAX77686_BUCK_UVSTEP    50000
29 #define MAX77686_BUCK_ENABLE_TIME       40              /* us */
30 #define MAX77686_DVS_ENABLE_TIME        22              /* us */
31 #define MAX77686_RAMP_DELAY     100000                  /* uV/us */
32 #define MAX77686_DVS_RAMP_DELAY 27500                   /* uV/us */
33 #define MAX77686_DVS_MINUV      600000
34 #define MAX77686_DVS_UVSTEP     12500
35
36 /*
37  * Value for configuring buck[89] and LDO{20,21,22} as GPIO control.
38  * It is the same as 'off' for other regulators.
39  */
40 #define MAX77686_GPIO_CONTROL           0x0
41 /*
42  * Values used for configuring LDOs and bucks.
43  * Forcing low power mode: LDO1, 3-5, 9, 13, 17-26
44  */
45 #define MAX77686_LDO_LOWPOWER           0x1
46 /*
47  * On/off controlled by PWRREQ:
48  *  - LDO2, 6-8, 10-12, 14-16
49  *  - buck[1234]
50  */
51 #define MAX77686_OFF_PWRREQ             0x1
52 /* Low power mode controlled by PWRREQ: All LDOs */
53 #define MAX77686_LDO_LOWPOWER_PWRREQ    0x2
54 /* Forcing low power mode: buck[234] */
55 #define MAX77686_BUCK_LOWPOWER          0x2
56 #define MAX77686_NORMAL                 0x3
57
58 #define MAX77686_OPMODE_SHIFT   6
59 #define MAX77686_OPMODE_BUCK234_SHIFT   4
60 #define MAX77686_OPMODE_MASK    0x3
61
62 #define MAX77686_VSEL_MASK      0x3F
63 #define MAX77686_DVS_VSEL_MASK  0xFF
64
65 #define MAX77686_RAMP_RATE_MASK 0xC0
66
67 #define MAX77686_REGULATORS     MAX77686_REG_MAX
68 #define MAX77686_LDOS           26
69
70 struct max77686_data {
71         struct device *dev;
72         DECLARE_BITMAP(gpio_enabled, MAX77686_REGULATORS);
73
74         /* Array indexed by regulator id */
75         unsigned int opmode[MAX77686_REGULATORS];
76 };
77
78 static unsigned int max77686_get_opmode_shift(int id)
79 {
80         switch (id) {
81         case MAX77686_BUCK1:
82         case MAX77686_BUCK5 ... MAX77686_BUCK9:
83                 return 0;
84         case MAX77686_BUCK2 ... MAX77686_BUCK4:
85                 return MAX77686_OPMODE_BUCK234_SHIFT;
86         default:
87                 /* all LDOs */
88                 return MAX77686_OPMODE_SHIFT;
89         }
90 }
91
92 /*
93  * When regulator is configured for GPIO control then it
94  * replaces "normal" mode. Any change from low power mode to normal
95  * should actually change to GPIO control.
96  * Map normal mode to proper value for such regulators.
97  */
98 static unsigned int max77686_map_normal_mode(struct max77686_data *max77686,
99                                              int id)
100 {
101         switch (id) {
102         case MAX77686_BUCK8:
103         case MAX77686_BUCK9:
104         case MAX77686_LDO20 ... MAX77686_LDO22:
105                 if (test_bit(id, max77686->gpio_enabled))
106                         return MAX77686_GPIO_CONTROL;
107         }
108
109         return MAX77686_NORMAL;
110 }
111
112 /* Some BUCKs and LDOs supports Normal[ON/OFF] mode during suspend */
113 static int max77686_set_suspend_disable(struct regulator_dev *rdev)
114 {
115         unsigned int val, shift;
116         struct max77686_data *max77686 = rdev_get_drvdata(rdev);
117         int ret, id = rdev_get_id(rdev);
118
119         shift = max77686_get_opmode_shift(id);
120         val = MAX77686_OFF_PWRREQ;
121
122         ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
123                                  rdev->desc->enable_mask, val << shift);
124         if (ret)
125                 return ret;
126
127         max77686->opmode[id] = val;
128         return 0;
129 }
130
131 /* Some LDOs supports [LPM/Normal]ON mode during suspend state */
132 static int max77686_set_suspend_mode(struct regulator_dev *rdev,
133                                      unsigned int mode)
134 {
135         struct max77686_data *max77686 = rdev_get_drvdata(rdev);
136         unsigned int val;
137         int ret, id = rdev_get_id(rdev);
138
139         /* BUCK[5-9] doesn't support this feature */
140         if (id >= MAX77686_BUCK5)
141                 return 0;
142
143         switch (mode) {
144         case REGULATOR_MODE_IDLE:                       /* ON in LP Mode */
145                 val = MAX77686_LDO_LOWPOWER_PWRREQ;
146                 break;
147         case REGULATOR_MODE_NORMAL:                     /* ON in Normal Mode */
148                 val = max77686_map_normal_mode(max77686, id);
149                 break;
150         default:
151                 pr_warn("%s: regulator_suspend_mode : 0x%x not supported\n",
152                         rdev->desc->name, mode);
153                 return -EINVAL;
154         }
155
156         ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
157                                   rdev->desc->enable_mask,
158                                   val << MAX77686_OPMODE_SHIFT);
159         if (ret)
160                 return ret;
161
162         max77686->opmode[id] = val;
163         return 0;
164 }
165
166 /* Some LDOs supports LPM-ON/OFF/Normal-ON mode during suspend state */
167 static int max77686_ldo_set_suspend_mode(struct regulator_dev *rdev,
168                                      unsigned int mode)
169 {
170         unsigned int val;
171         struct max77686_data *max77686 = rdev_get_drvdata(rdev);
172         int ret, id = rdev_get_id(rdev);
173
174         switch (mode) {
175         case REGULATOR_MODE_STANDBY:                    /* switch off */
176                 val = MAX77686_OFF_PWRREQ;
177                 break;
178         case REGULATOR_MODE_IDLE:                       /* ON in LP Mode */
179                 val = MAX77686_LDO_LOWPOWER_PWRREQ;
180                 break;
181         case REGULATOR_MODE_NORMAL:                     /* ON in Normal Mode */
182                 val = max77686_map_normal_mode(max77686, id);
183                 break;
184         default:
185                 pr_warn("%s: regulator_suspend_mode : 0x%x not supported\n",
186                         rdev->desc->name, mode);
187                 return -EINVAL;
188         }
189
190         ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
191                                  rdev->desc->enable_mask,
192                                  val << MAX77686_OPMODE_SHIFT);
193         if (ret)
194                 return ret;
195
196         max77686->opmode[id] = val;
197         return 0;
198 }
199
200 static int max77686_enable(struct regulator_dev *rdev)
201 {
202         struct max77686_data *max77686 = rdev_get_drvdata(rdev);
203         unsigned int shift;
204         int id = rdev_get_id(rdev);
205
206         shift = max77686_get_opmode_shift(id);
207
208         if (max77686->opmode[id] == MAX77686_OFF_PWRREQ)
209                 max77686->opmode[id] = max77686_map_normal_mode(max77686, id);
210
211         return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
212                                   rdev->desc->enable_mask,
213                                   max77686->opmode[id] << shift);
214 }
215
216 static int max77686_of_parse_cb(struct device_node *np,
217                 const struct regulator_desc *desc,
218                 struct regulator_config *config)
219 {
220         struct max77686_data *max77686 = config->driver_data;
221         int ret;
222
223         switch (desc->id) {
224         case MAX77686_BUCK8:
225         case MAX77686_BUCK9:
226         case MAX77686_LDO20 ... MAX77686_LDO22:
227                 config->ena_gpiod = fwnode_gpiod_get_index(
228                                 of_fwnode_handle(np),
229                                 "maxim,ena",
230                                 0,
231                                 GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_NONEXCLUSIVE,
232                                 "max77686-regulator");
233                 if (IS_ERR(config->ena_gpiod))
234                         config->ena_gpiod = NULL;
235                 break;
236         default:
237                 return 0;
238         }
239
240         if (config->ena_gpiod) {
241                 set_bit(desc->id, max77686->gpio_enabled);
242
243                 ret = regmap_update_bits(config->regmap, desc->enable_reg,
244                                          desc->enable_mask,
245                                          MAX77686_GPIO_CONTROL);
246                 if (ret) {
247                         gpiod_put(config->ena_gpiod);
248                         config->ena_gpiod = NULL;
249                 }
250         }
251
252         return 0;
253 }
254
255 static const unsigned int max77686_buck_dvs_ramp_table[] = {
256         13750, 27500, 55000, 100000
257 };
258
259 static const struct regulator_ops max77686_ops = {
260         .list_voltage           = regulator_list_voltage_linear,
261         .map_voltage            = regulator_map_voltage_linear,
262         .is_enabled             = regulator_is_enabled_regmap,
263         .enable                 = max77686_enable,
264         .disable                = regulator_disable_regmap,
265         .get_voltage_sel        = regulator_get_voltage_sel_regmap,
266         .set_voltage_sel        = regulator_set_voltage_sel_regmap,
267         .set_voltage_time_sel   = regulator_set_voltage_time_sel,
268         .set_suspend_mode       = max77686_set_suspend_mode,
269 };
270
271 static const struct regulator_ops max77686_ldo_ops = {
272         .list_voltage           = regulator_list_voltage_linear,
273         .map_voltage            = regulator_map_voltage_linear,
274         .is_enabled             = regulator_is_enabled_regmap,
275         .enable                 = max77686_enable,
276         .disable                = regulator_disable_regmap,
277         .get_voltage_sel        = regulator_get_voltage_sel_regmap,
278         .set_voltage_sel        = regulator_set_voltage_sel_regmap,
279         .set_voltage_time_sel   = regulator_set_voltage_time_sel,
280         .set_suspend_mode       = max77686_ldo_set_suspend_mode,
281         .set_suspend_disable    = max77686_set_suspend_disable,
282 };
283
284 static const struct regulator_ops max77686_buck1_ops = {
285         .list_voltage           = regulator_list_voltage_linear,
286         .map_voltage            = regulator_map_voltage_linear,
287         .is_enabled             = regulator_is_enabled_regmap,
288         .enable                 = max77686_enable,
289         .disable                = regulator_disable_regmap,
290         .get_voltage_sel        = regulator_get_voltage_sel_regmap,
291         .set_voltage_sel        = regulator_set_voltage_sel_regmap,
292         .set_voltage_time_sel   = regulator_set_voltage_time_sel,
293         .set_suspend_disable    = max77686_set_suspend_disable,
294 };
295
296 static const struct regulator_ops max77686_buck_dvs_ops = {
297         .list_voltage           = regulator_list_voltage_linear,
298         .map_voltage            = regulator_map_voltage_linear,
299         .is_enabled             = regulator_is_enabled_regmap,
300         .enable                 = max77686_enable,
301         .disable                = regulator_disable_regmap,
302         .get_voltage_sel        = regulator_get_voltage_sel_regmap,
303         .set_voltage_sel        = regulator_set_voltage_sel_regmap,
304         .set_voltage_time_sel   = regulator_set_voltage_time_sel,
305         .set_ramp_delay         = regulator_set_ramp_delay_regmap,
306         .set_suspend_disable    = max77686_set_suspend_disable,
307 };
308
309 #define regulator_desc_ldo(num)         {                               \
310         .name           = "LDO"#num,                                    \
311         .of_match       = of_match_ptr("LDO"#num),                      \
312         .regulators_node        = of_match_ptr("voltage-regulators"),   \
313         .of_parse_cb    = max77686_of_parse_cb,                         \
314         .id             = MAX77686_LDO##num,                            \
315         .ops            = &max77686_ops,                                \
316         .type           = REGULATOR_VOLTAGE,                            \
317         .owner          = THIS_MODULE,                                  \
318         .min_uV         = MAX77686_LDO_MINUV,                           \
319         .uV_step        = MAX77686_LDO_UVSTEP,                          \
320         .ramp_delay     = MAX77686_RAMP_DELAY,                          \
321         .n_voltages     = MAX77686_VSEL_MASK + 1,                       \
322         .vsel_reg       = MAX77686_REG_LDO1CTRL1 + num - 1,             \
323         .vsel_mask      = MAX77686_VSEL_MASK,                           \
324         .enable_reg     = MAX77686_REG_LDO1CTRL1 + num - 1,             \
325         .enable_mask    = MAX77686_OPMODE_MASK                          \
326                         << MAX77686_OPMODE_SHIFT,                       \
327 }
328 #define regulator_desc_lpm_ldo(num)     {                               \
329         .name           = "LDO"#num,                                    \
330         .of_match       = of_match_ptr("LDO"#num),                      \
331         .regulators_node        = of_match_ptr("voltage-regulators"),   \
332         .id             = MAX77686_LDO##num,                            \
333         .ops            = &max77686_ldo_ops,                            \
334         .type           = REGULATOR_VOLTAGE,                            \
335         .owner          = THIS_MODULE,                                  \
336         .min_uV         = MAX77686_LDO_MINUV,                           \
337         .uV_step        = MAX77686_LDO_UVSTEP,                          \
338         .ramp_delay     = MAX77686_RAMP_DELAY,                          \
339         .n_voltages     = MAX77686_VSEL_MASK + 1,                       \
340         .vsel_reg       = MAX77686_REG_LDO1CTRL1 + num - 1,             \
341         .vsel_mask      = MAX77686_VSEL_MASK,                           \
342         .enable_reg     = MAX77686_REG_LDO1CTRL1 + num - 1,             \
343         .enable_mask    = MAX77686_OPMODE_MASK                          \
344                         << MAX77686_OPMODE_SHIFT,                       \
345 }
346 #define regulator_desc_ldo_low(num)             {                       \
347         .name           = "LDO"#num,                                    \
348         .of_match       = of_match_ptr("LDO"#num),                      \
349         .regulators_node        = of_match_ptr("voltage-regulators"),   \
350         .id             = MAX77686_LDO##num,                            \
351         .ops            = &max77686_ldo_ops,                            \
352         .type           = REGULATOR_VOLTAGE,                            \
353         .owner          = THIS_MODULE,                                  \
354         .min_uV         = MAX77686_LDO_LOW_MINUV,                       \
355         .uV_step        = MAX77686_LDO_LOW_UVSTEP,                      \
356         .ramp_delay     = MAX77686_RAMP_DELAY,                          \
357         .n_voltages     = MAX77686_VSEL_MASK + 1,                       \
358         .vsel_reg       = MAX77686_REG_LDO1CTRL1 + num - 1,             \
359         .vsel_mask      = MAX77686_VSEL_MASK,                           \
360         .enable_reg     = MAX77686_REG_LDO1CTRL1 + num - 1,             \
361         .enable_mask    = MAX77686_OPMODE_MASK                          \
362                         << MAX77686_OPMODE_SHIFT,                       \
363 }
364 #define regulator_desc_ldo1_low(num)            {                       \
365         .name           = "LDO"#num,                                    \
366         .of_match       = of_match_ptr("LDO"#num),                      \
367         .regulators_node        = of_match_ptr("voltage-regulators"),   \
368         .id             = MAX77686_LDO##num,                            \
369         .ops            = &max77686_ops,                                \
370         .type           = REGULATOR_VOLTAGE,                            \
371         .owner          = THIS_MODULE,                                  \
372         .min_uV         = MAX77686_LDO_LOW_MINUV,                       \
373         .uV_step        = MAX77686_LDO_LOW_UVSTEP,                      \
374         .ramp_delay     = MAX77686_RAMP_DELAY,                          \
375         .n_voltages     = MAX77686_VSEL_MASK + 1,                       \
376         .vsel_reg       = MAX77686_REG_LDO1CTRL1 + num - 1,             \
377         .vsel_mask      = MAX77686_VSEL_MASK,                           \
378         .enable_reg     = MAX77686_REG_LDO1CTRL1 + num - 1,             \
379         .enable_mask    = MAX77686_OPMODE_MASK                          \
380                         << MAX77686_OPMODE_SHIFT,                       \
381 }
382 #define regulator_desc_buck(num)                {                       \
383         .name           = "BUCK"#num,                                   \
384         .of_match       = of_match_ptr("BUCK"#num),                     \
385         .regulators_node        = of_match_ptr("voltage-regulators"),   \
386         .of_parse_cb    = max77686_of_parse_cb,                         \
387         .id             = MAX77686_BUCK##num,                           \
388         .ops            = &max77686_ops,                                \
389         .type           = REGULATOR_VOLTAGE,                            \
390         .owner          = THIS_MODULE,                                  \
391         .min_uV         = MAX77686_BUCK_MINUV,                          \
392         .uV_step        = MAX77686_BUCK_UVSTEP,                         \
393         .ramp_delay     = MAX77686_RAMP_DELAY,                          \
394         .enable_time    = MAX77686_BUCK_ENABLE_TIME,                    \
395         .n_voltages     = MAX77686_VSEL_MASK + 1,                       \
396         .vsel_reg       = MAX77686_REG_BUCK5OUT + (num - 5) * 2,        \
397         .vsel_mask      = MAX77686_VSEL_MASK,                           \
398         .enable_reg     = MAX77686_REG_BUCK5CTRL + (num - 5) * 2,       \
399         .enable_mask    = MAX77686_OPMODE_MASK,                         \
400 }
401 #define regulator_desc_buck1(num)               {                       \
402         .name           = "BUCK"#num,                                   \
403         .of_match       = of_match_ptr("BUCK"#num),                     \
404         .regulators_node        = of_match_ptr("voltage-regulators"),   \
405         .id             = MAX77686_BUCK##num,                           \
406         .ops            = &max77686_buck1_ops,                          \
407         .type           = REGULATOR_VOLTAGE,                            \
408         .owner          = THIS_MODULE,                                  \
409         .min_uV         = MAX77686_BUCK_MINUV,                          \
410         .uV_step        = MAX77686_BUCK_UVSTEP,                         \
411         .ramp_delay     = MAX77686_RAMP_DELAY,                          \
412         .enable_time    = MAX77686_BUCK_ENABLE_TIME,                    \
413         .n_voltages     = MAX77686_VSEL_MASK + 1,                       \
414         .vsel_reg       = MAX77686_REG_BUCK1OUT,                        \
415         .vsel_mask      = MAX77686_VSEL_MASK,                           \
416         .enable_reg     = MAX77686_REG_BUCK1CTRL,                       \
417         .enable_mask    = MAX77686_OPMODE_MASK,                         \
418 }
419 #define regulator_desc_buck_dvs(num)            {                       \
420         .name           = "BUCK"#num,                                   \
421         .of_match       = of_match_ptr("BUCK"#num),                     \
422         .regulators_node        = of_match_ptr("voltage-regulators"),   \
423         .id             = MAX77686_BUCK##num,                           \
424         .ops            = &max77686_buck_dvs_ops,                       \
425         .type           = REGULATOR_VOLTAGE,                            \
426         .owner          = THIS_MODULE,                                  \
427         .min_uV         = MAX77686_DVS_MINUV,                           \
428         .uV_step        = MAX77686_DVS_UVSTEP,                          \
429         .ramp_delay     = MAX77686_DVS_RAMP_DELAY,                      \
430         .enable_time    = MAX77686_DVS_ENABLE_TIME,                     \
431         .n_voltages     = MAX77686_DVS_VSEL_MASK + 1,                   \
432         .vsel_reg       = MAX77686_REG_BUCK2DVS1 + (num - 2) * 10,      \
433         .vsel_mask      = MAX77686_DVS_VSEL_MASK,                       \
434         .enable_reg     = MAX77686_REG_BUCK2CTRL1 + (num - 2) * 10,     \
435         .enable_mask    = MAX77686_OPMODE_MASK                          \
436                         << MAX77686_OPMODE_BUCK234_SHIFT,               \
437         .ramp_reg       = MAX77686_REG_BUCK2CTRL1 + (num - 2) * 10,     \
438         .ramp_mask      = MAX77686_RAMP_RATE_MASK,                      \
439         .ramp_delay_table = max77686_buck_dvs_ramp_table,               \
440         .n_ramp_values  = ARRAY_SIZE(max77686_buck_dvs_ramp_table),     \
441 }
442
443 static const struct regulator_desc regulators[] = {
444         regulator_desc_ldo1_low(1),
445         regulator_desc_ldo_low(2),
446         regulator_desc_ldo(3),
447         regulator_desc_ldo(4),
448         regulator_desc_ldo(5),
449         regulator_desc_ldo_low(6),
450         regulator_desc_ldo_low(7),
451         regulator_desc_ldo_low(8),
452         regulator_desc_ldo(9),
453         regulator_desc_lpm_ldo(10),
454         regulator_desc_lpm_ldo(11),
455         regulator_desc_lpm_ldo(12),
456         regulator_desc_ldo(13),
457         regulator_desc_lpm_ldo(14),
458         regulator_desc_ldo_low(15),
459         regulator_desc_lpm_ldo(16),
460         regulator_desc_ldo(17),
461         regulator_desc_ldo(18),
462         regulator_desc_ldo(19),
463         regulator_desc_ldo(20),
464         regulator_desc_ldo(21),
465         regulator_desc_ldo(22),
466         regulator_desc_ldo(23),
467         regulator_desc_ldo(24),
468         regulator_desc_ldo(25),
469         regulator_desc_ldo(26),
470         regulator_desc_buck1(1),
471         regulator_desc_buck_dvs(2),
472         regulator_desc_buck_dvs(3),
473         regulator_desc_buck_dvs(4),
474         regulator_desc_buck(5),
475         regulator_desc_buck(6),
476         regulator_desc_buck(7),
477         regulator_desc_buck(8),
478         regulator_desc_buck(9),
479 };
480
481 static int max77686_pmic_probe(struct platform_device *pdev)
482 {
483         struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent);
484         struct max77686_data *max77686;
485         int i;
486         struct regulator_config config = { };
487
488         dev_dbg(&pdev->dev, "%s\n", __func__);
489
490         max77686 = devm_kzalloc(&pdev->dev, sizeof(struct max77686_data),
491                                 GFP_KERNEL);
492         if (!max77686)
493                 return -ENOMEM;
494
495         max77686->dev = &pdev->dev;
496         config.dev = iodev->dev;
497         config.regmap = iodev->regmap;
498         config.driver_data = max77686;
499         platform_set_drvdata(pdev, max77686);
500
501         for (i = 0; i < MAX77686_REGULATORS; i++) {
502                 struct regulator_dev *rdev;
503                 int id = regulators[i].id;
504
505                 max77686->opmode[id] = MAX77686_NORMAL;
506                 rdev = devm_regulator_register(&pdev->dev,
507                                                 &regulators[i], &config);
508                 if (IS_ERR(rdev)) {
509                         int ret = PTR_ERR(rdev);
510                         dev_err(&pdev->dev,
511                                 "regulator init failed for %d: %d\n", i, ret);
512                         return ret;
513                 }
514         }
515
516         return 0;
517 }
518
519 static const struct platform_device_id max77686_pmic_id[] = {
520         {"max77686-pmic", 0},
521         { },
522 };
523 MODULE_DEVICE_TABLE(platform, max77686_pmic_id);
524
525 static struct platform_driver max77686_pmic_driver = {
526         .driver = {
527                 .name = "max77686-pmic",
528         },
529         .probe = max77686_pmic_probe,
530         .id_table = max77686_pmic_id,
531 };
532
533 module_platform_driver(max77686_pmic_driver);
534
535 MODULE_DESCRIPTION("MAXIM 77686 Regulator Driver");
536 MODULE_AUTHOR("Chiwoong Byun <woong.byun@samsung.com>");
537 MODULE_LICENSE("GPL");