2 * Atmel PIO2 Port Multiplexer support
4 * Copyright (C) 2004-2006 Atmel Corporation
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #include <linux/clk.h>
12 #include <linux/debugfs.h>
13 #include <linux/export.h>
15 #include <linux/platform_device.h>
16 #include <linux/irq.h>
21 #include <mach/portmux.h>
25 #define MAX_NR_PIO_DEVICES 8
28 struct gpio_chip chip
;
30 const struct platform_device
*pdev
;
36 static struct pio_device pio_dev
[MAX_NR_PIO_DEVICES
];
38 static struct pio_device
*gpio_to_pio(unsigned int gpio
)
40 struct pio_device
*pio
;
44 if (index
>= MAX_NR_PIO_DEVICES
)
46 pio
= &pio_dev
[index
];
53 /* Pin multiplexing API */
54 static DEFINE_SPINLOCK(pio_lock
);
56 void __init
at32_select_periph(unsigned int port
, u32 pin_mask
,
57 unsigned int periph
, unsigned long flags
)
59 struct pio_device
*pio
;
61 /* assign and verify pio */
62 pio
= gpio_to_pio(port
);
64 printk(KERN_WARNING
"pio: invalid port %u\n", port
);
68 /* Test if any of the requested pins is already muxed */
70 if (unlikely(pio
->pinmux_mask
& pin_mask
)) {
71 printk(KERN_WARNING
"%s: pin(s) busy (requested 0x%x, busy 0x%x)\n",
72 pio
->name
, pin_mask
, pio
->pinmux_mask
& pin_mask
);
73 spin_unlock(&pio_lock
);
77 pio
->pinmux_mask
|= pin_mask
;
80 pio_writel(pio
, PUER
, pin_mask
);
82 /* select either peripheral A or B */
84 pio_writel(pio
, BSR
, pin_mask
);
86 pio_writel(pio
, ASR
, pin_mask
);
88 /* enable peripheral control */
89 pio_writel(pio
, PDR
, pin_mask
);
91 /* Disable pull ups if not requested. */
92 if (!(flags
& AT32_GPIOF_PULLUP
))
93 pio_writel(pio
, PUDR
, pin_mask
);
95 spin_unlock(&pio_lock
);
103 void __init
at32_select_gpio(unsigned int pin
, unsigned long flags
)
105 struct pio_device
*pio
;
106 unsigned int pin_index
= pin
& 0x1f;
107 u32 mask
= 1 << pin_index
;
109 pio
= gpio_to_pio(pin
);
110 if (unlikely(!pio
)) {
111 printk("pio: invalid pin %u\n", pin
);
115 if (unlikely(test_and_set_bit(pin_index
, &pio
->pinmux_mask
))) {
116 printk("%s: pin %u is busy\n", pio
->name
, pin_index
);
120 if (flags
& AT32_GPIOF_OUTPUT
) {
121 if (flags
& AT32_GPIOF_HIGH
)
122 pio_writel(pio
, SODR
, mask
);
124 pio_writel(pio
, CODR
, mask
);
125 if (flags
& AT32_GPIOF_MULTIDRV
)
126 pio_writel(pio
, MDER
, mask
);
128 pio_writel(pio
, MDDR
, mask
);
129 pio_writel(pio
, PUDR
, mask
);
130 pio_writel(pio
, OER
, mask
);
132 if (flags
& AT32_GPIOF_PULLUP
)
133 pio_writel(pio
, PUER
, mask
);
135 pio_writel(pio
, PUDR
, mask
);
136 if (flags
& AT32_GPIOF_DEGLITCH
)
137 pio_writel(pio
, IFER
, mask
);
139 pio_writel(pio
, IFDR
, mask
);
140 pio_writel(pio
, ODR
, mask
);
143 pio_writel(pio
, PER
, mask
);
152 * Undo a previous pin reservation. Will not affect the hardware
155 void at32_deselect_pin(unsigned int pin
)
157 struct pio_device
*pio
;
158 unsigned int pin_index
= pin
& 0x1f;
160 pio
= gpio_to_pio(pin
);
161 if (unlikely(!pio
)) {
162 printk("pio: invalid pin %u\n", pin
);
167 clear_bit(pin_index
, &pio
->pinmux_mask
);
170 /* Reserve a pin, preventing anyone else from changing its configuration. */
171 void __init
at32_reserve_pin(unsigned int port
, u32 pin_mask
)
173 struct pio_device
*pio
;
175 /* assign and verify pio */
176 pio
= gpio_to_pio(port
);
177 if (unlikely(!pio
)) {
178 printk(KERN_WARNING
"pio: invalid port %u\n", port
);
182 /* Test if any of the requested pins is already muxed */
183 spin_lock(&pio_lock
);
184 if (unlikely(pio
->pinmux_mask
& pin_mask
)) {
185 printk(KERN_WARNING
"%s: pin(s) busy (req. 0x%x, busy 0x%x)\n",
186 pio
->name
, pin_mask
, pio
->pinmux_mask
& pin_mask
);
187 spin_unlock(&pio_lock
);
192 pio
->pinmux_mask
|= pin_mask
;
193 spin_unlock(&pio_lock
);
200 /*--------------------------------------------------------------------------*/
204 static int direction_input(struct gpio_chip
*chip
, unsigned offset
)
206 struct pio_device
*pio
= container_of(chip
, struct pio_device
, chip
);
207 u32 mask
= 1 << offset
;
209 if (!(pio_readl(pio
, PSR
) & mask
))
212 pio_writel(pio
, ODR
, mask
);
216 static int gpio_get(struct gpio_chip
*chip
, unsigned offset
)
218 struct pio_device
*pio
= container_of(chip
, struct pio_device
, chip
);
220 return (pio_readl(pio
, PDSR
) >> offset
) & 1;
223 static void gpio_set(struct gpio_chip
*chip
, unsigned offset
, int value
);
225 static int direction_output(struct gpio_chip
*chip
, unsigned offset
, int value
)
227 struct pio_device
*pio
= container_of(chip
, struct pio_device
, chip
);
228 u32 mask
= 1 << offset
;
230 if (!(pio_readl(pio
, PSR
) & mask
))
233 gpio_set(chip
, offset
, value
);
234 pio_writel(pio
, OER
, mask
);
238 static void gpio_set(struct gpio_chip
*chip
, unsigned offset
, int value
)
240 struct pio_device
*pio
= container_of(chip
, struct pio_device
, chip
);
241 u32 mask
= 1 << offset
;
244 pio_writel(pio
, SODR
, mask
);
246 pio_writel(pio
, CODR
, mask
);
249 /*--------------------------------------------------------------------------*/
251 /* GPIO IRQ support */
253 static void gpio_irq_mask(struct irq_data
*d
)
255 unsigned gpio
= irq_to_gpio(d
->irq
);
256 struct pio_device
*pio
= &pio_dev
[gpio
>> 5];
258 pio_writel(pio
, IDR
, 1 << (gpio
& 0x1f));
261 static void gpio_irq_unmask(struct irq_data
*d
)
263 unsigned gpio
= irq_to_gpio(d
->irq
);
264 struct pio_device
*pio
= &pio_dev
[gpio
>> 5];
266 pio_writel(pio
, IER
, 1 << (gpio
& 0x1f));
269 static int gpio_irq_type(struct irq_data
*d
, unsigned type
)
271 if (type
!= IRQ_TYPE_EDGE_BOTH
&& type
!= IRQ_TYPE_NONE
)
277 static struct irq_chip gpio_irqchip
= {
279 .irq_mask
= gpio_irq_mask
,
280 .irq_unmask
= gpio_irq_unmask
,
281 .irq_set_type
= gpio_irq_type
,
284 static void gpio_irq_handler(unsigned irq
, struct irq_desc
*desc
)
286 struct pio_device
*pio
= irq_desc_get_chip_data(desc
);
289 gpio_irq
= (unsigned) irq_get_handler_data(irq
);
293 /* ack pending GPIO interrupts */
294 isr
= pio_readl(pio
, ISR
) & pio_readl(pio
, IMR
);
304 generic_handle_irq(i
);
310 gpio_irq_setup(struct pio_device
*pio
, int irq
, int gpio_irq
)
314 irq_set_chip_data(irq
, pio
);
315 irq_set_handler_data(irq
, (void *)gpio_irq
);
317 for (i
= 0; i
< 32; i
++, gpio_irq
++) {
318 irq_set_chip_data(gpio_irq
, pio
);
319 irq_set_chip_and_handler(gpio_irq
, &gpio_irqchip
,
323 irq_set_chained_handler(irq
, gpio_irq_handler
);
326 /*--------------------------------------------------------------------------*/
328 #ifdef CONFIG_DEBUG_FS
330 #include <linux/seq_file.h>
333 * This shows more info than the generic gpio dump code:
334 * pullups, deglitching, open drain drive.
336 static void pio_bank_show(struct seq_file
*s
, struct gpio_chip
*chip
)
338 struct pio_device
*pio
= container_of(chip
, struct pio_device
, chip
);
339 u32 psr
, osr
, imr
, pdsr
, pusr
, ifsr
, mdsr
;
344 psr
= pio_readl(pio
, PSR
);
345 osr
= pio_readl(pio
, OSR
);
346 imr
= pio_readl(pio
, IMR
);
347 pdsr
= pio_readl(pio
, PDSR
);
348 pusr
= pio_readl(pio
, PUSR
);
349 ifsr
= pio_readl(pio
, IFSR
);
350 mdsr
= pio_readl(pio
, MDSR
);
352 bank
= 'A' + pio
->pdev
->id
;
354 for (i
= 0, mask
= 1; i
< 32; i
++, mask
<<= 1) {
357 label
= gpiochip_is_requested(chip
, i
);
358 if (!label
&& (imr
& mask
))
363 seq_printf(s
, " gpio-%-3d P%c%-2d (%-12s) %s %s %s",
364 chip
->base
+ i
, bank
, i
,
366 (osr
& mask
) ? "out" : "in ",
367 (mask
& pdsr
) ? "hi" : "lo",
368 (mask
& pusr
) ? " " : "up");
370 seq_printf(s
, " deglitch");
371 if ((osr
& mdsr
) & mask
)
372 seq_printf(s
, " open-drain");
374 seq_printf(s
, " irq-%d edge-both",
375 gpio_to_irq(chip
->base
+ i
));
381 #define pio_bank_show NULL
385 /*--------------------------------------------------------------------------*/
387 static int __init
pio_probe(struct platform_device
*pdev
)
389 struct pio_device
*pio
= NULL
;
390 int irq
= platform_get_irq(pdev
, 0);
391 int gpio_irq_base
= GPIO_IRQ_BASE
+ pdev
->id
* 32;
393 BUG_ON(pdev
->id
>= MAX_NR_PIO_DEVICES
);
394 pio
= &pio_dev
[pdev
->id
];
397 pio
->chip
.label
= pio
->name
;
398 pio
->chip
.base
= pdev
->id
* 32;
399 pio
->chip
.ngpio
= 32;
400 pio
->chip
.dev
= &pdev
->dev
;
401 pio
->chip
.owner
= THIS_MODULE
;
403 pio
->chip
.direction_input
= direction_input
;
404 pio
->chip
.get
= gpio_get
;
405 pio
->chip
.direction_output
= direction_output
;
406 pio
->chip
.set
= gpio_set
;
407 pio
->chip
.dbg_show
= pio_bank_show
;
409 gpiochip_add(&pio
->chip
);
411 gpio_irq_setup(pio
, irq
, gpio_irq_base
);
413 platform_set_drvdata(pdev
, pio
);
415 printk(KERN_DEBUG
"%s: base 0x%p, irq %d chains %d..%d\n",
416 pio
->name
, pio
->regs
, irq
, gpio_irq_base
, gpio_irq_base
+ 31);
421 static struct platform_driver pio_driver
= {
427 static int __init
pio_init(void)
429 return platform_driver_probe(&pio_driver
, pio_probe
);
431 postcore_initcall(pio_init
);
433 void __init
at32_init_pio(struct platform_device
*pdev
)
435 struct resource
*regs
;
436 struct pio_device
*pio
;
438 if (pdev
->id
> MAX_NR_PIO_DEVICES
) {
439 dev_err(&pdev
->dev
, "only %d PIO devices supported\n",
444 pio
= &pio_dev
[pdev
->id
];
445 snprintf(pio
->name
, sizeof(pio
->name
), "pio%d", pdev
->id
);
447 regs
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
449 dev_err(&pdev
->dev
, "no mmio resource defined\n");
453 pio
->clk
= clk_get(&pdev
->dev
, "mck");
454 if (IS_ERR(pio
->clk
))
456 * This is a fatal error, but if we continue we might
457 * be so lucky that we manage to initialize the
458 * console and display this message...
460 dev_err(&pdev
->dev
, "no mck clock defined\n");
462 clk_enable(pio
->clk
);
465 pio
->regs
= ioremap(regs
->start
, resource_size(regs
));
467 /* start with irqs disabled and acked */
468 pio_writel(pio
, IDR
, ~0UL);
469 (void) pio_readl(pio
, ISR
);