Merge tag 'kvm-x86-misc-6.5' of https://github.com/kvm-x86/linux into HEAD
[linux-2.6-microblaze.git] / drivers / pinctrl / pinctrl-palmas.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * pinctrl-palmas.c -- TI PALMAS series pin control driver.
4  *
5  * Copyright (c) 2013, NVIDIA Corporation.
6  *
7  * Author: Laxman Dewangan <ldewangan@nvidia.com>
8  */
9
10 #include <linux/delay.h>
11 #include <linux/module.h>
12 #include <linux/mfd/palmas.h>
13 #include <linux/of.h>
14 #include <linux/of_device.h>
15 #include <linux/platform_device.h>
16 #include <linux/pinctrl/machine.h>
17 #include <linux/pinctrl/pinctrl.h>
18 #include <linux/pinctrl/pinconf-generic.h>
19 #include <linux/pinctrl/pinconf.h>
20 #include <linux/pinctrl/pinmux.h>
21 #include <linux/pm.h>
22 #include <linux/slab.h>
23
24 #include "core.h"
25 #include "pinconf.h"
26 #include "pinctrl-utils.h"
27
28 #define PALMAS_PIN_GPIO0_ID                             0
29 #define PALMAS_PIN_GPIO1_VBUS_LED1_PWM1                 1
30 #define PALMAS_PIN_GPIO2_REGEN_LED2_PWM2                2
31 #define PALMAS_PIN_GPIO3_CHRG_DET                       3
32 #define PALMAS_PIN_GPIO4_SYSEN1                         4
33 #define PALMAS_PIN_GPIO5_CLK32KGAUDIO_USB_PSEL          5
34 #define PALMAS_PIN_GPIO6_SYSEN2                         6
35 #define PALMAS_PIN_GPIO7_MSECURE_PWRHOLD                7
36 #define PALMAS_PIN_GPIO8_SIM1RSTI                       8
37 #define PALMAS_PIN_GPIO9_LOW_VBAT                       9
38 #define PALMAS_PIN_GPIO10_WIRELESS_CHRG1                10
39 #define PALMAS_PIN_GPIO11_RCM                           11
40 #define PALMAS_PIN_GPIO12_SIM2RSTO                      12
41 #define PALMAS_PIN_GPIO13                               13
42 #define PALMAS_PIN_GPIO14                               14
43 #define PALMAS_PIN_GPIO15_SIM2RSTI                      15
44 #define PALMAS_PIN_VAC                                  16
45 #define PALMAS_PIN_POWERGOOD_USB_PSEL                   17
46 #define PALMAS_PIN_NRESWARM                             18
47 #define PALMAS_PIN_PWRDOWN                              19
48 #define PALMAS_PIN_GPADC_START                          20
49 #define PALMAS_PIN_RESET_IN                             21
50 #define PALMAS_PIN_NSLEEP                               22
51 #define PALMAS_PIN_ENABLE1                              23
52 #define PALMAS_PIN_ENABLE2                              24
53 #define PALMAS_PIN_INT                                  25
54 #define PALMAS_PIN_NUM                                  (PALMAS_PIN_INT + 1)
55
56 struct palmas_pin_function {
57         const char *name;
58         const char * const *groups;
59         unsigned ngroups;
60 };
61
62 struct palmas_pctrl_chip_info {
63         struct device *dev;
64         struct pinctrl_dev *pctl;
65         struct palmas *palmas;
66         int pins_current_opt[PALMAS_PIN_NUM];
67         const struct palmas_pin_function *functions;
68         unsigned num_functions;
69         const struct palmas_pingroup *pin_groups;
70         int num_pin_groups;
71         const struct pinctrl_pin_desc *pins;
72         unsigned num_pins;
73 };
74
75 static const struct pinctrl_pin_desc palmas_pins_desc[] = {
76         PINCTRL_PIN(PALMAS_PIN_GPIO0_ID, "gpio0"),
77         PINCTRL_PIN(PALMAS_PIN_GPIO1_VBUS_LED1_PWM1, "gpio1"),
78         PINCTRL_PIN(PALMAS_PIN_GPIO2_REGEN_LED2_PWM2, "gpio2"),
79         PINCTRL_PIN(PALMAS_PIN_GPIO3_CHRG_DET, "gpio3"),
80         PINCTRL_PIN(PALMAS_PIN_GPIO4_SYSEN1, "gpio4"),
81         PINCTRL_PIN(PALMAS_PIN_GPIO5_CLK32KGAUDIO_USB_PSEL, "gpio5"),
82         PINCTRL_PIN(PALMAS_PIN_GPIO6_SYSEN2, "gpio6"),
83         PINCTRL_PIN(PALMAS_PIN_GPIO7_MSECURE_PWRHOLD, "gpio7"),
84         PINCTRL_PIN(PALMAS_PIN_GPIO8_SIM1RSTI, "gpio8"),
85         PINCTRL_PIN(PALMAS_PIN_GPIO9_LOW_VBAT, "gpio9"),
86         PINCTRL_PIN(PALMAS_PIN_GPIO10_WIRELESS_CHRG1, "gpio10"),
87         PINCTRL_PIN(PALMAS_PIN_GPIO11_RCM, "gpio11"),
88         PINCTRL_PIN(PALMAS_PIN_GPIO12_SIM2RSTO, "gpio12"),
89         PINCTRL_PIN(PALMAS_PIN_GPIO13, "gpio13"),
90         PINCTRL_PIN(PALMAS_PIN_GPIO14, "gpio14"),
91         PINCTRL_PIN(PALMAS_PIN_GPIO15_SIM2RSTI, "gpio15"),
92         PINCTRL_PIN(PALMAS_PIN_VAC, "vac"),
93         PINCTRL_PIN(PALMAS_PIN_POWERGOOD_USB_PSEL, "powergood"),
94         PINCTRL_PIN(PALMAS_PIN_NRESWARM, "nreswarm"),
95         PINCTRL_PIN(PALMAS_PIN_PWRDOWN, "pwrdown"),
96         PINCTRL_PIN(PALMAS_PIN_GPADC_START, "gpadc_start"),
97         PINCTRL_PIN(PALMAS_PIN_RESET_IN, "reset_in"),
98         PINCTRL_PIN(PALMAS_PIN_NSLEEP, "nsleep"),
99         PINCTRL_PIN(PALMAS_PIN_ENABLE1, "enable1"),
100         PINCTRL_PIN(PALMAS_PIN_ENABLE2, "enable2"),
101         PINCTRL_PIN(PALMAS_PIN_INT, "int"),
102 };
103
104 static const char * const opt0_groups[] = {
105         "gpio0",
106         "gpio1",
107         "gpio2",
108         "gpio3",
109         "gpio4",
110         "gpio5",
111         "gpio6",
112         "gpio7",
113         "gpio8",
114         "gpio9",
115         "gpio10",
116         "gpio11",
117         "gpio12",
118         "gpio13",
119         "gpio14",
120         "gpio15",
121         "vac",
122         "powergood",
123         "nreswarm",
124         "pwrdown",
125         "gpadc_start",
126         "reset_in",
127         "nsleep",
128         "enable1",
129         "enable2",
130         "int",
131 };
132
133 static const char * const opt1_groups[] = {
134         "gpio0",
135         "gpio1",
136         "gpio2",
137         "gpio3",
138         "gpio4",
139         "gpio5",
140         "gpio6",
141         "gpio7",
142         "gpio8",
143         "gpio9",
144         "gpio10",
145         "gpio11",
146         "gpio12",
147         "gpio15",
148         "vac",
149         "powergood",
150 };
151
152 static const char * const opt2_groups[] = {
153         "gpio1",
154         "gpio2",
155         "gpio5",
156         "gpio7",
157 };
158
159 static const char * const opt3_groups[] = {
160         "gpio1",
161         "gpio2",
162 };
163
164 static const char * const gpio_groups[] = {
165         "gpio0",
166         "gpio1",
167         "gpio2",
168         "gpio3",
169         "gpio4",
170         "gpio5",
171         "gpio6",
172         "gpio7",
173         "gpio8",
174         "gpio9",
175         "gpio10",
176         "gpio11",
177         "gpio12",
178         "gpio13",
179         "gpio14",
180         "gpio15",
181 };
182
183 static const char * const led_groups[] = {
184         "gpio1",
185         "gpio2",
186 };
187
188 static const char * const pwm_groups[] = {
189         "gpio1",
190         "gpio2",
191 };
192
193 static const char * const regen_groups[] = {
194         "gpio2",
195 };
196
197 static const char * const sysen_groups[] = {
198         "gpio4",
199         "gpio6",
200 };
201
202 static const char * const clk32kgaudio_groups[] = {
203         "gpio5",
204 };
205
206 static const char * const id_groups[] = {
207         "gpio0",
208 };
209
210 static const char * const vbus_det_groups[] = {
211         "gpio1",
212 };
213
214 static const char * const chrg_det_groups[] = {
215         "gpio3",
216 };
217
218 static const char * const vac_groups[] = {
219         "vac",
220 };
221
222 static const char * const vacok_groups[] = {
223         "vac",
224 };
225
226 static const char * const powergood_groups[] = {
227         "powergood",
228 };
229
230 static const char * const usb_psel_groups[] = {
231         "gpio5",
232         "powergood",
233 };
234
235 static const char * const msecure_groups[] = {
236         "gpio7",
237 };
238
239 static const char * const pwrhold_groups[] = {
240         "gpio7",
241 };
242
243 static const char * const int_groups[] = {
244         "int",
245 };
246
247 static const char * const nreswarm_groups[] = {
248         "nreswarm",
249 };
250
251 static const char * const simrsto_groups[] = {
252         "gpio12",
253 };
254
255 static const char * const simrsti_groups[] = {
256         "gpio8",
257         "gpio15",
258 };
259
260 static const char * const low_vbat_groups[] = {
261         "gpio9",
262 };
263
264 static const char * const wireless_chrg1_groups[] = {
265         "gpio10",
266 };
267
268 static const char * const rcm_groups[] = {
269         "gpio11",
270 };
271
272 static const char * const pwrdown_groups[] = {
273         "pwrdown",
274 };
275
276 static const char * const gpadc_start_groups[] = {
277         "gpadc_start",
278 };
279
280 static const char * const reset_in_groups[] = {
281         "reset_in",
282 };
283
284 static const char * const nsleep_groups[] = {
285         "nsleep",
286 };
287
288 static const char * const enable_groups[] = {
289         "enable1",
290         "enable2",
291 };
292
293 #define FUNCTION_GROUPS                                 \
294         FUNCTION_GROUP(opt0, OPTION0),                  \
295         FUNCTION_GROUP(opt1, OPTION1),                  \
296         FUNCTION_GROUP(opt2, OPTION2),                  \
297         FUNCTION_GROUP(opt3, OPTION3),                  \
298         FUNCTION_GROUP(gpio, GPIO),                     \
299         FUNCTION_GROUP(led, LED),                       \
300         FUNCTION_GROUP(pwm, PWM),                       \
301         FUNCTION_GROUP(regen, REGEN),                   \
302         FUNCTION_GROUP(sysen, SYSEN),                   \
303         FUNCTION_GROUP(clk32kgaudio, CLK32KGAUDIO),     \
304         FUNCTION_GROUP(id, ID),                         \
305         FUNCTION_GROUP(vbus_det, VBUS_DET),             \
306         FUNCTION_GROUP(chrg_det, CHRG_DET),             \
307         FUNCTION_GROUP(vac, VAC),                       \
308         FUNCTION_GROUP(vacok, VACOK),                   \
309         FUNCTION_GROUP(powergood, POWERGOOD),           \
310         FUNCTION_GROUP(usb_psel, USB_PSEL),             \
311         FUNCTION_GROUP(msecure, MSECURE),               \
312         FUNCTION_GROUP(pwrhold, PWRHOLD),               \
313         FUNCTION_GROUP(int, INT),                       \
314         FUNCTION_GROUP(nreswarm, NRESWARM),             \
315         FUNCTION_GROUP(simrsto, SIMRSTO),               \
316         FUNCTION_GROUP(simrsti, SIMRSTI),               \
317         FUNCTION_GROUP(low_vbat, LOW_VBAT),             \
318         FUNCTION_GROUP(wireless_chrg1, WIRELESS_CHRG1), \
319         FUNCTION_GROUP(rcm, RCM),                       \
320         FUNCTION_GROUP(pwrdown, PWRDOWN),               \
321         FUNCTION_GROUP(gpadc_start, GPADC_START),       \
322         FUNCTION_GROUP(reset_in, RESET_IN),             \
323         FUNCTION_GROUP(nsleep, NSLEEP),                 \
324         FUNCTION_GROUP(enable, ENABLE)
325
326 static const struct palmas_pin_function palmas_pin_function[] = {
327 #undef FUNCTION_GROUP
328 #define FUNCTION_GROUP(fname, mux)                      \
329         {                                               \
330                 .name = #fname,                         \
331                 .groups = fname##_groups,               \
332                 .ngroups = ARRAY_SIZE(fname##_groups),  \
333         }
334
335         FUNCTION_GROUPS,
336 };
337
338 enum palmas_pinmux {
339 #undef FUNCTION_GROUP
340 #define FUNCTION_GROUP(fname, mux)      PALMAS_PINMUX_##mux
341         FUNCTION_GROUPS,
342         PALMAS_PINMUX_NA = 0xFFFF,
343 };
344
345 struct palmas_pins_pullup_dn_info {
346         int pullup_dn_reg_base;
347         int pullup_dn_reg_add;
348         int pullup_dn_mask;
349         int normal_val;
350         int pull_up_val;
351         int pull_dn_val;
352 };
353
354 struct palmas_pins_od_info {
355         int od_reg_base;
356         int od_reg_add;
357         int od_mask;
358         int od_enable;
359         int od_disable;
360 };
361
362 struct palmas_pin_info {
363         enum palmas_pinmux mux_opt;
364         const struct palmas_pins_pullup_dn_info *pud_info;
365         const struct palmas_pins_od_info *od_info;
366 };
367
368 struct palmas_pingroup {
369         const char *name;
370         const unsigned pins[1];
371         unsigned npins;
372         unsigned mux_reg_base;
373         unsigned mux_reg_add;
374         unsigned mux_reg_mask;
375         unsigned mux_bit_shift;
376         const struct palmas_pin_info *opt[4];
377 };
378
379 #define PULL_UP_DN(_name, _rbase, _add, _mask, _nv, _uv, _dv)           \
380 static const struct palmas_pins_pullup_dn_info pud_##_name##_info = {   \
381         .pullup_dn_reg_base = PALMAS_##_rbase##_BASE,                   \
382         .pullup_dn_reg_add = _add,                                      \
383         .pullup_dn_mask = _mask,                                        \
384         .normal_val = _nv,                                              \
385         .pull_up_val = _uv,                                             \
386         .pull_dn_val = _dv,                                             \
387 }
388
389 PULL_UP_DN(nreswarm,    PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL1,       0x2,    0x0,    0x2,    -1);
390 PULL_UP_DN(pwrdown,     PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL1,       0x4,    0x0,    -1,     0x4);
391 PULL_UP_DN(gpadc_start, PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL1,       0x30,   0x0,    0x20,   0x10);
392 PULL_UP_DN(reset_in,    PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL1,       0x40,   0x0,    -1,     0x40);
393 PULL_UP_DN(nsleep,      PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL2,       0x3,    0x0,    0x2,    0x1);
394 PULL_UP_DN(enable1,     PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL2,       0xC,    0x0,    0x8,    0x4);
395 PULL_UP_DN(enable2,     PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL2,       0x30,   0x0,    0x20,   0x10);
396 PULL_UP_DN(vacok,       PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL3,       0x40,   0x0,    -1,     0x40);
397 PULL_UP_DN(chrg_det,    PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL3,       0x10,   0x0,    -1,     0x10);
398 PULL_UP_DN(pwrhold,     PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL3,       0x4,    0x0,    -1,     0x4);
399 PULL_UP_DN(msecure,     PU_PD_OD,       PALMAS_PU_PD_INPUT_CTRL3,       0x1,    0x0,    -1,     0x1);
400 PULL_UP_DN(id,          USB_OTG,        PALMAS_USB_ID_CTRL_SET,         0x40,   0x0,    0x40,   -1);
401 PULL_UP_DN(gpio0,       GPIO,           PALMAS_PU_PD_GPIO_CTRL1,        0x04,   0,      -1,     1);
402 PULL_UP_DN(gpio1,       GPIO,           PALMAS_PU_PD_GPIO_CTRL1,        0x0C,   0,      0x8,    0x4);
403 PULL_UP_DN(gpio2,       GPIO,           PALMAS_PU_PD_GPIO_CTRL1,        0x30,   0x0,    0x20,   0x10);
404 PULL_UP_DN(gpio3,       GPIO,           PALMAS_PU_PD_GPIO_CTRL1,        0x40,   0x0,    -1,     0x40);
405 PULL_UP_DN(gpio4,       GPIO,           PALMAS_PU_PD_GPIO_CTRL2,        0x03,   0x0,    0x2,    0x1);
406 PULL_UP_DN(gpio5,       GPIO,           PALMAS_PU_PD_GPIO_CTRL2,        0x0c,   0x0,    0x8,    0x4);
407 PULL_UP_DN(gpio6,       GPIO,           PALMAS_PU_PD_GPIO_CTRL2,        0x30,   0x0,    0x20,   0x10);
408 PULL_UP_DN(gpio7,       GPIO,           PALMAS_PU_PD_GPIO_CTRL2,        0x40,   0x0,    -1,     0x40);
409 PULL_UP_DN(gpio9,       GPIO,           PALMAS_PU_PD_GPIO_CTRL3,        0x0C,   0x0,    0x8,    0x4);
410 PULL_UP_DN(gpio10,      GPIO,           PALMAS_PU_PD_GPIO_CTRL3,        0x30,   0x0,    0x20,   0x10);
411 PULL_UP_DN(gpio11,      GPIO,           PALMAS_PU_PD_GPIO_CTRL3,        0xC0,   0x0,    0x80,   0x40);
412 PULL_UP_DN(gpio13,      GPIO,           PALMAS_PU_PD_GPIO_CTRL4,        0x04,   0x0,    -1,     0x04);
413 PULL_UP_DN(gpio14,      GPIO,           PALMAS_PU_PD_GPIO_CTRL4,        0x30,   0x0,    0x20,   0x10);
414
415 #define OD_INFO(_name, _rbase, _add, _mask, _ev, _dv)           \
416 static const struct palmas_pins_od_info od_##_name##_info = {   \
417         .od_reg_base = PALMAS_##_rbase##_BASE,                  \
418         .od_reg_add = _add,                                     \
419         .od_mask = _mask,                                       \
420         .od_enable = _ev,                                       \
421         .od_disable = _dv,                                      \
422 }
423
424 OD_INFO(gpio1,  GPIO,   PALMAS_OD_OUTPUT_GPIO_CTRL,     0x1,    0x1,    0x0);
425 OD_INFO(gpio2,  GPIO,   PALMAS_OD_OUTPUT_GPIO_CTRL,     0x2,    0x2,    0x0);
426 OD_INFO(gpio5,  GPIO,   PALMAS_OD_OUTPUT_GPIO_CTRL,     0x20,   0x20,   0x0);
427 OD_INFO(gpio10, GPIO,   PALMAS_OD_OUTPUT_GPIO_CTRL2,    0x04,   0x04,   0x0);
428 OD_INFO(gpio13, GPIO,   PALMAS_OD_OUTPUT_GPIO_CTRL2,    0x20,   0x20,   0x0);
429 OD_INFO(int,            PU_PD_OD,       PALMAS_OD_OUTPUT_CTRL,  0x8,    0x8,    0x0);
430 OD_INFO(pwm1,           PU_PD_OD,       PALMAS_OD_OUTPUT_CTRL,  0x20,   0x20,   0x0);
431 OD_INFO(pwm2,           PU_PD_OD,       PALMAS_OD_OUTPUT_CTRL,  0x80,   0x80,   0x0);
432 OD_INFO(vbus_det,       PU_PD_OD,       PALMAS_OD_OUTPUT_CTRL,  0x40,   0x40,   0x0);
433
434 #define PIN_INFO(_name, _id, _pud_info, _od_info)               \
435 static const struct palmas_pin_info pin_##_name##_info = {      \
436         .mux_opt = PALMAS_PINMUX_##_id,                         \
437         .pud_info = _pud_info,                                  \
438         .od_info = _od_info                                     \
439 }
440
441 PIN_INFO(gpio0,         GPIO,           &pud_gpio0_info,        NULL);
442 PIN_INFO(gpio1,         GPIO,           &pud_gpio1_info,        &od_gpio1_info);
443 PIN_INFO(gpio2,         GPIO,           &pud_gpio2_info,        &od_gpio2_info);
444 PIN_INFO(gpio3,         GPIO,           &pud_gpio3_info,        NULL);
445 PIN_INFO(gpio4,         GPIO,           &pud_gpio4_info,        NULL);
446 PIN_INFO(gpio5,         GPIO,           &pud_gpio5_info,        &od_gpio5_info);
447 PIN_INFO(gpio6,         GPIO,           &pud_gpio6_info,        NULL);
448 PIN_INFO(gpio7,         GPIO,           &pud_gpio7_info,        NULL);
449 PIN_INFO(gpio8,         GPIO,           NULL,                   NULL);
450 PIN_INFO(gpio9,         GPIO,           &pud_gpio9_info,        NULL);
451 PIN_INFO(gpio10,        GPIO,           &pud_gpio10_info,       &od_gpio10_info);
452 PIN_INFO(gpio11,        GPIO,           &pud_gpio11_info,       NULL);
453 PIN_INFO(gpio12,        GPIO,           NULL,                   NULL);
454 PIN_INFO(gpio13,        GPIO,           &pud_gpio13_info,       &od_gpio13_info);
455 PIN_INFO(gpio14,        GPIO,           &pud_gpio14_info,       NULL);
456 PIN_INFO(gpio15,        GPIO,           NULL,                   NULL);
457 PIN_INFO(id,            ID,             &pud_id_info,           NULL);
458 PIN_INFO(led1,          LED,            NULL,                   NULL);
459 PIN_INFO(led2,          LED,            NULL,                   NULL);
460 PIN_INFO(regen,         REGEN,          NULL,                   NULL);
461 PIN_INFO(sysen1,        SYSEN,          NULL,                   NULL);
462 PIN_INFO(sysen2,        SYSEN,          NULL,                   NULL);
463 PIN_INFO(int,           INT,            NULL,                   &od_int_info);
464 PIN_INFO(pwm1,          PWM,            NULL,                   &od_pwm1_info);
465 PIN_INFO(pwm2,          PWM,            NULL,                   &od_pwm2_info);
466 PIN_INFO(vacok,         VACOK,          &pud_vacok_info,        NULL);
467 PIN_INFO(chrg_det,      CHRG_DET,       &pud_chrg_det_info,     NULL);
468 PIN_INFO(pwrhold,       PWRHOLD,        &pud_pwrhold_info,      NULL);
469 PIN_INFO(msecure,       MSECURE,        &pud_msecure_info,      NULL);
470 PIN_INFO(nreswarm,      NA,             &pud_nreswarm_info,     NULL);
471 PIN_INFO(pwrdown,       NA,             &pud_pwrdown_info,      NULL);
472 PIN_INFO(gpadc_start,   NA,             &pud_gpadc_start_info,  NULL);
473 PIN_INFO(reset_in,      NA,             &pud_reset_in_info,     NULL);
474 PIN_INFO(nsleep,        NA,             &pud_nsleep_info,       NULL);
475 PIN_INFO(enable1,       NA,             &pud_enable1_info,      NULL);
476 PIN_INFO(enable2,       NA,             &pud_enable2_info,      NULL);
477 PIN_INFO(clk32kgaudio,  CLK32KGAUDIO,   NULL,                   NULL);
478 PIN_INFO(usb_psel,      USB_PSEL,       NULL,                   NULL);
479 PIN_INFO(vac,           VAC,            NULL,                   NULL);
480 PIN_INFO(powergood,     POWERGOOD,      NULL,                   NULL);
481 PIN_INFO(vbus_det,      VBUS_DET,       NULL,                   &od_vbus_det_info);
482 PIN_INFO(sim1rsti,      SIMRSTI,        NULL,                   NULL);
483 PIN_INFO(low_vbat,      LOW_VBAT,       NULL,                   NULL);
484 PIN_INFO(rcm,           RCM,            NULL,                   NULL);
485 PIN_INFO(sim2rsto,      SIMRSTO,        NULL,                   NULL);
486 PIN_INFO(sim2rsti,      SIMRSTI,        NULL,                   NULL);
487 PIN_INFO(wireless_chrg1,        WIRELESS_CHRG1, NULL,           NULL);
488
489 #define PALMAS_PRIMARY_SECONDARY_NONE   0
490 #define PALMAS_NONE_BASE                0
491 #define PALMAS_PRIMARY_SECONDARY_INPUT3 PALMAS_PU_PD_INPUT_CTRL3
492
493 #define PALMAS_PINGROUP(pg_name, pin_id, base, reg, _mask, _bshift, o0, o1, o2, o3)  \
494         {                                                               \
495                 .name = #pg_name,                                       \
496                 .pins = {PALMAS_PIN_##pin_id},                          \
497                 .npins = 1,                                             \
498                 .mux_reg_base = PALMAS_##base##_BASE,                   \
499                 .mux_reg_add = PALMAS_PRIMARY_SECONDARY_##reg,          \
500                 .mux_reg_mask = _mask,                                  \
501                 .mux_bit_shift = _bshift,                               \
502                 .opt = {                                                \
503                         o0,                                             \
504                         o1,                                             \
505                         o2,                                             \
506                         o3,                                             \
507                 },                                                      \
508         }
509
510 static const struct palmas_pingroup tps65913_pingroups[] = {
511         PALMAS_PINGROUP(gpio0,  GPIO0_ID,                       PU_PD_OD,       PAD1,   0x4,    0x2,    &pin_gpio0_info,        &pin_id_info,           NULL,           NULL),
512         PALMAS_PINGROUP(gpio1,  GPIO1_VBUS_LED1_PWM1,           PU_PD_OD,       PAD1,   0x18,   0x3,    &pin_gpio1_info,        &pin_vbus_det_info,     &pin_led1_info, &pin_pwm1_info),
513         PALMAS_PINGROUP(gpio2,  GPIO2_REGEN_LED2_PWM2,          PU_PD_OD,       PAD1,   0x60,   0x5,    &pin_gpio2_info,        &pin_regen_info,        &pin_led2_info, &pin_pwm2_info),
514         PALMAS_PINGROUP(gpio3,  GPIO3_CHRG_DET,                 PU_PD_OD,       PAD1,   0x80,   0x7,    &pin_gpio3_info,        &pin_chrg_det_info,     NULL,           NULL),
515         PALMAS_PINGROUP(gpio4,  GPIO4_SYSEN1,                   PU_PD_OD,       PAD1,   0x01,   0x0,    &pin_gpio4_info,        &pin_sysen1_info,       NULL,           NULL),
516         PALMAS_PINGROUP(gpio5,  GPIO5_CLK32KGAUDIO_USB_PSEL,    PU_PD_OD,       PAD2,   0x6,    0x1,    &pin_gpio5_info,        &pin_clk32kgaudio_info, &pin_usb_psel_info,     NULL),
517         PALMAS_PINGROUP(gpio6,  GPIO6_SYSEN2,                   PU_PD_OD,       PAD2,   0x08,   0x3,    &pin_gpio6_info,        &pin_sysen2_info,       NULL,           NULL),
518         PALMAS_PINGROUP(gpio7,  GPIO7_MSECURE_PWRHOLD,          PU_PD_OD,       PAD2,   0x30,   0x4,    &pin_gpio7_info,        &pin_msecure_info,      &pin_pwrhold_info,      NULL),
519         PALMAS_PINGROUP(vac,    VAC,                            PU_PD_OD,       PAD1,   0x02,   0x1,    &pin_vac_info,          &pin_vacok_info,        NULL,           NULL),
520         PALMAS_PINGROUP(powergood,      POWERGOOD_USB_PSEL,     PU_PD_OD,       PAD1,   0x01,   0x0,    &pin_powergood_info,    &pin_usb_psel_info,     NULL,   NULL),
521         PALMAS_PINGROUP(nreswarm,       NRESWARM,               NONE,           NONE,   0x0,    0x0,    &pin_nreswarm_info,     NULL,                   NULL,           NULL),
522         PALMAS_PINGROUP(pwrdown,        PWRDOWN,                NONE,           NONE,   0x0,    0x0,    &pin_pwrdown_info,      NULL,                   NULL,           NULL),
523         PALMAS_PINGROUP(gpadc_start,    GPADC_START,            NONE,           NONE,   0x0,    0x0,    &pin_gpadc_start_info,  NULL,                   NULL,           NULL),
524         PALMAS_PINGROUP(reset_in,       RESET_IN,               NONE,           NONE,   0x0,    0x0,    &pin_reset_in_info,     NULL,                   NULL,           NULL),
525         PALMAS_PINGROUP(nsleep,         NSLEEP,                 NONE,           NONE,   0x0,    0x0,    &pin_nsleep_info,       NULL,                   NULL,           NULL),
526         PALMAS_PINGROUP(enable1,        ENABLE1,                NONE,           NONE,   0x0,    0x0,    &pin_enable1_info,      NULL,                   NULL,           NULL),
527         PALMAS_PINGROUP(enable2,        ENABLE2,                NONE,           NONE,   0x0,    0x0,    &pin_enable2_info,      NULL,                   NULL,           NULL),
528         PALMAS_PINGROUP(int,            INT,                    NONE,           NONE,   0x0,    0x0,    &pin_int_info,          NULL,                   NULL,           NULL),
529 };
530
531 static const struct palmas_pingroup tps80036_pingroups[] = {
532         PALMAS_PINGROUP(gpio0,  GPIO0_ID,                       PU_PD_OD,       PAD1,   0x4,    0x2,    &pin_gpio0_info,        &pin_id_info,           NULL,           NULL),
533         PALMAS_PINGROUP(gpio1,  GPIO1_VBUS_LED1_PWM1,           PU_PD_OD,       PAD1,   0x18,   0x3,    &pin_gpio1_info,        &pin_vbus_det_info,     &pin_led1_info, &pin_pwm1_info),
534         PALMAS_PINGROUP(gpio2,  GPIO2_REGEN_LED2_PWM2,          PU_PD_OD,       PAD1,   0x60,   0x5,    &pin_gpio2_info,        &pin_regen_info,        &pin_led2_info, &pin_pwm2_info),
535         PALMAS_PINGROUP(gpio3,  GPIO3_CHRG_DET,                 PU_PD_OD,       PAD1,   0x80,   0x7,    &pin_gpio3_info,        &pin_chrg_det_info,     NULL,           NULL),
536         PALMAS_PINGROUP(gpio4,  GPIO4_SYSEN1,                   PU_PD_OD,       PAD1,   0x01,   0x0,    &pin_gpio4_info,        &pin_sysen1_info,       NULL,           NULL),
537         PALMAS_PINGROUP(gpio5,  GPIO5_CLK32KGAUDIO_USB_PSEL,    PU_PD_OD,       PAD2,   0x6,    0x1,    &pin_gpio5_info,        &pin_clk32kgaudio_info, &pin_usb_psel_info,     NULL),
538         PALMAS_PINGROUP(gpio6,  GPIO6_SYSEN2,                   PU_PD_OD,       PAD2,   0x08,   0x3,    &pin_gpio6_info,        &pin_sysen2_info,       NULL,           NULL),
539         PALMAS_PINGROUP(gpio7,  GPIO7_MSECURE_PWRHOLD,          PU_PD_OD,       PAD2,   0x30,   0x4,    &pin_gpio7_info,        &pin_msecure_info,      &pin_pwrhold_info,      NULL),
540         PALMAS_PINGROUP(gpio8,  GPIO8_SIM1RSTI,                 PU_PD_OD,       PAD4,   0x01,   0x0,    &pin_gpio8_info,        &pin_sim1rsti_info,     NULL,           NULL),
541         PALMAS_PINGROUP(gpio9,  GPIO9_LOW_VBAT,                 PU_PD_OD,       PAD4,   0x02,   0x1,    &pin_gpio9_info,        &pin_low_vbat_info,     NULL,           NULL),
542         PALMAS_PINGROUP(gpio10, GPIO10_WIRELESS_CHRG1,          PU_PD_OD,       PAD4,   0x04,   0x2,    &pin_gpio10_info,       &pin_wireless_chrg1_info,       NULL,   NULL),
543         PALMAS_PINGROUP(gpio11, GPIO11_RCM,                     PU_PD_OD,       PAD4,   0x08,   0x3,    &pin_gpio11_info,       &pin_rcm_info,          NULL,           NULL),
544         PALMAS_PINGROUP(gpio12, GPIO12_SIM2RSTO,                PU_PD_OD,       PAD4,   0x10,   0x4,    &pin_gpio12_info,       &pin_sim2rsto_info,     NULL,           NULL),
545         PALMAS_PINGROUP(gpio13, GPIO13,                         NONE,           NONE,   0x00,   0x0,    &pin_gpio13_info,       NULL,                   NULL,           NULL),
546         PALMAS_PINGROUP(gpio14, GPIO14,                         NONE,           NONE,   0x00,   0x0,    &pin_gpio14_info,       NULL,                   NULL,           NULL),
547         PALMAS_PINGROUP(gpio15, GPIO15_SIM2RSTI,                PU_PD_OD,       PAD4,   0x80,   0x7,    &pin_gpio15_info,       &pin_sim2rsti_info,     NULL,           NULL),
548         PALMAS_PINGROUP(vac,    VAC,                            PU_PD_OD,       PAD1,   0x02,   0x1,    &pin_vac_info,          &pin_vacok_info,        NULL,           NULL),
549         PALMAS_PINGROUP(powergood,      POWERGOOD_USB_PSEL,     PU_PD_OD,       PAD1,   0x01,   0x0,    &pin_powergood_info,    &pin_usb_psel_info,     NULL,   NULL),
550         PALMAS_PINGROUP(nreswarm,       NRESWARM,               NONE,           NONE,   0x0,    0x0,    &pin_nreswarm_info,     NULL,                   NULL,           NULL),
551         PALMAS_PINGROUP(pwrdown,        PWRDOWN,                NONE,           NONE,   0x0,    0x0,    &pin_pwrdown_info,      NULL,                   NULL,           NULL),
552         PALMAS_PINGROUP(gpadc_start,    GPADC_START,            NONE,           NONE,   0x0,    0x0,    &pin_gpadc_start_info,  NULL,                   NULL,           NULL),
553         PALMAS_PINGROUP(reset_in,       RESET_IN,               NONE,           NONE,   0x0,    0x0,    &pin_reset_in_info,     NULL,                   NULL,           NULL),
554         PALMAS_PINGROUP(nsleep,         NSLEEP,                 NONE,           NONE,   0x0,    0x0,    &pin_nsleep_info,       NULL,                   NULL,           NULL),
555         PALMAS_PINGROUP(enable1,        ENABLE1,                NONE,           NONE,   0x0,    0x0,    &pin_enable1_info,      NULL,                   NULL,           NULL),
556         PALMAS_PINGROUP(enable2,        ENABLE2,                NONE,           NONE,   0x0,    0x0,    &pin_enable2_info,      NULL,                   NULL,           NULL),
557         PALMAS_PINGROUP(int,            INT,                    NONE,           NONE,   0x0,    0x0,    &pin_int_info,          NULL,                   NULL,           NULL),
558 };
559
560 static int palmas_pinctrl_get_pin_mux(struct palmas_pctrl_chip_info *pci)
561 {
562         const struct palmas_pingroup *g;
563         unsigned int val;
564         int ret;
565         int i;
566
567         for (i = 0; i < pci->num_pin_groups; ++i) {
568                 g = &pci->pin_groups[i];
569                 if (g->mux_reg_base == PALMAS_NONE_BASE) {
570                         pci->pins_current_opt[i] = 0;
571                         continue;
572                 }
573                 ret = palmas_read(pci->palmas, g->mux_reg_base,
574                                 g->mux_reg_add, &val);
575                 if (ret < 0) {
576                         dev_err(pci->dev, "mux_reg 0x%02x read failed: %d\n",
577                                         g->mux_reg_add, ret);
578                         return ret;
579                 }
580                 val &= g->mux_reg_mask;
581                 pci->pins_current_opt[i] = val >> g->mux_bit_shift;
582         }
583         return 0;
584 }
585
586 static int palmas_pinctrl_set_dvfs1(struct palmas_pctrl_chip_info *pci,
587                 bool enable)
588 {
589         int ret;
590         int val;
591
592         val = enable ? PALMAS_PRIMARY_SECONDARY_PAD3_DVFS1 : 0;
593         ret = palmas_update_bits(pci->palmas, PALMAS_PU_PD_OD_BASE,
594                         PALMAS_PRIMARY_SECONDARY_PAD3,
595                         PALMAS_PRIMARY_SECONDARY_PAD3_DVFS1, val);
596         if (ret < 0)
597                 dev_err(pci->dev, "SECONDARY_PAD3 update failed %d\n", ret);
598         return ret;
599 }
600
601 static int palmas_pinctrl_set_dvfs2(struct palmas_pctrl_chip_info *pci,
602                 bool enable)
603 {
604         int ret;
605         int val;
606
607         val = enable ? PALMAS_PRIMARY_SECONDARY_PAD3_DVFS2 : 0;
608         ret = palmas_update_bits(pci->palmas, PALMAS_PU_PD_OD_BASE,
609                         PALMAS_PRIMARY_SECONDARY_PAD3,
610                         PALMAS_PRIMARY_SECONDARY_PAD3_DVFS2, val);
611         if (ret < 0)
612                 dev_err(pci->dev, "SECONDARY_PAD3 update failed %d\n", ret);
613         return ret;
614 }
615
616 static int palmas_pinctrl_get_groups_count(struct pinctrl_dev *pctldev)
617 {
618         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
619
620         return pci->num_pin_groups;
621 }
622
623 static const char *palmas_pinctrl_get_group_name(struct pinctrl_dev *pctldev,
624                 unsigned group)
625 {
626         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
627
628         return pci->pin_groups[group].name;
629 }
630
631 static int palmas_pinctrl_get_group_pins(struct pinctrl_dev *pctldev,
632                 unsigned group, const unsigned **pins, unsigned *num_pins)
633 {
634         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
635
636         *pins = pci->pin_groups[group].pins;
637         *num_pins = pci->pin_groups[group].npins;
638         return 0;
639 }
640
641 static const struct pinctrl_ops palmas_pinctrl_ops = {
642         .get_groups_count = palmas_pinctrl_get_groups_count,
643         .get_group_name = palmas_pinctrl_get_group_name,
644         .get_group_pins = palmas_pinctrl_get_group_pins,
645         .dt_node_to_map = pinconf_generic_dt_node_to_map_pin,
646         .dt_free_map = pinctrl_utils_free_map,
647 };
648
649 static int palmas_pinctrl_get_funcs_count(struct pinctrl_dev *pctldev)
650 {
651         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
652
653         return pci->num_functions;
654 }
655
656 static const char *palmas_pinctrl_get_func_name(struct pinctrl_dev *pctldev,
657                         unsigned function)
658 {
659         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
660
661         return pci->functions[function].name;
662 }
663
664 static int palmas_pinctrl_get_func_groups(struct pinctrl_dev *pctldev,
665                 unsigned function, const char * const **groups,
666                 unsigned * const num_groups)
667 {
668         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
669
670         *groups = pci->functions[function].groups;
671         *num_groups = pci->functions[function].ngroups;
672         return 0;
673 }
674
675 static int palmas_pinctrl_set_mux(struct pinctrl_dev *pctldev,
676                 unsigned function,
677                 unsigned group)
678 {
679         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
680         const struct palmas_pingroup *g;
681         int i;
682         int ret;
683
684         g = &pci->pin_groups[group];
685
686         /* If direct option is provided here */
687         if (function <= PALMAS_PINMUX_OPTION3) {
688                 if (!g->opt[function]) {
689                         dev_err(pci->dev, "Pin %s does not support option %d\n",
690                                 g->name, function);
691                         return -EINVAL;
692                 }
693                 i = function;
694         } else {
695                 for (i = 0; i < ARRAY_SIZE(g->opt); i++) {
696                         if (!g->opt[i])
697                                 continue;
698                         if (g->opt[i]->mux_opt == function)
699                                 break;
700                 }
701                 if (WARN_ON(i == ARRAY_SIZE(g->opt))) {
702                         dev_err(pci->dev, "Pin %s does not support option %d\n",
703                                 g->name, function);
704                         return -EINVAL;
705                 }
706         }
707
708         if (g->mux_reg_base == PALMAS_NONE_BASE) {
709                 if (WARN_ON(i != 0))
710                         return -EINVAL;
711                 return 0;
712         }
713
714         dev_dbg(pci->dev, "%s(): Base0x%02x:0x%02x:0x%02x:0x%02x\n",
715                         __func__, g->mux_reg_base, g->mux_reg_add,
716                         g->mux_reg_mask, i << g->mux_bit_shift);
717
718         ret = palmas_update_bits(pci->palmas, g->mux_reg_base, g->mux_reg_add,
719                         g->mux_reg_mask, i << g->mux_bit_shift);
720         if (ret < 0) {
721                 dev_err(pci->dev, "Reg 0x%02x update failed: %d\n",
722                                 g->mux_reg_add, ret);
723                 return ret;
724         }
725         pci->pins_current_opt[group] = i;
726         return 0;
727 }
728
729 static const struct pinmux_ops palmas_pinmux_ops = {
730         .get_functions_count = palmas_pinctrl_get_funcs_count,
731         .get_function_name = palmas_pinctrl_get_func_name,
732         .get_function_groups = palmas_pinctrl_get_func_groups,
733         .set_mux = palmas_pinctrl_set_mux,
734 };
735
736 static int palmas_pinconf_get(struct pinctrl_dev *pctldev,
737                         unsigned pin, unsigned long *config)
738 {
739         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
740         enum pin_config_param param = pinconf_to_config_param(*config);
741         const struct palmas_pingroup *g;
742         const struct palmas_pin_info *opt;
743         unsigned int val;
744         int ret;
745         int base, add;
746         int rval;
747         int arg;
748         int group_nr;
749
750         for (group_nr = 0; group_nr < pci->num_pin_groups; ++group_nr) {
751                 if (pci->pin_groups[group_nr].pins[0] == pin)
752                         break;
753         }
754
755         if (group_nr == pci->num_pin_groups) {
756                 dev_err(pci->dev,
757                         "Pinconf is not supported for pin-id %d\n", pin);
758                 return -ENOTSUPP;
759         }
760
761         g = &pci->pin_groups[group_nr];
762         opt = g->opt[pci->pins_current_opt[group_nr]];
763         if (!opt) {
764                 dev_err(pci->dev,
765                         "Pinconf is not supported for pin %s\n", g->name);
766                 return -ENOTSUPP;
767         }
768
769         switch (param) {
770         case PIN_CONFIG_BIAS_DISABLE:
771         case PIN_CONFIG_BIAS_PULL_UP:
772         case PIN_CONFIG_BIAS_PULL_DOWN:
773                 if (!opt->pud_info) {
774                         dev_err(pci->dev,
775                                 "PULL control not supported for pin %s\n",
776                                 g->name);
777                         return -ENOTSUPP;
778                 }
779                 base = opt->pud_info->pullup_dn_reg_base;
780                 add = opt->pud_info->pullup_dn_reg_add;
781                 ret = palmas_read(pci->palmas, base, add, &val);
782                 if (ret < 0) {
783                         dev_err(pci->dev, "Reg 0x%02x read failed: %d\n",
784                                 add, ret);
785                         return ret;
786                 }
787
788                 rval = val & opt->pud_info->pullup_dn_mask;
789                 arg = 0;
790                 if ((opt->pud_info->normal_val >= 0) &&
791                                 (opt->pud_info->normal_val == rval) &&
792                                 (param == PIN_CONFIG_BIAS_DISABLE))
793                         arg = 1;
794                 else if ((opt->pud_info->pull_up_val >= 0) &&
795                                 (opt->pud_info->pull_up_val == rval) &&
796                                 (param == PIN_CONFIG_BIAS_PULL_UP))
797                         arg = 1;
798                 else if ((opt->pud_info->pull_dn_val >= 0) &&
799                                 (opt->pud_info->pull_dn_val == rval) &&
800                                 (param == PIN_CONFIG_BIAS_PULL_DOWN))
801                         arg = 1;
802                 break;
803
804         case PIN_CONFIG_DRIVE_OPEN_DRAIN:
805                 if (!opt->od_info) {
806                         dev_err(pci->dev,
807                                 "OD control not supported for pin %s\n",
808                                 g->name);
809                         return -ENOTSUPP;
810                 }
811                 base = opt->od_info->od_reg_base;
812                 add = opt->od_info->od_reg_add;
813                 ret = palmas_read(pci->palmas, base, add, &val);
814                 if (ret < 0) {
815                         dev_err(pci->dev, "Reg 0x%02x read failed: %d\n",
816                                 add, ret);
817                         return ret;
818                 }
819                 rval = val & opt->od_info->od_mask;
820                 arg = -1;
821                 if ((opt->od_info->od_disable >= 0) &&
822                                 (opt->od_info->od_disable == rval))
823                         arg = 0;
824                 else if ((opt->od_info->od_enable >= 0) &&
825                                         (opt->od_info->od_enable == rval))
826                         arg = 1;
827                 if (arg < 0) {
828                         dev_err(pci->dev,
829                                 "OD control not supported for pin %s\n",
830                                 g->name);
831                         return -ENOTSUPP;
832                 }
833                 break;
834
835         default:
836                 dev_err(pci->dev, "Properties not supported\n");
837                 return -ENOTSUPP;
838         }
839
840         *config = pinconf_to_config_packed(param, (u16)arg);
841         return 0;
842 }
843
844 static int palmas_pinconf_set(struct pinctrl_dev *pctldev,
845                         unsigned pin, unsigned long *configs,
846                         unsigned num_configs)
847 {
848         struct palmas_pctrl_chip_info *pci = pinctrl_dev_get_drvdata(pctldev);
849         enum pin_config_param param;
850         u32 param_val;
851         const struct palmas_pingroup *g;
852         const struct palmas_pin_info *opt;
853         int ret;
854         int base, add, mask;
855         int rval;
856         int group_nr;
857         int i;
858
859         for (group_nr = 0; group_nr < pci->num_pin_groups; ++group_nr) {
860                 if (pci->pin_groups[group_nr].pins[0] == pin)
861                         break;
862         }
863
864         if (group_nr == pci->num_pin_groups) {
865                 dev_err(pci->dev,
866                         "Pinconf is not supported for pin-id %d\n", pin);
867                 return -ENOTSUPP;
868         }
869
870         g = &pci->pin_groups[group_nr];
871         opt = g->opt[pci->pins_current_opt[group_nr]];
872         if (!opt) {
873                 dev_err(pci->dev,
874                         "Pinconf is not supported for pin %s\n", g->name);
875                 return -ENOTSUPP;
876         }
877
878         for (i = 0; i < num_configs; i++) {
879                 param = pinconf_to_config_param(configs[i]);
880                 param_val = pinconf_to_config_argument(configs[i]);
881
882                 switch (param) {
883                 case PIN_CONFIG_BIAS_DISABLE:
884                 case PIN_CONFIG_BIAS_PULL_UP:
885                 case PIN_CONFIG_BIAS_PULL_DOWN:
886                         if (!opt->pud_info) {
887                                 dev_err(pci->dev,
888                                         "PULL control not supported for pin %s\n",
889                                         g->name);
890                                 return -ENOTSUPP;
891                         }
892                         base = opt->pud_info->pullup_dn_reg_base;
893                         add = opt->pud_info->pullup_dn_reg_add;
894                         mask = opt->pud_info->pullup_dn_mask;
895
896                         if (param == PIN_CONFIG_BIAS_DISABLE)
897                                 rval = opt->pud_info->normal_val;
898                         else if (param == PIN_CONFIG_BIAS_PULL_UP)
899                                 rval = opt->pud_info->pull_up_val;
900                         else
901                                 rval = opt->pud_info->pull_dn_val;
902
903                         if (rval < 0) {
904                                 dev_err(pci->dev,
905                                         "PULL control not supported for pin %s\n",
906                                         g->name);
907                                 return -ENOTSUPP;
908                         }
909                         break;
910
911                 case PIN_CONFIG_DRIVE_OPEN_DRAIN:
912                         if (!opt->od_info) {
913                                 dev_err(pci->dev,
914                                         "OD control not supported for pin %s\n",
915                                         g->name);
916                                 return -ENOTSUPP;
917                         }
918                         base = opt->od_info->od_reg_base;
919                         add = opt->od_info->od_reg_add;
920                         mask = opt->od_info->od_mask;
921                         if (param_val == 0)
922                                 rval = opt->od_info->od_disable;
923                         else
924                                 rval = opt->od_info->od_enable;
925                         if (rval < 0) {
926                                 dev_err(pci->dev,
927                                         "OD control not supported for pin %s\n",
928                                         g->name);
929                                 return -ENOTSUPP;
930                         }
931                         break;
932                 default:
933                         dev_err(pci->dev, "Properties not supported\n");
934                         return -ENOTSUPP;
935                 }
936
937                 dev_dbg(pci->dev, "%s(): Add0x%02x:0x%02x:0x%02x:0x%02x\n",
938                                 __func__, base, add, mask, rval);
939                 ret = palmas_update_bits(pci->palmas, base, add, mask, rval);
940                 if (ret < 0) {
941                         dev_err(pci->dev, "Reg 0x%02x update failed: %d\n",
942                                 add, ret);
943                         return ret;
944                 }
945         } /* for each config */
946
947         return 0;
948 }
949
950 static const struct pinconf_ops palmas_pinconf_ops = {
951         .pin_config_get = palmas_pinconf_get,
952         .pin_config_set = palmas_pinconf_set,
953 };
954
955 static struct pinctrl_desc palmas_pinctrl_desc = {
956         .pctlops = &palmas_pinctrl_ops,
957         .pmxops = &palmas_pinmux_ops,
958         .confops = &palmas_pinconf_ops,
959         .owner = THIS_MODULE,
960 };
961
962 struct palmas_pinctrl_data {
963         const struct palmas_pingroup *pin_groups;
964         int num_pin_groups;
965 };
966
967 static struct palmas_pinctrl_data tps65913_pinctrl_data = {
968         .pin_groups = tps65913_pingroups,
969         .num_pin_groups = ARRAY_SIZE(tps65913_pingroups),
970 };
971
972 static struct palmas_pinctrl_data tps80036_pinctrl_data = {
973         .pin_groups = tps80036_pingroups,
974         .num_pin_groups = ARRAY_SIZE(tps80036_pingroups),
975 };
976
977 static const struct of_device_id palmas_pinctrl_of_match[] = {
978         { .compatible = "ti,palmas-pinctrl", .data = &tps65913_pinctrl_data},
979         { .compatible = "ti,tps65913-pinctrl", .data = &tps65913_pinctrl_data},
980         { .compatible = "ti,tps80036-pinctrl", .data = &tps80036_pinctrl_data},
981         { },
982 };
983 MODULE_DEVICE_TABLE(of, palmas_pinctrl_of_match);
984
985 static int palmas_pinctrl_probe(struct platform_device *pdev)
986 {
987         struct palmas_pctrl_chip_info *pci;
988         const struct palmas_pinctrl_data *pinctrl_data = &tps65913_pinctrl_data;
989         int ret;
990         bool enable_dvfs1 = false;
991         bool enable_dvfs2 = false;
992
993         if (pdev->dev.of_node) {
994                 pinctrl_data = of_device_get_match_data(&pdev->dev);
995                 enable_dvfs1 = of_property_read_bool(pdev->dev.of_node,
996                                         "ti,palmas-enable-dvfs1");
997                 enable_dvfs2 = of_property_read_bool(pdev->dev.of_node,
998                                         "ti,palmas-enable-dvfs2");
999         }
1000
1001         pci = devm_kzalloc(&pdev->dev, sizeof(*pci), GFP_KERNEL);
1002         if (!pci)
1003                 return -ENOMEM;
1004
1005         pci->dev = &pdev->dev;
1006         pci->palmas = dev_get_drvdata(pdev->dev.parent);
1007
1008         pci->pins = palmas_pins_desc;
1009         pci->num_pins = ARRAY_SIZE(palmas_pins_desc);
1010         pci->functions = palmas_pin_function;
1011         pci->num_functions = ARRAY_SIZE(palmas_pin_function);
1012         pci->pin_groups = pinctrl_data->pin_groups;
1013         pci->num_pin_groups = pinctrl_data->num_pin_groups;
1014
1015         platform_set_drvdata(pdev, pci);
1016
1017         palmas_pinctrl_set_dvfs1(pci, enable_dvfs1);
1018         palmas_pinctrl_set_dvfs2(pci, enable_dvfs2);
1019         ret = palmas_pinctrl_get_pin_mux(pci);
1020         if (ret < 0) {
1021                 dev_err(&pdev->dev,
1022                         "Reading pinctrol option register failed: %d\n", ret);
1023                 return ret;
1024         }
1025
1026         palmas_pinctrl_desc.name = dev_name(&pdev->dev);
1027         palmas_pinctrl_desc.pins = palmas_pins_desc;
1028         palmas_pinctrl_desc.npins = ARRAY_SIZE(palmas_pins_desc);
1029         pci->pctl = devm_pinctrl_register(&pdev->dev, &palmas_pinctrl_desc,
1030                                           pci);
1031         if (IS_ERR(pci->pctl)) {
1032                 dev_err(&pdev->dev, "Couldn't register pinctrl driver\n");
1033                 return PTR_ERR(pci->pctl);
1034         }
1035         return 0;
1036 }
1037
1038 static struct platform_driver palmas_pinctrl_driver = {
1039         .driver = {
1040                 .name = "palmas-pinctrl",
1041                 .of_match_table = palmas_pinctrl_of_match,
1042         },
1043         .probe = palmas_pinctrl_probe,
1044 };
1045
1046 module_platform_driver(palmas_pinctrl_driver);
1047
1048 MODULE_DESCRIPTION("Palmas pin control driver");
1049 MODULE_AUTHOR("Laxman Dewangan<ldewangan@nvidia.com>");
1050 MODULE_ALIAS("platform:palmas-pinctrl");
1051 MODULE_LICENSE("GPL v2");