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