1 /*
2  * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 and
6  * only version 2 as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13 
14 #include <linux/gpio.h>
15 #include <linux/module.h>
16 #include <linux/of.h>
17 #include <linux/of_irq.h>
18 #include <linux/pinctrl/pinconf-generic.h>
19 #include <linux/pinctrl/pinconf.h>
20 #include <linux/pinctrl/pinmux.h>
21 #include <linux/platform_device.h>
22 #include <linux/regmap.h>
23 #include <linux/slab.h>
24 #include <linux/types.h>
25 
26 #include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
27 
28 #include "../core.h"
29 #include "../pinctrl-utils.h"
30 
31 #define PMIC_GPIO_ADDRESS_RANGE			0x100
32 
33 /* type and subtype registers base address offsets */
34 #define PMIC_GPIO_REG_TYPE			0x4
35 #define PMIC_GPIO_REG_SUBTYPE			0x5
36 
37 /* GPIO peripheral type and subtype out_values */
38 #define PMIC_GPIO_TYPE				0x10
39 #define PMIC_GPIO_SUBTYPE_GPIO_4CH		0x1
40 #define PMIC_GPIO_SUBTYPE_GPIOC_4CH		0x5
41 #define PMIC_GPIO_SUBTYPE_GPIO_8CH		0x9
42 #define PMIC_GPIO_SUBTYPE_GPIOC_8CH		0xd
43 #define PMIC_GPIO_SUBTYPE_GPIO_LV		0x10
44 #define PMIC_GPIO_SUBTYPE_GPIO_MV		0x11
45 
46 #define PMIC_MPP_REG_RT_STS			0x10
47 #define PMIC_MPP_REG_RT_STS_VAL_MASK		0x1
48 
49 /* control register base address offsets */
50 #define PMIC_GPIO_REG_MODE_CTL			0x40
51 #define PMIC_GPIO_REG_DIG_VIN_CTL		0x41
52 #define PMIC_GPIO_REG_DIG_PULL_CTL		0x42
53 #define PMIC_GPIO_REG_LV_MV_DIG_OUT_SOURCE_CTL	0x44
54 #define PMIC_GPIO_REG_DIG_IN_CTL		0x43
55 #define PMIC_GPIO_REG_DIG_OUT_CTL		0x45
56 #define PMIC_GPIO_REG_EN_CTL			0x46
57 #define PMIC_GPIO_REG_LV_MV_ANA_PASS_THRU_SEL	0x4A
58 
59 /* PMIC_GPIO_REG_MODE_CTL */
60 #define PMIC_GPIO_REG_MODE_VALUE_SHIFT		0x1
61 #define PMIC_GPIO_REG_MODE_FUNCTION_SHIFT	1
62 #define PMIC_GPIO_REG_MODE_FUNCTION_MASK	0x7
63 #define PMIC_GPIO_REG_MODE_DIR_SHIFT		4
64 #define PMIC_GPIO_REG_MODE_DIR_MASK		0x7
65 
66 #define PMIC_GPIO_MODE_DIGITAL_INPUT		0
67 #define PMIC_GPIO_MODE_DIGITAL_OUTPUT		1
68 #define PMIC_GPIO_MODE_DIGITAL_INPUT_OUTPUT	2
69 #define PMIC_GPIO_MODE_ANALOG_PASS_THRU		3
70 #define PMIC_GPIO_REG_LV_MV_MODE_DIR_MASK	0x3
71 
72 /* PMIC_GPIO_REG_DIG_VIN_CTL */
73 #define PMIC_GPIO_REG_VIN_SHIFT			0
74 #define PMIC_GPIO_REG_VIN_MASK			0x7
75 
76 /* PMIC_GPIO_REG_DIG_PULL_CTL */
77 #define PMIC_GPIO_REG_PULL_SHIFT		0
78 #define PMIC_GPIO_REG_PULL_MASK			0x7
79 
80 #define PMIC_GPIO_PULL_DOWN			4
81 #define PMIC_GPIO_PULL_DISABLE			5
82 
83 /* PMIC_GPIO_REG_LV_MV_DIG_OUT_SOURCE_CTL for LV/MV */
84 #define PMIC_GPIO_LV_MV_OUTPUT_INVERT		0x80
85 #define PMIC_GPIO_LV_MV_OUTPUT_INVERT_SHIFT	7
86 #define PMIC_GPIO_LV_MV_OUTPUT_SOURCE_SEL_MASK	0xF
87 
88 /* PMIC_GPIO_REG_DIG_IN_CTL */
89 #define PMIC_GPIO_LV_MV_DIG_IN_DTEST_EN		0x80
90 #define PMIC_GPIO_LV_MV_DIG_IN_DTEST_SEL_MASK	0x7
91 #define PMIC_GPIO_DIG_IN_DTEST_SEL_MASK		0xf
92 
93 /* PMIC_GPIO_REG_DIG_OUT_CTL */
94 #define PMIC_GPIO_REG_OUT_STRENGTH_SHIFT	0
95 #define PMIC_GPIO_REG_OUT_STRENGTH_MASK		0x3
96 #define PMIC_GPIO_REG_OUT_TYPE_SHIFT		4
97 #define PMIC_GPIO_REG_OUT_TYPE_MASK		0x3
98 
99 /*
100  * Output type - indicates pin should be configured as push-pull,
101  * open drain or open source.
102  */
103 #define PMIC_GPIO_OUT_BUF_CMOS			0
104 #define PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS	1
105 #define PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS	2
106 
107 /* PMIC_GPIO_REG_EN_CTL */
108 #define PMIC_GPIO_REG_MASTER_EN_SHIFT		7
109 
110 #define PMIC_GPIO_PHYSICAL_OFFSET		1
111 
112 /* PMIC_GPIO_REG_LV_MV_ANA_PASS_THRU_SEL */
113 #define PMIC_GPIO_LV_MV_ANA_MUX_SEL_MASK		0x3
114 
115 /* Qualcomm specific pin configurations */
116 #define PMIC_GPIO_CONF_PULL_UP			(PIN_CONFIG_END + 1)
117 #define PMIC_GPIO_CONF_STRENGTH			(PIN_CONFIG_END + 2)
118 #define PMIC_GPIO_CONF_ATEST			(PIN_CONFIG_END + 3)
119 #define PMIC_GPIO_CONF_ANALOG_PASS		(PIN_CONFIG_END + 4)
120 #define PMIC_GPIO_CONF_DTEST_BUFFER		(PIN_CONFIG_END + 5)
121 
122 /* The index of each function in pmic_gpio_functions[] array */
123 enum pmic_gpio_func_index {
124 	PMIC_GPIO_FUNC_INDEX_NORMAL,
125 	PMIC_GPIO_FUNC_INDEX_PAIRED,
126 	PMIC_GPIO_FUNC_INDEX_FUNC1,
127 	PMIC_GPIO_FUNC_INDEX_FUNC2,
128 	PMIC_GPIO_FUNC_INDEX_FUNC3,
129 	PMIC_GPIO_FUNC_INDEX_FUNC4,
130 	PMIC_GPIO_FUNC_INDEX_DTEST1,
131 	PMIC_GPIO_FUNC_INDEX_DTEST2,
132 	PMIC_GPIO_FUNC_INDEX_DTEST3,
133 	PMIC_GPIO_FUNC_INDEX_DTEST4,
134 };
135 
136 /**
137  * struct pmic_gpio_pad - keep current GPIO settings
138  * @base: Address base in SPMI device.
139  * @irq: IRQ number which this GPIO generate.
140  * @is_enabled: Set to false when GPIO should be put in high Z state.
141  * @out_value: Cached pin output value
142  * @have_buffer: Set to true if GPIO output could be configured in push-pull,
143  *	open-drain or open-source mode.
144  * @output_enabled: Set to true if GPIO output logic is enabled.
145  * @input_enabled: Set to true if GPIO input buffer logic is enabled.
146  * @analog_pass: Set to true if GPIO is in analog-pass-through mode.
147  * @lv_mv_type: Set to true if GPIO subtype is GPIO_LV(0x10) or GPIO_MV(0x11).
148  * @num_sources: Number of power-sources supported by this GPIO.
149  * @power_source: Current power-source used.
150  * @buffer_type: Push-pull, open-drain or open-source.
151  * @pullup: Constant current which flow trough GPIO output buffer.
152  * @strength: No, Low, Medium, High
153  * @function: See pmic_gpio_functions[]
154  * @atest: the ATEST selection for GPIO analog-pass-through mode
155  * @dtest_buffer: the DTEST buffer selection for digital input mode.
156  */
157 struct pmic_gpio_pad {
158 	u16		base;
159 	int		irq;
160 	bool		is_enabled;
161 	bool		out_value;
162 	bool		have_buffer;
163 	bool		output_enabled;
164 	bool		input_enabled;
165 	bool		analog_pass;
166 	bool		lv_mv_type;
167 	unsigned int	num_sources;
168 	unsigned int	power_source;
169 	unsigned int	buffer_type;
170 	unsigned int	pullup;
171 	unsigned int	strength;
172 	unsigned int	function;
173 	unsigned int	atest;
174 	unsigned int	dtest_buffer;
175 };
176 
177 struct pmic_gpio_state {
178 	struct device	*dev;
179 	struct regmap	*map;
180 	struct pinctrl_dev *ctrl;
181 	struct gpio_chip chip;
182 };
183 
184 static const struct pinconf_generic_params pmic_gpio_bindings[] = {
185 	{"qcom,pull-up-strength",	PMIC_GPIO_CONF_PULL_UP,		0},
186 	{"qcom,drive-strength",		PMIC_GPIO_CONF_STRENGTH,	0},
187 	{"qcom,atest",			PMIC_GPIO_CONF_ATEST,		0},
188 	{"qcom,analog-pass",		PMIC_GPIO_CONF_ANALOG_PASS,	0},
189 	{"qcom,dtest-buffer",           PMIC_GPIO_CONF_DTEST_BUFFER,    0},
190 };
191 
192 #ifdef CONFIG_DEBUG_FS
193 static const struct pin_config_item pmic_conf_items[ARRAY_SIZE(pmic_gpio_bindings)] = {
194 	PCONFDUMP(PMIC_GPIO_CONF_PULL_UP,  "pull up strength", NULL, true),
195 	PCONFDUMP(PMIC_GPIO_CONF_STRENGTH, "drive-strength", NULL, true),
196 	PCONFDUMP(PMIC_GPIO_CONF_ATEST, "atest", NULL, true),
197 	PCONFDUMP(PMIC_GPIO_CONF_ANALOG_PASS, "analog-pass", NULL, true),
198 	PCONFDUMP(PMIC_GPIO_CONF_DTEST_BUFFER, "dtest-buffer", NULL, true),
199 };
200 #endif
201 
202 static const char *const pmic_gpio_groups[] = {
203 	"gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", "gpio8",
204 	"gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14", "gpio15",
205 	"gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21", "gpio22",
206 	"gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", "gpio29",
207 	"gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35", "gpio36",
208 };
209 
210 static const char *const pmic_gpio_functions[] = {
211 	[PMIC_GPIO_FUNC_INDEX_NORMAL]	= PMIC_GPIO_FUNC_NORMAL,
212 	[PMIC_GPIO_FUNC_INDEX_PAIRED]	= PMIC_GPIO_FUNC_PAIRED,
213 	[PMIC_GPIO_FUNC_INDEX_FUNC1]	= PMIC_GPIO_FUNC_FUNC1,
214 	[PMIC_GPIO_FUNC_INDEX_FUNC2]	= PMIC_GPIO_FUNC_FUNC2,
215 	[PMIC_GPIO_FUNC_INDEX_FUNC3]	= PMIC_GPIO_FUNC_FUNC3,
216 	[PMIC_GPIO_FUNC_INDEX_FUNC4]	= PMIC_GPIO_FUNC_FUNC4,
217 	[PMIC_GPIO_FUNC_INDEX_DTEST1]	= PMIC_GPIO_FUNC_DTEST1,
218 	[PMIC_GPIO_FUNC_INDEX_DTEST2]	= PMIC_GPIO_FUNC_DTEST2,
219 	[PMIC_GPIO_FUNC_INDEX_DTEST3]	= PMIC_GPIO_FUNC_DTEST3,
220 	[PMIC_GPIO_FUNC_INDEX_DTEST4]	= PMIC_GPIO_FUNC_DTEST4,
221 };
222 
223 static int pmic_gpio_read(struct pmic_gpio_state *state,
224 			  struct pmic_gpio_pad *pad, unsigned int addr)
225 {
226 	unsigned int val;
227 	int ret;
228 
229 	ret = regmap_read(state->map, pad->base + addr, &val);
230 	if (ret < 0)
231 		dev_err(state->dev, "read 0x%x failed\n", addr);
232 	else
233 		ret = val;
234 
235 	return ret;
236 }
237 
238 static int pmic_gpio_write(struct pmic_gpio_state *state,
239 			   struct pmic_gpio_pad *pad, unsigned int addr,
240 			   unsigned int val)
241 {
242 	int ret;
243 
244 	ret = regmap_write(state->map, pad->base + addr, val);
245 	if (ret < 0)
246 		dev_err(state->dev, "write 0x%x failed\n", addr);
247 
248 	return ret;
249 }
250 
251 static int pmic_gpio_get_groups_count(struct pinctrl_dev *pctldev)
252 {
253 	/* Every PIN is a group */
254 	return pctldev->desc->npins;
255 }
256 
257 static const char *pmic_gpio_get_group_name(struct pinctrl_dev *pctldev,
258 					    unsigned pin)
259 {
260 	return pctldev->desc->pins[pin].name;
261 }
262 
263 static int pmic_gpio_get_group_pins(struct pinctrl_dev *pctldev, unsigned pin,
264 				    const unsigned **pins, unsigned *num_pins)
265 {
266 	*pins = &pctldev->desc->pins[pin].number;
267 	*num_pins = 1;
268 	return 0;
269 }
270 
271 static const struct pinctrl_ops pmic_gpio_pinctrl_ops = {
272 	.get_groups_count	= pmic_gpio_get_groups_count,
273 	.get_group_name		= pmic_gpio_get_group_name,
274 	.get_group_pins		= pmic_gpio_get_group_pins,
275 	.dt_node_to_map		= pinconf_generic_dt_node_to_map_group,
276 	.dt_free_map		= pinctrl_utils_free_map,
277 };
278 
279 static int pmic_gpio_get_functions_count(struct pinctrl_dev *pctldev)
280 {
281 	return ARRAY_SIZE(pmic_gpio_functions);
282 }
283 
284 static const char *pmic_gpio_get_function_name(struct pinctrl_dev *pctldev,
285 					       unsigned function)
286 {
287 	return pmic_gpio_functions[function];
288 }
289 
290 static int pmic_gpio_get_function_groups(struct pinctrl_dev *pctldev,
291 					 unsigned function,
292 					 const char *const **groups,
293 					 unsigned *const num_qgroups)
294 {
295 	*groups = pmic_gpio_groups;
296 	*num_qgroups = pctldev->desc->npins;
297 	return 0;
298 }
299 
300 static int pmic_gpio_set_mux(struct pinctrl_dev *pctldev, unsigned function,
301 				unsigned pin)
302 {
303 	struct pmic_gpio_state *state = pinctrl_dev_get_drvdata(pctldev);
304 	struct pmic_gpio_pad *pad;
305 	unsigned int val;
306 	int ret;
307 
308 	if (function > PMIC_GPIO_FUNC_INDEX_DTEST4) {
309 		pr_err("function: %d is not defined\n", function);
310 		return -EINVAL;
311 	}
312 
313 	pad = pctldev->desc->pins[pin].drv_data;
314 	/*
315 	 * Non-LV/MV subtypes only support 2 special functions,
316 	 * offsetting the dtestx function values by 2
317 	 */
318 	if (!pad->lv_mv_type) {
319 		if (function == PMIC_GPIO_FUNC_INDEX_FUNC3 ||
320 				function == PMIC_GPIO_FUNC_INDEX_FUNC4) {
321 			pr_err("LV/MV subtype doesn't have func3/func4\n");
322 			return -EINVAL;
323 		}
324 		if (function >= PMIC_GPIO_FUNC_INDEX_DTEST1)
325 			function -= (PMIC_GPIO_FUNC_INDEX_DTEST1 -
326 					PMIC_GPIO_FUNC_INDEX_FUNC3);
327 	}
328 
329 	pad->function = function;
330 
331 	if (pad->analog_pass)
332 		val = PMIC_GPIO_MODE_ANALOG_PASS_THRU;
333 	else if (pad->output_enabled && pad->input_enabled)
334 		val = PMIC_GPIO_MODE_DIGITAL_INPUT_OUTPUT;
335 	else if (pad->output_enabled)
336 		val = PMIC_GPIO_MODE_DIGITAL_OUTPUT;
337 	else
338 		val = PMIC_GPIO_MODE_DIGITAL_INPUT;
339 
340 	if (pad->lv_mv_type) {
341 		ret = pmic_gpio_write(state, pad,
342 				PMIC_GPIO_REG_MODE_CTL, val);
343 		if (ret < 0)
344 			return ret;
345 
346 		val = pad->atest - 1;
347 		ret = pmic_gpio_write(state, pad,
348 				PMIC_GPIO_REG_LV_MV_ANA_PASS_THRU_SEL, val);
349 		if (ret < 0)
350 			return ret;
351 
352 		val = pad->out_value
353 			<< PMIC_GPIO_LV_MV_OUTPUT_INVERT_SHIFT;
354 		val |= pad->function
355 			& PMIC_GPIO_LV_MV_OUTPUT_SOURCE_SEL_MASK;
356 		ret = pmic_gpio_write(state, pad,
357 			PMIC_GPIO_REG_LV_MV_DIG_OUT_SOURCE_CTL, val);
358 		if (ret < 0)
359 			return ret;
360 	} else {
361 		val = val << PMIC_GPIO_REG_MODE_DIR_SHIFT;
362 		val |= pad->function << PMIC_GPIO_REG_MODE_FUNCTION_SHIFT;
363 		val |= pad->out_value & PMIC_GPIO_REG_MODE_VALUE_SHIFT;
364 
365 		ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_MODE_CTL, val);
366 		if (ret < 0)
367 			return ret;
368 	}
369 
370 	val = pad->is_enabled << PMIC_GPIO_REG_MASTER_EN_SHIFT;
371 
372 	return pmic_gpio_write(state, pad, PMIC_GPIO_REG_EN_CTL, val);
373 }
374 
375 static const struct pinmux_ops pmic_gpio_pinmux_ops = {
376 	.get_functions_count	= pmic_gpio_get_functions_count,
377 	.get_function_name	= pmic_gpio_get_function_name,
378 	.get_function_groups	= pmic_gpio_get_function_groups,
379 	.set_mux		= pmic_gpio_set_mux,
380 };
381 
382 static int pmic_gpio_config_get(struct pinctrl_dev *pctldev,
383 				unsigned int pin, unsigned long *config)
384 {
385 	unsigned param = pinconf_to_config_param(*config);
386 	struct pmic_gpio_pad *pad;
387 	unsigned arg;
388 
389 	pad = pctldev->desc->pins[pin].drv_data;
390 
391 	switch (param) {
392 	case PIN_CONFIG_DRIVE_PUSH_PULL:
393 		arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_CMOS;
394 		break;
395 	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
396 		arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS;
397 		break;
398 	case PIN_CONFIG_DRIVE_OPEN_SOURCE:
399 		arg = pad->buffer_type == PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS;
400 		break;
401 	case PIN_CONFIG_BIAS_PULL_DOWN:
402 		arg = pad->pullup == PMIC_GPIO_PULL_DOWN;
403 		break;
404 	case PIN_CONFIG_BIAS_DISABLE:
405 		arg = pad->pullup = PMIC_GPIO_PULL_DISABLE;
406 		break;
407 	case PIN_CONFIG_BIAS_PULL_UP:
408 		arg = pad->pullup == PMIC_GPIO_PULL_UP_30;
409 		break;
410 	case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
411 		arg = !pad->is_enabled;
412 		break;
413 	case PIN_CONFIG_POWER_SOURCE:
414 		arg = pad->power_source;
415 		break;
416 	case PIN_CONFIG_INPUT_ENABLE:
417 		arg = pad->input_enabled;
418 		break;
419 	case PIN_CONFIG_OUTPUT:
420 		arg = pad->out_value;
421 		break;
422 	case PMIC_GPIO_CONF_PULL_UP:
423 		arg = pad->pullup;
424 		break;
425 	case PMIC_GPIO_CONF_STRENGTH:
426 		arg = pad->strength;
427 		break;
428 	case PMIC_GPIO_CONF_ATEST:
429 		arg = pad->atest;
430 		break;
431 	case PMIC_GPIO_CONF_ANALOG_PASS:
432 		arg = pad->analog_pass;
433 		break;
434 	case PMIC_GPIO_CONF_DTEST_BUFFER:
435 		arg = pad->dtest_buffer;
436 		break;
437 	default:
438 		return -EINVAL;
439 	}
440 
441 	*config = pinconf_to_config_packed(param, arg);
442 	return 0;
443 }
444 
445 static int pmic_gpio_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
446 				unsigned long *configs, unsigned nconfs)
447 {
448 	struct pmic_gpio_state *state = pinctrl_dev_get_drvdata(pctldev);
449 	struct pmic_gpio_pad *pad;
450 	unsigned param, arg;
451 	unsigned int val;
452 	int i, ret;
453 
454 	pad = pctldev->desc->pins[pin].drv_data;
455 
456 	for (i = 0; i < nconfs; i++) {
457 		param = pinconf_to_config_param(configs[i]);
458 		arg = pinconf_to_config_argument(configs[i]);
459 
460 		switch (param) {
461 		case PIN_CONFIG_DRIVE_PUSH_PULL:
462 			pad->buffer_type = PMIC_GPIO_OUT_BUF_CMOS;
463 			break;
464 		case PIN_CONFIG_DRIVE_OPEN_DRAIN:
465 			if (!pad->have_buffer)
466 				return -EINVAL;
467 			pad->buffer_type = PMIC_GPIO_OUT_BUF_OPEN_DRAIN_NMOS;
468 			break;
469 		case PIN_CONFIG_DRIVE_OPEN_SOURCE:
470 			if (!pad->have_buffer)
471 				return -EINVAL;
472 			pad->buffer_type = PMIC_GPIO_OUT_BUF_OPEN_DRAIN_PMOS;
473 			break;
474 		case PIN_CONFIG_BIAS_DISABLE:
475 			pad->pullup = PMIC_GPIO_PULL_DISABLE;
476 			break;
477 		case PIN_CONFIG_BIAS_PULL_UP:
478 			pad->pullup = PMIC_GPIO_PULL_UP_30;
479 			break;
480 		case PIN_CONFIG_BIAS_PULL_DOWN:
481 			if (arg)
482 				pad->pullup = PMIC_GPIO_PULL_DOWN;
483 			else
484 				pad->pullup = PMIC_GPIO_PULL_DISABLE;
485 			break;
486 		case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
487 			pad->is_enabled = false;
488 			break;
489 		case PIN_CONFIG_POWER_SOURCE:
490 			if (arg >= pad->num_sources)
491 				return -EINVAL;
492 			pad->power_source = arg;
493 			break;
494 		case PIN_CONFIG_INPUT_ENABLE:
495 			pad->input_enabled = arg ? true : false;
496 			break;
497 		case PIN_CONFIG_OUTPUT:
498 			pad->output_enabled = true;
499 			pad->out_value = arg;
500 			break;
501 		case PMIC_GPIO_CONF_PULL_UP:
502 			if (arg > PMIC_GPIO_PULL_UP_1P5_30)
503 				return -EINVAL;
504 			pad->pullup = arg;
505 			break;
506 		case PMIC_GPIO_CONF_STRENGTH:
507 			if (arg > PMIC_GPIO_STRENGTH_LOW)
508 				return -EINVAL;
509 			pad->strength = arg;
510 			break;
511 		case PMIC_GPIO_CONF_ATEST:
512 			if (!pad->lv_mv_type || arg > 4)
513 				return -EINVAL;
514 			pad->atest = arg;
515 			break;
516 		case PMIC_GPIO_CONF_ANALOG_PASS:
517 			if (!pad->lv_mv_type)
518 				return -EINVAL;
519 			pad->analog_pass = true;
520 			break;
521 		case PMIC_GPIO_CONF_DTEST_BUFFER:
522 			if (arg > 4)
523 				return -EINVAL;
524 			pad->dtest_buffer = arg;
525 			break;
526 		default:
527 			return -EINVAL;
528 		}
529 	}
530 
531 	val = pad->power_source << PMIC_GPIO_REG_VIN_SHIFT;
532 
533 	ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_VIN_CTL, val);
534 	if (ret < 0)
535 		return ret;
536 
537 	val = pad->pullup << PMIC_GPIO_REG_PULL_SHIFT;
538 
539 	ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_PULL_CTL, val);
540 	if (ret < 0)
541 		return ret;
542 
543 	val = pad->buffer_type << PMIC_GPIO_REG_OUT_TYPE_SHIFT;
544 	val |= pad->strength << PMIC_GPIO_REG_OUT_STRENGTH_SHIFT;
545 
546 	ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_OUT_CTL, val);
547 	if (ret < 0)
548 		return ret;
549 
550 	if (pad->dtest_buffer == 0) {
551 		val = 0;
552 	} else {
553 		if (pad->lv_mv_type) {
554 			val = pad->dtest_buffer - 1;
555 			val |= PMIC_GPIO_LV_MV_DIG_IN_DTEST_EN;
556 		} else {
557 			val = BIT(pad->dtest_buffer - 1);
558 		}
559 	}
560 	ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_DIG_IN_CTL, val);
561 	if (ret < 0)
562 		return ret;
563 
564 	if (pad->analog_pass)
565 		val = PMIC_GPIO_MODE_ANALOG_PASS_THRU;
566 	else if (pad->output_enabled && pad->input_enabled)
567 		val = PMIC_GPIO_MODE_DIGITAL_INPUT_OUTPUT;
568 	else if (pad->output_enabled)
569 		val = PMIC_GPIO_MODE_DIGITAL_OUTPUT;
570 	else
571 		val = PMIC_GPIO_MODE_DIGITAL_INPUT;
572 
573 	if (pad->lv_mv_type) {
574 		ret = pmic_gpio_write(state, pad,
575 				PMIC_GPIO_REG_MODE_CTL, val);
576 		if (ret < 0)
577 			return ret;
578 
579 		val = pad->atest - 1;
580 		ret = pmic_gpio_write(state, pad,
581 				PMIC_GPIO_REG_LV_MV_ANA_PASS_THRU_SEL, val);
582 		if (ret < 0)
583 			return ret;
584 
585 		val = pad->out_value
586 			<< PMIC_GPIO_LV_MV_OUTPUT_INVERT_SHIFT;
587 		val |= pad->function
588 			& PMIC_GPIO_LV_MV_OUTPUT_SOURCE_SEL_MASK;
589 		ret = pmic_gpio_write(state, pad,
590 			PMIC_GPIO_REG_LV_MV_DIG_OUT_SOURCE_CTL, val);
591 		if (ret < 0)
592 			return ret;
593 	} else {
594 		val = val << PMIC_GPIO_REG_MODE_DIR_SHIFT;
595 		val |= pad->function << PMIC_GPIO_REG_MODE_FUNCTION_SHIFT;
596 		val |= pad->out_value & PMIC_GPIO_REG_MODE_VALUE_SHIFT;
597 
598 		ret = pmic_gpio_write(state, pad, PMIC_GPIO_REG_MODE_CTL, val);
599 		if (ret < 0)
600 			return ret;
601 	}
602 
603 	return ret;
604 }
605 
606 static void pmic_gpio_config_dbg_show(struct pinctrl_dev *pctldev,
607 				      struct seq_file *s, unsigned pin)
608 {
609 	struct pmic_gpio_state *state = pinctrl_dev_get_drvdata(pctldev);
610 	struct pmic_gpio_pad *pad;
611 	int ret, val, function;
612 
613 	static const char *const biases[] = {
614 		"pull-up 30uA", "pull-up 1.5uA", "pull-up 31.5uA",
615 		"pull-up 1.5uA + 30uA boost", "pull-down 10uA", "no pull"
616 	};
617 	static const char *const buffer_types[] = {
618 		"push-pull", "open-drain", "open-source"
619 	};
620 	static const char *const strengths[] = {
621 		"no", "high", "medium", "low"
622 	};
623 
624 	pad = pctldev->desc->pins[pin].drv_data;
625 
626 	seq_printf(s, " gpio%-2d:", pin + PMIC_GPIO_PHYSICAL_OFFSET);
627 
628 	val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_EN_CTL);
629 
630 	if (val < 0 || !(val >> PMIC_GPIO_REG_MASTER_EN_SHIFT)) {
631 		seq_puts(s, " ---");
632 	} else {
633 		if (pad->input_enabled) {
634 			ret = pmic_gpio_read(state, pad, PMIC_MPP_REG_RT_STS);
635 			if (ret < 0)
636 				return;
637 
638 			ret &= PMIC_MPP_REG_RT_STS_VAL_MASK;
639 			pad->out_value = ret;
640 		}
641 		/*
642 		 * For the non-LV/MV subtypes only 2 special functions are
643 		 * available, offsetting the dtest function values by 2.
644 		 */
645 		function = pad->function;
646 		if (!pad->lv_mv_type &&
647 				pad->function >= PMIC_GPIO_FUNC_INDEX_FUNC3)
648 			function += PMIC_GPIO_FUNC_INDEX_DTEST1 -
649 				PMIC_GPIO_FUNC_INDEX_FUNC3;
650 
651 		if (pad->analog_pass)
652 			seq_puts(s, " analog-pass");
653 		else
654 			seq_printf(s, " %-4s",
655 					pad->output_enabled ? "out" : "in");
656 		seq_printf(s, " %-7s", pmic_gpio_functions[function]);
657 		seq_printf(s, " vin-%d", pad->power_source);
658 		seq_printf(s, " %-27s", biases[pad->pullup]);
659 		seq_printf(s, " %-10s", buffer_types[pad->buffer_type]);
660 		seq_printf(s, " %-4s", pad->out_value ? "high" : "low");
661 		seq_printf(s, " %-7s", strengths[pad->strength]);
662 		seq_printf(s, " atest-%d", pad->atest);
663 		seq_printf(s, " dtest-%d", pad->dtest_buffer);
664 	}
665 }
666 
667 static const struct pinconf_ops pmic_gpio_pinconf_ops = {
668 	.is_generic			= true,
669 	.pin_config_group_get		= pmic_gpio_config_get,
670 	.pin_config_group_set		= pmic_gpio_config_set,
671 	.pin_config_group_dbg_show	= pmic_gpio_config_dbg_show,
672 };
673 
674 static int pmic_gpio_direction_input(struct gpio_chip *chip, unsigned pin)
675 {
676 	struct pmic_gpio_state *state = gpiochip_get_data(chip);
677 	unsigned long config;
678 
679 	config = pinconf_to_config_packed(PIN_CONFIG_INPUT_ENABLE, 1);
680 
681 	return pmic_gpio_config_set(state->ctrl, pin, &config, 1);
682 }
683 
684 static int pmic_gpio_direction_output(struct gpio_chip *chip,
685 				      unsigned pin, int val)
686 {
687 	struct pmic_gpio_state *state = gpiochip_get_data(chip);
688 	unsigned long config;
689 
690 	config = pinconf_to_config_packed(PIN_CONFIG_OUTPUT, val);
691 
692 	return pmic_gpio_config_set(state->ctrl, pin, &config, 1);
693 }
694 
695 static int pmic_gpio_get(struct gpio_chip *chip, unsigned pin)
696 {
697 	struct pmic_gpio_state *state = gpiochip_get_data(chip);
698 	struct pmic_gpio_pad *pad;
699 	int ret;
700 
701 	pad = state->ctrl->desc->pins[pin].drv_data;
702 
703 	if (!pad->is_enabled)
704 		return -EINVAL;
705 
706 	if (pad->input_enabled) {
707 		ret = pmic_gpio_read(state, pad, PMIC_MPP_REG_RT_STS);
708 		if (ret < 0)
709 			return ret;
710 
711 		pad->out_value = ret & PMIC_MPP_REG_RT_STS_VAL_MASK;
712 	}
713 
714 	return !!pad->out_value;
715 }
716 
717 static void pmic_gpio_set(struct gpio_chip *chip, unsigned pin, int value)
718 {
719 	struct pmic_gpio_state *state = gpiochip_get_data(chip);
720 	unsigned long config;
721 
722 	config = pinconf_to_config_packed(PIN_CONFIG_OUTPUT, value);
723 
724 	pmic_gpio_config_set(state->ctrl, pin, &config, 1);
725 }
726 
727 static int pmic_gpio_of_xlate(struct gpio_chip *chip,
728 			      const struct of_phandle_args *gpio_desc,
729 			      u32 *flags)
730 {
731 	if (chip->of_gpio_n_cells < 2)
732 		return -EINVAL;
733 
734 	if (flags)
735 		*flags = gpio_desc->args[1];
736 
737 	return gpio_desc->args[0] - PMIC_GPIO_PHYSICAL_OFFSET;
738 }
739 
740 static int pmic_gpio_to_irq(struct gpio_chip *chip, unsigned pin)
741 {
742 	struct pmic_gpio_state *state = gpiochip_get_data(chip);
743 	struct pmic_gpio_pad *pad;
744 
745 	pad = state->ctrl->desc->pins[pin].drv_data;
746 
747 	return pad->irq;
748 }
749 
750 static void pmic_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
751 {
752 	struct pmic_gpio_state *state = gpiochip_get_data(chip);
753 	unsigned i;
754 
755 	for (i = 0; i < chip->ngpio; i++) {
756 		pmic_gpio_config_dbg_show(state->ctrl, s, i);
757 		seq_puts(s, "\n");
758 	}
759 }
760 
761 static const struct gpio_chip pmic_gpio_gpio_template = {
762 	.direction_input	= pmic_gpio_direction_input,
763 	.direction_output	= pmic_gpio_direction_output,
764 	.get			= pmic_gpio_get,
765 	.set			= pmic_gpio_set,
766 	.request		= gpiochip_generic_request,
767 	.free			= gpiochip_generic_free,
768 	.of_xlate		= pmic_gpio_of_xlate,
769 	.to_irq			= pmic_gpio_to_irq,
770 	.dbg_show		= pmic_gpio_dbg_show,
771 };
772 
773 static int pmic_gpio_populate(struct pmic_gpio_state *state,
774 			      struct pmic_gpio_pad *pad)
775 {
776 	int type, subtype, val, dir;
777 
778 	type = pmic_gpio_read(state, pad, PMIC_GPIO_REG_TYPE);
779 	if (type < 0)
780 		return type;
781 
782 	if (type != PMIC_GPIO_TYPE) {
783 		dev_err(state->dev, "incorrect block type 0x%x at 0x%x\n",
784 			type, pad->base);
785 		return -ENODEV;
786 	}
787 
788 	subtype = pmic_gpio_read(state, pad, PMIC_GPIO_REG_SUBTYPE);
789 	if (subtype < 0)
790 		return subtype;
791 
792 	switch (subtype) {
793 	case PMIC_GPIO_SUBTYPE_GPIO_4CH:
794 		pad->have_buffer = true;
795 	case PMIC_GPIO_SUBTYPE_GPIOC_4CH:
796 		pad->num_sources = 4;
797 		break;
798 	case PMIC_GPIO_SUBTYPE_GPIO_8CH:
799 		pad->have_buffer = true;
800 	case PMIC_GPIO_SUBTYPE_GPIOC_8CH:
801 		pad->num_sources = 8;
802 		break;
803 	case PMIC_GPIO_SUBTYPE_GPIO_LV:
804 		pad->num_sources = 1;
805 		pad->have_buffer = true;
806 		pad->lv_mv_type = true;
807 		break;
808 	case PMIC_GPIO_SUBTYPE_GPIO_MV:
809 		pad->num_sources = 2;
810 		pad->have_buffer = true;
811 		pad->lv_mv_type = true;
812 		break;
813 	default:
814 		dev_err(state->dev, "unknown GPIO type 0x%x\n", subtype);
815 		return -ENODEV;
816 	}
817 
818 	if (pad->lv_mv_type) {
819 		val = pmic_gpio_read(state, pad,
820 				PMIC_GPIO_REG_LV_MV_DIG_OUT_SOURCE_CTL);
821 		if (val < 0)
822 			return val;
823 
824 		pad->out_value = !!(val & PMIC_GPIO_LV_MV_OUTPUT_INVERT);
825 		pad->function = val & PMIC_GPIO_LV_MV_OUTPUT_SOURCE_SEL_MASK;
826 
827 		val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_MODE_CTL);
828 		if (val < 0)
829 			return val;
830 
831 		dir = val & PMIC_GPIO_REG_LV_MV_MODE_DIR_MASK;
832 	} else {
833 		val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_MODE_CTL);
834 		if (val < 0)
835 			return val;
836 
837 		pad->out_value = val & PMIC_GPIO_REG_MODE_VALUE_SHIFT;
838 
839 		dir = val >> PMIC_GPIO_REG_MODE_DIR_SHIFT;
840 		dir &= PMIC_GPIO_REG_MODE_DIR_MASK;
841 		pad->function = val >> PMIC_GPIO_REG_MODE_FUNCTION_SHIFT;
842 		pad->function &= PMIC_GPIO_REG_MODE_FUNCTION_MASK;
843 	}
844 
845 	switch (dir) {
846 	case PMIC_GPIO_MODE_DIGITAL_INPUT:
847 		pad->input_enabled = true;
848 		pad->output_enabled = false;
849 		break;
850 	case PMIC_GPIO_MODE_DIGITAL_OUTPUT:
851 		pad->input_enabled = false;
852 		pad->output_enabled = true;
853 		break;
854 	case PMIC_GPIO_MODE_DIGITAL_INPUT_OUTPUT:
855 		pad->input_enabled = true;
856 		pad->output_enabled = true;
857 		break;
858 	case PMIC_GPIO_MODE_ANALOG_PASS_THRU:
859 		if (!pad->lv_mv_type)
860 			return -ENODEV;
861 		pad->analog_pass = true;
862 		break;
863 	default:
864 		dev_err(state->dev, "unknown GPIO direction\n");
865 		return -ENODEV;
866 	}
867 
868 	val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_VIN_CTL);
869 	if (val < 0)
870 		return val;
871 
872 	pad->power_source = val >> PMIC_GPIO_REG_VIN_SHIFT;
873 	pad->power_source &= PMIC_GPIO_REG_VIN_MASK;
874 
875 	val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_PULL_CTL);
876 	if (val < 0)
877 		return val;
878 
879 	pad->pullup = val >> PMIC_GPIO_REG_PULL_SHIFT;
880 	pad->pullup &= PMIC_GPIO_REG_PULL_MASK;
881 
882 	val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_IN_CTL);
883 	if (val < 0)
884 		return val;
885 
886 	if (pad->lv_mv_type && (val & PMIC_GPIO_LV_MV_DIG_IN_DTEST_EN))
887 		pad->dtest_buffer =
888 			(val & PMIC_GPIO_LV_MV_DIG_IN_DTEST_SEL_MASK) + 1;
889 	else if (!pad->lv_mv_type)
890 		pad->dtest_buffer = ffs(val);
891 	else
892 		pad->dtest_buffer = 0;
893 
894 	val = pmic_gpio_read(state, pad, PMIC_GPIO_REG_DIG_OUT_CTL);
895 	if (val < 0)
896 		return val;
897 
898 	pad->strength = val >> PMIC_GPIO_REG_OUT_STRENGTH_SHIFT;
899 	pad->strength &= PMIC_GPIO_REG_OUT_STRENGTH_MASK;
900 
901 	pad->buffer_type = val >> PMIC_GPIO_REG_OUT_TYPE_SHIFT;
902 	pad->buffer_type &= PMIC_GPIO_REG_OUT_TYPE_MASK;
903 
904 	if (pad->lv_mv_type) {
905 		val = pmic_gpio_read(state, pad,
906 				PMIC_GPIO_REG_LV_MV_ANA_PASS_THRU_SEL);
907 		if (val < 0)
908 			return val;
909 		pad->atest = (val & PMIC_GPIO_LV_MV_ANA_MUX_SEL_MASK) + 1;
910 	}
911 
912 	/* Pin could be disabled with PIN_CONFIG_BIAS_HIGH_IMPEDANCE */
913 	pad->is_enabled = true;
914 	return 0;
915 }
916 
917 static int pmic_gpio_probe(struct platform_device *pdev)
918 {
919 	struct device *dev = &pdev->dev;
920 	struct pinctrl_pin_desc *pindesc;
921 	struct pinctrl_desc *pctrldesc;
922 	struct pmic_gpio_pad *pad, *pads;
923 	struct pmic_gpio_state *state;
924 	int ret, npins, i;
925 	u32 reg;
926 
927 	ret = of_property_read_u32(dev->of_node, "reg", &reg);
928 	if (ret < 0) {
929 		dev_err(dev, "missing base address");
930 		return ret;
931 	}
932 
933 	npins = platform_irq_count(pdev);
934 	if (!npins)
935 		return -EINVAL;
936 	if (npins < 0)
937 		return npins;
938 
939 	BUG_ON(npins > ARRAY_SIZE(pmic_gpio_groups));
940 
941 	state = devm_kzalloc(dev, sizeof(*state), GFP_KERNEL);
942 	if (!state)
943 		return -ENOMEM;
944 
945 	platform_set_drvdata(pdev, state);
946 
947 	state->dev = &pdev->dev;
948 	state->map = dev_get_regmap(dev->parent, NULL);
949 
950 	pindesc = devm_kcalloc(dev, npins, sizeof(*pindesc), GFP_KERNEL);
951 	if (!pindesc)
952 		return -ENOMEM;
953 
954 	pads = devm_kcalloc(dev, npins, sizeof(*pads), GFP_KERNEL);
955 	if (!pads)
956 		return -ENOMEM;
957 
958 	pctrldesc = devm_kzalloc(dev, sizeof(*pctrldesc), GFP_KERNEL);
959 	if (!pctrldesc)
960 		return -ENOMEM;
961 
962 	pctrldesc->pctlops = &pmic_gpio_pinctrl_ops;
963 	pctrldesc->pmxops = &pmic_gpio_pinmux_ops;
964 	pctrldesc->confops = &pmic_gpio_pinconf_ops;
965 	pctrldesc->owner = THIS_MODULE;
966 	pctrldesc->name = dev_name(dev);
967 	pctrldesc->pins = pindesc;
968 	pctrldesc->npins = npins;
969 	pctrldesc->num_custom_params = ARRAY_SIZE(pmic_gpio_bindings);
970 	pctrldesc->custom_params = pmic_gpio_bindings;
971 #ifdef CONFIG_DEBUG_FS
972 	pctrldesc->custom_conf_items = pmic_conf_items;
973 #endif
974 
975 	for (i = 0; i < npins; i++, pindesc++) {
976 		pad = &pads[i];
977 		pindesc->drv_data = pad;
978 		pindesc->number = i;
979 		pindesc->name = pmic_gpio_groups[i];
980 
981 		pad->irq = platform_get_irq(pdev, i);
982 		if (pad->irq < 0)
983 			return pad->irq;
984 
985 		pad->base = reg + i * PMIC_GPIO_ADDRESS_RANGE;
986 
987 		ret = pmic_gpio_populate(state, pad);
988 		if (ret < 0)
989 			return ret;
990 	}
991 
992 	state->chip = pmic_gpio_gpio_template;
993 	state->chip.parent = dev;
994 	state->chip.base = -1;
995 	state->chip.ngpio = npins;
996 	state->chip.label = dev_name(dev);
997 	state->chip.of_gpio_n_cells = 2;
998 	state->chip.can_sleep = false;
999 
1000 	state->ctrl = devm_pinctrl_register(dev, pctrldesc, state);
1001 	if (IS_ERR(state->ctrl))
1002 		return PTR_ERR(state->ctrl);
1003 
1004 	ret = gpiochip_add_data(&state->chip, state);
1005 	if (ret) {
1006 		dev_err(state->dev, "can't add gpio chip\n");
1007 		return ret;
1008 	}
1009 
1010 	ret = gpiochip_add_pin_range(&state->chip, dev_name(dev), 0, 0, npins);
1011 	if (ret) {
1012 		dev_err(dev, "failed to add pin range\n");
1013 		goto err_range;
1014 	}
1015 
1016 	return 0;
1017 
1018 err_range:
1019 	gpiochip_remove(&state->chip);
1020 	return ret;
1021 }
1022 
1023 static int pmic_gpio_remove(struct platform_device *pdev)
1024 {
1025 	struct pmic_gpio_state *state = platform_get_drvdata(pdev);
1026 
1027 	gpiochip_remove(&state->chip);
1028 	return 0;
1029 }
1030 
1031 static const struct of_device_id pmic_gpio_of_match[] = {
1032 	{ .compatible = "qcom,pm8916-gpio" },	/* 4 GPIO's */
1033 	{ .compatible = "qcom,pm8941-gpio" },	/* 36 GPIO's */
1034 	{ .compatible = "qcom,pm8994-gpio" },	/* 22 GPIO's */
1035 	{ .compatible = "qcom,pma8084-gpio" },	/* 22 GPIO's */
1036 	{ .compatible = "qcom,spmi-gpio" }, /* Generic */
1037 	{ },
1038 };
1039 
1040 MODULE_DEVICE_TABLE(of, pmic_gpio_of_match);
1041 
1042 static struct platform_driver pmic_gpio_driver = {
1043 	.driver = {
1044 		   .name = "qcom-spmi-gpio",
1045 		   .of_match_table = pmic_gpio_of_match,
1046 	},
1047 	.probe	= pmic_gpio_probe,
1048 	.remove = pmic_gpio_remove,
1049 };
1050 
1051 module_platform_driver(pmic_gpio_driver);
1052 
1053 MODULE_AUTHOR("Ivan T. Ivanov <iivanov@mm-sol.com>");
1054 MODULE_DESCRIPTION("Qualcomm SPMI PMIC GPIO pin control driver");
1055 MODULE_ALIAS("platform:qcom-spmi-gpio");
1056 MODULE_LICENSE("GPL v2");
1057