1 /*
2  * Copyright (c) 2015, Sony Mobile Communications AB.
3  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 and
7  * only version 2 as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14 
15 #include <linux/module.h>
16 #include <linux/platform_device.h>
17 #include <linux/pinctrl/pinctrl.h>
18 #include <linux/pinctrl/pinmux.h>
19 #include <linux/pinctrl/pinconf.h>
20 #include <linux/pinctrl/pinconf-generic.h>
21 #include <linux/slab.h>
22 #include <linux/regmap.h>
23 #include <linux/gpio/driver.h>
24 #include <linux/interrupt.h>
25 #include <linux/of_device.h>
26 #include <linux/of_irq.h>
27 
28 #include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
29 
30 #include "../core.h"
31 #include "../pinctrl-utils.h"
32 
33 /* mode */
34 #define PM8XXX_GPIO_MODE_ENABLED	BIT(0)
35 #define PM8XXX_GPIO_MODE_INPUT		0
36 #define PM8XXX_GPIO_MODE_OUTPUT		2
37 
38 /* output buffer */
39 #define PM8XXX_GPIO_PUSH_PULL		0
40 #define PM8XXX_GPIO_OPEN_DRAIN		1
41 
42 /* bias */
43 #define PM8XXX_GPIO_BIAS_PU_30		0
44 #define PM8XXX_GPIO_BIAS_PU_1P5		1
45 #define PM8XXX_GPIO_BIAS_PU_31P5	2
46 #define PM8XXX_GPIO_BIAS_PU_1P5_30	3
47 #define PM8XXX_GPIO_BIAS_PD		4
48 #define PM8XXX_GPIO_BIAS_NP		5
49 
50 /* GPIO registers */
51 #define SSBI_REG_ADDR_GPIO_BASE		0x150
52 #define SSBI_REG_ADDR_GPIO(n)		(SSBI_REG_ADDR_GPIO_BASE + n)
53 
54 #define PM8XXX_BANK_WRITE		BIT(7)
55 
56 #define PM8XXX_MAX_GPIOS               44
57 
58 #define PM8XXX_GPIO_PHYSICAL_OFFSET	1
59 
60 /* custom pinconf parameters */
61 #define PM8XXX_QCOM_DRIVE_STRENGH      (PIN_CONFIG_END + 1)
62 #define PM8XXX_QCOM_PULL_UP_STRENGTH   (PIN_CONFIG_END + 2)
63 
64 /**
65  * struct pm8xxx_pin_data - dynamic configuration for a pin
66  * @reg:               address of the control register
67  * @irq:               IRQ from the PMIC interrupt controller
68  * @power_source:      logical selected voltage source, mapping in static data
69  *                     is used translate to register values
70  * @mode:              operating mode for the pin (input/output)
71  * @open_drain:        output buffer configured as open-drain (vs push-pull)
72  * @output_value:      configured output value
73  * @bias:              register view of configured bias
74  * @pull_up_strength:  placeholder for selected pull up strength
75  *                     only used to configure bias when pull up is selected
76  * @output_strength:   selector of output-strength
77  * @disable:           pin disabled / configured as tristate
78  * @function:          pinmux selector
79  * @inverted:          pin logic is inverted
80  */
81 struct pm8xxx_pin_data {
82 	unsigned reg;
83 	int irq;
84 	u8 power_source;
85 	u8 mode;
86 	bool open_drain;
87 	bool output_value;
88 	u8 bias;
89 	u8 pull_up_strength;
90 	u8 output_strength;
91 	bool disable;
92 	u8 function;
93 	bool inverted;
94 };
95 
96 struct pm8xxx_gpio {
97 	struct device *dev;
98 	struct regmap *regmap;
99 	struct pinctrl_dev *pctrl;
100 	struct gpio_chip chip;
101 
102 	struct pinctrl_desc desc;
103 	unsigned npins;
104 
105 	struct fwnode_handle *fwnode;
106 	struct irq_domain *domain;
107 };
108 
109 static const struct pinconf_generic_params pm8xxx_gpio_bindings[] = {
110 	{"qcom,drive-strength",		PM8XXX_QCOM_DRIVE_STRENGH,	0},
111 	{"qcom,pull-up-strength",	PM8XXX_QCOM_PULL_UP_STRENGTH,	0},
112 };
113 
114 #ifdef CONFIG_DEBUG_FS
115 static const struct pin_config_item pm8xxx_conf_items[ARRAY_SIZE(pm8xxx_gpio_bindings)] = {
116 	PCONFDUMP(PM8XXX_QCOM_DRIVE_STRENGH, "drive-strength", NULL, true),
117 	PCONFDUMP(PM8XXX_QCOM_PULL_UP_STRENGTH,  "pull up strength", NULL, true),
118 };
119 #endif
120 
121 static const char * const pm8xxx_groups[PM8XXX_MAX_GPIOS] = {
122 	"gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", "gpio8",
123 	"gpio9", "gpio10", "gpio11", "gpio12", "gpio13", "gpio14", "gpio15",
124 	"gpio16", "gpio17", "gpio18", "gpio19", "gpio20", "gpio21", "gpio22",
125 	"gpio23", "gpio24", "gpio25", "gpio26", "gpio27", "gpio28", "gpio29",
126 	"gpio30", "gpio31", "gpio32", "gpio33", "gpio34", "gpio35", "gpio36",
127 	"gpio37", "gpio38", "gpio39", "gpio40", "gpio41", "gpio42", "gpio43",
128 	"gpio44",
129 };
130 
131 static const char * const pm8xxx_gpio_functions[] = {
132 	PMIC_GPIO_FUNC_NORMAL, PMIC_GPIO_FUNC_PAIRED,
133 	PMIC_GPIO_FUNC_FUNC1, PMIC_GPIO_FUNC_FUNC2,
134 	PMIC_GPIO_FUNC_DTEST1, PMIC_GPIO_FUNC_DTEST2,
135 	PMIC_GPIO_FUNC_DTEST3, PMIC_GPIO_FUNC_DTEST4,
136 };
137 
138 static int pm8xxx_read_bank(struct pm8xxx_gpio *pctrl,
139 			    struct pm8xxx_pin_data *pin, int bank)
140 {
141 	unsigned int val = bank << 4;
142 	int ret;
143 
144 	ret = regmap_write(pctrl->regmap, pin->reg, val);
145 	if (ret) {
146 		dev_err(pctrl->dev, "failed to select bank %d\n", bank);
147 		return ret;
148 	}
149 
150 	ret = regmap_read(pctrl->regmap, pin->reg, &val);
151 	if (ret) {
152 		dev_err(pctrl->dev, "failed to read register %d\n", bank);
153 		return ret;
154 	}
155 
156 	return val;
157 }
158 
159 static int pm8xxx_write_bank(struct pm8xxx_gpio *pctrl,
160 			     struct pm8xxx_pin_data *pin,
161 			     int bank,
162 			     u8 val)
163 {
164 	int ret;
165 
166 	val |= PM8XXX_BANK_WRITE;
167 	val |= bank << 4;
168 
169 	ret = regmap_write(pctrl->regmap, pin->reg, val);
170 	if (ret)
171 		dev_err(pctrl->dev, "failed to write register\n");
172 
173 	return ret;
174 }
175 
176 static int pm8xxx_get_groups_count(struct pinctrl_dev *pctldev)
177 {
178 	struct pm8xxx_gpio *pctrl = pinctrl_dev_get_drvdata(pctldev);
179 
180 	return pctrl->npins;
181 }
182 
183 static const char *pm8xxx_get_group_name(struct pinctrl_dev *pctldev,
184 					 unsigned group)
185 {
186 	return pm8xxx_groups[group];
187 }
188 
189 
190 static int pm8xxx_get_group_pins(struct pinctrl_dev *pctldev,
191 				 unsigned group,
192 				 const unsigned **pins,
193 				 unsigned *num_pins)
194 {
195 	struct pm8xxx_gpio *pctrl = pinctrl_dev_get_drvdata(pctldev);
196 
197 	*pins = &pctrl->desc.pins[group].number;
198 	*num_pins = 1;
199 
200 	return 0;
201 }
202 
203 static const struct pinctrl_ops pm8xxx_pinctrl_ops = {
204 	.get_groups_count	= pm8xxx_get_groups_count,
205 	.get_group_name		= pm8xxx_get_group_name,
206 	.get_group_pins         = pm8xxx_get_group_pins,
207 	.dt_node_to_map		= pinconf_generic_dt_node_to_map_group,
208 	.dt_free_map		= pinctrl_utils_free_map,
209 };
210 
211 static int pm8xxx_get_functions_count(struct pinctrl_dev *pctldev)
212 {
213 	return ARRAY_SIZE(pm8xxx_gpio_functions);
214 }
215 
216 static const char *pm8xxx_get_function_name(struct pinctrl_dev *pctldev,
217 					    unsigned function)
218 {
219 	return pm8xxx_gpio_functions[function];
220 }
221 
222 static int pm8xxx_get_function_groups(struct pinctrl_dev *pctldev,
223 				      unsigned function,
224 				      const char * const **groups,
225 				      unsigned * const num_groups)
226 {
227 	struct pm8xxx_gpio *pctrl = pinctrl_dev_get_drvdata(pctldev);
228 
229 	*groups = pm8xxx_groups;
230 	*num_groups = pctrl->npins;
231 	return 0;
232 }
233 
234 static int pm8xxx_pinmux_set_mux(struct pinctrl_dev *pctldev,
235 				 unsigned function,
236 				 unsigned group)
237 {
238 	struct pm8xxx_gpio *pctrl = pinctrl_dev_get_drvdata(pctldev);
239 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[group].drv_data;
240 	u8 val;
241 
242 	pin->function = function;
243 	val = pin->function << 1;
244 
245 	pm8xxx_write_bank(pctrl, pin, 4, val);
246 
247 	return 0;
248 }
249 
250 static const struct pinmux_ops pm8xxx_pinmux_ops = {
251 	.get_functions_count	= pm8xxx_get_functions_count,
252 	.get_function_name	= pm8xxx_get_function_name,
253 	.get_function_groups	= pm8xxx_get_function_groups,
254 	.set_mux		= pm8xxx_pinmux_set_mux,
255 };
256 
257 static int pm8xxx_pin_config_get(struct pinctrl_dev *pctldev,
258 				 unsigned int offset,
259 				 unsigned long *config)
260 {
261 	struct pm8xxx_gpio *pctrl = pinctrl_dev_get_drvdata(pctldev);
262 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
263 	unsigned param = pinconf_to_config_param(*config);
264 	unsigned arg;
265 
266 	switch (param) {
267 	case PIN_CONFIG_BIAS_DISABLE:
268 		if (pin->bias != PM8XXX_GPIO_BIAS_NP)
269 			return -EINVAL;
270 		arg = 1;
271 		break;
272 	case PIN_CONFIG_BIAS_PULL_DOWN:
273 		if (pin->bias != PM8XXX_GPIO_BIAS_PD)
274 			return -EINVAL;
275 		arg = 1;
276 		break;
277 	case PIN_CONFIG_BIAS_PULL_UP:
278 		if (pin->bias > PM8XXX_GPIO_BIAS_PU_1P5_30)
279 			return -EINVAL;
280 		arg = 1;
281 		break;
282 	case PM8XXX_QCOM_PULL_UP_STRENGTH:
283 		arg = pin->pull_up_strength;
284 		break;
285 	case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
286 		if (!pin->disable)
287 			return -EINVAL;
288 		arg = 1;
289 		break;
290 	case PIN_CONFIG_INPUT_ENABLE:
291 		if (pin->mode != PM8XXX_GPIO_MODE_INPUT)
292 			return -EINVAL;
293 		arg = 1;
294 		break;
295 	case PIN_CONFIG_OUTPUT:
296 		if (pin->mode & PM8XXX_GPIO_MODE_OUTPUT)
297 			arg = pin->output_value;
298 		else
299 			arg = 0;
300 		break;
301 	case PIN_CONFIG_POWER_SOURCE:
302 		arg = pin->power_source;
303 		break;
304 	case PM8XXX_QCOM_DRIVE_STRENGH:
305 		arg = pin->output_strength;
306 		break;
307 	case PIN_CONFIG_DRIVE_PUSH_PULL:
308 		if (pin->open_drain)
309 			return -EINVAL;
310 		arg = 1;
311 		break;
312 	case PIN_CONFIG_DRIVE_OPEN_DRAIN:
313 		if (!pin->open_drain)
314 			return -EINVAL;
315 		arg = 1;
316 		break;
317 	default:
318 		return -EINVAL;
319 	}
320 
321 	*config = pinconf_to_config_packed(param, arg);
322 
323 	return 0;
324 }
325 
326 static int pm8xxx_pin_config_set(struct pinctrl_dev *pctldev,
327 				 unsigned int offset,
328 				 unsigned long *configs,
329 				 unsigned num_configs)
330 {
331 	struct pm8xxx_gpio *pctrl = pinctrl_dev_get_drvdata(pctldev);
332 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
333 	unsigned param;
334 	unsigned arg;
335 	unsigned i;
336 	u8 banks = 0;
337 	u8 val;
338 
339 	for (i = 0; i < num_configs; i++) {
340 		param = pinconf_to_config_param(configs[i]);
341 		arg = pinconf_to_config_argument(configs[i]);
342 
343 		switch (param) {
344 		case PIN_CONFIG_BIAS_DISABLE:
345 			pin->bias = PM8XXX_GPIO_BIAS_NP;
346 			banks |= BIT(2);
347 			pin->disable = 0;
348 			banks |= BIT(3);
349 			break;
350 		case PIN_CONFIG_BIAS_PULL_DOWN:
351 			pin->bias = PM8XXX_GPIO_BIAS_PD;
352 			banks |= BIT(2);
353 			pin->disable = 0;
354 			banks |= BIT(3);
355 			break;
356 		case PM8XXX_QCOM_PULL_UP_STRENGTH:
357 			if (arg > PM8XXX_GPIO_BIAS_PU_1P5_30) {
358 				dev_err(pctrl->dev, "invalid pull-up strength\n");
359 				return -EINVAL;
360 			}
361 			pin->pull_up_strength = arg;
362 			/* FALLTHROUGH */
363 		case PIN_CONFIG_BIAS_PULL_UP:
364 			pin->bias = pin->pull_up_strength;
365 			banks |= BIT(2);
366 			pin->disable = 0;
367 			banks |= BIT(3);
368 			break;
369 		case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
370 			pin->disable = 1;
371 			banks |= BIT(3);
372 			break;
373 		case PIN_CONFIG_INPUT_ENABLE:
374 			pin->mode = PM8XXX_GPIO_MODE_INPUT;
375 			banks |= BIT(0) | BIT(1);
376 			break;
377 		case PIN_CONFIG_OUTPUT:
378 			pin->mode = PM8XXX_GPIO_MODE_OUTPUT;
379 			pin->output_value = !!arg;
380 			banks |= BIT(0) | BIT(1);
381 			break;
382 		case PIN_CONFIG_POWER_SOURCE:
383 			pin->power_source = arg;
384 			banks |= BIT(0);
385 			break;
386 		case PM8XXX_QCOM_DRIVE_STRENGH:
387 			if (arg > PMIC_GPIO_STRENGTH_LOW) {
388 				dev_err(pctrl->dev, "invalid drive strength\n");
389 				return -EINVAL;
390 			}
391 			pin->output_strength = arg;
392 			banks |= BIT(3);
393 			break;
394 		case PIN_CONFIG_DRIVE_PUSH_PULL:
395 			pin->open_drain = 0;
396 			banks |= BIT(1);
397 			break;
398 		case PIN_CONFIG_DRIVE_OPEN_DRAIN:
399 			pin->open_drain = 1;
400 			banks |= BIT(1);
401 			break;
402 		default:
403 			dev_err(pctrl->dev,
404 				"unsupported config parameter: %x\n",
405 				param);
406 			return -EINVAL;
407 		}
408 	}
409 
410 	if (banks & BIT(0)) {
411 		val = pin->power_source << 1;
412 		val |= PM8XXX_GPIO_MODE_ENABLED;
413 		pm8xxx_write_bank(pctrl, pin, 0, val);
414 	}
415 
416 	if (banks & BIT(1)) {
417 		val = pin->mode << 2;
418 		val |= pin->open_drain << 1;
419 		val |= pin->output_value;
420 		pm8xxx_write_bank(pctrl, pin, 1, val);
421 	}
422 
423 	if (banks & BIT(2)) {
424 		val = pin->bias << 1;
425 		pm8xxx_write_bank(pctrl, pin, 2, val);
426 	}
427 
428 	if (banks & BIT(3)) {
429 		val = pin->output_strength << 2;
430 		val |= pin->disable;
431 		pm8xxx_write_bank(pctrl, pin, 3, val);
432 	}
433 
434 	if (banks & BIT(4)) {
435 		val = pin->function << 1;
436 		pm8xxx_write_bank(pctrl, pin, 4, val);
437 	}
438 
439 	if (banks & BIT(5)) {
440 		val = 0;
441 		if (!pin->inverted)
442 			val |= BIT(3);
443 		pm8xxx_write_bank(pctrl, pin, 5, val);
444 	}
445 
446 	return 0;
447 }
448 
449 static const struct pinconf_ops pm8xxx_pinconf_ops = {
450 	.is_generic = true,
451 	.pin_config_group_get = pm8xxx_pin_config_get,
452 	.pin_config_group_set = pm8xxx_pin_config_set,
453 };
454 
455 static struct pinctrl_desc pm8xxx_pinctrl_desc = {
456 	.name = "pm8xxx_gpio",
457 	.pctlops = &pm8xxx_pinctrl_ops,
458 	.pmxops = &pm8xxx_pinmux_ops,
459 	.confops = &pm8xxx_pinconf_ops,
460 	.owner = THIS_MODULE,
461 };
462 
463 static int pm8xxx_gpio_direction_input(struct gpio_chip *chip,
464 				       unsigned offset)
465 {
466 	struct pm8xxx_gpio *pctrl = gpiochip_get_data(chip);
467 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
468 	u8 val;
469 
470 	pin->mode = PM8XXX_GPIO_MODE_INPUT;
471 	val = pin->mode << 2;
472 
473 	pm8xxx_write_bank(pctrl, pin, 1, val);
474 
475 	return 0;
476 }
477 
478 static int pm8xxx_gpio_direction_output(struct gpio_chip *chip,
479 					unsigned offset,
480 					int value)
481 {
482 	struct pm8xxx_gpio *pctrl = gpiochip_get_data(chip);
483 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
484 	u8 val;
485 
486 	pin->mode = PM8XXX_GPIO_MODE_OUTPUT;
487 	pin->output_value = !!value;
488 
489 	val = pin->mode << 2;
490 	val |= pin->open_drain << 1;
491 	val |= pin->output_value;
492 
493 	pm8xxx_write_bank(pctrl, pin, 1, val);
494 
495 	return 0;
496 }
497 
498 static int pm8xxx_gpio_get(struct gpio_chip *chip, unsigned offset)
499 {
500 	struct pm8xxx_gpio *pctrl = gpiochip_get_data(chip);
501 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
502 	bool state;
503 	int ret;
504 
505 	if (pin->mode == PM8XXX_GPIO_MODE_OUTPUT) {
506 		ret = pin->output_value;
507 	} else if (pin->irq >= 0) {
508 		ret = irq_get_irqchip_state(pin->irq, IRQCHIP_STATE_LINE_LEVEL, &state);
509 		if (!ret)
510 			ret = !!state;
511 	} else
512 		ret = -EINVAL;
513 
514 	return ret;
515 }
516 
517 static void pm8xxx_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
518 {
519 	struct pm8xxx_gpio *pctrl = gpiochip_get_data(chip);
520 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
521 	u8 val;
522 
523 	pin->output_value = !!value;
524 
525 	val = pin->mode << 2;
526 	val |= pin->open_drain << 1;
527 	val |= pin->output_value;
528 
529 	pm8xxx_write_bank(pctrl, pin, 1, val);
530 }
531 
532 static int pm8xxx_gpio_of_xlate(struct gpio_chip *chip,
533 				const struct of_phandle_args *gpio_desc,
534 				u32 *flags)
535 {
536 	if (chip->of_gpio_n_cells < 2)
537 		return -EINVAL;
538 
539 	if (flags)
540 		*flags = gpio_desc->args[1];
541 
542 	return gpio_desc->args[0] - PM8XXX_GPIO_PHYSICAL_OFFSET;
543 }
544 
545 
546 static int pm8xxx_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
547 {
548 	struct pm8xxx_gpio *pctrl = gpiochip_get_data(chip);
549 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
550 	struct irq_fwspec fwspec;
551 	int ret;
552 
553 	fwspec.fwnode = pctrl->fwnode;
554 	fwspec.param_count = 2;
555 	fwspec.param[0] = offset + PM8XXX_GPIO_PHYSICAL_OFFSET;
556 	fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
557 
558 	ret = irq_create_fwspec_mapping(&fwspec);
559 
560 	/*
561 	 * Cache the IRQ since pm8xxx_gpio_get() needs this to get determine the
562 	 * line level.
563 	 */
564 	pin->irq = ret;
565 
566 	return ret;
567 }
568 
569 static void pm8xxx_gpio_free(struct gpio_chip *chip, unsigned int offset)
570 {
571 	struct pm8xxx_gpio *pctrl = gpiochip_get_data(chip);
572 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
573 
574 	pin->irq = -1;
575 }
576 
577 #ifdef CONFIG_DEBUG_FS
578 #include <linux/seq_file.h>
579 
580 static void pm8xxx_gpio_dbg_show_one(struct seq_file *s,
581 				  struct pinctrl_dev *pctldev,
582 				  struct gpio_chip *chip,
583 				  unsigned offset,
584 				  unsigned gpio)
585 {
586 	struct pm8xxx_gpio *pctrl = gpiochip_get_data(chip);
587 	struct pm8xxx_pin_data *pin = pctrl->desc.pins[offset].drv_data;
588 
589 	static const char * const modes[] = {
590 		"in", "both", "out", "off"
591 	};
592 	static const char * const biases[] = {
593 		"pull-up 30uA", "pull-up 1.5uA", "pull-up 31.5uA",
594 		"pull-up 1.5uA + 30uA boost", "pull-down 10uA", "no pull"
595 	};
596 	static const char * const buffer_types[] = {
597 		"push-pull", "open-drain"
598 	};
599 	static const char * const strengths[] = {
600 		"no", "high", "medium", "low"
601 	};
602 
603 	seq_printf(s, " gpio%-2d:", offset + PM8XXX_GPIO_PHYSICAL_OFFSET);
604 	if (pin->disable) {
605 		seq_puts(s, " ---");
606 	} else {
607 		seq_printf(s, " %-4s", modes[pin->mode]);
608 		seq_printf(s, " %-7s", pm8xxx_gpio_functions[pin->function]);
609 		seq_printf(s, " VIN%d", pin->power_source);
610 		seq_printf(s, " %-27s", biases[pin->bias]);
611 		seq_printf(s, " %-10s", buffer_types[pin->open_drain]);
612 		seq_printf(s, " %-4s", pin->output_value ? "high" : "low");
613 		seq_printf(s, " %-7s", strengths[pin->output_strength]);
614 		if (pin->inverted)
615 			seq_puts(s, " inverted");
616 	}
617 }
618 
619 static void pm8xxx_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
620 {
621 	unsigned gpio = chip->base;
622 	unsigned i;
623 
624 	for (i = 0; i < chip->ngpio; i++, gpio++) {
625 		pm8xxx_gpio_dbg_show_one(s, NULL, chip, i, gpio);
626 		seq_puts(s, "\n");
627 	}
628 }
629 
630 #else
631 #define pm8xxx_gpio_dbg_show NULL
632 #endif
633 
634 static const struct gpio_chip pm8xxx_gpio_template = {
635 	.free = pm8xxx_gpio_free,
636 	.direction_input = pm8xxx_gpio_direction_input,
637 	.direction_output = pm8xxx_gpio_direction_output,
638 	.get = pm8xxx_gpio_get,
639 	.set = pm8xxx_gpio_set,
640 	.of_xlate = pm8xxx_gpio_of_xlate,
641 	.to_irq = pm8xxx_gpio_to_irq,
642 	.dbg_show = pm8xxx_gpio_dbg_show,
643 	.owner = THIS_MODULE,
644 };
645 
646 static int pm8xxx_pin_populate(struct pm8xxx_gpio *pctrl,
647 			       struct pm8xxx_pin_data *pin)
648 {
649 	int val;
650 
651 	val = pm8xxx_read_bank(pctrl, pin, 0);
652 	if (val < 0)
653 		return val;
654 
655 	pin->power_source = (val >> 1) & 0x7;
656 
657 	val = pm8xxx_read_bank(pctrl, pin, 1);
658 	if (val < 0)
659 		return val;
660 
661 	pin->mode = (val >> 2) & 0x3;
662 	pin->open_drain = !!(val & BIT(1));
663 	pin->output_value = val & BIT(0);
664 
665 	val = pm8xxx_read_bank(pctrl, pin, 2);
666 	if (val < 0)
667 		return val;
668 
669 	pin->bias = (val >> 1) & 0x7;
670 	if (pin->bias <= PM8XXX_GPIO_BIAS_PU_1P5_30)
671 		pin->pull_up_strength = pin->bias;
672 	else
673 		pin->pull_up_strength = PM8XXX_GPIO_BIAS_PU_30;
674 
675 	val = pm8xxx_read_bank(pctrl, pin, 3);
676 	if (val < 0)
677 		return val;
678 
679 	pin->output_strength = (val >> 2) & 0x3;
680 	pin->disable = val & BIT(0);
681 
682 	val = pm8xxx_read_bank(pctrl, pin, 4);
683 	if (val < 0)
684 		return val;
685 
686 	pin->function = (val >> 1) & 0x7;
687 
688 	val = pm8xxx_read_bank(pctrl, pin, 5);
689 	if (val < 0)
690 		return val;
691 
692 	pin->inverted = !(val & BIT(3));
693 
694 	return 0;
695 }
696 
697 static struct irq_chip pm8xxx_irq_chip = {
698 	.name = "ssbi-gpio",
699 	.irq_mask_ack = irq_chip_mask_ack_parent,
700 	.irq_unmask = irq_chip_unmask_parent,
701 	.irq_set_type = irq_chip_set_type_parent,
702 	.flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE,
703 };
704 
705 static int pm8xxx_domain_translate(struct irq_domain *domain,
706 				   struct irq_fwspec *fwspec,
707 				   unsigned long *hwirq,
708 				   unsigned int *type)
709 {
710 	struct pm8xxx_gpio *pctrl = container_of(domain->host_data,
711 						 struct pm8xxx_gpio, chip);
712 
713 	if (fwspec->param_count != 2 || fwspec->param[0] < 1 ||
714 	    fwspec->param[0] > pctrl->chip.ngpio)
715 		return -EINVAL;
716 
717 	*hwirq = fwspec->param[0] - PM8XXX_GPIO_PHYSICAL_OFFSET;
718 	*type = fwspec->param[1];
719 
720 	return 0;
721 }
722 
723 static int pm8xxx_domain_alloc(struct irq_domain *domain, unsigned int virq,
724 			       unsigned int nr_irqs, void *data)
725 {
726 	struct pm8xxx_gpio *pctrl = container_of(domain->host_data,
727 						 struct pm8xxx_gpio, chip);
728 	struct irq_fwspec *fwspec = data;
729 	struct irq_fwspec parent_fwspec;
730 	irq_hw_number_t hwirq;
731 	unsigned int type;
732 	int ret, i;
733 
734 	ret = pm8xxx_domain_translate(domain, fwspec, &hwirq, &type);
735 	if (ret)
736 		return ret;
737 
738 	for (i = 0; i < nr_irqs; i++)
739 		irq_domain_set_info(domain, virq + i, hwirq + i,
740 				    &pm8xxx_irq_chip, pctrl, handle_level_irq,
741 				    NULL, NULL);
742 
743 	parent_fwspec.fwnode = domain->parent->fwnode;
744 	parent_fwspec.param_count = 2;
745 	parent_fwspec.param[0] = hwirq + 0xc0;
746 	parent_fwspec.param[1] = fwspec->param[1];
747 
748 	return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs,
749 					    &parent_fwspec);
750 }
751 
752 static const struct irq_domain_ops pm8xxx_domain_ops = {
753 	.activate = gpiochip_irq_domain_activate,
754 	.alloc = pm8xxx_domain_alloc,
755 	.deactivate = gpiochip_irq_domain_deactivate,
756 	.free = irq_domain_free_irqs_common,
757 	.translate = pm8xxx_domain_translate,
758 };
759 
760 static const struct of_device_id pm8xxx_gpio_of_match[] = {
761 	{ .compatible = "qcom,pm8018-gpio", .data = (void *) 6 },
762 	{ .compatible = "qcom,pm8038-gpio", .data = (void *) 12 },
763 	{ .compatible = "qcom,pm8058-gpio", .data = (void *) 44 },
764 	{ .compatible = "qcom,pm8917-gpio", .data = (void *) 38 },
765 	{ .compatible = "qcom,pm8921-gpio", .data = (void *) 44 },
766 	{ },
767 };
768 MODULE_DEVICE_TABLE(of, pm8xxx_gpio_of_match);
769 
770 static int pm8xxx_gpio_probe(struct platform_device *pdev)
771 {
772 	struct pm8xxx_pin_data *pin_data;
773 	struct irq_domain *parent_domain;
774 	struct device_node *parent_node;
775 	struct pinctrl_pin_desc *pins;
776 	struct pm8xxx_gpio *pctrl;
777 	int ret, i;
778 
779 	pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL);
780 	if (!pctrl)
781 		return -ENOMEM;
782 
783 	pctrl->dev = &pdev->dev;
784 	pctrl->npins = (uintptr_t) device_get_match_data(&pdev->dev);
785 
786 	pctrl->regmap = dev_get_regmap(pdev->dev.parent, NULL);
787 	if (!pctrl->regmap) {
788 		dev_err(&pdev->dev, "parent regmap unavailable\n");
789 		return -ENXIO;
790 	}
791 
792 	pctrl->desc = pm8xxx_pinctrl_desc;
793 	pctrl->desc.npins = pctrl->npins;
794 
795 	pins = devm_kcalloc(&pdev->dev,
796 			    pctrl->desc.npins,
797 			    sizeof(struct pinctrl_pin_desc),
798 			    GFP_KERNEL);
799 	if (!pins)
800 		return -ENOMEM;
801 
802 	pin_data = devm_kcalloc(&pdev->dev,
803 				pctrl->desc.npins,
804 				sizeof(struct pm8xxx_pin_data),
805 				GFP_KERNEL);
806 	if (!pin_data)
807 		return -ENOMEM;
808 
809 	for (i = 0; i < pctrl->desc.npins; i++) {
810 		pin_data[i].reg = SSBI_REG_ADDR_GPIO(i);
811 		pin_data[i].irq = -1;
812 
813 		ret = pm8xxx_pin_populate(pctrl, &pin_data[i]);
814 		if (ret)
815 			return ret;
816 
817 		pins[i].number = i;
818 		pins[i].name = pm8xxx_groups[i];
819 		pins[i].drv_data = &pin_data[i];
820 	}
821 	pctrl->desc.pins = pins;
822 
823 	pctrl->desc.num_custom_params = ARRAY_SIZE(pm8xxx_gpio_bindings);
824 	pctrl->desc.custom_params = pm8xxx_gpio_bindings;
825 #ifdef CONFIG_DEBUG_FS
826 	pctrl->desc.custom_conf_items = pm8xxx_conf_items;
827 #endif
828 
829 	pctrl->pctrl = devm_pinctrl_register(&pdev->dev, &pctrl->desc, pctrl);
830 	if (IS_ERR(pctrl->pctrl)) {
831 		dev_err(&pdev->dev, "couldn't register pm8xxx gpio driver\n");
832 		return PTR_ERR(pctrl->pctrl);
833 	}
834 
835 	pctrl->chip = pm8xxx_gpio_template;
836 	pctrl->chip.base = -1;
837 	pctrl->chip.parent = &pdev->dev;
838 	pctrl->chip.of_node = pdev->dev.of_node;
839 	pctrl->chip.of_gpio_n_cells = 2;
840 	pctrl->chip.label = dev_name(pctrl->dev);
841 	pctrl->chip.ngpio = pctrl->npins;
842 
843 	parent_node = of_irq_find_parent(pctrl->dev->of_node);
844 	if (!parent_node)
845 		return -ENXIO;
846 
847 	parent_domain = irq_find_host(parent_node);
848 	of_node_put(parent_node);
849 	if (!parent_domain)
850 		return -ENXIO;
851 
852 	pctrl->fwnode = of_node_to_fwnode(pctrl->dev->of_node);
853 	pctrl->domain = irq_domain_create_hierarchy(parent_domain, 0,
854 						    pctrl->chip.ngpio,
855 						    pctrl->fwnode,
856 						    &pm8xxx_domain_ops,
857 						    &pctrl->chip);
858 	if (!pctrl->domain)
859 		return -ENODEV;
860 
861 	ret = gpiochip_add_data(&pctrl->chip, pctrl);
862 	if (ret) {
863 		dev_err(&pdev->dev, "failed register gpiochip\n");
864 		goto err_chip_add_data;
865 	}
866 
867 	/*
868 	 * For DeviceTree-supported systems, the gpio core checks the
869 	 * pinctrl's device node for the "gpio-ranges" property.
870 	 * If it is present, it takes care of adding the pin ranges
871 	 * for the driver. In this case the driver can skip ahead.
872 	 *
873 	 * In order to remain compatible with older, existing DeviceTree
874 	 * files which don't set the "gpio-ranges" property or systems that
875 	 * utilize ACPI the driver has to call gpiochip_add_pin_range().
876 	 */
877 	if (!of_property_read_bool(pctrl->dev->of_node, "gpio-ranges")) {
878 		ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev),
879 					     0, 0, pctrl->chip.ngpio);
880 		if (ret) {
881 			dev_err(pctrl->dev, "failed to add pin range\n");
882 			goto unregister_gpiochip;
883 		}
884 	}
885 
886 	platform_set_drvdata(pdev, pctrl);
887 
888 	dev_dbg(&pdev->dev, "Qualcomm pm8xxx gpio driver probed\n");
889 
890 	return 0;
891 
892 unregister_gpiochip:
893 	gpiochip_remove(&pctrl->chip);
894 err_chip_add_data:
895 	irq_domain_remove(pctrl->domain);
896 
897 	return ret;
898 }
899 
900 static int pm8xxx_gpio_remove(struct platform_device *pdev)
901 {
902 	struct pm8xxx_gpio *pctrl = platform_get_drvdata(pdev);
903 
904 	gpiochip_remove(&pctrl->chip);
905 	irq_domain_remove(pctrl->domain);
906 
907 	return 0;
908 }
909 
910 static struct platform_driver pm8xxx_gpio_driver = {
911 	.driver = {
912 		.name = "qcom-ssbi-gpio",
913 		.of_match_table = pm8xxx_gpio_of_match,
914 	},
915 	.probe = pm8xxx_gpio_probe,
916 	.remove = pm8xxx_gpio_remove,
917 };
918 
919 module_platform_driver(pm8xxx_gpio_driver);
920 
921 MODULE_AUTHOR("Bjorn Andersson <bjorn.andersson@sonymobile.com>");
922 MODULE_DESCRIPTION("Qualcomm PM8xxx GPIO driver");
923 MODULE_LICENSE("GPL v2");
924