xref: /linux/drivers/pinctrl/nomadik/pinctrl-abx500.c (revision 6af91e3d2cfc8bb579b1aa2d22cd91f8c34acdf6)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) ST-Ericsson SA 2013
4  *
5  * Author: Patrice Chotard <patrice.chotard@st.com>
6  *
7  * Driver allows to use AxB5xx unused pins to be used as GPIO
8  */
9 
10 #include <linux/bitops.h>
11 #include <linux/cleanup.h>
12 #include <linux/err.h>
13 #include <linux/gpio/driver.h>
14 #include <linux/init.h>
15 #include <linux/interrupt.h>
16 #include <linux/irq.h>
17 #include <linux/irqdomain.h>
18 #include <linux/kernel.h>
19 #include <linux/of.h>
20 #include <linux/of_device.h>
21 #include <linux/platform_device.h>
22 #include <linux/property.h>
23 #include <linux/seq_file.h>
24 #include <linux/slab.h>
25 #include <linux/types.h>
26 
27 #include <linux/mfd/abx500.h>
28 #include <linux/mfd/abx500/ab8500.h>
29 
30 #include <linux/pinctrl/consumer.h>
31 #include <linux/pinctrl/machine.h>
32 #include <linux/pinctrl/pinconf-generic.h>
33 #include <linux/pinctrl/pinconf.h>
34 #include <linux/pinctrl/pinctrl.h>
35 #include <linux/pinctrl/pinmux.h>
36 
37 #include "../core.h"
38 #include "../pinconf.h"
39 #include "../pinctrl-utils.h"
40 
41 #include "pinctrl-abx500.h"
42 
43 /*
44  * GPIO registers offset
45  * Bank: 0x10
46  */
47 #define AB8500_GPIO_SEL1_REG	0x00
48 #define AB8500_GPIO_SEL2_REG	0x01
49 #define AB8500_GPIO_SEL3_REG	0x02
50 #define AB8500_GPIO_SEL4_REG	0x03
51 #define AB8500_GPIO_SEL5_REG	0x04
52 #define AB8500_GPIO_SEL6_REG	0x05
53 
54 #define AB8500_GPIO_DIR1_REG	0x10
55 #define AB8500_GPIO_DIR2_REG	0x11
56 #define AB8500_GPIO_DIR3_REG	0x12
57 #define AB8500_GPIO_DIR4_REG	0x13
58 #define AB8500_GPIO_DIR5_REG	0x14
59 #define AB8500_GPIO_DIR6_REG	0x15
60 
61 #define AB8500_GPIO_OUT1_REG	0x20
62 #define AB8500_GPIO_OUT2_REG	0x21
63 #define AB8500_GPIO_OUT3_REG	0x22
64 #define AB8500_GPIO_OUT4_REG	0x23
65 #define AB8500_GPIO_OUT5_REG	0x24
66 #define AB8500_GPIO_OUT6_REG	0x25
67 
68 #define AB8500_GPIO_PUD1_REG	0x30
69 #define AB8500_GPIO_PUD2_REG	0x31
70 #define AB8500_GPIO_PUD3_REG	0x32
71 #define AB8500_GPIO_PUD4_REG	0x33
72 #define AB8500_GPIO_PUD5_REG	0x34
73 #define AB8500_GPIO_PUD6_REG	0x35
74 
75 #define AB8500_GPIO_IN1_REG	0x40
76 #define AB8500_GPIO_IN2_REG	0x41
77 #define AB8500_GPIO_IN3_REG	0x42
78 #define AB8500_GPIO_IN4_REG	0x43
79 #define AB8500_GPIO_IN5_REG	0x44
80 #define AB8500_GPIO_IN6_REG	0x45
81 #define AB8500_GPIO_ALTFUN_REG	0x50
82 
83 #define ABX500_GPIO_INPUT	0
84 #define ABX500_GPIO_OUTPUT	1
85 
86 struct abx500_pinctrl {
87 	struct device *dev;
88 	struct pinctrl_dev *pctldev;
89 	struct abx500_pinctrl_soc_data *soc;
90 	struct gpio_chip chip;
91 	struct ab8500 *parent;
92 	struct abx500_gpio_irq_cluster *irq_cluster;
93 	int irq_cluster_size;
94 };
95 
96 static int abx500_gpio_get_bit(struct gpio_chip *chip, u8 reg,
97 			       unsigned offset, bool *bit)
98 {
99 	struct abx500_pinctrl *pct = gpiochip_get_data(chip);
100 	u8 pos = offset % 8;
101 	u8 val;
102 	int ret;
103 
104 	reg += offset / 8;
105 	ret = abx500_get_register_interruptible(pct->dev,
106 						AB8500_MISC, reg, &val);
107 	if (ret < 0) {
108 		dev_err(pct->dev,
109 			"%s read reg =%x, offset=%x failed (%d)\n",
110 			__func__, reg, offset, ret);
111 		return ret;
112 	}
113 
114 	*bit = !!(val & BIT(pos));
115 
116 	return 0;
117 }
118 
119 static int abx500_gpio_set_bits(struct gpio_chip *chip, u8 reg,
120 				unsigned offset, int val)
121 {
122 	struct abx500_pinctrl *pct = gpiochip_get_data(chip);
123 	u8 pos = offset % 8;
124 	int ret;
125 
126 	reg += offset / 8;
127 	ret = abx500_mask_and_set_register_interruptible(pct->dev,
128 				AB8500_MISC, reg, BIT(pos), val << pos);
129 	if (ret < 0)
130 		dev_err(pct->dev, "%s write reg, %x offset %x failed (%d)\n",
131 				__func__, reg, offset, ret);
132 
133 	return ret;
134 }
135 
136 /**
137  * abx500_gpio_get() - Get the particular GPIO value
138  * @chip:	Gpio device
139  * @offset:	GPIO number to read
140  */
141 static int abx500_gpio_get(struct gpio_chip *chip, unsigned offset)
142 {
143 	struct abx500_pinctrl *pct = gpiochip_get_data(chip);
144 	bool bit;
145 	bool is_out;
146 	u8 gpio_offset = offset - 1;
147 	int ret;
148 
149 	ret = abx500_gpio_get_bit(chip, AB8500_GPIO_DIR1_REG,
150 			gpio_offset, &is_out);
151 	if (ret < 0)
152 		goto out;
153 
154 	if (is_out)
155 		ret = abx500_gpio_get_bit(chip, AB8500_GPIO_OUT1_REG,
156 				gpio_offset, &bit);
157 	else
158 		ret = abx500_gpio_get_bit(chip, AB8500_GPIO_IN1_REG,
159 				gpio_offset, &bit);
160 out:
161 	if (ret < 0) {
162 		dev_err(pct->dev, "%s failed (%d)\n", __func__, ret);
163 		return ret;
164 	}
165 
166 	return bit;
167 }
168 
169 static void abx500_gpio_set(struct gpio_chip *chip, unsigned offset, int val)
170 {
171 	struct abx500_pinctrl *pct = gpiochip_get_data(chip);
172 	int ret;
173 
174 	ret = abx500_gpio_set_bits(chip, AB8500_GPIO_OUT1_REG, offset, val);
175 	if (ret < 0)
176 		dev_err(pct->dev, "%s write failed (%d)\n", __func__, ret);
177 }
178 
179 static int abx500_gpio_direction_output(struct gpio_chip *chip,
180 					unsigned offset,
181 					int val)
182 {
183 	struct abx500_pinctrl *pct = gpiochip_get_data(chip);
184 	int ret;
185 
186 	/* set direction as output */
187 	ret = abx500_gpio_set_bits(chip,
188 				AB8500_GPIO_DIR1_REG,
189 				offset,
190 				ABX500_GPIO_OUTPUT);
191 	if (ret < 0)
192 		goto out;
193 
194 	/* disable pull down */
195 	ret = abx500_gpio_set_bits(chip,
196 				AB8500_GPIO_PUD1_REG,
197 				offset,
198 				ABX500_GPIO_PULL_NONE);
199 
200 out:
201 	if (ret < 0) {
202 		dev_err(pct->dev, "%s failed (%d)\n", __func__, ret);
203 		return ret;
204 	}
205 
206 	/* set the output as 1 or 0 */
207 	return abx500_gpio_set_bits(chip, AB8500_GPIO_OUT1_REG, offset, val);
208 }
209 
210 static int abx500_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
211 {
212 	/* set the register as input */
213 	return abx500_gpio_set_bits(chip,
214 				AB8500_GPIO_DIR1_REG,
215 				offset,
216 				ABX500_GPIO_INPUT);
217 }
218 
219 static int abx500_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
220 {
221 	struct abx500_pinctrl *pct = gpiochip_get_data(chip);
222 	/* The AB8500 GPIO numbers are off by one */
223 	int gpio = offset + 1;
224 	int hwirq;
225 	int i;
226 
227 	for (i = 0; i < pct->irq_cluster_size; i++) {
228 		struct abx500_gpio_irq_cluster *cluster =
229 			&pct->irq_cluster[i];
230 
231 		if (gpio >= cluster->start && gpio <= cluster->end) {
232 			/*
233 			 * The ABx500 GPIO's associated IRQs are clustered together
234 			 * throughout the interrupt numbers at irregular intervals.
235 			 * To solve this quandry, we have placed the read-in values
236 			 * into the cluster information table.
237 			 */
238 			hwirq = gpio - cluster->start + cluster->to_irq;
239 			return irq_create_mapping(pct->parent->domain, hwirq);
240 		}
241 	}
242 
243 	return -EINVAL;
244 }
245 
246 static int abx500_set_mode(struct pinctrl_dev *pctldev, struct gpio_chip *chip,
247 			   unsigned gpio, int alt_setting)
248 {
249 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
250 	struct alternate_functions af = pct->soc->alternate_functions[gpio];
251 	int ret;
252 	int val;
253 	unsigned offset;
254 
255 	const char *modes[] = {
256 		[ABX500_DEFAULT]	= "default",
257 		[ABX500_ALT_A]		= "altA",
258 		[ABX500_ALT_B]		= "altB",
259 		[ABX500_ALT_C]		= "altC",
260 	};
261 
262 	/* sanity check */
263 	if (((alt_setting == ABX500_ALT_A) && (af.gpiosel_bit == UNUSED)) ||
264 	    ((alt_setting == ABX500_ALT_B) && (af.alt_bit1 == UNUSED)) ||
265 	    ((alt_setting == ABX500_ALT_C) && (af.alt_bit2 == UNUSED))) {
266 		dev_dbg(pct->dev, "pin %d doesn't support %s mode\n", gpio,
267 				modes[alt_setting]);
268 		return -EINVAL;
269 	}
270 
271 	/* on ABx5xx, there is no GPIO0, so adjust the offset */
272 	offset = gpio - 1;
273 
274 	switch (alt_setting) {
275 	case ABX500_DEFAULT:
276 		/*
277 		 * for ABx5xx family, default mode is always selected by
278 		 * writing 0 to GPIOSELx register, except for pins which
279 		 * support at least ALT_B mode, default mode is selected
280 		 * by writing 1 to GPIOSELx register
281 		 */
282 		val = 0;
283 		if (af.alt_bit1 != UNUSED)
284 			val++;
285 
286 		ret = abx500_gpio_set_bits(chip, AB8500_GPIO_SEL1_REG,
287 					   offset, val);
288 		break;
289 
290 	case ABX500_ALT_A:
291 		/*
292 		 * for ABx5xx family, alt_a mode is always selected by
293 		 * writing 1 to GPIOSELx register, except for pins which
294 		 * support at least ALT_B mode, alt_a mode is selected
295 		 * by writing 0 to GPIOSELx register and 0 in ALTFUNC
296 		 * register
297 		 */
298 		if (af.alt_bit1 != UNUSED) {
299 			ret = abx500_gpio_set_bits(chip, AB8500_GPIO_SEL1_REG,
300 					offset, 0);
301 			if (ret < 0)
302 				goto out;
303 
304 			ret = abx500_gpio_set_bits(chip,
305 					AB8500_GPIO_ALTFUN_REG,
306 					af.alt_bit1,
307 					!!(af.alta_val & BIT(0)));
308 			if (ret < 0)
309 				goto out;
310 
311 			if (af.alt_bit2 != UNUSED)
312 				ret = abx500_gpio_set_bits(chip,
313 					AB8500_GPIO_ALTFUN_REG,
314 					af.alt_bit2,
315 					!!(af.alta_val & BIT(1)));
316 		} else
317 			ret = abx500_gpio_set_bits(chip, AB8500_GPIO_SEL1_REG,
318 					offset, 1);
319 		break;
320 
321 	case ABX500_ALT_B:
322 		ret = abx500_gpio_set_bits(chip, AB8500_GPIO_SEL1_REG,
323 				offset, 0);
324 		if (ret < 0)
325 			goto out;
326 
327 		ret = abx500_gpio_set_bits(chip, AB8500_GPIO_ALTFUN_REG,
328 				af.alt_bit1, !!(af.altb_val & BIT(0)));
329 		if (ret < 0)
330 			goto out;
331 
332 		if (af.alt_bit2 != UNUSED)
333 			ret = abx500_gpio_set_bits(chip,
334 					AB8500_GPIO_ALTFUN_REG,
335 					af.alt_bit2,
336 					!!(af.altb_val & BIT(1)));
337 		break;
338 
339 	case ABX500_ALT_C:
340 		ret = abx500_gpio_set_bits(chip, AB8500_GPIO_SEL1_REG,
341 				offset, 0);
342 		if (ret < 0)
343 			goto out;
344 
345 		ret = abx500_gpio_set_bits(chip, AB8500_GPIO_ALTFUN_REG,
346 				af.alt_bit2, !!(af.altc_val & BIT(0)));
347 		if (ret < 0)
348 			goto out;
349 
350 		ret = abx500_gpio_set_bits(chip, AB8500_GPIO_ALTFUN_REG,
351 				af.alt_bit2, !!(af.altc_val & BIT(1)));
352 		break;
353 
354 	default:
355 		dev_dbg(pct->dev, "unknown alt_setting %d\n", alt_setting);
356 
357 		return -EINVAL;
358 	}
359 out:
360 	if (ret < 0)
361 		dev_err(pct->dev, "%s failed (%d)\n", __func__, ret);
362 
363 	return ret;
364 }
365 
366 #ifdef CONFIG_DEBUG_FS
367 static int abx500_get_mode(struct pinctrl_dev *pctldev, struct gpio_chip *chip,
368 			  unsigned gpio)
369 {
370 	u8 mode;
371 	bool bit_mode;
372 	bool alt_bit1;
373 	bool alt_bit2;
374 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
375 	struct alternate_functions af = pct->soc->alternate_functions[gpio];
376 	/* on ABx5xx, there is no GPIO0, so adjust the offset */
377 	unsigned offset = gpio - 1;
378 	int ret;
379 
380 	/*
381 	 * if gpiosel_bit is set to unused,
382 	 * it means no GPIO or special case
383 	 */
384 	if (af.gpiosel_bit == UNUSED)
385 		return ABX500_DEFAULT;
386 
387 	/* read GpioSelx register */
388 	ret = abx500_gpio_get_bit(chip, AB8500_GPIO_SEL1_REG + (offset / 8),
389 			af.gpiosel_bit, &bit_mode);
390 	if (ret < 0)
391 		goto out;
392 
393 	mode = bit_mode;
394 
395 	/* sanity check */
396 	if ((af.alt_bit1 < UNUSED) || (af.alt_bit1 > 7) ||
397 	    (af.alt_bit2 < UNUSED) || (af.alt_bit2 > 7)) {
398 		dev_err(pct->dev,
399 			"alt_bitX value not in correct range (-1 to 7)\n");
400 		return -EINVAL;
401 	}
402 
403 	/* if alt_bit2 is used, alt_bit1 must be used too */
404 	if ((af.alt_bit2 != UNUSED) && (af.alt_bit1 == UNUSED)) {
405 		dev_err(pct->dev,
406 			"if alt_bit2 is used, alt_bit1 can't be unused\n");
407 		return -EINVAL;
408 	}
409 
410 	/* check if pin use AlternateFunction register */
411 	if ((af.alt_bit1 == UNUSED) && (af.alt_bit2 == UNUSED))
412 		return mode;
413 	/*
414 	 * if pin GPIOSEL bit is set and pin supports alternate function,
415 	 * it means DEFAULT mode
416 	 */
417 	if (mode)
418 		return ABX500_DEFAULT;
419 
420 	/*
421 	 * pin use the AlternatFunction register
422 	 * read alt_bit1 value
423 	 */
424 	ret = abx500_gpio_get_bit(chip, AB8500_GPIO_ALTFUN_REG,
425 			    af.alt_bit1, &alt_bit1);
426 	if (ret < 0)
427 		goto out;
428 
429 	if (af.alt_bit2 != UNUSED) {
430 		/* read alt_bit2 value */
431 		ret = abx500_gpio_get_bit(chip, AB8500_GPIO_ALTFUN_REG,
432 				af.alt_bit2,
433 				&alt_bit2);
434 		if (ret < 0)
435 			goto out;
436 	} else
437 		alt_bit2 = 0;
438 
439 	mode = (alt_bit2 << 1) + alt_bit1;
440 	if (mode == af.alta_val)
441 		return ABX500_ALT_A;
442 	else if (mode == af.altb_val)
443 		return ABX500_ALT_B;
444 	else
445 		return ABX500_ALT_C;
446 
447 out:
448 	dev_err(pct->dev, "%s failed (%d)\n", __func__, ret);
449 	return ret;
450 }
451 
452 static void abx500_gpio_dbg_show_one(struct seq_file *s,
453 				     struct pinctrl_dev *pctldev,
454 				     struct gpio_chip *chip,
455 				     unsigned offset, unsigned gpio)
456 {
457 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
458 	u8 gpio_offset = offset - 1;
459 	int mode = -1;
460 	bool is_out;
461 	bool pd;
462 	int ret = -ENOMEM;
463 
464 	const char *modes[] = {
465 		[ABX500_DEFAULT]	= "default",
466 		[ABX500_ALT_A]		= "altA",
467 		[ABX500_ALT_B]		= "altB",
468 		[ABX500_ALT_C]		= "altC",
469 	};
470 
471 	const char *pull_up_down[] = {
472 		[ABX500_GPIO_PULL_DOWN]		= "pull down",
473 		[ABX500_GPIO_PULL_NONE]		= "pull none",
474 		[ABX500_GPIO_PULL_NONE + 1]	= "pull none",
475 		[ABX500_GPIO_PULL_UP]		= "pull up",
476 	};
477 
478 	char *label __free(kfree) = gpiochip_dup_line_label(chip, offset - 1);
479 	if (IS_ERR(label))
480 		goto out;
481 
482 	ret = abx500_gpio_get_bit(chip, AB8500_GPIO_DIR1_REG,
483 			gpio_offset, &is_out);
484 	if (ret < 0)
485 		goto out;
486 
487 	seq_printf(s, " gpio-%-3d (%-20.20s) %-3s",
488 		   gpio, label ?: "(none)",
489 		   is_out ? "out" : "in ");
490 
491 	if (!is_out) {
492 		ret = abx500_gpio_get_bit(chip, AB8500_GPIO_PUD1_REG,
493 				gpio_offset, &pd);
494 		if (ret < 0)
495 			goto out;
496 
497 		seq_printf(s, " %-9s", pull_up_down[pd]);
498 	} else
499 		seq_printf(s, " %-9s", chip->get(chip, offset) ? "hi" : "lo");
500 
501 	mode = abx500_get_mode(pctldev, chip, offset);
502 
503 	seq_printf(s, " %s", (mode < 0) ? "unknown" : modes[mode]);
504 
505 out:
506 	if (ret < 0)
507 		dev_err(pct->dev, "%s failed (%d)\n", __func__, ret);
508 }
509 
510 static void abx500_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
511 {
512 	unsigned i;
513 	unsigned gpio = chip->base;
514 	struct abx500_pinctrl *pct = gpiochip_get_data(chip);
515 	struct pinctrl_dev *pctldev = pct->pctldev;
516 
517 	for (i = 0; i < chip->ngpio; i++, gpio++) {
518 		/* On AB8500, there is no GPIO0, the first is the GPIO 1 */
519 		abx500_gpio_dbg_show_one(s, pctldev, chip, i + 1, gpio);
520 		seq_putc(s, '\n');
521 	}
522 }
523 
524 #else
525 static inline void abx500_gpio_dbg_show_one(struct seq_file *s,
526 					    struct pinctrl_dev *pctldev,
527 					    struct gpio_chip *chip,
528 					    unsigned offset, unsigned gpio)
529 {
530 }
531 #define abx500_gpio_dbg_show	NULL
532 #endif
533 
534 static const struct gpio_chip abx500gpio_chip = {
535 	.label			= "abx500-gpio",
536 	.owner			= THIS_MODULE,
537 	.request		= gpiochip_generic_request,
538 	.free			= gpiochip_generic_free,
539 	.direction_input	= abx500_gpio_direction_input,
540 	.get			= abx500_gpio_get,
541 	.direction_output	= abx500_gpio_direction_output,
542 	.set			= abx500_gpio_set,
543 	.to_irq			= abx500_gpio_to_irq,
544 	.dbg_show		= abx500_gpio_dbg_show,
545 };
546 
547 static int abx500_pmx_get_funcs_cnt(struct pinctrl_dev *pctldev)
548 {
549 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
550 
551 	return pct->soc->nfunctions;
552 }
553 
554 static const char *abx500_pmx_get_func_name(struct pinctrl_dev *pctldev,
555 					 unsigned function)
556 {
557 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
558 
559 	return pct->soc->functions[function].name;
560 }
561 
562 static int abx500_pmx_get_func_groups(struct pinctrl_dev *pctldev,
563 				      unsigned function,
564 				      const char * const **groups,
565 				      unsigned * const num_groups)
566 {
567 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
568 
569 	*groups = pct->soc->functions[function].groups;
570 	*num_groups = pct->soc->functions[function].ngroups;
571 
572 	return 0;
573 }
574 
575 static int abx500_pmx_set(struct pinctrl_dev *pctldev, unsigned function,
576 			  unsigned group)
577 {
578 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
579 	struct gpio_chip *chip = &pct->chip;
580 	const struct abx500_pingroup *g;
581 	int i;
582 	int ret = 0;
583 
584 	g = &pct->soc->groups[group];
585 	if (g->altsetting < 0)
586 		return -EINVAL;
587 
588 	dev_dbg(pct->dev, "enable group %s, %u pins\n", g->name, g->npins);
589 
590 	for (i = 0; i < g->npins; i++) {
591 		dev_dbg(pct->dev, "setting pin %d to altsetting %d\n",
592 			g->pins[i], g->altsetting);
593 
594 		ret = abx500_set_mode(pctldev, chip, g->pins[i], g->altsetting);
595 	}
596 
597 	if (ret < 0)
598 		dev_err(pct->dev, "%s failed (%d)\n", __func__, ret);
599 
600 	return ret;
601 }
602 
603 static int abx500_gpio_request_enable(struct pinctrl_dev *pctldev,
604 			       struct pinctrl_gpio_range *range,
605 			       unsigned offset)
606 {
607 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
608 	const struct abx500_pinrange *p;
609 	int ret;
610 	int i;
611 
612 	/*
613 	 * Different ranges have different ways to enable GPIO function on a
614 	 * pin, so refer back to our local range type, where we handily define
615 	 * what altfunc enables GPIO for a certain pin.
616 	 */
617 	for (i = 0; i < pct->soc->gpio_num_ranges; i++) {
618 		p = &pct->soc->gpio_ranges[i];
619 		if ((offset >= p->offset) &&
620 		    (offset < (p->offset + p->npins)))
621 		  break;
622 	}
623 
624 	if (i == pct->soc->gpio_num_ranges) {
625 		dev_err(pct->dev, "%s failed to locate range\n", __func__);
626 		return -ENODEV;
627 	}
628 
629 	dev_dbg(pct->dev, "enable GPIO by altfunc %d at gpio %d\n",
630 		p->altfunc, offset);
631 
632 	ret = abx500_set_mode(pct->pctldev, &pct->chip,
633 			      offset, p->altfunc);
634 	if (ret < 0)
635 		dev_err(pct->dev, "%s setting altfunc failed\n", __func__);
636 
637 	return ret;
638 }
639 
640 static void abx500_gpio_disable_free(struct pinctrl_dev *pctldev,
641 				     struct pinctrl_gpio_range *range,
642 				     unsigned offset)
643 {
644 }
645 
646 static const struct pinmux_ops abx500_pinmux_ops = {
647 	.get_functions_count = abx500_pmx_get_funcs_cnt,
648 	.get_function_name = abx500_pmx_get_func_name,
649 	.get_function_groups = abx500_pmx_get_func_groups,
650 	.set_mux = abx500_pmx_set,
651 	.gpio_request_enable = abx500_gpio_request_enable,
652 	.gpio_disable_free = abx500_gpio_disable_free,
653 };
654 
655 static int abx500_get_groups_cnt(struct pinctrl_dev *pctldev)
656 {
657 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
658 
659 	return pct->soc->ngroups;
660 }
661 
662 static const char *abx500_get_group_name(struct pinctrl_dev *pctldev,
663 					 unsigned selector)
664 {
665 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
666 
667 	return pct->soc->groups[selector].name;
668 }
669 
670 static int abx500_get_group_pins(struct pinctrl_dev *pctldev,
671 				 unsigned selector,
672 				 const unsigned **pins,
673 				 unsigned *num_pins)
674 {
675 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
676 
677 	*pins = pct->soc->groups[selector].pins;
678 	*num_pins = pct->soc->groups[selector].npins;
679 
680 	return 0;
681 }
682 
683 static void abx500_pin_dbg_show(struct pinctrl_dev *pctldev,
684 				struct seq_file *s, unsigned offset)
685 {
686 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
687 	struct gpio_chip *chip = &pct->chip;
688 
689 	abx500_gpio_dbg_show_one(s, pctldev, chip, offset,
690 				 chip->base + offset - 1);
691 }
692 
693 static int abx500_dt_add_map_mux(struct pinctrl_map **map,
694 		unsigned *reserved_maps,
695 		unsigned *num_maps, const char *group,
696 		const char *function)
697 {
698 	if (*num_maps == *reserved_maps)
699 		return -ENOSPC;
700 
701 	(*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
702 	(*map)[*num_maps].data.mux.group = group;
703 	(*map)[*num_maps].data.mux.function = function;
704 	(*num_maps)++;
705 
706 	return 0;
707 }
708 
709 static int abx500_dt_add_map_configs(struct pinctrl_map **map,
710 		unsigned *reserved_maps,
711 		unsigned *num_maps, const char *group,
712 		unsigned long *configs, unsigned num_configs)
713 {
714 	unsigned long *dup_configs;
715 
716 	if (*num_maps == *reserved_maps)
717 		return -ENOSPC;
718 
719 	dup_configs = kmemdup(configs, num_configs * sizeof(*dup_configs),
720 			      GFP_KERNEL);
721 	if (!dup_configs)
722 		return -ENOMEM;
723 
724 	(*map)[*num_maps].type = PIN_MAP_TYPE_CONFIGS_PIN;
725 
726 	(*map)[*num_maps].data.configs.group_or_pin = group;
727 	(*map)[*num_maps].data.configs.configs = dup_configs;
728 	(*map)[*num_maps].data.configs.num_configs = num_configs;
729 	(*num_maps)++;
730 
731 	return 0;
732 }
733 
734 static const char *abx500_find_pin_name(struct pinctrl_dev *pctldev,
735 					const char *pin_name)
736 {
737 	int i, pin_number;
738 	struct abx500_pinctrl *npct = pinctrl_dev_get_drvdata(pctldev);
739 
740 	if (sscanf((char *)pin_name, "GPIO%d", &pin_number) == 1)
741 		for (i = 0; i < npct->soc->npins; i++)
742 			if (npct->soc->pins[i].number == pin_number)
743 				return npct->soc->pins[i].name;
744 	return NULL;
745 }
746 
747 static int abx500_dt_subnode_to_map(struct pinctrl_dev *pctldev,
748 		struct device_node *np,
749 		struct pinctrl_map **map,
750 		unsigned *reserved_maps,
751 		unsigned *num_maps)
752 {
753 	int ret;
754 	const char *function = NULL;
755 	unsigned long *configs;
756 	unsigned int nconfigs = 0;
757 	struct property *prop;
758 
759 	ret = of_property_read_string(np, "function", &function);
760 	if (ret >= 0) {
761 		const char *group;
762 
763 		ret = of_property_count_strings(np, "groups");
764 		if (ret < 0)
765 			goto exit;
766 
767 		ret = pinctrl_utils_reserve_map(pctldev, map, reserved_maps,
768 						num_maps, ret);
769 		if (ret < 0)
770 			goto exit;
771 
772 		of_property_for_each_string(np, "groups", prop, group) {
773 			ret = abx500_dt_add_map_mux(map, reserved_maps,
774 					num_maps, group, function);
775 			if (ret < 0)
776 				goto exit;
777 		}
778 	}
779 
780 	ret = pinconf_generic_parse_dt_config(np, pctldev, &configs, &nconfigs);
781 	if (nconfigs) {
782 		const char *gpio_name;
783 		const char *pin;
784 
785 		ret = of_property_count_strings(np, "pins");
786 		if (ret < 0)
787 			goto exit;
788 
789 		ret = pinctrl_utils_reserve_map(pctldev, map,
790 						reserved_maps,
791 						num_maps, ret);
792 		if (ret < 0)
793 			goto exit;
794 
795 		of_property_for_each_string(np, "pins", prop, pin) {
796 			gpio_name = abx500_find_pin_name(pctldev, pin);
797 
798 			ret = abx500_dt_add_map_configs(map, reserved_maps,
799 					num_maps, gpio_name, configs, 1);
800 			if (ret < 0)
801 				goto exit;
802 		}
803 	}
804 
805 exit:
806 	return ret;
807 }
808 
809 static int abx500_dt_node_to_map(struct pinctrl_dev *pctldev,
810 				 struct device_node *np_config,
811 				 struct pinctrl_map **map, unsigned *num_maps)
812 {
813 	unsigned reserved_maps;
814 	int ret;
815 
816 	reserved_maps = 0;
817 	*map = NULL;
818 	*num_maps = 0;
819 
820 	for_each_child_of_node_scoped(np_config, np) {
821 		ret = abx500_dt_subnode_to_map(pctldev, np, map,
822 				&reserved_maps, num_maps);
823 		if (ret < 0) {
824 			pinctrl_utils_free_map(pctldev, *map, *num_maps);
825 			return ret;
826 		}
827 	}
828 
829 	return 0;
830 }
831 
832 static const struct pinctrl_ops abx500_pinctrl_ops = {
833 	.get_groups_count = abx500_get_groups_cnt,
834 	.get_group_name = abx500_get_group_name,
835 	.get_group_pins = abx500_get_group_pins,
836 	.pin_dbg_show = abx500_pin_dbg_show,
837 	.dt_node_to_map = abx500_dt_node_to_map,
838 	.dt_free_map = pinctrl_utils_free_map,
839 };
840 
841 static int abx500_pin_config_get(struct pinctrl_dev *pctldev,
842 			  unsigned pin,
843 			  unsigned long *config)
844 {
845 	return -ENOSYS;
846 }
847 
848 static int abx500_pin_config_set(struct pinctrl_dev *pctldev,
849 			  unsigned pin,
850 			  unsigned long *configs,
851 			  unsigned num_configs)
852 {
853 	struct abx500_pinctrl *pct = pinctrl_dev_get_drvdata(pctldev);
854 	struct gpio_chip *chip = &pct->chip;
855 	unsigned offset;
856 	int ret = -EINVAL;
857 	int i;
858 	enum pin_config_param param;
859 	enum pin_config_param argument;
860 
861 	for (i = 0; i < num_configs; i++) {
862 		param = pinconf_to_config_param(configs[i]);
863 		argument = pinconf_to_config_argument(configs[i]);
864 
865 		dev_dbg(chip->parent, "pin %d [%#lx]: %s %s\n",
866 			pin, configs[i],
867 			(param == PIN_CONFIG_OUTPUT) ? "output " : "input",
868 			(param == PIN_CONFIG_OUTPUT) ?
869 			(argument ? "high" : "low") :
870 			(argument ? "pull up" : "pull down"));
871 
872 		/* on ABx500, there is no GPIO0, so adjust the offset */
873 		offset = pin - 1;
874 
875 		switch (param) {
876 		case PIN_CONFIG_BIAS_DISABLE:
877 			ret = abx500_gpio_direction_input(chip, offset);
878 			if (ret < 0)
879 				goto out;
880 
881 			/* Chip only supports pull down */
882 			ret = abx500_gpio_set_bits(chip,
883 				AB8500_GPIO_PUD1_REG, offset,
884 				ABX500_GPIO_PULL_NONE);
885 			break;
886 
887 		case PIN_CONFIG_BIAS_PULL_DOWN:
888 			ret = abx500_gpio_direction_input(chip, offset);
889 			if (ret < 0)
890 				goto out;
891 			/*
892 			 * if argument = 1 set the pull down
893 			 * else clear the pull down
894 			 * Chip only supports pull down
895 			 */
896 			ret = abx500_gpio_set_bits(chip,
897 			AB8500_GPIO_PUD1_REG,
898 				offset,
899 				argument ? ABX500_GPIO_PULL_DOWN :
900 				ABX500_GPIO_PULL_NONE);
901 			break;
902 
903 		case PIN_CONFIG_BIAS_PULL_UP:
904 			ret = abx500_gpio_direction_input(chip, offset);
905 			if (ret < 0)
906 				goto out;
907 			/*
908 			 * if argument = 1 set the pull up
909 			 * else clear the pull up
910 			 */
911 			ret = abx500_gpio_direction_input(chip, offset);
912 			break;
913 
914 		case PIN_CONFIG_OUTPUT:
915 			ret = abx500_gpio_direction_output(chip, offset,
916 				argument);
917 			break;
918 
919 		default:
920 			dev_err(chip->parent,
921 				"illegal configuration requested\n");
922 		}
923 	} /* for each config */
924 out:
925 	if (ret < 0)
926 		dev_err(pct->dev, "%s failed (%d)\n", __func__, ret);
927 
928 	return ret;
929 }
930 
931 static const struct pinconf_ops abx500_pinconf_ops = {
932 	.pin_config_get = abx500_pin_config_get,
933 	.pin_config_set = abx500_pin_config_set,
934 	.is_generic = true,
935 };
936 
937 static struct pinctrl_desc abx500_pinctrl_desc = {
938 	.name = "pinctrl-abx500",
939 	.pctlops = &abx500_pinctrl_ops,
940 	.pmxops = &abx500_pinmux_ops,
941 	.confops = &abx500_pinconf_ops,
942 	.owner = THIS_MODULE,
943 };
944 
945 static int abx500_get_gpio_num(struct abx500_pinctrl_soc_data *soc)
946 {
947 	unsigned int lowest = 0;
948 	unsigned int highest = 0;
949 	unsigned int npins = 0;
950 	int i;
951 
952 	/*
953 	 * Compute number of GPIOs from the last SoC gpio range descriptors
954 	 * These ranges may include "holes" but the GPIO number space shall
955 	 * still be homogeneous, so we need to detect and account for any
956 	 * such holes so that these are included in the number of GPIO pins.
957 	 */
958 	for (i = 0; i < soc->gpio_num_ranges; i++) {
959 		unsigned gstart;
960 		unsigned gend;
961 		const struct abx500_pinrange *p;
962 
963 		p = &soc->gpio_ranges[i];
964 		gstart = p->offset;
965 		gend = p->offset + p->npins - 1;
966 
967 		if (i == 0) {
968 			/* First iteration, set start values */
969 			lowest = gstart;
970 			highest = gend;
971 		} else {
972 			if (gstart < lowest)
973 				lowest = gstart;
974 			if (gend > highest)
975 				highest = gend;
976 		}
977 	}
978 	/* this gives the absolute number of pins */
979 	npins = highest - lowest + 1;
980 	return npins;
981 }
982 
983 static const struct of_device_id abx500_gpio_match[] = {
984 	{ .compatible = "stericsson,ab8500-gpio", .data = (void *)PINCTRL_AB8500, },
985 	{ .compatible = "stericsson,ab8505-gpio", .data = (void *)PINCTRL_AB8505, },
986 	{ }
987 };
988 
989 static int abx500_gpio_probe(struct platform_device *pdev)
990 {
991 	struct device_node *np = pdev->dev.of_node;
992 	struct abx500_pinctrl *pct;
993 	unsigned int id = -1;
994 	int ret;
995 	int i;
996 
997 	if (!np) {
998 		dev_err(&pdev->dev, "gpio dt node missing\n");
999 		return -ENODEV;
1000 	}
1001 
1002 	pct = devm_kzalloc(&pdev->dev, sizeof(*pct), GFP_KERNEL);
1003 	if (!pct)
1004 		return -ENOMEM;
1005 
1006 	pct->dev = &pdev->dev;
1007 	pct->parent = dev_get_drvdata(pdev->dev.parent);
1008 	pct->chip = abx500gpio_chip;
1009 	pct->chip.parent = &pdev->dev;
1010 	pct->chip.base = -1; /* Dynamic allocation */
1011 
1012 	id = (unsigned long)device_get_match_data(&pdev->dev);
1013 
1014 	/* Poke in other ASIC variants here */
1015 	switch (id) {
1016 	case PINCTRL_AB8500:
1017 		abx500_pinctrl_ab8500_init(&pct->soc);
1018 		break;
1019 	case PINCTRL_AB8505:
1020 		abx500_pinctrl_ab8505_init(&pct->soc);
1021 		break;
1022 	default:
1023 		dev_err(&pdev->dev, "Unsupported pinctrl sub driver (%d)\n", id);
1024 		return -EINVAL;
1025 	}
1026 
1027 	if (!pct->soc) {
1028 		dev_err(&pdev->dev, "Invalid SOC data\n");
1029 		return -EINVAL;
1030 	}
1031 
1032 	pct->chip.ngpio = abx500_get_gpio_num(pct->soc);
1033 	pct->irq_cluster = pct->soc->gpio_irq_cluster;
1034 	pct->irq_cluster_size = pct->soc->ngpio_irq_cluster;
1035 
1036 	ret = gpiochip_add_data(&pct->chip, pct);
1037 	if (ret) {
1038 		dev_err(&pdev->dev, "unable to add gpiochip: %d\n", ret);
1039 		return ret;
1040 	}
1041 	dev_info(&pdev->dev, "added gpiochip\n");
1042 
1043 	abx500_pinctrl_desc.pins = pct->soc->pins;
1044 	abx500_pinctrl_desc.npins = pct->soc->npins;
1045 	pct->pctldev = devm_pinctrl_register(&pdev->dev, &abx500_pinctrl_desc,
1046 					     pct);
1047 	if (IS_ERR(pct->pctldev)) {
1048 		dev_err(&pdev->dev,
1049 			"could not register abx500 pinctrl driver\n");
1050 		ret = PTR_ERR(pct->pctldev);
1051 		goto out_rem_chip;
1052 	}
1053 	dev_info(&pdev->dev, "registered pin controller\n");
1054 
1055 	/* We will handle a range of GPIO pins */
1056 	for (i = 0; i < pct->soc->gpio_num_ranges; i++) {
1057 		const struct abx500_pinrange *p = &pct->soc->gpio_ranges[i];
1058 
1059 		ret = gpiochip_add_pin_range(&pct->chip,
1060 					dev_name(&pdev->dev),
1061 					p->offset - 1, p->offset, p->npins);
1062 		if (ret < 0)
1063 			goto out_rem_chip;
1064 	}
1065 
1066 	platform_set_drvdata(pdev, pct);
1067 	dev_info(&pdev->dev, "initialized abx500 pinctrl driver\n");
1068 
1069 	return 0;
1070 
1071 out_rem_chip:
1072 	gpiochip_remove(&pct->chip);
1073 	return ret;
1074 }
1075 
1076 /**
1077  * abx500_gpio_remove() - remove Ab8500-gpio driver
1078  * @pdev:	Platform device registered
1079  */
1080 static void abx500_gpio_remove(struct platform_device *pdev)
1081 {
1082 	struct abx500_pinctrl *pct = platform_get_drvdata(pdev);
1083 
1084 	gpiochip_remove(&pct->chip);
1085 }
1086 
1087 static struct platform_driver abx500_gpio_driver = {
1088 	.driver = {
1089 		.name = "abx500-gpio",
1090 		.of_match_table = abx500_gpio_match,
1091 	},
1092 	.probe = abx500_gpio_probe,
1093 	.remove_new = abx500_gpio_remove,
1094 };
1095 
1096 static int __init abx500_gpio_init(void)
1097 {
1098 	return platform_driver_register(&abx500_gpio_driver);
1099 }
1100 core_initcall(abx500_gpio_init);
1101