1 /* 2 * Pinctrl GPIO driver for Intel Baytrail 3 * Copyright (c) 2012-2013, Intel Corporation. 4 * 5 * Author: Mathias Nyman <mathias.nyman@linux.intel.com> 6 * 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. 10 * 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 14 * more details. 15 */ 16 17 #include <linux/kernel.h> 18 #include <linux/module.h> 19 #include <linux/init.h> 20 #include <linux/types.h> 21 #include <linux/bitops.h> 22 #include <linux/interrupt.h> 23 #include <linux/gpio.h> 24 #include <linux/acpi.h> 25 #include <linux/platform_device.h> 26 #include <linux/seq_file.h> 27 #include <linux/io.h> 28 #include <linux/pm_runtime.h> 29 #include <linux/pinctrl/pinctrl.h> 30 31 /* memory mapped register offsets */ 32 #define BYT_CONF0_REG 0x000 33 #define BYT_CONF1_REG 0x004 34 #define BYT_VAL_REG 0x008 35 #define BYT_DFT_REG 0x00c 36 #define BYT_INT_STAT_REG 0x800 37 38 /* BYT_CONF0_REG register bits */ 39 #define BYT_IODEN BIT(31) 40 #define BYT_DIRECT_IRQ_EN BIT(27) 41 #define BYT_TRIG_NEG BIT(26) 42 #define BYT_TRIG_POS BIT(25) 43 #define BYT_TRIG_LVL BIT(24) 44 #define BYT_PULL_STR_SHIFT 9 45 #define BYT_PULL_STR_MASK (3 << BYT_PULL_STR_SHIFT) 46 #define BYT_PULL_STR_2K (0 << BYT_PULL_STR_SHIFT) 47 #define BYT_PULL_STR_10K (1 << BYT_PULL_STR_SHIFT) 48 #define BYT_PULL_STR_20K (2 << BYT_PULL_STR_SHIFT) 49 #define BYT_PULL_STR_40K (3 << BYT_PULL_STR_SHIFT) 50 #define BYT_PULL_ASSIGN_SHIFT 7 51 #define BYT_PULL_ASSIGN_MASK (3 << BYT_PULL_ASSIGN_SHIFT) 52 #define BYT_PULL_ASSIGN_UP (1 << BYT_PULL_ASSIGN_SHIFT) 53 #define BYT_PULL_ASSIGN_DOWN (2 << BYT_PULL_ASSIGN_SHIFT) 54 #define BYT_PIN_MUX 0x07 55 56 /* BYT_VAL_REG register bits */ 57 #define BYT_INPUT_EN BIT(2) /* 0: input enabled (active low)*/ 58 #define BYT_OUTPUT_EN BIT(1) /* 0: output enabled (active low)*/ 59 #define BYT_LEVEL BIT(0) 60 61 #define BYT_DIR_MASK (BIT(1) | BIT(2)) 62 #define BYT_TRIG_MASK (BIT(26) | BIT(25) | BIT(24)) 63 64 #define BYT_CONF0_RESTORE_MASK (BYT_DIRECT_IRQ_EN | BYT_TRIG_MASK | \ 65 BYT_PIN_MUX) 66 #define BYT_VAL_RESTORE_MASK (BYT_DIR_MASK | BYT_LEVEL) 67 68 #define BYT_NGPIO_SCORE 102 69 #define BYT_NGPIO_NCORE 28 70 #define BYT_NGPIO_SUS 44 71 72 #define BYT_SCORE_ACPI_UID "1" 73 #define BYT_NCORE_ACPI_UID "2" 74 #define BYT_SUS_ACPI_UID "3" 75 76 /* 77 * Baytrail gpio controller consist of three separate sub-controllers called 78 * SCORE, NCORE and SUS. The sub-controllers are identified by their acpi UID. 79 * 80 * GPIO numbering is _not_ ordered meaning that gpio # 0 in ACPI namespace does 81 * _not_ correspond to the first gpio register at controller's gpio base. 82 * There is no logic or pattern in mapping gpio numbers to registers (pads) so 83 * each sub-controller needs to have its own mapping table 84 */ 85 86 /* score_pins[gpio_nr] = pad_nr */ 87 88 static unsigned const score_pins[BYT_NGPIO_SCORE] = { 89 85, 89, 93, 96, 99, 102, 98, 101, 34, 37, 90 36, 38, 39, 35, 40, 84, 62, 61, 64, 59, 91 54, 56, 60, 55, 63, 57, 51, 50, 53, 47, 92 52, 49, 48, 43, 46, 41, 45, 42, 58, 44, 93 95, 105, 70, 68, 67, 66, 69, 71, 65, 72, 94 86, 90, 88, 92, 103, 77, 79, 83, 78, 81, 95 80, 82, 13, 12, 15, 14, 17, 18, 19, 16, 96 2, 1, 0, 4, 6, 7, 9, 8, 33, 32, 97 31, 30, 29, 27, 25, 28, 26, 23, 21, 20, 98 24, 22, 5, 3, 10, 11, 106, 87, 91, 104, 99 97, 100, 100 }; 101 102 static unsigned const ncore_pins[BYT_NGPIO_NCORE] = { 103 19, 18, 17, 20, 21, 22, 24, 25, 23, 16, 104 14, 15, 12, 26, 27, 1, 4, 8, 11, 0, 105 3, 6, 10, 13, 2, 5, 9, 7, 106 }; 107 108 static unsigned const sus_pins[BYT_NGPIO_SUS] = { 109 29, 33, 30, 31, 32, 34, 36, 35, 38, 37, 110 18, 7, 11, 20, 17, 1, 8, 10, 19, 12, 111 0, 2, 23, 39, 28, 27, 22, 21, 24, 25, 112 26, 51, 56, 54, 49, 55, 48, 57, 50, 58, 113 52, 53, 59, 40, 114 }; 115 116 static struct pinctrl_gpio_range byt_ranges[] = { 117 { 118 .name = BYT_SCORE_ACPI_UID, /* match with acpi _UID in probe */ 119 .npins = BYT_NGPIO_SCORE, 120 .pins = score_pins, 121 }, 122 { 123 .name = BYT_NCORE_ACPI_UID, 124 .npins = BYT_NGPIO_NCORE, 125 .pins = ncore_pins, 126 }, 127 { 128 .name = BYT_SUS_ACPI_UID, 129 .npins = BYT_NGPIO_SUS, 130 .pins = sus_pins, 131 }, 132 { 133 }, 134 }; 135 136 struct byt_gpio_pin_context { 137 u32 conf0; 138 u32 val; 139 }; 140 141 struct byt_gpio { 142 struct gpio_chip chip; 143 struct platform_device *pdev; 144 raw_spinlock_t lock; 145 void __iomem *reg_base; 146 struct pinctrl_gpio_range *range; 147 struct byt_gpio_pin_context *saved_context; 148 }; 149 150 #define to_byt_gpio(c) container_of(c, struct byt_gpio, chip) 151 152 static void __iomem *byt_gpio_reg(struct gpio_chip *chip, unsigned offset, 153 int reg) 154 { 155 struct byt_gpio *vg = to_byt_gpio(chip); 156 u32 reg_offset; 157 158 if (reg == BYT_INT_STAT_REG) 159 reg_offset = (offset / 32) * 4; 160 else 161 reg_offset = vg->range->pins[offset] * 16; 162 163 return vg->reg_base + reg_offset + reg; 164 } 165 166 static void byt_gpio_clear_triggering(struct byt_gpio *vg, unsigned offset) 167 { 168 void __iomem *reg = byt_gpio_reg(&vg->chip, offset, BYT_CONF0_REG); 169 unsigned long flags; 170 u32 value; 171 172 raw_spin_lock_irqsave(&vg->lock, flags); 173 value = readl(reg); 174 value &= ~(BYT_TRIG_POS | BYT_TRIG_NEG | BYT_TRIG_LVL); 175 writel(value, reg); 176 raw_spin_unlock_irqrestore(&vg->lock, flags); 177 } 178 179 static u32 byt_get_gpio_mux(struct byt_gpio *vg, unsigned offset) 180 { 181 /* SCORE pin 92-93 */ 182 if (!strcmp(vg->range->name, BYT_SCORE_ACPI_UID) && 183 offset >= 92 && offset <= 93) 184 return 1; 185 186 /* SUS pin 11-21 */ 187 if (!strcmp(vg->range->name, BYT_SUS_ACPI_UID) && 188 offset >= 11 && offset <= 21) 189 return 1; 190 191 return 0; 192 } 193 194 static int byt_gpio_request(struct gpio_chip *chip, unsigned offset) 195 { 196 struct byt_gpio *vg = to_byt_gpio(chip); 197 void __iomem *reg = byt_gpio_reg(chip, offset, BYT_CONF0_REG); 198 u32 value, gpio_mux; 199 unsigned long flags; 200 201 raw_spin_lock_irqsave(&vg->lock, flags); 202 203 /* 204 * In most cases, func pin mux 000 means GPIO function. 205 * But, some pins may have func pin mux 001 represents 206 * GPIO function. 207 * 208 * Because there are devices out there where some pins were not 209 * configured correctly we allow changing the mux value from 210 * request (but print out warning about that). 211 */ 212 value = readl(reg) & BYT_PIN_MUX; 213 gpio_mux = byt_get_gpio_mux(vg, offset); 214 if (WARN_ON(gpio_mux != value)) { 215 value = readl(reg) & ~BYT_PIN_MUX; 216 value |= gpio_mux; 217 writel(value, reg); 218 219 dev_warn(&vg->pdev->dev, 220 "pin %u forcibly re-configured as GPIO\n", offset); 221 } 222 223 raw_spin_unlock_irqrestore(&vg->lock, flags); 224 225 pm_runtime_get(&vg->pdev->dev); 226 227 return 0; 228 } 229 230 static void byt_gpio_free(struct gpio_chip *chip, unsigned offset) 231 { 232 struct byt_gpio *vg = to_byt_gpio(chip); 233 234 byt_gpio_clear_triggering(vg, offset); 235 pm_runtime_put(&vg->pdev->dev); 236 } 237 238 static int byt_irq_type(struct irq_data *d, unsigned type) 239 { 240 struct byt_gpio *vg = to_byt_gpio(irq_data_get_irq_chip_data(d)); 241 u32 offset = irqd_to_hwirq(d); 242 u32 value; 243 unsigned long flags; 244 void __iomem *reg = byt_gpio_reg(&vg->chip, offset, BYT_CONF0_REG); 245 246 if (offset >= vg->chip.ngpio) 247 return -EINVAL; 248 249 raw_spin_lock_irqsave(&vg->lock, flags); 250 value = readl(reg); 251 252 WARN(value & BYT_DIRECT_IRQ_EN, 253 "Bad pad config for io mode, force direct_irq_en bit clearing"); 254 255 /* For level trigges the BYT_TRIG_POS and BYT_TRIG_NEG bits 256 * are used to indicate high and low level triggering 257 */ 258 value &= ~(BYT_DIRECT_IRQ_EN | BYT_TRIG_POS | BYT_TRIG_NEG | 259 BYT_TRIG_LVL); 260 261 writel(value, reg); 262 263 if (type & IRQ_TYPE_EDGE_BOTH) 264 irq_set_handler_locked(d, handle_edge_irq); 265 else if (type & IRQ_TYPE_LEVEL_MASK) 266 irq_set_handler_locked(d, handle_level_irq); 267 268 raw_spin_unlock_irqrestore(&vg->lock, flags); 269 270 return 0; 271 } 272 273 static int byt_gpio_get(struct gpio_chip *chip, unsigned offset) 274 { 275 void __iomem *reg = byt_gpio_reg(chip, offset, BYT_VAL_REG); 276 struct byt_gpio *vg = to_byt_gpio(chip); 277 unsigned long flags; 278 u32 val; 279 280 raw_spin_lock_irqsave(&vg->lock, flags); 281 val = readl(reg); 282 raw_spin_unlock_irqrestore(&vg->lock, flags); 283 284 return val & BYT_LEVEL; 285 } 286 287 static void byt_gpio_set(struct gpio_chip *chip, unsigned offset, int value) 288 { 289 struct byt_gpio *vg = to_byt_gpio(chip); 290 void __iomem *reg = byt_gpio_reg(chip, offset, BYT_VAL_REG); 291 unsigned long flags; 292 u32 old_val; 293 294 raw_spin_lock_irqsave(&vg->lock, flags); 295 296 old_val = readl(reg); 297 298 if (value) 299 writel(old_val | BYT_LEVEL, reg); 300 else 301 writel(old_val & ~BYT_LEVEL, reg); 302 303 raw_spin_unlock_irqrestore(&vg->lock, flags); 304 } 305 306 static int byt_gpio_direction_input(struct gpio_chip *chip, unsigned offset) 307 { 308 struct byt_gpio *vg = to_byt_gpio(chip); 309 void __iomem *reg = byt_gpio_reg(chip, offset, BYT_VAL_REG); 310 unsigned long flags; 311 u32 value; 312 313 raw_spin_lock_irqsave(&vg->lock, flags); 314 315 value = readl(reg) | BYT_DIR_MASK; 316 value &= ~BYT_INPUT_EN; /* active low */ 317 writel(value, reg); 318 319 raw_spin_unlock_irqrestore(&vg->lock, flags); 320 321 return 0; 322 } 323 324 static int byt_gpio_direction_output(struct gpio_chip *chip, 325 unsigned gpio, int value) 326 { 327 struct byt_gpio *vg = to_byt_gpio(chip); 328 void __iomem *conf_reg = byt_gpio_reg(chip, gpio, BYT_CONF0_REG); 329 void __iomem *reg = byt_gpio_reg(chip, gpio, BYT_VAL_REG); 330 unsigned long flags; 331 u32 reg_val; 332 333 raw_spin_lock_irqsave(&vg->lock, flags); 334 335 /* 336 * Before making any direction modifications, do a check if gpio 337 * is set for direct IRQ. On baytrail, setting GPIO to output does 338 * not make sense, so let's at least warn the caller before they shoot 339 * themselves in the foot. 340 */ 341 WARN(readl(conf_reg) & BYT_DIRECT_IRQ_EN, 342 "Potential Error: Setting GPIO with direct_irq_en to output"); 343 344 reg_val = readl(reg) | BYT_DIR_MASK; 345 reg_val &= ~(BYT_OUTPUT_EN | BYT_INPUT_EN); 346 347 if (value) 348 writel(reg_val | BYT_LEVEL, reg); 349 else 350 writel(reg_val & ~BYT_LEVEL, reg); 351 352 raw_spin_unlock_irqrestore(&vg->lock, flags); 353 354 return 0; 355 } 356 357 static void byt_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) 358 { 359 struct byt_gpio *vg = to_byt_gpio(chip); 360 int i; 361 u32 conf0, val, offs; 362 363 for (i = 0; i < vg->chip.ngpio; i++) { 364 const char *pull_str = NULL; 365 const char *pull = NULL; 366 unsigned long flags; 367 const char *label; 368 offs = vg->range->pins[i] * 16; 369 370 raw_spin_lock_irqsave(&vg->lock, flags); 371 conf0 = readl(vg->reg_base + offs + BYT_CONF0_REG); 372 val = readl(vg->reg_base + offs + BYT_VAL_REG); 373 raw_spin_unlock_irqrestore(&vg->lock, flags); 374 375 label = gpiochip_is_requested(chip, i); 376 if (!label) 377 label = "Unrequested"; 378 379 switch (conf0 & BYT_PULL_ASSIGN_MASK) { 380 case BYT_PULL_ASSIGN_UP: 381 pull = "up"; 382 break; 383 case BYT_PULL_ASSIGN_DOWN: 384 pull = "down"; 385 break; 386 } 387 388 switch (conf0 & BYT_PULL_STR_MASK) { 389 case BYT_PULL_STR_2K: 390 pull_str = "2k"; 391 break; 392 case BYT_PULL_STR_10K: 393 pull_str = "10k"; 394 break; 395 case BYT_PULL_STR_20K: 396 pull_str = "20k"; 397 break; 398 case BYT_PULL_STR_40K: 399 pull_str = "40k"; 400 break; 401 } 402 403 seq_printf(s, 404 " gpio-%-3d (%-20.20s) %s %s %s pad-%-3d offset:0x%03x mux:%d %s%s%s", 405 i, 406 label, 407 val & BYT_INPUT_EN ? " " : "in", 408 val & BYT_OUTPUT_EN ? " " : "out", 409 val & BYT_LEVEL ? "hi" : "lo", 410 vg->range->pins[i], offs, 411 conf0 & 0x7, 412 conf0 & BYT_TRIG_NEG ? " fall" : " ", 413 conf0 & BYT_TRIG_POS ? " rise" : " ", 414 conf0 & BYT_TRIG_LVL ? " level" : " "); 415 416 if (pull && pull_str) 417 seq_printf(s, " %-4s %-3s", pull, pull_str); 418 else 419 seq_puts(s, " "); 420 421 if (conf0 & BYT_IODEN) 422 seq_puts(s, " open-drain"); 423 424 seq_puts(s, "\n"); 425 } 426 } 427 428 static void byt_gpio_irq_handler(struct irq_desc *desc) 429 { 430 struct irq_data *data = irq_desc_get_irq_data(desc); 431 struct byt_gpio *vg = to_byt_gpio(irq_desc_get_handler_data(desc)); 432 struct irq_chip *chip = irq_data_get_irq_chip(data); 433 u32 base, pin; 434 void __iomem *reg; 435 unsigned long pending; 436 unsigned virq; 437 438 /* check from GPIO controller which pin triggered the interrupt */ 439 for (base = 0; base < vg->chip.ngpio; base += 32) { 440 reg = byt_gpio_reg(&vg->chip, base, BYT_INT_STAT_REG); 441 pending = readl(reg); 442 for_each_set_bit(pin, &pending, 32) { 443 virq = irq_find_mapping(vg->chip.irqdomain, base + pin); 444 generic_handle_irq(virq); 445 } 446 } 447 chip->irq_eoi(data); 448 } 449 450 static void byt_irq_ack(struct irq_data *d) 451 { 452 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 453 struct byt_gpio *vg = to_byt_gpio(gc); 454 unsigned offset = irqd_to_hwirq(d); 455 void __iomem *reg; 456 457 raw_spin_lock(&vg->lock); 458 reg = byt_gpio_reg(&vg->chip, offset, BYT_INT_STAT_REG); 459 writel(BIT(offset % 32), reg); 460 raw_spin_unlock(&vg->lock); 461 } 462 463 static void byt_irq_unmask(struct irq_data *d) 464 { 465 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 466 struct byt_gpio *vg = to_byt_gpio(gc); 467 unsigned offset = irqd_to_hwirq(d); 468 unsigned long flags; 469 void __iomem *reg; 470 u32 value; 471 472 reg = byt_gpio_reg(&vg->chip, offset, BYT_CONF0_REG); 473 474 raw_spin_lock_irqsave(&vg->lock, flags); 475 value = readl(reg); 476 477 switch (irqd_get_trigger_type(d)) { 478 case IRQ_TYPE_LEVEL_HIGH: 479 value |= BYT_TRIG_LVL; 480 case IRQ_TYPE_EDGE_RISING: 481 value |= BYT_TRIG_POS; 482 break; 483 case IRQ_TYPE_LEVEL_LOW: 484 value |= BYT_TRIG_LVL; 485 case IRQ_TYPE_EDGE_FALLING: 486 value |= BYT_TRIG_NEG; 487 break; 488 case IRQ_TYPE_EDGE_BOTH: 489 value |= (BYT_TRIG_NEG | BYT_TRIG_POS); 490 break; 491 } 492 493 writel(value, reg); 494 495 raw_spin_unlock_irqrestore(&vg->lock, flags); 496 } 497 498 static void byt_irq_mask(struct irq_data *d) 499 { 500 struct gpio_chip *gc = irq_data_get_irq_chip_data(d); 501 struct byt_gpio *vg = to_byt_gpio(gc); 502 503 byt_gpio_clear_triggering(vg, irqd_to_hwirq(d)); 504 } 505 506 static struct irq_chip byt_irqchip = { 507 .name = "BYT-GPIO", 508 .irq_ack = byt_irq_ack, 509 .irq_mask = byt_irq_mask, 510 .irq_unmask = byt_irq_unmask, 511 .irq_set_type = byt_irq_type, 512 .flags = IRQCHIP_SKIP_SET_WAKE, 513 }; 514 515 static void byt_gpio_irq_init_hw(struct byt_gpio *vg) 516 { 517 void __iomem *reg; 518 u32 base, value; 519 int i; 520 521 /* 522 * Clear interrupt triggers for all pins that are GPIOs and 523 * do not use direct IRQ mode. This will prevent spurious 524 * interrupts from misconfigured pins. 525 */ 526 for (i = 0; i < vg->chip.ngpio; i++) { 527 value = readl(byt_gpio_reg(&vg->chip, i, BYT_CONF0_REG)); 528 if ((value & BYT_PIN_MUX) == byt_get_gpio_mux(vg, i) && 529 !(value & BYT_DIRECT_IRQ_EN)) { 530 byt_gpio_clear_triggering(vg, i); 531 dev_dbg(&vg->pdev->dev, "disabling GPIO %d\n", i); 532 } 533 } 534 535 /* clear interrupt status trigger registers */ 536 for (base = 0; base < vg->chip.ngpio; base += 32) { 537 reg = byt_gpio_reg(&vg->chip, base, BYT_INT_STAT_REG); 538 writel(0xffffffff, reg); 539 /* make sure trigger bits are cleared, if not then a pin 540 might be misconfigured in bios */ 541 value = readl(reg); 542 if (value) 543 dev_err(&vg->pdev->dev, 544 "GPIO interrupt error, pins misconfigured\n"); 545 } 546 } 547 548 static int byt_gpio_probe(struct platform_device *pdev) 549 { 550 struct byt_gpio *vg; 551 struct gpio_chip *gc; 552 struct resource *mem_rc, *irq_rc; 553 struct device *dev = &pdev->dev; 554 struct acpi_device *acpi_dev; 555 struct pinctrl_gpio_range *range; 556 acpi_handle handle = ACPI_HANDLE(dev); 557 int ret; 558 559 if (acpi_bus_get_device(handle, &acpi_dev)) 560 return -ENODEV; 561 562 vg = devm_kzalloc(dev, sizeof(struct byt_gpio), GFP_KERNEL); 563 if (!vg) { 564 dev_err(&pdev->dev, "can't allocate byt_gpio chip data\n"); 565 return -ENOMEM; 566 } 567 568 for (range = byt_ranges; range->name; range++) { 569 if (!strcmp(acpi_dev->pnp.unique_id, range->name)) { 570 vg->chip.ngpio = range->npins; 571 vg->range = range; 572 break; 573 } 574 } 575 576 if (!vg->chip.ngpio || !vg->range) 577 return -ENODEV; 578 579 vg->pdev = pdev; 580 platform_set_drvdata(pdev, vg); 581 582 mem_rc = platform_get_resource(pdev, IORESOURCE_MEM, 0); 583 vg->reg_base = devm_ioremap_resource(dev, mem_rc); 584 if (IS_ERR(vg->reg_base)) 585 return PTR_ERR(vg->reg_base); 586 587 raw_spin_lock_init(&vg->lock); 588 589 gc = &vg->chip; 590 gc->label = dev_name(&pdev->dev); 591 gc->owner = THIS_MODULE; 592 gc->request = byt_gpio_request; 593 gc->free = byt_gpio_free; 594 gc->direction_input = byt_gpio_direction_input; 595 gc->direction_output = byt_gpio_direction_output; 596 gc->get = byt_gpio_get; 597 gc->set = byt_gpio_set; 598 gc->dbg_show = byt_gpio_dbg_show; 599 gc->base = -1; 600 gc->can_sleep = false; 601 gc->dev = dev; 602 603 #ifdef CONFIG_PM_SLEEP 604 vg->saved_context = devm_kcalloc(&pdev->dev, gc->ngpio, 605 sizeof(*vg->saved_context), GFP_KERNEL); 606 #endif 607 608 ret = gpiochip_add(gc); 609 if (ret) { 610 dev_err(&pdev->dev, "failed adding byt-gpio chip\n"); 611 return ret; 612 } 613 614 /* set up interrupts */ 615 irq_rc = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 616 if (irq_rc && irq_rc->start) { 617 byt_gpio_irq_init_hw(vg); 618 ret = gpiochip_irqchip_add(gc, &byt_irqchip, 0, 619 handle_simple_irq, IRQ_TYPE_NONE); 620 if (ret) { 621 dev_err(dev, "failed to add irqchip\n"); 622 gpiochip_remove(gc); 623 return ret; 624 } 625 626 gpiochip_set_chained_irqchip(gc, &byt_irqchip, 627 (unsigned)irq_rc->start, 628 byt_gpio_irq_handler); 629 } 630 631 pm_runtime_enable(dev); 632 633 return 0; 634 } 635 636 #ifdef CONFIG_PM_SLEEP 637 static int byt_gpio_suspend(struct device *dev) 638 { 639 struct platform_device *pdev = to_platform_device(dev); 640 struct byt_gpio *vg = platform_get_drvdata(pdev); 641 int i; 642 643 for (i = 0; i < vg->chip.ngpio; i++) { 644 void __iomem *reg; 645 u32 value; 646 647 reg = byt_gpio_reg(&vg->chip, i, BYT_CONF0_REG); 648 value = readl(reg) & BYT_CONF0_RESTORE_MASK; 649 vg->saved_context[i].conf0 = value; 650 651 reg = byt_gpio_reg(&vg->chip, i, BYT_VAL_REG); 652 value = readl(reg) & BYT_VAL_RESTORE_MASK; 653 vg->saved_context[i].val = value; 654 } 655 656 return 0; 657 } 658 659 static int byt_gpio_resume(struct device *dev) 660 { 661 struct platform_device *pdev = to_platform_device(dev); 662 struct byt_gpio *vg = platform_get_drvdata(pdev); 663 int i; 664 665 for (i = 0; i < vg->chip.ngpio; i++) { 666 void __iomem *reg; 667 u32 value; 668 669 reg = byt_gpio_reg(&vg->chip, i, BYT_CONF0_REG); 670 value = readl(reg); 671 if ((value & BYT_CONF0_RESTORE_MASK) != 672 vg->saved_context[i].conf0) { 673 value &= ~BYT_CONF0_RESTORE_MASK; 674 value |= vg->saved_context[i].conf0; 675 writel(value, reg); 676 dev_info(dev, "restored pin %d conf0 %#08x", i, value); 677 } 678 679 reg = byt_gpio_reg(&vg->chip, i, BYT_VAL_REG); 680 value = readl(reg); 681 if ((value & BYT_VAL_RESTORE_MASK) != 682 vg->saved_context[i].val) { 683 u32 v; 684 685 v = value & ~BYT_VAL_RESTORE_MASK; 686 v |= vg->saved_context[i].val; 687 if (v != value) { 688 writel(v, reg); 689 dev_dbg(dev, "restored pin %d val %#08x\n", 690 i, v); 691 } 692 } 693 } 694 695 return 0; 696 } 697 #endif 698 699 static int byt_gpio_runtime_suspend(struct device *dev) 700 { 701 return 0; 702 } 703 704 static int byt_gpio_runtime_resume(struct device *dev) 705 { 706 return 0; 707 } 708 709 static const struct dev_pm_ops byt_gpio_pm_ops = { 710 SET_LATE_SYSTEM_SLEEP_PM_OPS(byt_gpio_suspend, byt_gpio_resume) 711 SET_RUNTIME_PM_OPS(byt_gpio_runtime_suspend, byt_gpio_runtime_resume, 712 NULL) 713 }; 714 715 static const struct acpi_device_id byt_gpio_acpi_match[] = { 716 { "INT33B2", 0 }, 717 { "INT33FC", 0 }, 718 { } 719 }; 720 MODULE_DEVICE_TABLE(acpi, byt_gpio_acpi_match); 721 722 static int byt_gpio_remove(struct platform_device *pdev) 723 { 724 struct byt_gpio *vg = platform_get_drvdata(pdev); 725 726 pm_runtime_disable(&pdev->dev); 727 gpiochip_remove(&vg->chip); 728 729 return 0; 730 } 731 732 static struct platform_driver byt_gpio_driver = { 733 .probe = byt_gpio_probe, 734 .remove = byt_gpio_remove, 735 .driver = { 736 .name = "byt_gpio", 737 .pm = &byt_gpio_pm_ops, 738 .acpi_match_table = ACPI_PTR(byt_gpio_acpi_match), 739 }, 740 }; 741 742 static int __init byt_gpio_init(void) 743 { 744 return platform_driver_register(&byt_gpio_driver); 745 } 746 subsys_initcall(byt_gpio_init); 747 748 static void __exit byt_gpio_exit(void) 749 { 750 platform_driver_unregister(&byt_gpio_driver); 751 } 752 module_exit(byt_gpio_exit); 753