[go: nahoru, domu]

1/*
2 * Pinctrl Driver for ADI GPIO2 controller
3 *
4 * Copyright 2007-2013 Analog Devices Inc.
5 *
6 * Licensed under the GPLv2 or later
7 */
8
9#include <linux/bitops.h>
10#include <linux/delay.h>
11#include <linux/module.h>
12#include <linux/err.h>
13#include <linux/debugfs.h>
14#include <linux/seq_file.h>
15#include <linux/irq.h>
16#include <linux/platform_data/pinctrl-adi2.h>
17#include <linux/irqdomain.h>
18#include <linux/irqchip/chained_irq.h>
19#include <linux/pinctrl/pinctrl.h>
20#include <linux/pinctrl/pinmux.h>
21#include <linux/pinctrl/consumer.h>
22#include <linux/pinctrl/machine.h>
23#include <linux/syscore_ops.h>
24#include <linux/gpio.h>
25#include <asm/portmux.h>
26#include "pinctrl-adi2.h"
27#include "core.h"
28
29/*
30According to the BF54x HRM, pint means "pin interrupt".
31http://www.analog.com/static/imported-files/processor_manuals/ADSP-BF54x_hwr_rev1.2.pdf
32
33ADSP-BF54x processor Blackfin processors have four SIC interrupt chan-
34nels dedicated to pin interrupt purposes. These channels are managed by
35four hardware blocks, called PINT0, PINT1, PINT2, and PINT3. Every PINTx
36block can sense to up to 32 pins. While PINT0 and PINT1 can sense the
37pins of port A and port B, PINT2 and PINT3 manage all the pins from port
38C to port J as shown in Figure 9-2.
39
40n BF54x HRM:
41The ten GPIO ports are subdivided into 8-bit half ports, resulting in lower and
42upper half 8-bit units. The PINTx_ASSIGN registers control the 8-bit multi-
43plexers shown in Figure 9-3. Lower half units of eight pins can be
44forwarded to either byte 0 or byte 2 of either associated PINTx block.
45Upper half units can be forwarded to either byte 1 or byte 3 of the pin
46interrupt blocks, without further restrictions.
47
48All MMR registers in the pin interrupt module are 32 bits wide. To simply the
49mapping logic, this driver only maps a 16-bit gpio port to the upper or lower
5016 bits of a PINTx block. You can find the Figure 9-3 on page 583.
51
52Each IRQ domain is binding to a GPIO bank device. 2 GPIO bank devices can map
53to one PINT device. Two in "struct gpio_pint" are used to ease the PINT
54interrupt handler.
55
56The GPIO bank mapping to the lower 16 bits of the PINT device set its IRQ
57domain pointer in domain[0]. The IRQ domain pointer of the other bank is set
58to domain[1]. PINT interrupt handler adi_gpio_handle_pint_irq() finds out
59the current domain pointer according to whether the interrupt request mask
60is in lower 16 bits (domain[0]) or upper 16bits (domain[1]).
61
62A PINT device is not part of a GPIO port device in Blackfin. Multiple GPIO
63port devices can be mapped to the same PINT device.
64
65*/
66
67static LIST_HEAD(adi_pint_list);
68static LIST_HEAD(adi_gpio_port_list);
69
70#define DRIVER_NAME "pinctrl-adi2"
71
72#define PINT_HI_OFFSET		16
73
74/**
75 * struct gpio_port_saved - GPIO port registers that should be saved between
76 * power suspend and resume operations.
77 *
78 * @fer: PORTx_FER register
79 * @data: PORTx_DATA register
80 * @dir: PORTx_DIR register
81 * @inen: PORTx_INEN register
82 * @mux: PORTx_MUX register
83 */
84struct gpio_port_saved {
85	u16 fer;
86	u16 data;
87	u16 dir;
88	u16 inen;
89	u32 mux;
90};
91
92/*
93 * struct gpio_pint_saved - PINT registers saved in PM operations
94 *
95 * @assign: ASSIGN register
96 * @edge_set: EDGE_SET register
97 * @invert_set: INVERT_SET register
98 */
99struct gpio_pint_saved {
100	u32 assign;
101	u32 edge_set;
102	u32 invert_set;
103};
104
105/**
106 * struct gpio_pint - Pin interrupt controller device. Multiple ADI GPIO
107 * banks can be mapped into one Pin interrupt controller.
108 *
109 * @node: All gpio_pint instances are added to a global list.
110 * @base: PINT device register base address
111 * @irq: IRQ of the PINT device, it is the parent IRQ of all
112 *       GPIO IRQs mapping to this device.
113 * @domain: [0] irq domain of the gpio port, whose hardware interrupts are
114 *		mapping to the low 16-bit of the pint registers.
115 *          [1] irq domain of the gpio port, whose hardware interrupts are
116 *		mapping to the high 16-bit of the pint registers.
117 * @regs: address pointer to the PINT device
118 * @map_count: No more than 2 GPIO banks can be mapped to this PINT device.
119 * @lock: This lock make sure the irq_chip operations to one PINT device
120 *        for different GPIO interrrupts are atomic.
121 * @pint_map_port: Set up the mapping between one PINT device and
122 *                 multiple GPIO banks.
123 */
124struct gpio_pint {
125	struct list_head node;
126	void __iomem *base;
127	int irq;
128	struct irq_domain *domain[2];
129	struct gpio_pint_regs *regs;
130	struct gpio_pint_saved saved_data;
131	int map_count;
132	spinlock_t lock;
133
134	int (*pint_map_port)(struct gpio_pint *pint, bool assign,
135				u8 map, struct irq_domain *domain);
136};
137
138/**
139 * ADI pin controller
140 *
141 * @dev: a pointer back to containing device
142 * @pctl: the pinctrl device
143 * @soc: SoC data for this specific chip
144 */
145struct adi_pinctrl {
146	struct device *dev;
147	struct pinctrl_dev *pctl;
148	const struct adi_pinctrl_soc_data *soc;
149};
150
151/**
152 * struct gpio_port - GPIO bank device. Multiple ADI GPIO banks can be mapped
153 * into one pin interrupt controller.
154 *
155 * @node: All gpio_port instances are added to a list.
156 * @base: GPIO bank device register base address
157 * @irq_base: base IRQ of the GPIO bank device
158 * @width: PIN number of the GPIO bank device
159 * @regs: address pointer to the GPIO bank device
160 * @saved_data: registers that should be saved between PM operations.
161 * @dev: device structure of this GPIO bank
162 * @pint: GPIO PINT device that this GPIO bank mapped to
163 * @pint_map: GIOP bank mapping code in PINT device
164 * @pint_assign: The 32-bit PINT registers can be divided into 2 parts. A
165 *               GPIO bank can be mapped into either low 16 bits[0] or high 16
166 *               bits[1] of each PINT register.
167 * @lock: This lock make sure the irq_chip operations to one PINT device
168 *        for different GPIO interrrupts are atomic.
169 * @chip: abstract a GPIO controller
170 * @domain: The irq domain owned by the GPIO port.
171 * @rsvmap: Reservation map array for each pin in the GPIO bank
172 */
173struct gpio_port {
174	struct list_head node;
175	void __iomem *base;
176	int irq_base;
177	unsigned int width;
178	struct gpio_port_t *regs;
179	struct gpio_port_saved saved_data;
180	struct device *dev;
181
182	struct gpio_pint *pint;
183	u8 pint_map;
184	bool pint_assign;
185
186	spinlock_t lock;
187	struct gpio_chip chip;
188	struct irq_domain *domain;
189};
190
191static inline u8 pin_to_offset(struct pinctrl_gpio_range *range, unsigned pin)
192{
193	return pin - range->pin_base;
194}
195
196static inline u32 hwirq_to_pintbit(struct gpio_port *port, int hwirq)
197{
198	return port->pint_assign ? BIT(hwirq) << PINT_HI_OFFSET : BIT(hwirq);
199}
200
201static struct gpio_pint *find_gpio_pint(unsigned id)
202{
203	struct gpio_pint *pint;
204	int i = 0;
205
206	list_for_each_entry(pint, &adi_pint_list, node) {
207		if (id == i)
208			return pint;
209		i++;
210	}
211
212	return NULL;
213}
214
215static inline void port_setup(struct gpio_port *port, unsigned offset,
216	bool use_for_gpio)
217{
218	struct gpio_port_t *regs = port->regs;
219
220	if (use_for_gpio)
221		writew(readw(&regs->port_fer) & ~BIT(offset),
222			&regs->port_fer);
223	else
224		writew(readw(&regs->port_fer) | BIT(offset), &regs->port_fer);
225}
226
227static inline void portmux_setup(struct gpio_port *port, unsigned offset,
228	unsigned short function)
229{
230	struct gpio_port_t *regs = port->regs;
231	u32 pmux;
232
233	pmux = readl(&regs->port_mux);
234
235	/* The function field of each pin has 2 consecutive bits in
236	 * the mux register.
237	 */
238	pmux &= ~(0x3 << (2 * offset));
239	pmux |= (function & 0x3) << (2 * offset);
240
241	writel(pmux, &regs->port_mux);
242}
243
244static inline u16 get_portmux(struct gpio_port *port, unsigned offset)
245{
246	struct gpio_port_t *regs = port->regs;
247	u32 pmux = readl(&regs->port_mux);
248
249	/* The function field of each pin has 2 consecutive bits in
250	 * the mux register.
251	 */
252	return pmux >> (2 * offset) & 0x3;
253}
254
255static void adi_gpio_ack_irq(struct irq_data *d)
256{
257	unsigned long flags;
258	struct gpio_port *port = irq_data_get_irq_chip_data(d);
259	struct gpio_pint_regs *regs = port->pint->regs;
260	unsigned pintbit = hwirq_to_pintbit(port, d->hwirq);
261
262	spin_lock_irqsave(&port->lock, flags);
263	spin_lock(&port->pint->lock);
264
265	if (irqd_get_trigger_type(d) == IRQ_TYPE_EDGE_BOTH) {
266		if (readl(&regs->invert_set) & pintbit)
267			writel(pintbit, &regs->invert_clear);
268		else
269			writel(pintbit, &regs->invert_set);
270	}
271
272	writel(pintbit, &regs->request);
273
274	spin_unlock(&port->pint->lock);
275	spin_unlock_irqrestore(&port->lock, flags);
276}
277
278static void adi_gpio_mask_ack_irq(struct irq_data *d)
279{
280	unsigned long flags;
281	struct gpio_port *port = irq_data_get_irq_chip_data(d);
282	struct gpio_pint_regs *regs = port->pint->regs;
283	unsigned pintbit = hwirq_to_pintbit(port, d->hwirq);
284
285	spin_lock_irqsave(&port->lock, flags);
286	spin_lock(&port->pint->lock);
287
288	if (irqd_get_trigger_type(d) == IRQ_TYPE_EDGE_BOTH) {
289		if (readl(&regs->invert_set) & pintbit)
290			writel(pintbit, &regs->invert_clear);
291		else
292			writel(pintbit, &regs->invert_set);
293	}
294
295	writel(pintbit, &regs->request);
296	writel(pintbit, &regs->mask_clear);
297
298	spin_unlock(&port->pint->lock);
299	spin_unlock_irqrestore(&port->lock, flags);
300}
301
302static void adi_gpio_mask_irq(struct irq_data *d)
303{
304	unsigned long flags;
305	struct gpio_port *port = irq_data_get_irq_chip_data(d);
306	struct gpio_pint_regs *regs = port->pint->regs;
307
308	spin_lock_irqsave(&port->lock, flags);
309	spin_lock(&port->pint->lock);
310
311	writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_clear);
312
313	spin_unlock(&port->pint->lock);
314	spin_unlock_irqrestore(&port->lock, flags);
315}
316
317static void adi_gpio_unmask_irq(struct irq_data *d)
318{
319	unsigned long flags;
320	struct gpio_port *port = irq_data_get_irq_chip_data(d);
321	struct gpio_pint_regs *regs = port->pint->regs;
322
323	spin_lock_irqsave(&port->lock, flags);
324	spin_lock(&port->pint->lock);
325
326	writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_set);
327
328	spin_unlock(&port->pint->lock);
329	spin_unlock_irqrestore(&port->lock, flags);
330}
331
332static unsigned int adi_gpio_irq_startup(struct irq_data *d)
333{
334	unsigned long flags;
335	struct gpio_port *port = irq_data_get_irq_chip_data(d);
336	struct gpio_pint_regs *regs;
337
338	if (!port) {
339		pr_err("GPIO IRQ %d :Not exist\n", d->irq);
340		/* FIXME: negative return code will be ignored */
341		return -ENODEV;
342	}
343
344	regs = port->pint->regs;
345
346	spin_lock_irqsave(&port->lock, flags);
347	spin_lock(&port->pint->lock);
348
349	port_setup(port, d->hwirq, true);
350	writew(BIT(d->hwirq), &port->regs->dir_clear);
351	writew(readw(&port->regs->inen) | BIT(d->hwirq), &port->regs->inen);
352
353	writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_set);
354
355	spin_unlock(&port->pint->lock);
356	spin_unlock_irqrestore(&port->lock, flags);
357
358	return 0;
359}
360
361static void adi_gpio_irq_shutdown(struct irq_data *d)
362{
363	unsigned long flags;
364	struct gpio_port *port = irq_data_get_irq_chip_data(d);
365	struct gpio_pint_regs *regs = port->pint->regs;
366
367	spin_lock_irqsave(&port->lock, flags);
368	spin_lock(&port->pint->lock);
369
370	writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_clear);
371
372	spin_unlock(&port->pint->lock);
373	spin_unlock_irqrestore(&port->lock, flags);
374}
375
376static int adi_gpio_irq_type(struct irq_data *d, unsigned int type)
377{
378	unsigned long flags;
379	struct gpio_port *port = irq_data_get_irq_chip_data(d);
380	struct gpio_pint_regs *pint_regs;
381	unsigned pintmask;
382	unsigned int irq = d->irq;
383	int ret = 0;
384	char buf[16];
385
386	if (!port) {
387		pr_err("GPIO IRQ %d :Not exist\n", d->irq);
388		return -ENODEV;
389	}
390
391	pint_regs = port->pint->regs;
392
393	pintmask = hwirq_to_pintbit(port, d->hwirq);
394
395	spin_lock_irqsave(&port->lock, flags);
396	spin_lock(&port->pint->lock);
397
398	/* In case of interrupt autodetect, set irq type to edge sensitive. */
399	if (type == IRQ_TYPE_PROBE)
400		type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
401
402	if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING |
403		    IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) {
404		snprintf(buf, 16, "gpio-irq%u", irq);
405		port_setup(port, d->hwirq, true);
406	} else
407		goto out;
408
409	/* The GPIO interrupt is triggered only when its input value
410	 * transfer from 0 to 1. So, invert the input value if the
411	 * irq type is low or falling
412	 */
413	if ((type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW)))
414		writel(pintmask, &pint_regs->invert_set);
415	else
416		writel(pintmask, &pint_regs->invert_clear);
417
418	/* In edge sensitive case, if the input value of the requested irq
419	 * is already 1, invert it.
420	 */
421	if ((type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH) {
422		if (gpio_get_value(port->chip.base + d->hwirq))
423			writel(pintmask, &pint_regs->invert_set);
424		else
425			writel(pintmask, &pint_regs->invert_clear);
426	}
427
428	if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
429		writel(pintmask, &pint_regs->edge_set);
430		__irq_set_handler_locked(irq, handle_edge_irq);
431	} else {
432		writel(pintmask, &pint_regs->edge_clear);
433		__irq_set_handler_locked(irq, handle_level_irq);
434	}
435
436out:
437	spin_unlock(&port->pint->lock);
438	spin_unlock_irqrestore(&port->lock, flags);
439
440	return ret;
441}
442
443#ifdef CONFIG_PM
444static int adi_gpio_set_wake(struct irq_data *d, unsigned int state)
445{
446	struct gpio_port *port = irq_data_get_irq_chip_data(d);
447
448	if (!port || !port->pint || port->pint->irq != d->irq)
449		return -EINVAL;
450
451#ifndef SEC_GCTL
452	adi_internal_set_wake(port->pint->irq, state);
453#endif
454
455	return 0;
456}
457
458static int adi_pint_suspend(void)
459{
460	struct gpio_pint *pint;
461
462	list_for_each_entry(pint, &adi_pint_list, node) {
463		writel(0xffffffff, &pint->regs->mask_clear);
464		pint->saved_data.assign = readl(&pint->regs->assign);
465		pint->saved_data.edge_set = readl(&pint->regs->edge_set);
466		pint->saved_data.invert_set = readl(&pint->regs->invert_set);
467	}
468
469	return 0;
470}
471
472static void adi_pint_resume(void)
473{
474	struct gpio_pint *pint;
475
476	list_for_each_entry(pint, &adi_pint_list, node) {
477		writel(pint->saved_data.assign, &pint->regs->assign);
478		writel(pint->saved_data.edge_set, &pint->regs->edge_set);
479		writel(pint->saved_data.invert_set, &pint->regs->invert_set);
480	}
481}
482
483static int adi_gpio_suspend(void)
484{
485	struct gpio_port *port;
486
487	list_for_each_entry(port, &adi_gpio_port_list, node) {
488		port->saved_data.fer = readw(&port->regs->port_fer);
489		port->saved_data.mux = readl(&port->regs->port_mux);
490		port->saved_data.data = readw(&port->regs->data);
491		port->saved_data.inen = readw(&port->regs->inen);
492		port->saved_data.dir = readw(&port->regs->dir_set);
493	}
494
495	return adi_pint_suspend();
496}
497
498static void adi_gpio_resume(void)
499{
500	struct gpio_port *port;
501
502	adi_pint_resume();
503
504	list_for_each_entry(port, &adi_gpio_port_list, node) {
505		writel(port->saved_data.mux, &port->regs->port_mux);
506		writew(port->saved_data.fer, &port->regs->port_fer);
507		writew(port->saved_data.inen, &port->regs->inen);
508		writew(port->saved_data.data & port->saved_data.dir,
509					&port->regs->data_set);
510		writew(port->saved_data.dir, &port->regs->dir_set);
511	}
512
513}
514
515static struct syscore_ops gpio_pm_syscore_ops = {
516	.suspend = adi_gpio_suspend,
517	.resume = adi_gpio_resume,
518};
519#else /* CONFIG_PM */
520#define adi_gpio_set_wake NULL
521#endif /* CONFIG_PM */
522
523#ifdef CONFIG_IRQ_PREFLOW_FASTEOI
524static inline void preflow_handler(struct irq_desc *desc)
525{
526	if (desc->preflow_handler)
527		desc->preflow_handler(&desc->irq_data);
528}
529#else
530static inline void preflow_handler(struct irq_desc *desc) { }
531#endif
532
533static void adi_gpio_handle_pint_irq(unsigned int inta_irq,
534			struct irq_desc *desc)
535{
536	u32 request;
537	u32 level_mask, hwirq;
538	bool umask = false;
539	struct gpio_pint *pint = irq_desc_get_handler_data(desc);
540	struct irq_chip *chip = irq_desc_get_chip(desc);
541	struct gpio_pint_regs *regs = pint->regs;
542	struct irq_domain *domain;
543
544	preflow_handler(desc);
545	chained_irq_enter(chip, desc);
546
547	request = readl(&regs->request);
548	level_mask = readl(&regs->edge_set) & request;
549
550	hwirq = 0;
551	domain = pint->domain[0];
552	while (request) {
553		/* domain pointer need to be changed only once at IRQ 16 when
554		 * we go through IRQ requests from bit 0 to bit 31.
555		 */
556		if (hwirq == PINT_HI_OFFSET)
557			domain = pint->domain[1];
558
559		if (request & 1) {
560			if (level_mask & BIT(hwirq)) {
561				umask = true;
562				chained_irq_exit(chip, desc);
563			}
564			generic_handle_irq(irq_find_mapping(domain,
565					hwirq % PINT_HI_OFFSET));
566		}
567
568		hwirq++;
569		request >>= 1;
570	}
571
572	if (!umask)
573		chained_irq_exit(chip, desc);
574}
575
576static struct irq_chip adi_gpio_irqchip = {
577	.name = "GPIO",
578	.irq_ack = adi_gpio_ack_irq,
579	.irq_mask = adi_gpio_mask_irq,
580	.irq_mask_ack = adi_gpio_mask_ack_irq,
581	.irq_unmask = adi_gpio_unmask_irq,
582	.irq_disable = adi_gpio_mask_irq,
583	.irq_enable = adi_gpio_unmask_irq,
584	.irq_set_type = adi_gpio_irq_type,
585	.irq_startup = adi_gpio_irq_startup,
586	.irq_shutdown = adi_gpio_irq_shutdown,
587	.irq_set_wake = adi_gpio_set_wake,
588};
589
590static int adi_get_groups_count(struct pinctrl_dev *pctldev)
591{
592	struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
593
594	return pinctrl->soc->ngroups;
595}
596
597static const char *adi_get_group_name(struct pinctrl_dev *pctldev,
598				       unsigned selector)
599{
600	struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
601
602	return pinctrl->soc->groups[selector].name;
603}
604
605static int adi_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
606			       const unsigned **pins,
607			       unsigned *num_pins)
608{
609	struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
610
611	*pins = pinctrl->soc->groups[selector].pins;
612	*num_pins = pinctrl->soc->groups[selector].num;
613	return 0;
614}
615
616static struct pinctrl_ops adi_pctrl_ops = {
617	.get_groups_count = adi_get_groups_count,
618	.get_group_name = adi_get_group_name,
619	.get_group_pins = adi_get_group_pins,
620};
621
622static int adi_pinmux_set(struct pinctrl_dev *pctldev, unsigned func_id,
623			  unsigned group_id)
624{
625	struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
626	struct gpio_port *port;
627	struct pinctrl_gpio_range *range;
628	unsigned long flags;
629	unsigned short *mux, pin;
630
631	mux = (unsigned short *)pinctrl->soc->groups[group_id].mux;
632
633	while (*mux) {
634		pin = P_IDENT(*mux);
635
636		range = pinctrl_find_gpio_range_from_pin(pctldev, pin);
637		if (range == NULL) /* should not happen */
638			return -ENODEV;
639
640		port = container_of(range->gc, struct gpio_port, chip);
641
642		spin_lock_irqsave(&port->lock, flags);
643
644		portmux_setup(port, pin_to_offset(range, pin),
645				P_FUNCT2MUX(*mux));
646		port_setup(port, pin_to_offset(range, pin), false);
647		mux++;
648
649		spin_unlock_irqrestore(&port->lock, flags);
650	}
651
652	return 0;
653}
654
655static int adi_pinmux_get_funcs_count(struct pinctrl_dev *pctldev)
656{
657	struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
658
659	return pinctrl->soc->nfunctions;
660}
661
662static const char *adi_pinmux_get_func_name(struct pinctrl_dev *pctldev,
663					  unsigned selector)
664{
665	struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
666
667	return pinctrl->soc->functions[selector].name;
668}
669
670static int adi_pinmux_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
671			       const char * const **groups,
672			       unsigned * const num_groups)
673{
674	struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
675
676	*groups = pinctrl->soc->functions[selector].groups;
677	*num_groups = pinctrl->soc->functions[selector].num_groups;
678	return 0;
679}
680
681static int adi_pinmux_request_gpio(struct pinctrl_dev *pctldev,
682	struct pinctrl_gpio_range *range, unsigned pin)
683{
684	struct gpio_port *port;
685	unsigned long flags;
686	u8 offset;
687
688	port = container_of(range->gc, struct gpio_port, chip);
689	offset = pin_to_offset(range, pin);
690
691	spin_lock_irqsave(&port->lock, flags);
692
693	port_setup(port, offset, true);
694
695	spin_unlock_irqrestore(&port->lock, flags);
696
697	return 0;
698}
699
700static struct pinmux_ops adi_pinmux_ops = {
701	.set_mux = adi_pinmux_set,
702	.get_functions_count = adi_pinmux_get_funcs_count,
703	.get_function_name = adi_pinmux_get_func_name,
704	.get_function_groups = adi_pinmux_get_groups,
705	.gpio_request_enable = adi_pinmux_request_gpio,
706};
707
708
709static struct pinctrl_desc adi_pinmux_desc = {
710	.name = DRIVER_NAME,
711	.pctlops = &adi_pctrl_ops,
712	.pmxops = &adi_pinmux_ops,
713	.owner = THIS_MODULE,
714};
715
716static int adi_gpio_request(struct gpio_chip *chip, unsigned offset)
717{
718	return pinctrl_request_gpio(chip->base + offset);
719}
720
721static void adi_gpio_free(struct gpio_chip *chip, unsigned offset)
722{
723	pinctrl_free_gpio(chip->base + offset);
724}
725
726static int adi_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
727{
728	struct gpio_port *port;
729	unsigned long flags;
730
731	port = container_of(chip, struct gpio_port, chip);
732
733	spin_lock_irqsave(&port->lock, flags);
734
735	writew(BIT(offset), &port->regs->dir_clear);
736	writew(readw(&port->regs->inen) | BIT(offset), &port->regs->inen);
737
738	spin_unlock_irqrestore(&port->lock, flags);
739
740	return 0;
741}
742
743static void adi_gpio_set_value(struct gpio_chip *chip, unsigned offset,
744	int value)
745{
746	struct gpio_port *port = container_of(chip, struct gpio_port, chip);
747	struct gpio_port_t *regs = port->regs;
748	unsigned long flags;
749
750	spin_lock_irqsave(&port->lock, flags);
751
752	if (value)
753		writew(BIT(offset), &regs->data_set);
754	else
755		writew(BIT(offset), &regs->data_clear);
756
757	spin_unlock_irqrestore(&port->lock, flags);
758}
759
760static int adi_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
761	int value)
762{
763	struct gpio_port *port = container_of(chip, struct gpio_port, chip);
764	struct gpio_port_t *regs = port->regs;
765	unsigned long flags;
766
767	spin_lock_irqsave(&port->lock, flags);
768
769	writew(readw(&regs->inen) & ~BIT(offset), &regs->inen);
770	if (value)
771		writew(BIT(offset), &regs->data_set);
772	else
773		writew(BIT(offset), &regs->data_clear);
774	writew(BIT(offset), &regs->dir_set);
775
776	spin_unlock_irqrestore(&port->lock, flags);
777
778	return 0;
779}
780
781static int adi_gpio_get_value(struct gpio_chip *chip, unsigned offset)
782{
783	struct gpio_port *port = container_of(chip, struct gpio_port, chip);
784	struct gpio_port_t *regs = port->regs;
785	unsigned long flags;
786	int ret;
787
788	spin_lock_irqsave(&port->lock, flags);
789
790	ret = !!(readw(&regs->data) & BIT(offset));
791
792	spin_unlock_irqrestore(&port->lock, flags);
793
794	return ret;
795}
796
797static int adi_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
798{
799	struct gpio_port *port = container_of(chip, struct gpio_port, chip);
800
801	if (port->irq_base >= 0)
802		return irq_find_mapping(port->domain, offset);
803	else
804		return irq_create_mapping(port->domain, offset);
805}
806
807static int adi_pint_map_port(struct gpio_pint *pint, bool assign, u8 map,
808	struct irq_domain *domain)
809{
810	struct gpio_pint_regs *regs = pint->regs;
811	u32 map_mask;
812
813	if (pint->map_count > 1)
814		return -EINVAL;
815
816	pint->map_count++;
817
818	/* The map_mask of each gpio port is a 16-bit duplicate
819	 * of the 8-bit map. It can be set to either high 16 bits or low
820	 * 16 bits of the pint assignment register.
821	 */
822	map_mask = (map << 8) | map;
823	if (assign) {
824		map_mask <<= PINT_HI_OFFSET;
825		writel((readl(&regs->assign) & 0xFFFF) | map_mask,
826			&regs->assign);
827	} else
828		writel((readl(&regs->assign) & 0xFFFF0000) | map_mask,
829			&regs->assign);
830
831	pint->domain[assign] = domain;
832
833	return 0;
834}
835
836static int adi_gpio_pint_probe(struct platform_device *pdev)
837{
838	struct device *dev = &pdev->dev;
839	struct resource *res;
840	struct gpio_pint *pint;
841
842	pint = devm_kzalloc(dev, sizeof(struct gpio_pint), GFP_KERNEL);
843	if (!pint) {
844		dev_err(dev, "Memory alloc failed\n");
845		return -ENOMEM;
846	}
847
848	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
849	pint->base = devm_ioremap_resource(dev, res);
850	if (IS_ERR(pint->base))
851		return PTR_ERR(pint->base);
852
853	pint->regs = (struct gpio_pint_regs *)pint->base;
854
855	res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
856	if (!res) {
857		dev_err(dev, "Invalid IRQ resource\n");
858		return -ENODEV;
859	}
860
861	spin_lock_init(&pint->lock);
862
863	pint->irq = res->start;
864	pint->pint_map_port = adi_pint_map_port;
865	platform_set_drvdata(pdev, pint);
866
867	irq_set_chained_handler(pint->irq, adi_gpio_handle_pint_irq);
868	irq_set_handler_data(pint->irq, pint);
869
870	list_add_tail(&pint->node, &adi_pint_list);
871
872	return 0;
873}
874
875static int adi_gpio_pint_remove(struct platform_device *pdev)
876{
877	struct gpio_pint *pint = platform_get_drvdata(pdev);
878
879	list_del(&pint->node);
880	irq_set_handler(pint->irq, handle_simple_irq);
881
882	return 0;
883}
884
885static int adi_gpio_irq_map(struct irq_domain *d, unsigned int irq,
886				irq_hw_number_t hwirq)
887{
888	struct gpio_port *port = d->host_data;
889
890	if (!port)
891		return -EINVAL;
892
893	irq_set_chip_data(irq, port);
894	irq_set_chip_and_handler(irq, &adi_gpio_irqchip,
895				handle_level_irq);
896
897	return 0;
898}
899
900static const struct irq_domain_ops adi_gpio_irq_domain_ops = {
901	.map = adi_gpio_irq_map,
902	.xlate = irq_domain_xlate_onecell,
903};
904
905static int adi_gpio_init_int(struct gpio_port *port)
906{
907	struct device_node *node = port->dev->of_node;
908	struct gpio_pint *pint = port->pint;
909	int ret;
910
911	port->domain = irq_domain_add_linear(node, port->width,
912				&adi_gpio_irq_domain_ops, port);
913	if (!port->domain) {
914		dev_err(port->dev, "Failed to create irqdomain\n");
915		return -ENOSYS;
916	}
917
918	/* According to BF54x and BF60x HRM, pin interrupt devices are not
919	 * part of the GPIO port device. in GPIO interrupt mode, the GPIO
920	 * pins of multiple port devices can be routed into one pin interrupt
921	 * device. The mapping can be configured by setting pint assignment
922	 * register with the mapping value of different GPIO port. This is
923	 * done via function pint_map_port().
924	 */
925	ret = pint->pint_map_port(port->pint, port->pint_assign,
926			port->pint_map,	port->domain);
927	if (ret)
928		return ret;
929
930	if (port->irq_base >= 0) {
931		ret = irq_create_strict_mappings(port->domain, port->irq_base,
932					0, port->width);
933		if (ret) {
934			dev_err(port->dev, "Couldn't associate to domain\n");
935			return ret;
936		}
937	}
938
939	return 0;
940}
941
942#define DEVNAME_SIZE 16
943
944static int adi_gpio_probe(struct platform_device *pdev)
945{
946	struct device *dev = &pdev->dev;
947	const struct adi_pinctrl_gpio_platform_data *pdata;
948	struct resource *res;
949	struct gpio_port *port;
950	char pinctrl_devname[DEVNAME_SIZE];
951	static int gpio;
952	int ret = 0;
953
954	pdata = dev->platform_data;
955	if (!pdata)
956		return -EINVAL;
957
958	port = devm_kzalloc(dev, sizeof(struct gpio_port), GFP_KERNEL);
959	if (!port) {
960		dev_err(dev, "Memory alloc failed\n");
961		return -ENOMEM;
962	}
963
964	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
965	port->base = devm_ioremap_resource(dev, res);
966	if (IS_ERR(port->base))
967		return PTR_ERR(port->base);
968
969	res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
970	if (!res)
971		port->irq_base = -1;
972	else
973		port->irq_base = res->start;
974
975	port->width = pdata->port_width;
976	port->dev = dev;
977	port->regs = (struct gpio_port_t *)port->base;
978	port->pint_assign = pdata->pint_assign;
979	port->pint_map = pdata->pint_map;
980
981	port->pint = find_gpio_pint(pdata->pint_id);
982	if (port->pint) {
983		ret = adi_gpio_init_int(port);
984		if (ret)
985			return ret;
986	}
987
988	spin_lock_init(&port->lock);
989
990	platform_set_drvdata(pdev, port);
991
992	port->chip.label		= "adi-gpio";
993	port->chip.direction_input	= adi_gpio_direction_input;
994	port->chip.get			= adi_gpio_get_value;
995	port->chip.direction_output	= adi_gpio_direction_output;
996	port->chip.set			= adi_gpio_set_value;
997	port->chip.request		= adi_gpio_request;
998	port->chip.free			= adi_gpio_free;
999	port->chip.to_irq		= adi_gpio_to_irq;
1000	if (pdata->port_gpio_base > 0)
1001		port->chip.base		= pdata->port_gpio_base;
1002	else
1003		port->chip.base		= gpio;
1004	port->chip.ngpio		= port->width;
1005	gpio = port->chip.base + port->width;
1006
1007	ret = gpiochip_add(&port->chip);
1008	if (ret) {
1009		dev_err(&pdev->dev, "Fail to add GPIO chip.\n");
1010		goto out_remove_domain;
1011	}
1012
1013	/* Add gpio pin range */
1014	snprintf(pinctrl_devname, DEVNAME_SIZE, "pinctrl-adi2.%d",
1015		pdata->pinctrl_id);
1016	pinctrl_devname[DEVNAME_SIZE - 1] = 0;
1017	ret = gpiochip_add_pin_range(&port->chip, pinctrl_devname,
1018		0, pdata->port_pin_base, port->width);
1019	if (ret) {
1020		dev_err(&pdev->dev, "Fail to add pin range to %s.\n",
1021				pinctrl_devname);
1022		goto out_remove_gpiochip;
1023	}
1024
1025	list_add_tail(&port->node, &adi_gpio_port_list);
1026
1027	return 0;
1028
1029out_remove_gpiochip:
1030	gpiochip_remove(&port->chip);
1031out_remove_domain:
1032	if (port->pint)
1033		irq_domain_remove(port->domain);
1034
1035	return ret;
1036}
1037
1038static int adi_gpio_remove(struct platform_device *pdev)
1039{
1040	struct gpio_port *port = platform_get_drvdata(pdev);
1041	u8 offset;
1042
1043	list_del(&port->node);
1044	gpiochip_remove(&port->chip);
1045	if (port->pint) {
1046		for (offset = 0; offset < port->width; offset++)
1047			irq_dispose_mapping(irq_find_mapping(port->domain,
1048				offset));
1049		irq_domain_remove(port->domain);
1050	}
1051
1052	return 0;
1053}
1054
1055static int adi_pinctrl_probe(struct platform_device *pdev)
1056{
1057	struct adi_pinctrl *pinctrl;
1058
1059	pinctrl = devm_kzalloc(&pdev->dev, sizeof(*pinctrl), GFP_KERNEL);
1060	if (!pinctrl)
1061		return -ENOMEM;
1062
1063	pinctrl->dev = &pdev->dev;
1064
1065	adi_pinctrl_soc_init(&pinctrl->soc);
1066
1067	adi_pinmux_desc.pins = pinctrl->soc->pins;
1068	adi_pinmux_desc.npins = pinctrl->soc->npins;
1069
1070	/* Now register the pin controller and all pins it handles */
1071	pinctrl->pctl = pinctrl_register(&adi_pinmux_desc, &pdev->dev, pinctrl);
1072	if (!pinctrl->pctl) {
1073		dev_err(&pdev->dev, "could not register pinctrl ADI2 driver\n");
1074		return -EINVAL;
1075	}
1076
1077	platform_set_drvdata(pdev, pinctrl);
1078
1079	return 0;
1080}
1081
1082static int adi_pinctrl_remove(struct platform_device *pdev)
1083{
1084	struct adi_pinctrl *pinctrl = platform_get_drvdata(pdev);
1085
1086	pinctrl_unregister(pinctrl->pctl);
1087
1088	return 0;
1089}
1090
1091static struct platform_driver adi_pinctrl_driver = {
1092	.probe		= adi_pinctrl_probe,
1093	.remove		= adi_pinctrl_remove,
1094	.driver		= {
1095		.name	= DRIVER_NAME,
1096	},
1097};
1098
1099static struct platform_driver adi_gpio_pint_driver = {
1100	.probe		= adi_gpio_pint_probe,
1101	.remove		= adi_gpio_pint_remove,
1102	.driver		= {
1103		.name	= "adi-gpio-pint",
1104	},
1105};
1106
1107static struct platform_driver adi_gpio_driver = {
1108	.probe		= adi_gpio_probe,
1109	.remove		= adi_gpio_remove,
1110	.driver		= {
1111		.name	= "adi-gpio",
1112	},
1113};
1114
1115static int __init adi_pinctrl_setup(void)
1116{
1117	int ret;
1118
1119	ret = platform_driver_register(&adi_pinctrl_driver);
1120	if (ret)
1121		return ret;
1122
1123	ret = platform_driver_register(&adi_gpio_pint_driver);
1124	if (ret)
1125		goto pint_error;
1126
1127	ret = platform_driver_register(&adi_gpio_driver);
1128	if (ret)
1129		goto gpio_error;
1130
1131#ifdef CONFIG_PM
1132	register_syscore_ops(&gpio_pm_syscore_ops);
1133#endif
1134	return ret;
1135gpio_error:
1136	platform_driver_unregister(&adi_gpio_pint_driver);
1137pint_error:
1138	platform_driver_unregister(&adi_pinctrl_driver);
1139
1140	return ret;
1141}
1142arch_initcall(adi_pinctrl_setup);
1143
1144MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
1145MODULE_DESCRIPTION("ADI gpio2 pin control driver");
1146MODULE_LICENSE("GPL");
1147