2 * Toumaz Xenif TZ1090 GPIO handling.
4 * Copyright (C) 2008-2013 Imagination Technologies Ltd.
6 * Based on ARM PXA code and others.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
13 #include <linux/bitops.h>
14 #include <linux/export.h>
15 #include <linux/gpio.h>
16 #include <linux/interrupt.h>
18 #include <linux/irq.h>
19 #include <linux/irqdomain.h>
20 #include <linux/kernel.h>
21 #include <linux/of_irq.h>
22 #include <linux/pinctrl/consumer.h>
23 #include <linux/platform_device.h>
24 #include <linux/slab.h>
25 #include <linux/syscore_ops.h>
26 #include <asm/global_lock.h>
28 /* Register offsets from bank base address */
29 #define REG_GPIO_DIR 0x00
30 #define REG_GPIO_IRQ_PLRT 0x20
31 #define REG_GPIO_IRQ_TYPE 0x30
32 #define REG_GPIO_IRQ_EN 0x40
33 #define REG_GPIO_IRQ_STS 0x50
34 #define REG_GPIO_BIT_EN 0x60
35 #define REG_GPIO_DIN 0x70
36 #define REG_GPIO_DOUT 0x80
38 /* REG_GPIO_IRQ_PLRT */
39 #define REG_GPIO_IRQ_PLRT_LOW 0
40 #define REG_GPIO_IRQ_PLRT_HIGH 1
42 /* REG_GPIO_IRQ_TYPE */
43 #define REG_GPIO_IRQ_TYPE_LEVEL 0
44 #define REG_GPIO_IRQ_TYPE_EDGE 1
47 * struct tz1090_gpio_bank - GPIO bank private data
48 * @chip: Generic GPIO chip for GPIO bank
49 * @domain: IRQ domain for GPIO bank (may be NULL)
50 * @reg: Base of registers, offset for this GPIO bank
51 * @irq: IRQ number for GPIO bank
52 * @label: Debug GPIO bank label, used for storage of chip->label
54 * This is the main private data for a GPIO bank. It encapsulates a gpio_chip,
55 * and the callbacks for the gpio_chip can access the private data with the
56 * to_bank() macro below.
58 struct tz1090_gpio_bank
{
59 struct gpio_chip chip
;
60 struct irq_domain
*domain
;
67 * struct tz1090_gpio - Overall GPIO device private data
68 * @dev: Device (from platform device)
69 * @reg: Base of GPIO registers
71 * Represents the overall GPIO device. This structure is actually only
72 * temporary, and used during init.
80 * struct tz1090_gpio_bank_info - Temporary registration info for GPIO bank
81 * @priv: Overall GPIO device private data
82 * @node: Device tree node specific to this GPIO bank
83 * @index: Index of bank in range 0-2
85 struct tz1090_gpio_bank_info
{
86 struct tz1090_gpio
*priv
;
87 struct device_node
*node
;
91 /* Convenience register accessors */
92 static inline void tz1090_gpio_write(struct tz1090_gpio_bank
*bank
,
93 unsigned int reg_offs
, u32 data
)
95 iowrite32(data
, bank
->reg
+ reg_offs
);
98 static inline u32
tz1090_gpio_read(struct tz1090_gpio_bank
*bank
,
99 unsigned int reg_offs
)
101 return ioread32(bank
->reg
+ reg_offs
);
104 /* caller must hold LOCK2 */
105 static inline void _tz1090_gpio_clear_bit(struct tz1090_gpio_bank
*bank
,
106 unsigned int reg_offs
,
111 value
= tz1090_gpio_read(bank
, reg_offs
);
112 value
&= ~BIT(offset
);
113 tz1090_gpio_write(bank
, reg_offs
, value
);
116 static void tz1090_gpio_clear_bit(struct tz1090_gpio_bank
*bank
,
117 unsigned int reg_offs
,
122 __global_lock2(lstat
);
123 _tz1090_gpio_clear_bit(bank
, reg_offs
, offset
);
124 __global_unlock2(lstat
);
127 /* caller must hold LOCK2 */
128 static inline void _tz1090_gpio_set_bit(struct tz1090_gpio_bank
*bank
,
129 unsigned int reg_offs
,
134 value
= tz1090_gpio_read(bank
, reg_offs
);
135 value
|= BIT(offset
);
136 tz1090_gpio_write(bank
, reg_offs
, value
);
139 static void tz1090_gpio_set_bit(struct tz1090_gpio_bank
*bank
,
140 unsigned int reg_offs
,
145 __global_lock2(lstat
);
146 _tz1090_gpio_set_bit(bank
, reg_offs
, offset
);
147 __global_unlock2(lstat
);
150 /* caller must hold LOCK2 */
151 static inline void _tz1090_gpio_mod_bit(struct tz1090_gpio_bank
*bank
,
152 unsigned int reg_offs
,
158 value
= tz1090_gpio_read(bank
, reg_offs
);
159 value
&= ~BIT(offset
);
161 value
|= BIT(offset
);
162 tz1090_gpio_write(bank
, reg_offs
, value
);
165 static void tz1090_gpio_mod_bit(struct tz1090_gpio_bank
*bank
,
166 unsigned int reg_offs
,
172 __global_lock2(lstat
);
173 _tz1090_gpio_mod_bit(bank
, reg_offs
, offset
, val
);
174 __global_unlock2(lstat
);
177 static inline int tz1090_gpio_read_bit(struct tz1090_gpio_bank
*bank
,
178 unsigned int reg_offs
,
181 return tz1090_gpio_read(bank
, reg_offs
) & BIT(offset
);
184 /* GPIO chip callbacks */
186 static int tz1090_gpio_direction_input(struct gpio_chip
*chip
,
189 struct tz1090_gpio_bank
*bank
= gpiochip_get_data(chip
);
190 tz1090_gpio_set_bit(bank
, REG_GPIO_DIR
, offset
);
195 static int tz1090_gpio_direction_output(struct gpio_chip
*chip
,
196 unsigned int offset
, int output_value
)
198 struct tz1090_gpio_bank
*bank
= gpiochip_get_data(chip
);
201 __global_lock2(lstat
);
202 _tz1090_gpio_mod_bit(bank
, REG_GPIO_DOUT
, offset
, output_value
);
203 _tz1090_gpio_clear_bit(bank
, REG_GPIO_DIR
, offset
);
204 __global_unlock2(lstat
);
212 static int tz1090_gpio_get(struct gpio_chip
*chip
, unsigned int offset
)
214 struct tz1090_gpio_bank
*bank
= gpiochip_get_data(chip
);
216 return !!tz1090_gpio_read_bit(bank
, REG_GPIO_DIN
, offset
);
220 * Set output GPIO level
222 static void tz1090_gpio_set(struct gpio_chip
*chip
, unsigned int offset
,
225 struct tz1090_gpio_bank
*bank
= gpiochip_get_data(chip
);
227 tz1090_gpio_mod_bit(bank
, REG_GPIO_DOUT
, offset
, output_value
);
230 static int tz1090_gpio_request(struct gpio_chip
*chip
, unsigned int offset
)
232 struct tz1090_gpio_bank
*bank
= gpiochip_get_data(chip
);
235 ret
= pinctrl_request_gpio(chip
->base
+ offset
);
239 tz1090_gpio_set_bit(bank
, REG_GPIO_DIR
, offset
);
240 tz1090_gpio_set_bit(bank
, REG_GPIO_BIT_EN
, offset
);
245 static void tz1090_gpio_free(struct gpio_chip
*chip
, unsigned int offset
)
247 struct tz1090_gpio_bank
*bank
= gpiochip_get_data(chip
);
249 pinctrl_free_gpio(chip
->base
+ offset
);
251 tz1090_gpio_clear_bit(bank
, REG_GPIO_BIT_EN
, offset
);
254 static int tz1090_gpio_to_irq(struct gpio_chip
*chip
, unsigned int offset
)
256 struct tz1090_gpio_bank
*bank
= gpiochip_get_data(chip
);
261 return irq_create_mapping(bank
->domain
, offset
);
264 /* IRQ chip handlers */
266 /* Get TZ1090 GPIO chip from irq data provided to generic IRQ callbacks */
267 static inline struct tz1090_gpio_bank
*irqd_to_gpio_bank(struct irq_data
*data
)
269 return (struct tz1090_gpio_bank
*)data
->domain
->host_data
;
272 static void tz1090_gpio_irq_polarity(struct tz1090_gpio_bank
*bank
,
273 unsigned int offset
, unsigned int polarity
)
275 tz1090_gpio_mod_bit(bank
, REG_GPIO_IRQ_PLRT
, offset
, polarity
);
278 static void tz1090_gpio_irq_type(struct tz1090_gpio_bank
*bank
,
279 unsigned int offset
, unsigned int type
)
281 tz1090_gpio_mod_bit(bank
, REG_GPIO_IRQ_TYPE
, offset
, type
);
284 /* set polarity to trigger on next edge, whether rising or falling */
285 static void tz1090_gpio_irq_next_edge(struct tz1090_gpio_bank
*bank
,
288 unsigned int value_p
, value_i
;
292 * Set the GPIO's interrupt polarity to the opposite of the current
293 * input value so that the next edge triggers an interrupt.
295 __global_lock2(lstat
);
296 value_i
= ~tz1090_gpio_read(bank
, REG_GPIO_DIN
);
297 value_p
= tz1090_gpio_read(bank
, REG_GPIO_IRQ_PLRT
);
298 value_p
&= ~BIT(offset
);
299 value_p
|= value_i
& BIT(offset
);
300 tz1090_gpio_write(bank
, REG_GPIO_IRQ_PLRT
, value_p
);
301 __global_unlock2(lstat
);
304 static unsigned int gpio_startup_irq(struct irq_data
*data
)
307 * This warning indicates that the type of the irq hasn't been set
308 * before enabling the irq. This would normally be done by passing some
309 * trigger flags to request_irq().
311 WARN(irqd_get_trigger_type(data
) == IRQ_TYPE_NONE
,
312 "irq type not set before enabling gpio irq %d", data
->irq
);
314 irq_gc_ack_clr_bit(data
);
315 irq_gc_mask_set_bit(data
);
319 static int gpio_set_irq_type(struct irq_data
*data
, unsigned int flow_type
)
321 struct tz1090_gpio_bank
*bank
= irqd_to_gpio_bank(data
);
323 unsigned int polarity
;
326 case IRQ_TYPE_EDGE_BOTH
:
327 type
= REG_GPIO_IRQ_TYPE_EDGE
;
328 polarity
= REG_GPIO_IRQ_PLRT_LOW
;
330 case IRQ_TYPE_EDGE_RISING
:
331 type
= REG_GPIO_IRQ_TYPE_EDGE
;
332 polarity
= REG_GPIO_IRQ_PLRT_HIGH
;
334 case IRQ_TYPE_EDGE_FALLING
:
335 type
= REG_GPIO_IRQ_TYPE_EDGE
;
336 polarity
= REG_GPIO_IRQ_PLRT_LOW
;
338 case IRQ_TYPE_LEVEL_HIGH
:
339 type
= REG_GPIO_IRQ_TYPE_LEVEL
;
340 polarity
= REG_GPIO_IRQ_PLRT_HIGH
;
342 case IRQ_TYPE_LEVEL_LOW
:
343 type
= REG_GPIO_IRQ_TYPE_LEVEL
;
344 polarity
= REG_GPIO_IRQ_PLRT_LOW
;
350 tz1090_gpio_irq_type(bank
, data
->hwirq
, type
);
351 irq_setup_alt_chip(data
, flow_type
);
353 if (flow_type
== IRQ_TYPE_EDGE_BOTH
)
354 tz1090_gpio_irq_next_edge(bank
, data
->hwirq
);
356 tz1090_gpio_irq_polarity(bank
, data
->hwirq
, polarity
);
361 #ifdef CONFIG_SUSPEND
362 static int gpio_set_irq_wake(struct irq_data
*data
, unsigned int on
)
364 struct tz1090_gpio_bank
*bank
= irqd_to_gpio_bank(data
);
366 #ifdef CONFIG_PM_DEBUG
367 pr_info("irq_wake irq%d state:%d\n", data
->irq
, on
);
370 /* wake on gpio block interrupt */
371 return irq_set_irq_wake(bank
->irq
, on
);
374 #define gpio_set_irq_wake NULL
377 static void tz1090_gpio_irq_handler(struct irq_desc
*desc
)
380 unsigned int irq_stat
, irq_no
;
381 struct tz1090_gpio_bank
*bank
;
382 struct irq_desc
*child_desc
;
384 bank
= (struct tz1090_gpio_bank
*)irq_desc_get_handler_data(desc
);
385 irq_stat
= tz1090_gpio_read(bank
, REG_GPIO_DIR
) &
386 tz1090_gpio_read(bank
, REG_GPIO_IRQ_STS
) &
387 tz1090_gpio_read(bank
, REG_GPIO_IRQ_EN
) &
388 0x3FFFFFFF; /* 30 bits only */
390 for (hw
= 0; irq_stat
; irq_stat
>>= 1, ++hw
) {
394 irq_no
= irq_linear_revmap(bank
->domain
, hw
);
395 child_desc
= irq_to_desc(irq_no
);
397 /* Toggle edge for pin with both edges triggering enabled */
398 if (irqd_get_trigger_type(&child_desc
->irq_data
)
399 == IRQ_TYPE_EDGE_BOTH
)
400 tz1090_gpio_irq_next_edge(bank
, hw
);
402 generic_handle_irq_desc(child_desc
);
406 static int tz1090_gpio_bank_probe(struct tz1090_gpio_bank_info
*info
)
408 struct device_node
*np
= info
->node
;
409 struct device
*dev
= info
->priv
->dev
;
410 struct tz1090_gpio_bank
*bank
;
411 struct irq_chip_generic
*gc
;
414 bank
= devm_kzalloc(dev
, sizeof(*bank
), GFP_KERNEL
);
416 dev_err(dev
, "unable to allocate driver data\n");
420 /* Offset the main registers to the first register in this bank */
421 bank
->reg
= info
->priv
->reg
+ info
->index
* 4;
423 /* Set up GPIO chip */
424 snprintf(bank
->label
, sizeof(bank
->label
), "tz1090-gpio-%u",
426 bank
->chip
.label
= bank
->label
;
427 bank
->chip
.parent
= dev
;
428 bank
->chip
.direction_input
= tz1090_gpio_direction_input
;
429 bank
->chip
.direction_output
= tz1090_gpio_direction_output
;
430 bank
->chip
.get
= tz1090_gpio_get
;
431 bank
->chip
.set
= tz1090_gpio_set
;
432 bank
->chip
.free
= tz1090_gpio_free
;
433 bank
->chip
.request
= tz1090_gpio_request
;
434 bank
->chip
.to_irq
= tz1090_gpio_to_irq
;
435 bank
->chip
.of_node
= np
;
437 /* GPIO numbering from 0 */
438 bank
->chip
.base
= info
->index
* 30;
439 bank
->chip
.ngpio
= 30;
441 /* Add the GPIO bank */
442 gpiochip_add_data(&bank
->chip
, bank
);
444 /* Get the GPIO bank IRQ if provided */
445 bank
->irq
= irq_of_parse_and_map(np
, 0);
447 /* The interrupt is optional (it may be used by another core on chip) */
449 dev_info(dev
, "IRQ not provided for bank %u, IRQs disabled\n",
454 dev_info(dev
, "Setting up IRQs for GPIO bank %u\n",
458 * Initialise all interrupts to disabled so we don't get
459 * spurious ones on a dirty boot and hit the BUG_ON in the
462 tz1090_gpio_write(bank
, REG_GPIO_IRQ_EN
, 0);
464 /* Add a virtual IRQ for each GPIO */
465 bank
->domain
= irq_domain_add_linear(np
,
467 &irq_generic_chip_ops
,
470 /* Set up a generic irq chip with 2 chip types (level and edge) */
471 err
= irq_alloc_domain_generic_chips(bank
->domain
, bank
->chip
.ngpio
, 2,
472 bank
->label
, handle_bad_irq
, 0, 0,
473 IRQ_GC_INIT_NESTED_LOCK
);
476 "irq_alloc_domain_generic_chips failed for bank %u, IRQs disabled\n",
478 irq_domain_remove(bank
->domain
);
482 gc
= irq_get_domain_generic_chip(bank
->domain
, 0);
483 gc
->reg_base
= bank
->reg
;
485 /* level chip type */
486 gc
->chip_types
[0].type
= IRQ_TYPE_LEVEL_MASK
;
487 gc
->chip_types
[0].handler
= handle_level_irq
;
488 gc
->chip_types
[0].regs
.ack
= REG_GPIO_IRQ_STS
;
489 gc
->chip_types
[0].regs
.mask
= REG_GPIO_IRQ_EN
;
490 gc
->chip_types
[0].chip
.irq_startup
= gpio_startup_irq
;
491 gc
->chip_types
[0].chip
.irq_ack
= irq_gc_ack_clr_bit
;
492 gc
->chip_types
[0].chip
.irq_mask
= irq_gc_mask_clr_bit
;
493 gc
->chip_types
[0].chip
.irq_unmask
= irq_gc_mask_set_bit
;
494 gc
->chip_types
[0].chip
.irq_set_type
= gpio_set_irq_type
;
495 gc
->chip_types
[0].chip
.irq_set_wake
= gpio_set_irq_wake
;
496 gc
->chip_types
[0].chip
.flags
= IRQCHIP_MASK_ON_SUSPEND
;
499 gc
->chip_types
[1].type
= IRQ_TYPE_EDGE_BOTH
;
500 gc
->chip_types
[1].handler
= handle_edge_irq
;
501 gc
->chip_types
[1].regs
.ack
= REG_GPIO_IRQ_STS
;
502 gc
->chip_types
[1].regs
.mask
= REG_GPIO_IRQ_EN
;
503 gc
->chip_types
[1].chip
.irq_startup
= gpio_startup_irq
;
504 gc
->chip_types
[1].chip
.irq_ack
= irq_gc_ack_clr_bit
;
505 gc
->chip_types
[1].chip
.irq_mask
= irq_gc_mask_clr_bit
;
506 gc
->chip_types
[1].chip
.irq_unmask
= irq_gc_mask_set_bit
;
507 gc
->chip_types
[1].chip
.irq_set_type
= gpio_set_irq_type
;
508 gc
->chip_types
[1].chip
.irq_set_wake
= gpio_set_irq_wake
;
509 gc
->chip_types
[1].chip
.flags
= IRQCHIP_MASK_ON_SUSPEND
;
511 /* Setup chained handler for this GPIO bank */
512 irq_set_chained_handler_and_data(bank
->irq
, tz1090_gpio_irq_handler
,
518 static void tz1090_gpio_register_banks(struct tz1090_gpio
*priv
)
520 struct device_node
*np
= priv
->dev
->of_node
;
521 struct device_node
*node
;
523 for_each_available_child_of_node(np
, node
) {
524 struct tz1090_gpio_bank_info info
;
528 ret
= of_property_read_u32(node
, "reg", &addr
);
530 dev_err(priv
->dev
, "invalid reg on %s\n",
535 dev_err(priv
->dev
, "index %u in %s out of range\n",
536 addr
, node
->full_name
);
541 info
.node
= of_node_get(node
);
544 ret
= tz1090_gpio_bank_probe(&info
);
546 dev_err(priv
->dev
, "failure registering %s\n",
554 static int tz1090_gpio_probe(struct platform_device
*pdev
)
556 struct device_node
*np
= pdev
->dev
.of_node
;
557 struct resource
*res_regs
;
558 struct tz1090_gpio priv
;
561 dev_err(&pdev
->dev
, "must be instantiated via devicetree\n");
565 res_regs
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
567 dev_err(&pdev
->dev
, "cannot find registers resource\n");
571 priv
.dev
= &pdev
->dev
;
573 /* Ioremap the registers */
574 priv
.reg
= devm_ioremap(&pdev
->dev
, res_regs
->start
,
575 resource_size(res_regs
));
577 dev_err(&pdev
->dev
, "unable to ioremap registers\n");
582 tz1090_gpio_register_banks(&priv
);
587 static struct of_device_id tz1090_gpio_of_match
[] = {
588 { .compatible
= "img,tz1090-gpio" },
592 static struct platform_driver tz1090_gpio_driver
= {
594 .name
= "tz1090-gpio",
595 .of_match_table
= tz1090_gpio_of_match
,
597 .probe
= tz1090_gpio_probe
,
600 static int __init
tz1090_gpio_init(void)
602 return platform_driver_register(&tz1090_gpio_driver
);
604 subsys_initcall(tz1090_gpio_init
);