Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
[linux-2.6/btrfs-unstable.git] / drivers / pinctrl / pinctrl-adi2.c
blob7a39562c3e42f4f70fff0ffe3924edd6ba4ac609
1 /*
2 * Pinctrl Driver for ADI GPIO2 controller
4 * Copyright 2007-2013 Analog Devices Inc.
6 * Licensed under the GPLv2 or later
7 */
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"
30 According to the BF54x HRM, pint means "pin interrupt".
31 http://www.analog.com/static/imported-files/processor_manuals/ADSP-BF54x_hwr_rev1.2.pdf
33 ADSP-BF54x processor Blackfin processors have four SIC interrupt chan-
34 nels dedicated to pin interrupt purposes. These channels are managed by
35 four hardware blocks, called PINT0, PINT1, PINT2, and PINT3. Every PINTx
36 block can sense to up to 32 pins. While PINT0 and PINT1 can sense the
37 pins of port A and port B, PINT2 and PINT3 manage all the pins from port
38 C to port J as shown in Figure 9-2.
40 n BF54x HRM:
41 The ten GPIO ports are subdivided into 8-bit half ports, resulting in lower and
42 upper half 8-bit units. The PINTx_ASSIGN registers control the 8-bit multi-
43 plexers shown in Figure 9-3. Lower half units of eight pins can be
44 forwarded to either byte 0 or byte 2 of either associated PINTx block.
45 Upper half units can be forwarded to either byte 1 or byte 3 of the pin
46 interrupt blocks, without further restrictions.
48 All MMR registers in the pin interrupt module are 32 bits wide. To simply the
49 mapping logic, this driver only maps a 16-bit gpio port to the upper or lower
50 16 bits of a PINTx block. You can find the Figure 9-3 on page 583.
52 Each IRQ domain is binding to a GPIO bank device. 2 GPIO bank devices can map
53 to one PINT device. Two in "struct gpio_pint" are used to ease the PINT
54 interrupt handler.
56 The GPIO bank mapping to the lower 16 bits of the PINT device set its IRQ
57 domain pointer in domain[0]. The IRQ domain pointer of the other bank is set
58 to domain[1]. PINT interrupt handler adi_gpio_handle_pint_irq() finds out
59 the current domain pointer according to whether the interrupt request mask
60 is in lower 16 bits (domain[0]) or upper 16bits (domain[1]).
62 A PINT device is not part of a GPIO port device in Blackfin. Multiple GPIO
63 port devices can be mapped to the same PINT device.
67 static LIST_HEAD(adi_pint_list);
68 static LIST_HEAD(adi_gpio_port_list);
70 #define DRIVER_NAME "pinctrl-adi2"
72 #define PINT_HI_OFFSET 16
74 /**
75 * struct gpio_port_saved - GPIO port registers that should be saved between
76 * power suspend and resume operations.
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
84 struct gpio_port_saved {
85 u16 fer;
86 u16 data;
87 u16 dir;
88 u16 inen;
89 u32 mux;
92 /**
93 * struct gpio_pint - Pin interrupt controller device. Multiple ADI GPIO
94 * banks can be mapped into one Pin interrupt controller.
96 * @node: All gpio_pint instances are added to a global list.
97 * @base: PINT device register base address
98 * @irq: IRQ of the PINT device, it is the parent IRQ of all
99 * GPIO IRQs mapping to this device.
100 * @domain: [0] irq domain of the gpio port, whose hardware interrupts are
101 * mapping to the low 16-bit of the pint registers.
102 * [1] irq domain of the gpio port, whose hardware interrupts are
103 * mapping to the high 16-bit of the pint registers.
104 * @regs: address pointer to the PINT device
105 * @map_count: No more than 2 GPIO banks can be mapped to this PINT device.
106 * @lock: This lock make sure the irq_chip operations to one PINT device
107 * for different GPIO interrrupts are atomic.
108 * @pint_map_port: Set up the mapping between one PINT device and
109 * multiple GPIO banks.
111 struct gpio_pint {
112 struct list_head node;
113 void __iomem *base;
114 int irq;
115 struct irq_domain *domain[2];
116 struct gpio_pint_regs *regs;
117 struct adi_pm_pint_save saved_data;
118 int map_count;
119 spinlock_t lock;
121 int (*pint_map_port)(struct gpio_pint *pint, bool assign,
122 u8 map, struct irq_domain *domain);
126 * ADI pin controller
128 * @dev: a pointer back to containing device
129 * @pctl: the pinctrl device
130 * @soc: SoC data for this specific chip
132 struct adi_pinctrl {
133 struct device *dev;
134 struct pinctrl_dev *pctl;
135 const struct adi_pinctrl_soc_data *soc;
139 * struct gpio_port - GPIO bank device. Multiple ADI GPIO banks can be mapped
140 * into one pin interrupt controller.
142 * @node: All gpio_port instances are added to a list.
143 * @base: GPIO bank device register base address
144 * @irq_base: base IRQ of the GPIO bank device
145 * @width: PIN number of the GPIO bank device
146 * @regs: address pointer to the GPIO bank device
147 * @saved_data: registers that should be saved between PM operations.
148 * @dev: device structure of this GPIO bank
149 * @pint: GPIO PINT device that this GPIO bank mapped to
150 * @pint_map: GIOP bank mapping code in PINT device
151 * @pint_assign: The 32-bit PINT registers can be divided into 2 parts. A
152 * GPIO bank can be mapped into either low 16 bits[0] or high 16
153 * bits[1] of each PINT register.
154 * @lock: This lock make sure the irq_chip operations to one PINT device
155 * for different GPIO interrrupts are atomic.
156 * @chip: abstract a GPIO controller
157 * @domain: The irq domain owned by the GPIO port.
158 * @rsvmap: Reservation map array for each pin in the GPIO bank
160 struct gpio_port {
161 struct list_head node;
162 void __iomem *base;
163 unsigned int irq_base;
164 unsigned int width;
165 struct gpio_port_t *regs;
166 struct gpio_port_saved saved_data;
167 struct device *dev;
169 struct gpio_pint *pint;
170 u8 pint_map;
171 bool pint_assign;
173 spinlock_t lock;
174 struct gpio_chip chip;
175 struct irq_domain *domain;
178 static inline u8 pin_to_offset(struct pinctrl_gpio_range *range, unsigned pin)
180 return pin - range->pin_base;
183 static inline u32 hwirq_to_pintbit(struct gpio_port *port, int hwirq)
185 return port->pint_assign ? BIT(hwirq) << PINT_HI_OFFSET : BIT(hwirq);
188 static struct gpio_pint *find_gpio_pint(unsigned id)
190 struct gpio_pint *pint;
191 int i = 0;
193 list_for_each_entry(pint, &adi_pint_list, node) {
194 if (id == i)
195 return pint;
196 i++;
199 return NULL;
202 static inline void port_setup(struct gpio_port *port, unsigned offset,
203 bool use_for_gpio)
205 struct gpio_port_t *regs = port->regs;
207 if (use_for_gpio)
208 writew(readw(&regs->port_fer) & ~BIT(offset),
209 &regs->port_fer);
210 else
211 writew(readw(&regs->port_fer) | BIT(offset), &regs->port_fer);
214 static inline void portmux_setup(struct gpio_port *port, unsigned offset,
215 unsigned short function)
217 struct gpio_port_t *regs = port->regs;
218 u32 pmux;
220 pmux = readl(&regs->port_mux);
222 /* The function field of each pin has 2 consecutive bits in
223 * the mux register.
225 pmux &= ~(0x3 << (2 * offset));
226 pmux |= (function & 0x3) << (2 * offset);
228 writel(pmux, &regs->port_mux);
231 static inline u16 get_portmux(struct gpio_port *port, unsigned offset)
233 struct gpio_port_t *regs = port->regs;
234 u32 pmux = readl(&regs->port_mux);
236 /* The function field of each pin has 2 consecutive bits in
237 * the mux register.
239 return pmux >> (2 * offset) & 0x3;
242 static void adi_gpio_ack_irq(struct irq_data *d)
244 unsigned long flags;
245 struct gpio_port *port = irq_data_get_irq_chip_data(d);
246 struct gpio_pint_regs *regs = port->pint->regs;
247 unsigned pintbit = hwirq_to_pintbit(port, d->hwirq);
249 spin_lock_irqsave(&port->lock, flags);
250 spin_lock(&port->pint->lock);
252 if (irqd_get_trigger_type(d) == IRQ_TYPE_EDGE_BOTH) {
253 if (readl(&regs->invert_set) & pintbit)
254 writel(pintbit, &regs->invert_clear);
255 else
256 writel(pintbit, &regs->invert_set);
259 writel(pintbit, &regs->request);
261 spin_unlock(&port->pint->lock);
262 spin_unlock_irqrestore(&port->lock, flags);
265 static void adi_gpio_mask_ack_irq(struct irq_data *d)
267 unsigned long flags;
268 struct gpio_port *port = irq_data_get_irq_chip_data(d);
269 struct gpio_pint_regs *regs = port->pint->regs;
270 unsigned pintbit = hwirq_to_pintbit(port, d->hwirq);
272 spin_lock_irqsave(&port->lock, flags);
273 spin_lock(&port->pint->lock);
275 if (irqd_get_trigger_type(d) == IRQ_TYPE_EDGE_BOTH) {
276 if (readl(&regs->invert_set) & pintbit)
277 writel(pintbit, &regs->invert_clear);
278 else
279 writel(pintbit, &regs->invert_set);
282 writel(pintbit, &regs->request);
283 writel(pintbit, &regs->mask_clear);
285 spin_unlock(&port->pint->lock);
286 spin_unlock_irqrestore(&port->lock, flags);
289 static void adi_gpio_mask_irq(struct irq_data *d)
291 unsigned long flags;
292 struct gpio_port *port = irq_data_get_irq_chip_data(d);
293 struct gpio_pint_regs *regs = port->pint->regs;
295 spin_lock_irqsave(&port->lock, flags);
296 spin_lock(&port->pint->lock);
298 writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_clear);
300 spin_unlock(&port->pint->lock);
301 spin_unlock_irqrestore(&port->lock, flags);
304 static void adi_gpio_unmask_irq(struct irq_data *d)
306 unsigned long flags;
307 struct gpio_port *port = irq_data_get_irq_chip_data(d);
308 struct gpio_pint_regs *regs = port->pint->regs;
310 spin_lock_irqsave(&port->lock, flags);
311 spin_lock(&port->pint->lock);
313 writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_set);
315 spin_unlock(&port->pint->lock);
316 spin_unlock_irqrestore(&port->lock, flags);
319 static unsigned int adi_gpio_irq_startup(struct irq_data *d)
321 unsigned long flags;
322 struct gpio_port *port = irq_data_get_irq_chip_data(d);
323 struct gpio_pint_regs *regs;
325 if (!port) {
326 pr_err("GPIO IRQ %d :Not exist\n", d->irq);
327 return -ENODEV;
330 regs = port->pint->regs;
332 spin_lock_irqsave(&port->lock, flags);
333 spin_lock(&port->pint->lock);
335 port_setup(port, d->hwirq, true);
336 writew(BIT(d->hwirq), &port->regs->dir_clear);
337 writew(readw(&port->regs->inen) | BIT(d->hwirq), &port->regs->inen);
339 writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_set);
341 spin_unlock(&port->pint->lock);
342 spin_unlock_irqrestore(&port->lock, flags);
344 return 0;
347 static void adi_gpio_irq_shutdown(struct irq_data *d)
349 unsigned long flags;
350 struct gpio_port *port = irq_data_get_irq_chip_data(d);
351 struct gpio_pint_regs *regs = port->pint->regs;
353 spin_lock_irqsave(&port->lock, flags);
354 spin_lock(&port->pint->lock);
356 writel(hwirq_to_pintbit(port, d->hwirq), &regs->mask_clear);
358 spin_unlock(&port->pint->lock);
359 spin_unlock_irqrestore(&port->lock, flags);
362 static int adi_gpio_irq_type(struct irq_data *d, unsigned int type)
364 unsigned long flags;
365 struct gpio_port *port = irq_data_get_irq_chip_data(d);
366 struct gpio_pint_regs *pint_regs;
367 unsigned pintmask;
368 unsigned int irq = d->irq;
369 int ret = 0;
370 char buf[16];
372 if (!port) {
373 pr_err("GPIO IRQ %d :Not exist\n", d->irq);
374 return -ENODEV;
377 pint_regs = port->pint->regs;
379 pintmask = hwirq_to_pintbit(port, d->hwirq);
381 spin_lock_irqsave(&port->lock, flags);
382 spin_lock(&port->pint->lock);
384 /* In case of interrupt autodetect, set irq type to edge sensitive. */
385 if (type == IRQ_TYPE_PROBE)
386 type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
388 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING |
389 IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) {
390 snprintf(buf, 16, "gpio-irq%d", irq);
391 port_setup(port, d->hwirq, true);
392 } else
393 goto out;
395 /* The GPIO interrupt is triggered only when its input value
396 * transfer from 0 to 1. So, invert the input value if the
397 * irq type is low or falling
399 if ((type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW)))
400 writel(pintmask, &pint_regs->invert_set);
401 else
402 writel(pintmask, &pint_regs->invert_clear);
404 /* In edge sensitive case, if the input value of the requested irq
405 * is already 1, invert it.
407 if ((type & IRQ_TYPE_EDGE_BOTH) == IRQ_TYPE_EDGE_BOTH) {
408 if (gpio_get_value(port->chip.base + d->hwirq))
409 writel(pintmask, &pint_regs->invert_set);
410 else
411 writel(pintmask, &pint_regs->invert_clear);
414 if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
415 writel(pintmask, &pint_regs->edge_set);
416 __irq_set_handler_locked(irq, handle_edge_irq);
417 } else {
418 writel(pintmask, &pint_regs->edge_clear);
419 __irq_set_handler_locked(irq, handle_level_irq);
422 out:
423 spin_unlock(&port->pint->lock);
424 spin_unlock_irqrestore(&port->lock, flags);
426 return ret;
429 #ifdef CONFIG_PM
430 static int adi_gpio_set_wake(struct irq_data *d, unsigned int state)
432 struct gpio_port *port = irq_data_get_irq_chip_data(d);
434 if (!port || !port->pint || port->pint->irq != d->irq)
435 return -EINVAL;
437 #ifndef SEC_GCTL
438 adi_internal_set_wake(port->pint->irq, state);
439 #endif
441 return 0;
444 static int adi_pint_suspend(void)
446 struct gpio_pint *pint;
448 list_for_each_entry(pint, &adi_pint_list, node) {
449 writel(0xffffffff, &pint->regs->mask_clear);
450 pint->saved_data.assign = readl(&pint->regs->assign);
451 pint->saved_data.edge_set = readl(&pint->regs->edge_set);
452 pint->saved_data.invert_set = readl(&pint->regs->invert_set);
455 return 0;
458 static void adi_pint_resume(void)
460 struct gpio_pint *pint;
462 list_for_each_entry(pint, &adi_pint_list, node) {
463 writel(pint->saved_data.assign, &pint->regs->assign);
464 writel(pint->saved_data.edge_set, &pint->regs->edge_set);
465 writel(pint->saved_data.invert_set, &pint->regs->invert_set);
469 static int adi_gpio_suspend(void)
471 struct gpio_port *port;
473 list_for_each_entry(port, &adi_gpio_port_list, node) {
474 port->saved_data.fer = readw(&port->regs->port_fer);
475 port->saved_data.mux = readl(&port->regs->port_mux);
476 port->saved_data.data = readw(&port->regs->data);
477 port->saved_data.inen = readw(&port->regs->inen);
478 port->saved_data.dir = readw(&port->regs->dir_set);
481 return adi_pint_suspend();
484 static void adi_gpio_resume(void)
486 struct gpio_port *port;
488 adi_pint_resume();
490 list_for_each_entry(port, &adi_gpio_port_list, node) {
491 writel(port->saved_data.mux, &port->regs->port_mux);
492 writew(port->saved_data.fer, &port->regs->port_fer);
493 writew(port->saved_data.inen, &port->regs->inen);
494 writew(port->saved_data.data & port->saved_data.dir,
495 &port->regs->data_set);
496 writew(port->saved_data.dir, &port->regs->dir_set);
501 static struct syscore_ops gpio_pm_syscore_ops = {
502 .suspend = adi_gpio_suspend,
503 .resume = adi_gpio_resume,
505 #else /* CONFIG_PM */
506 #define adi_gpio_set_wake NULL
507 #endif /* CONFIG_PM */
509 #ifdef CONFIG_IRQ_PREFLOW_FASTEOI
510 static inline void preflow_handler(struct irq_desc *desc)
512 if (desc->preflow_handler)
513 desc->preflow_handler(&desc->irq_data);
515 #else
516 static inline void preflow_handler(struct irq_desc *desc) { }
517 #endif
519 static void adi_gpio_handle_pint_irq(unsigned int inta_irq,
520 struct irq_desc *desc)
522 u32 request;
523 u32 level_mask, hwirq;
524 bool umask = false;
525 struct gpio_pint *pint = irq_desc_get_handler_data(desc);
526 struct irq_chip *chip = irq_desc_get_chip(desc);
527 struct gpio_pint_regs *regs = pint->regs;
528 struct irq_domain *domain;
530 preflow_handler(desc);
531 chained_irq_enter(chip, desc);
533 request = readl(&regs->request);
534 level_mask = readl(&regs->edge_set) & request;
536 hwirq = 0;
537 domain = pint->domain[0];
538 while (request) {
539 /* domain pointer need to be changed only once at IRQ 16 when
540 * we go through IRQ requests from bit 0 to bit 31.
542 if (hwirq == PINT_HI_OFFSET)
543 domain = pint->domain[1];
545 if (request & 1) {
546 if (level_mask & BIT(hwirq)) {
547 umask = true;
548 chained_irq_exit(chip, desc);
550 generic_handle_irq(irq_find_mapping(domain,
551 hwirq % PINT_HI_OFFSET));
554 hwirq++;
555 request >>= 1;
558 if (!umask)
559 chained_irq_exit(chip, desc);
562 static struct irq_chip adi_gpio_irqchip = {
563 .name = "GPIO",
564 .irq_ack = adi_gpio_ack_irq,
565 .irq_mask = adi_gpio_mask_irq,
566 .irq_mask_ack = adi_gpio_mask_ack_irq,
567 .irq_unmask = adi_gpio_unmask_irq,
568 .irq_disable = adi_gpio_mask_irq,
569 .irq_enable = adi_gpio_unmask_irq,
570 .irq_set_type = adi_gpio_irq_type,
571 .irq_startup = adi_gpio_irq_startup,
572 .irq_shutdown = adi_gpio_irq_shutdown,
573 .irq_set_wake = adi_gpio_set_wake,
576 static int adi_get_groups_count(struct pinctrl_dev *pctldev)
578 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
580 return pinctrl->soc->ngroups;
583 static const char *adi_get_group_name(struct pinctrl_dev *pctldev,
584 unsigned selector)
586 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
588 return pinctrl->soc->groups[selector].name;
591 static int adi_get_group_pins(struct pinctrl_dev *pctldev, unsigned selector,
592 const unsigned **pins,
593 unsigned *num_pins)
595 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
597 *pins = pinctrl->soc->groups[selector].pins;
598 *num_pins = pinctrl->soc->groups[selector].num;
599 return 0;
602 static struct pinctrl_ops adi_pctrl_ops = {
603 .get_groups_count = adi_get_groups_count,
604 .get_group_name = adi_get_group_name,
605 .get_group_pins = adi_get_group_pins,
608 static int adi_pinmux_enable(struct pinctrl_dev *pctldev, unsigned selector,
609 unsigned group)
611 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
612 struct gpio_port *port;
613 struct pinctrl_gpio_range *range;
614 unsigned long flags;
615 unsigned short *mux, pin;
617 mux = (unsigned short *)pinctrl->soc->functions[selector].mux;
619 while (*mux) {
620 pin = P_IDENT(*mux);
622 range = pinctrl_find_gpio_range_from_pin(pctldev, pin);
623 if (range == NULL) /* should not happen */
624 return -ENODEV;
626 port = container_of(range->gc, struct gpio_port, chip);
628 spin_lock_irqsave(&port->lock, flags);
630 portmux_setup(port, pin_to_offset(range, pin),
631 P_FUNCT2MUX(*mux));
632 port_setup(port, pin_to_offset(range, pin), false);
633 mux++;
635 spin_unlock_irqrestore(&port->lock, flags);
638 return 0;
641 static void adi_pinmux_disable(struct pinctrl_dev *pctldev, unsigned selector,
642 unsigned group)
644 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
645 struct gpio_port *port;
646 struct pinctrl_gpio_range *range;
647 unsigned long flags;
648 unsigned short *mux, pin;
650 mux = (unsigned short *)pinctrl->soc->functions[selector].mux;
652 while (*mux) {
653 pin = P_IDENT(*mux);
655 range = pinctrl_find_gpio_range_from_pin(pctldev, pin);
656 if (range == NULL) /* should not happen */
657 return;
659 port = container_of(range->gc, struct gpio_port, chip);
661 spin_lock_irqsave(&port->lock, flags);
663 port_setup(port, pin_to_offset(range, pin), true);
664 mux++;
666 spin_unlock_irqrestore(&port->lock, flags);
670 static int adi_pinmux_get_funcs_count(struct pinctrl_dev *pctldev)
672 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
674 return pinctrl->soc->nfunctions;
677 static const char *adi_pinmux_get_func_name(struct pinctrl_dev *pctldev,
678 unsigned selector)
680 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
682 return pinctrl->soc->functions[selector].name;
685 static int adi_pinmux_get_groups(struct pinctrl_dev *pctldev, unsigned selector,
686 const char * const **groups,
687 unsigned * const num_groups)
689 struct adi_pinctrl *pinctrl = pinctrl_dev_get_drvdata(pctldev);
691 *groups = pinctrl->soc->functions[selector].groups;
692 *num_groups = pinctrl->soc->functions[selector].num_groups;
693 return 0;
696 static int adi_pinmux_request_gpio(struct pinctrl_dev *pctldev,
697 struct pinctrl_gpio_range *range, unsigned pin)
699 struct gpio_port *port;
700 unsigned long flags;
701 u8 offset;
703 port = container_of(range->gc, struct gpio_port, chip);
704 offset = pin_to_offset(range, pin);
706 spin_lock_irqsave(&port->lock, flags);
708 port_setup(port, offset, true);
710 spin_unlock_irqrestore(&port->lock, flags);
712 return 0;
715 static struct pinmux_ops adi_pinmux_ops = {
716 .enable = adi_pinmux_enable,
717 .disable = adi_pinmux_disable,
718 .get_functions_count = adi_pinmux_get_funcs_count,
719 .get_function_name = adi_pinmux_get_func_name,
720 .get_function_groups = adi_pinmux_get_groups,
721 .gpio_request_enable = adi_pinmux_request_gpio,
725 static struct pinctrl_desc adi_pinmux_desc = {
726 .name = DRIVER_NAME,
727 .pctlops = &adi_pctrl_ops,
728 .pmxops = &adi_pinmux_ops,
729 .owner = THIS_MODULE,
732 static int adi_gpio_request(struct gpio_chip *chip, unsigned offset)
734 return pinctrl_request_gpio(chip->base + offset);
737 static void adi_gpio_free(struct gpio_chip *chip, unsigned offset)
739 pinctrl_free_gpio(chip->base + offset);
742 static int adi_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
744 struct gpio_port *port;
745 unsigned long flags;
747 port = container_of(chip, struct gpio_port, chip);
749 spin_lock_irqsave(&port->lock, flags);
751 writew(BIT(offset), &port->regs->dir_clear);
752 writew(readw(&port->regs->inen) | BIT(offset), &port->regs->inen);
754 spin_unlock_irqrestore(&port->lock, flags);
756 return 0;
759 static void adi_gpio_set_value(struct gpio_chip *chip, unsigned offset,
760 int value)
762 struct gpio_port *port = container_of(chip, struct gpio_port, chip);
763 struct gpio_port_t *regs = port->regs;
764 unsigned long flags;
766 spin_lock_irqsave(&port->lock, flags);
768 if (value)
769 writew(BIT(offset), &regs->data_set);
770 else
771 writew(BIT(offset), &regs->data_clear);
773 spin_unlock_irqrestore(&port->lock, flags);
776 static int adi_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
777 int value)
779 struct gpio_port *port = container_of(chip, struct gpio_port, chip);
780 struct gpio_port_t *regs = port->regs;
781 unsigned long flags;
783 spin_lock_irqsave(&port->lock, flags);
785 writew(readw(&regs->inen) & ~BIT(offset), &regs->inen);
786 if (value)
787 writew(BIT(offset), &regs->data_set);
788 else
789 writew(BIT(offset), &regs->data_clear);
790 writew(BIT(offset), &regs->dir_set);
792 spin_unlock_irqrestore(&port->lock, flags);
794 return 0;
797 static int adi_gpio_get_value(struct gpio_chip *chip, unsigned offset)
799 struct gpio_port *port = container_of(chip, struct gpio_port, chip);
800 struct gpio_port_t *regs = port->regs;
801 unsigned long flags;
802 int ret;
804 spin_lock_irqsave(&port->lock, flags);
806 ret = !!(readw(&regs->data) & BIT(offset));
808 spin_unlock_irqrestore(&port->lock, flags);
810 return ret;
813 static int adi_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
815 struct gpio_port *port = container_of(chip, struct gpio_port, chip);
817 if (port->irq_base >= 0)
818 return irq_find_mapping(port->domain, offset);
819 else
820 return irq_create_mapping(port->domain, offset);
823 static int adi_pint_map_port(struct gpio_pint *pint, bool assign, u8 map,
824 struct irq_domain *domain)
826 struct gpio_pint_regs *regs = pint->regs;
827 u32 map_mask;
829 if (pint->map_count > 1)
830 return -EINVAL;
832 pint->map_count++;
834 /* The map_mask of each gpio port is a 16-bit duplicate
835 * of the 8-bit map. It can be set to either high 16 bits or low
836 * 16 bits of the pint assignment register.
838 map_mask = (map << 8) | map;
839 if (assign) {
840 map_mask <<= PINT_HI_OFFSET;
841 writel((readl(&regs->assign) & 0xFFFF) | map_mask,
842 &regs->assign);
843 } else
844 writel((readl(&regs->assign) & 0xFFFF0000) | map_mask,
845 &regs->assign);
847 pint->domain[assign] = domain;
849 return 0;
852 static int adi_gpio_pint_probe(struct platform_device *pdev)
854 struct device *dev = &pdev->dev;
855 struct resource *res;
856 struct gpio_pint *pint;
858 pint = devm_kzalloc(dev, sizeof(struct gpio_pint), GFP_KERNEL);
859 if (!pint) {
860 dev_err(dev, "Memory alloc failed\n");
861 return -ENOMEM;
864 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
865 pint->base = devm_ioremap_resource(dev, res);
866 if (IS_ERR(pint->base))
867 return PTR_ERR(pint->base);
869 pint->regs = (struct gpio_pint_regs *)pint->base;
871 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
872 if (!res) {
873 dev_err(dev, "Invalid IRQ resource\n");
874 return -ENODEV;
877 spin_lock_init(&pint->lock);
879 pint->irq = res->start;
880 pint->pint_map_port = adi_pint_map_port;
881 platform_set_drvdata(pdev, pint);
883 irq_set_chained_handler(pint->irq, adi_gpio_handle_pint_irq);
884 irq_set_handler_data(pint->irq, pint);
886 list_add_tail(&pint->node, &adi_pint_list);
888 return 0;
891 static int adi_gpio_pint_remove(struct platform_device *pdev)
893 struct gpio_pint *pint = platform_get_drvdata(pdev);
895 list_del(&pint->node);
896 irq_set_handler(pint->irq, handle_simple_irq);
898 return 0;
901 static int adi_gpio_irq_map(struct irq_domain *d, unsigned int irq,
902 irq_hw_number_t hwirq)
904 struct gpio_port *port = d->host_data;
906 if (!port)
907 return -EINVAL;
909 irq_set_chip_data(irq, port);
910 irq_set_chip_and_handler(irq, &adi_gpio_irqchip,
911 handle_level_irq);
913 return 0;
916 const struct irq_domain_ops adi_gpio_irq_domain_ops = {
917 .map = adi_gpio_irq_map,
918 .xlate = irq_domain_xlate_onecell,
921 static int adi_gpio_init_int(struct gpio_port *port)
923 struct device_node *node = port->dev->of_node;
924 struct gpio_pint *pint = port->pint;
925 int ret;
927 port->domain = irq_domain_add_linear(node, port->width,
928 &adi_gpio_irq_domain_ops, port);
929 if (!port->domain) {
930 dev_err(port->dev, "Failed to create irqdomain\n");
931 return -ENOSYS;
934 /* According to BF54x and BF60x HRM, pin interrupt devices are not
935 * part of the GPIO port device. in GPIO interrupt mode, the GPIO
936 * pins of multiple port devices can be routed into one pin interrupt
937 * device. The mapping can be configured by setting pint assignment
938 * register with the mapping value of different GPIO port. This is
939 * done via function pint_map_port().
941 ret = pint->pint_map_port(port->pint, port->pint_assign,
942 port->pint_map, port->domain);
943 if (ret)
944 return ret;
946 if (port->irq_base >= 0) {
947 ret = irq_create_strict_mappings(port->domain, port->irq_base,
948 0, port->width);
949 if (ret) {
950 dev_err(port->dev, "Couldn't associate to domain\n");
951 return ret;
955 return 0;
958 #define DEVNAME_SIZE 16
960 static int adi_gpio_probe(struct platform_device *pdev)
962 struct device *dev = &pdev->dev;
963 const struct adi_pinctrl_gpio_platform_data *pdata;
964 struct resource *res;
965 struct gpio_port *port;
966 char pinctrl_devname[DEVNAME_SIZE];
967 static int gpio;
968 int ret = 0, ret1;
970 pdata = dev->platform_data;
971 if (!pdata)
972 return -EINVAL;
974 port = devm_kzalloc(dev, sizeof(struct gpio_port), GFP_KERNEL);
975 if (!port) {
976 dev_err(dev, "Memory alloc failed\n");
977 return -ENOMEM;
980 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
981 port->base = devm_ioremap_resource(dev, res);
982 if (IS_ERR(port->base))
983 return PTR_ERR(port->base);
985 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
986 if (!res)
987 port->irq_base = -1;
988 else
989 port->irq_base = res->start;
991 port->width = pdata->port_width;
992 port->dev = dev;
993 port->regs = (struct gpio_port_t *)port->base;
994 port->pint_assign = pdata->pint_assign;
995 port->pint_map = pdata->pint_map;
997 port->pint = find_gpio_pint(pdata->pint_id);
998 if (port->pint) {
999 ret = adi_gpio_init_int(port);
1000 if (ret)
1001 return ret;
1004 spin_lock_init(&port->lock);
1006 platform_set_drvdata(pdev, port);
1008 port->chip.label = "adi-gpio";
1009 port->chip.direction_input = adi_gpio_direction_input;
1010 port->chip.get = adi_gpio_get_value;
1011 port->chip.direction_output = adi_gpio_direction_output;
1012 port->chip.set = adi_gpio_set_value;
1013 port->chip.request = adi_gpio_request;
1014 port->chip.free = adi_gpio_free;
1015 port->chip.to_irq = adi_gpio_to_irq;
1016 if (pdata->port_gpio_base > 0)
1017 port->chip.base = pdata->port_gpio_base;
1018 else
1019 port->chip.base = gpio;
1020 port->chip.ngpio = port->width;
1021 gpio = port->chip.base + port->width;
1023 ret = gpiochip_add(&port->chip);
1024 if (ret) {
1025 dev_err(&pdev->dev, "Fail to add GPIO chip.\n");
1026 goto out_remove_domain;
1029 /* Add gpio pin range */
1030 snprintf(pinctrl_devname, DEVNAME_SIZE, "pinctrl-adi2.%d",
1031 pdata->pinctrl_id);
1032 pinctrl_devname[DEVNAME_SIZE - 1] = 0;
1033 ret = gpiochip_add_pin_range(&port->chip, pinctrl_devname,
1034 0, pdata->port_pin_base, port->width);
1035 if (ret) {
1036 dev_err(&pdev->dev, "Fail to add pin range to %s.\n",
1037 pinctrl_devname);
1038 goto out_remove_gpiochip;
1041 list_add_tail(&port->node, &adi_gpio_port_list);
1043 return 0;
1045 out_remove_gpiochip:
1046 ret1 = gpiochip_remove(&port->chip);
1047 out_remove_domain:
1048 if (port->pint)
1049 irq_domain_remove(port->domain);
1051 return ret;
1054 static int adi_gpio_remove(struct platform_device *pdev)
1056 struct gpio_port *port = platform_get_drvdata(pdev);
1057 int ret;
1058 u8 offset;
1060 list_del(&port->node);
1061 gpiochip_remove_pin_ranges(&port->chip);
1062 ret = gpiochip_remove(&port->chip);
1063 if (port->pint) {
1064 for (offset = 0; offset < port->width; offset++)
1065 irq_dispose_mapping(irq_find_mapping(port->domain,
1066 offset));
1067 irq_domain_remove(port->domain);
1070 return ret;
1073 static int adi_pinctrl_probe(struct platform_device *pdev)
1075 struct adi_pinctrl *pinctrl;
1077 pinctrl = devm_kzalloc(&pdev->dev, sizeof(*pinctrl), GFP_KERNEL);
1078 if (!pinctrl)
1079 return -ENOMEM;
1081 pinctrl->dev = &pdev->dev;
1083 adi_pinctrl_soc_init(&pinctrl->soc);
1085 adi_pinmux_desc.pins = pinctrl->soc->pins;
1086 adi_pinmux_desc.npins = pinctrl->soc->npins;
1088 /* Now register the pin controller and all pins it handles */
1089 pinctrl->pctl = pinctrl_register(&adi_pinmux_desc, &pdev->dev, pinctrl);
1090 if (!pinctrl->pctl) {
1091 dev_err(&pdev->dev, "could not register pinctrl ADI2 driver\n");
1092 return -EINVAL;
1095 platform_set_drvdata(pdev, pinctrl);
1097 return 0;
1100 static int adi_pinctrl_remove(struct platform_device *pdev)
1102 struct adi_pinctrl *pinctrl = platform_get_drvdata(pdev);
1104 pinctrl_unregister(pinctrl->pctl);
1106 return 0;
1109 static struct platform_driver adi_pinctrl_driver = {
1110 .probe = adi_pinctrl_probe,
1111 .remove = adi_pinctrl_remove,
1112 .driver = {
1113 .name = DRIVER_NAME,
1117 static struct platform_driver adi_gpio_pint_driver = {
1118 .probe = adi_gpio_pint_probe,
1119 .remove = adi_gpio_pint_remove,
1120 .driver = {
1121 .name = "adi-gpio-pint",
1125 static struct platform_driver adi_gpio_driver = {
1126 .probe = adi_gpio_probe,
1127 .remove = adi_gpio_remove,
1128 .driver = {
1129 .name = "adi-gpio",
1133 static int __init adi_pinctrl_setup(void)
1135 int ret;
1137 ret = platform_driver_register(&adi_pinctrl_driver);
1138 if (ret)
1139 return ret;
1141 ret = platform_driver_register(&adi_gpio_pint_driver);
1142 if (ret)
1143 goto pint_error;
1145 ret = platform_driver_register(&adi_gpio_driver);
1146 if (ret)
1147 goto gpio_error;
1149 #ifdef CONFIG_PM
1150 register_syscore_ops(&gpio_pm_syscore_ops);
1151 #endif
1152 return ret;
1153 gpio_error:
1154 platform_driver_unregister(&adi_gpio_pint_driver);
1155 pint_error:
1156 platform_driver_unregister(&adi_pinctrl_driver);
1158 return ret;
1160 arch_initcall(adi_pinctrl_setup);
1162 MODULE_AUTHOR("Sonic Zhang <sonic.zhang@analog.com>");
1163 MODULE_DESCRIPTION("ADI gpio2 pin control driver");
1164 MODULE_LICENSE("GPL");