2 * Pinctrl GPIO driver for Intel Baytrail
3 * Copyright (c) 2012-2013, Intel Corporation.
5 * Author: Mathias Nyman <mathias.nyman@linux.intel.com>
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms and conditions of the GNU General Public License,
9 * version 2, as published by the Free Software Foundation.
11 * This program is distributed in the hope it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 * You should have received a copy of the GNU General Public License along with
17 * this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/init.h>
25 #include <linux/types.h>
26 #include <linux/bitops.h>
27 #include <linux/interrupt.h>
28 #include <linux/irq.h>
29 #include <linux/gpio.h>
30 #include <linux/irqdomain.h>
31 #include <linux/acpi.h>
32 #include <linux/platform_device.h>
33 #include <linux/seq_file.h>
35 #include <linux/pm_runtime.h>
36 #include <linux/pinctrl/pinctrl.h>
38 /* memory mapped register offsets */
39 #define BYT_CONF0_REG 0x000
40 #define BYT_CONF1_REG 0x004
41 #define BYT_VAL_REG 0x008
42 #define BYT_DFT_REG 0x00c
43 #define BYT_INT_STAT_REG 0x800
45 /* BYT_CONF0_REG register bits */
46 #define BYT_IODEN BIT(31)
47 #define BYT_DIRECT_IRQ_EN BIT(27)
48 #define BYT_TRIG_NEG BIT(26)
49 #define BYT_TRIG_POS BIT(25)
50 #define BYT_TRIG_LVL BIT(24)
51 #define BYT_PULL_STR_SHIFT 9
52 #define BYT_PULL_STR_MASK (3 << BYT_PULL_STR_SHIFT)
53 #define BYT_PULL_STR_2K (0 << BYT_PULL_STR_SHIFT)
54 #define BYT_PULL_STR_10K (1 << BYT_PULL_STR_SHIFT)
55 #define BYT_PULL_STR_20K (2 << BYT_PULL_STR_SHIFT)
56 #define BYT_PULL_STR_40K (3 << BYT_PULL_STR_SHIFT)
57 #define BYT_PULL_ASSIGN_SHIFT 7
58 #define BYT_PULL_ASSIGN_MASK (3 << BYT_PULL_ASSIGN_SHIFT)
59 #define BYT_PULL_ASSIGN_UP (1 << BYT_PULL_ASSIGN_SHIFT)
60 #define BYT_PULL_ASSIGN_DOWN (2 << BYT_PULL_ASSIGN_SHIFT)
61 #define BYT_PIN_MUX 0x07
63 /* BYT_VAL_REG register bits */
64 #define BYT_INPUT_EN BIT(2) /* 0: input enabled (active low)*/
65 #define BYT_OUTPUT_EN BIT(1) /* 0: output enabled (active low)*/
66 #define BYT_LEVEL BIT(0)
68 #define BYT_DIR_MASK (BIT(1) | BIT(2))
69 #define BYT_TRIG_MASK (BIT(26) | BIT(25) | BIT(24))
71 #define BYT_NGPIO_SCORE 102
72 #define BYT_NGPIO_NCORE 28
73 #define BYT_NGPIO_SUS 44
75 #define BYT_SCORE_ACPI_UID "1"
76 #define BYT_NCORE_ACPI_UID "2"
77 #define BYT_SUS_ACPI_UID "3"
80 * Baytrail gpio controller consist of three separate sub-controllers called
81 * SCORE, NCORE and SUS. The sub-controllers are identified by their acpi UID.
83 * GPIO numbering is _not_ ordered meaning that gpio # 0 in ACPI namespace does
84 * _not_ correspond to the first gpio register at controller's gpio base.
85 * There is no logic or pattern in mapping gpio numbers to registers (pads) so
86 * each sub-controller needs to have its own mapping table
89 /* score_pins[gpio_nr] = pad_nr */
91 static unsigned const score_pins
[BYT_NGPIO_SCORE
] = {
92 85, 89, 93, 96, 99, 102, 98, 101, 34, 37,
93 36, 38, 39, 35, 40, 84, 62, 61, 64, 59,
94 54, 56, 60, 55, 63, 57, 51, 50, 53, 47,
95 52, 49, 48, 43, 46, 41, 45, 42, 58, 44,
96 95, 105, 70, 68, 67, 66, 69, 71, 65, 72,
97 86, 90, 88, 92, 103, 77, 79, 83, 78, 81,
98 80, 82, 13, 12, 15, 14, 17, 18, 19, 16,
99 2, 1, 0, 4, 6, 7, 9, 8, 33, 32,
100 31, 30, 29, 27, 25, 28, 26, 23, 21, 20,
101 24, 22, 5, 3, 10, 11, 106, 87, 91, 104,
105 static unsigned const ncore_pins
[BYT_NGPIO_NCORE
] = {
106 19, 18, 17, 20, 21, 22, 24, 25, 23, 16,
107 14, 15, 12, 26, 27, 1, 4, 8, 11, 0,
108 3, 6, 10, 13, 2, 5, 9, 7,
111 static unsigned const sus_pins
[BYT_NGPIO_SUS
] = {
112 29, 33, 30, 31, 32, 34, 36, 35, 38, 37,
113 18, 7, 11, 20, 17, 1, 8, 10, 19, 12,
114 0, 2, 23, 39, 28, 27, 22, 21, 24, 25,
115 26, 51, 56, 54, 49, 55, 48, 57, 50, 58,
119 static struct pinctrl_gpio_range byt_ranges
[] = {
121 .name
= BYT_SCORE_ACPI_UID
, /* match with acpi _UID in probe */
122 .npins
= BYT_NGPIO_SCORE
,
126 .name
= BYT_NCORE_ACPI_UID
,
127 .npins
= BYT_NGPIO_NCORE
,
131 .name
= BYT_SUS_ACPI_UID
,
132 .npins
= BYT_NGPIO_SUS
,
140 struct gpio_chip chip
;
141 struct irq_domain
*domain
;
142 struct platform_device
*pdev
;
144 void __iomem
*reg_base
;
145 struct pinctrl_gpio_range
*range
;
148 #define to_byt_gpio(c) container_of(c, struct byt_gpio, chip)
150 static void __iomem
*byt_gpio_reg(struct gpio_chip
*chip
, unsigned offset
,
153 struct byt_gpio
*vg
= to_byt_gpio(chip
);
156 if (reg
== BYT_INT_STAT_REG
)
157 reg_offset
= (offset
/ 32) * 4;
159 reg_offset
= vg
->range
->pins
[offset
] * 16;
161 return vg
->reg_base
+ reg_offset
+ reg
;
164 static bool is_special_pin(struct byt_gpio
*vg
, unsigned offset
)
166 /* SCORE pin 92-93 */
167 if (!strcmp(vg
->range
->name
, BYT_SCORE_ACPI_UID
) &&
168 offset
>= 92 && offset
<= 93)
172 if (!strcmp(vg
->range
->name
, BYT_SUS_ACPI_UID
) &&
173 offset
>= 11 && offset
<= 21)
179 static int byt_gpio_request(struct gpio_chip
*chip
, unsigned offset
)
181 struct byt_gpio
*vg
= to_byt_gpio(chip
);
182 void __iomem
*reg
= byt_gpio_reg(chip
, offset
, BYT_CONF0_REG
);
187 * In most cases, func pin mux 000 means GPIO function.
188 * But, some pins may have func pin mux 001 represents
189 * GPIO function. Only allow user to export pin with
190 * func pin mux preset as GPIO function by BIOS/FW.
192 value
= readl(reg
) & BYT_PIN_MUX
;
193 special
= is_special_pin(vg
, offset
);
194 if ((special
&& value
!= 1) || (!special
&& value
)) {
195 dev_err(&vg
->pdev
->dev
,
196 "pin %u cannot be used as GPIO.\n", offset
);
200 pm_runtime_get(&vg
->pdev
->dev
);
205 static void byt_gpio_free(struct gpio_chip
*chip
, unsigned offset
)
207 struct byt_gpio
*vg
= to_byt_gpio(chip
);
208 void __iomem
*reg
= byt_gpio_reg(&vg
->chip
, offset
, BYT_CONF0_REG
);
211 /* clear interrupt triggering */
213 value
&= ~(BYT_TRIG_POS
| BYT_TRIG_NEG
| BYT_TRIG_LVL
);
216 pm_runtime_put(&vg
->pdev
->dev
);
219 static int byt_irq_type(struct irq_data
*d
, unsigned type
)
221 struct byt_gpio
*vg
= irq_data_get_irq_chip_data(d
);
222 u32 offset
= irqd_to_hwirq(d
);
225 void __iomem
*reg
= byt_gpio_reg(&vg
->chip
, offset
, BYT_CONF0_REG
);
227 if (offset
>= vg
->chip
.ngpio
)
230 spin_lock_irqsave(&vg
->lock
, flags
);
233 /* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits
234 * are used to indicate high and low level triggering
236 value
&= ~(BYT_TRIG_POS
| BYT_TRIG_NEG
| BYT_TRIG_LVL
);
239 case IRQ_TYPE_LEVEL_HIGH
:
240 value
|= BYT_TRIG_LVL
;
241 case IRQ_TYPE_EDGE_RISING
:
242 value
|= BYT_TRIG_POS
;
244 case IRQ_TYPE_LEVEL_LOW
:
245 value
|= BYT_TRIG_LVL
;
246 case IRQ_TYPE_EDGE_FALLING
:
247 value
|= BYT_TRIG_NEG
;
249 case IRQ_TYPE_EDGE_BOTH
:
250 value
|= (BYT_TRIG_NEG
| BYT_TRIG_POS
);
255 spin_unlock_irqrestore(&vg
->lock
, flags
);
260 static int byt_gpio_get(struct gpio_chip
*chip
, unsigned offset
)
262 void __iomem
*reg
= byt_gpio_reg(chip
, offset
, BYT_VAL_REG
);
263 return readl(reg
) & BYT_LEVEL
;
266 static void byt_gpio_set(struct gpio_chip
*chip
, unsigned offset
, int value
)
268 struct byt_gpio
*vg
= to_byt_gpio(chip
);
269 void __iomem
*reg
= byt_gpio_reg(chip
, offset
, BYT_VAL_REG
);
273 spin_lock_irqsave(&vg
->lock
, flags
);
275 old_val
= readl(reg
);
278 writel(old_val
| BYT_LEVEL
, reg
);
280 writel(old_val
& ~BYT_LEVEL
, reg
);
282 spin_unlock_irqrestore(&vg
->lock
, flags
);
285 static int byt_gpio_direction_input(struct gpio_chip
*chip
, unsigned offset
)
287 struct byt_gpio
*vg
= to_byt_gpio(chip
);
288 void __iomem
*reg
= byt_gpio_reg(chip
, offset
, BYT_VAL_REG
);
292 spin_lock_irqsave(&vg
->lock
, flags
);
294 value
= readl(reg
) | BYT_DIR_MASK
;
295 value
&= ~BYT_INPUT_EN
; /* active low */
298 spin_unlock_irqrestore(&vg
->lock
, flags
);
303 static int byt_gpio_direction_output(struct gpio_chip
*chip
,
304 unsigned gpio
, int value
)
306 struct byt_gpio
*vg
= to_byt_gpio(chip
);
307 void __iomem
*conf_reg
= byt_gpio_reg(chip
, gpio
, BYT_CONF0_REG
);
308 void __iomem
*reg
= byt_gpio_reg(chip
, gpio
, BYT_VAL_REG
);
312 spin_lock_irqsave(&vg
->lock
, flags
);
315 * Before making any direction modifications, do a check if gpio
316 * is set for direct IRQ. On baytrail, setting GPIO to output does
317 * not make sense, so let's at least warn the caller before they shoot
318 * themselves in the foot.
320 WARN(readl(conf_reg
) & BYT_DIRECT_IRQ_EN
,
321 "Potential Error: Setting GPIO with direct_irq_en to output");
323 reg_val
= readl(reg
) | BYT_DIR_MASK
;
324 reg_val
&= ~BYT_OUTPUT_EN
;
327 writel(reg_val
| BYT_LEVEL
, reg
);
329 writel(reg_val
& ~BYT_LEVEL
, reg
);
331 spin_unlock_irqrestore(&vg
->lock
, flags
);
336 static void byt_gpio_dbg_show(struct seq_file
*s
, struct gpio_chip
*chip
)
338 struct byt_gpio
*vg
= to_byt_gpio(chip
);
341 u32 conf0
, val
, offs
;
343 spin_lock_irqsave(&vg
->lock
, flags
);
345 for (i
= 0; i
< vg
->chip
.ngpio
; i
++) {
346 const char *pull_str
= NULL
;
347 const char *pull
= NULL
;
349 offs
= vg
->range
->pins
[i
] * 16;
350 conf0
= readl(vg
->reg_base
+ offs
+ BYT_CONF0_REG
);
351 val
= readl(vg
->reg_base
+ offs
+ BYT_VAL_REG
);
353 label
= gpiochip_is_requested(chip
, i
);
355 label
= "Unrequested";
357 switch (conf0
& BYT_PULL_ASSIGN_MASK
) {
358 case BYT_PULL_ASSIGN_UP
:
361 case BYT_PULL_ASSIGN_DOWN
:
366 switch (conf0
& BYT_PULL_STR_MASK
) {
367 case BYT_PULL_STR_2K
:
370 case BYT_PULL_STR_10K
:
373 case BYT_PULL_STR_20K
:
376 case BYT_PULL_STR_40K
:
382 " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s",
385 val
& BYT_INPUT_EN
? " " : "in",
386 val
& BYT_OUTPUT_EN
? " " : "out",
387 val
& BYT_LEVEL
? "hi" : "lo",
388 vg
->range
->pins
[i
], offs
,
390 conf0
& BYT_TRIG_NEG
? " fall" : " ",
391 conf0
& BYT_TRIG_POS
? " rise" : " ",
392 conf0
& BYT_TRIG_LVL
? " level" : " ");
394 if (pull
&& pull_str
)
395 seq_printf(s
, " %-4s %-3s", pull
, pull_str
);
399 if (conf0
& BYT_IODEN
)
400 seq_puts(s
, " open-drain");
404 spin_unlock_irqrestore(&vg
->lock
, flags
);
407 static int byt_gpio_to_irq(struct gpio_chip
*chip
, unsigned offset
)
409 struct byt_gpio
*vg
= to_byt_gpio(chip
);
410 return irq_create_mapping(vg
->domain
, offset
);
413 static void byt_gpio_irq_handler(unsigned irq
, struct irq_desc
*desc
)
415 struct irq_data
*data
= irq_desc_get_irq_data(desc
);
416 struct byt_gpio
*vg
= irq_data_get_irq_handler_data(data
);
417 struct irq_chip
*chip
= irq_data_get_irq_chip(data
);
424 /* check from GPIO controller which pin triggered the interrupt */
425 for (base
= 0; base
< vg
->chip
.ngpio
; base
+= 32) {
427 reg
= byt_gpio_reg(&vg
->chip
, base
, BYT_INT_STAT_REG
);
429 while ((pending
= readl(reg
))) {
430 pin
= __ffs(pending
);
432 /* Clear before handling so we can't lose an edge */
435 virq
= irq_find_mapping(vg
->domain
, base
+ pin
);
436 generic_handle_irq(virq
);
438 /* In case bios or user sets triggering incorretly a pin
439 * might remain in "interrupt triggered" state.
441 if (looplimit
++ > 32) {
442 dev_err(&vg
->pdev
->dev
,
443 "Gpio %d interrupt flood, disabling\n",
446 reg
= byt_gpio_reg(&vg
->chip
, base
+ pin
,
449 mask
&= ~(BYT_TRIG_NEG
| BYT_TRIG_POS
|
452 mask
= readl(reg
); /* flush */
460 static void byt_irq_unmask(struct irq_data
*d
)
464 static void byt_irq_mask(struct irq_data
*d
)
468 static int byt_irq_reqres(struct irq_data
*d
)
470 struct byt_gpio
*vg
= irq_data_get_irq_chip_data(d
);
472 if (gpio_lock_as_irq(&vg
->chip
, irqd_to_hwirq(d
))) {
473 dev_err(vg
->chip
.dev
,
474 "unable to lock HW IRQ %lu for IRQ\n",
481 static void byt_irq_relres(struct irq_data
*d
)
483 struct byt_gpio
*vg
= irq_data_get_irq_chip_data(d
);
485 gpio_unlock_as_irq(&vg
->chip
, irqd_to_hwirq(d
));
488 static struct irq_chip byt_irqchip
= {
490 .irq_mask
= byt_irq_mask
,
491 .irq_unmask
= byt_irq_unmask
,
492 .irq_set_type
= byt_irq_type
,
493 .irq_request_resources
= byt_irq_reqres
,
494 .irq_release_resources
= byt_irq_relres
,
497 static void byt_gpio_irq_init_hw(struct byt_gpio
*vg
)
502 /* clear interrupt status trigger registers */
503 for (base
= 0; base
< vg
->chip
.ngpio
; base
+= 32) {
504 reg
= byt_gpio_reg(&vg
->chip
, base
, BYT_INT_STAT_REG
);
505 writel(0xffffffff, reg
);
506 /* make sure trigger bits are cleared, if not then a pin
507 might be misconfigured in bios */
510 dev_err(&vg
->pdev
->dev
,
511 "GPIO interrupt error, pins misconfigured\n");
515 static int byt_gpio_irq_map(struct irq_domain
*d
, unsigned int virq
,
518 struct byt_gpio
*vg
= d
->host_data
;
520 irq_set_chip_and_handler_name(virq
, &byt_irqchip
, handle_simple_irq
,
522 irq_set_chip_data(virq
, vg
);
523 irq_set_irq_type(virq
, IRQ_TYPE_NONE
);
528 static const struct irq_domain_ops byt_gpio_irq_ops
= {
529 .map
= byt_gpio_irq_map
,
532 static int byt_gpio_probe(struct platform_device
*pdev
)
535 struct gpio_chip
*gc
;
536 struct resource
*mem_rc
, *irq_rc
;
537 struct device
*dev
= &pdev
->dev
;
538 struct acpi_device
*acpi_dev
;
539 struct pinctrl_gpio_range
*range
;
540 acpi_handle handle
= ACPI_HANDLE(dev
);
544 if (acpi_bus_get_device(handle
, &acpi_dev
))
547 vg
= devm_kzalloc(dev
, sizeof(struct byt_gpio
), GFP_KERNEL
);
549 dev_err(&pdev
->dev
, "can't allocate byt_gpio chip data\n");
553 for (range
= byt_ranges
; range
->name
; range
++) {
554 if (!strcmp(acpi_dev
->pnp
.unique_id
, range
->name
)) {
555 vg
->chip
.ngpio
= range
->npins
;
561 if (!vg
->chip
.ngpio
|| !vg
->range
)
565 platform_set_drvdata(pdev
, vg
);
567 mem_rc
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
568 vg
->reg_base
= devm_ioremap_resource(dev
, mem_rc
);
569 if (IS_ERR(vg
->reg_base
))
570 return PTR_ERR(vg
->reg_base
);
572 spin_lock_init(&vg
->lock
);
575 gc
->label
= dev_name(&pdev
->dev
);
576 gc
->owner
= THIS_MODULE
;
577 gc
->request
= byt_gpio_request
;
578 gc
->free
= byt_gpio_free
;
579 gc
->direction_input
= byt_gpio_direction_input
;
580 gc
->direction_output
= byt_gpio_direction_output
;
581 gc
->get
= byt_gpio_get
;
582 gc
->set
= byt_gpio_set
;
583 gc
->dbg_show
= byt_gpio_dbg_show
;
585 gc
->can_sleep
= false;
588 /* set up interrupts */
589 irq_rc
= platform_get_resource(pdev
, IORESOURCE_IRQ
, 0);
590 if (irq_rc
&& irq_rc
->start
) {
591 hwirq
= irq_rc
->start
;
592 gc
->to_irq
= byt_gpio_to_irq
;
594 vg
->domain
= irq_domain_add_linear(NULL
, gc
->ngpio
,
595 &byt_gpio_irq_ops
, vg
);
599 byt_gpio_irq_init_hw(vg
);
601 irq_set_handler_data(hwirq
, vg
);
602 irq_set_chained_handler(hwirq
, byt_gpio_irq_handler
);
605 ret
= gpiochip_add(gc
);
607 dev_err(&pdev
->dev
, "failed adding byt-gpio chip\n");
611 pm_runtime_enable(dev
);
616 static int byt_gpio_runtime_suspend(struct device
*dev
)
621 static int byt_gpio_runtime_resume(struct device
*dev
)
626 static const struct dev_pm_ops byt_gpio_pm_ops
= {
627 .runtime_suspend
= byt_gpio_runtime_suspend
,
628 .runtime_resume
= byt_gpio_runtime_resume
,
631 static const struct acpi_device_id byt_gpio_acpi_match
[] = {
636 MODULE_DEVICE_TABLE(acpi
, byt_gpio_acpi_match
);
638 static int byt_gpio_remove(struct platform_device
*pdev
)
640 struct byt_gpio
*vg
= platform_get_drvdata(pdev
);
642 pm_runtime_disable(&pdev
->dev
);
643 gpiochip_remove(&vg
->chip
);
648 static struct platform_driver byt_gpio_driver
= {
649 .probe
= byt_gpio_probe
,
650 .remove
= byt_gpio_remove
,
653 .owner
= THIS_MODULE
,
654 .pm
= &byt_gpio_pm_ops
,
655 .acpi_match_table
= ACPI_PTR(byt_gpio_acpi_match
),
659 static int __init
byt_gpio_init(void)
661 return platform_driver_register(&byt_gpio_driver
);
664 subsys_initcall(byt_gpio_init
);