plgpio 110 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(chip); plgpio 114 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & PTO_DIR_REG)) { plgpio 115 drivers/pinctrl/spear/pinctrl-plgpio.c offset = plgpio->p2o(offset); plgpio 120 drivers/pinctrl/spear/pinctrl-plgpio.c spin_lock_irqsave(&plgpio->lock, flags); plgpio 121 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_set(plgpio->base, offset, plgpio->regs.dir); plgpio 122 drivers/pinctrl/spear/pinctrl-plgpio.c spin_unlock_irqrestore(&plgpio->lock, flags); plgpio 130 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(chip); plgpio 135 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & (PTO_DIR_REG | PTO_WDATA_REG))) { plgpio 136 drivers/pinctrl/spear/pinctrl-plgpio.c tmp = plgpio->p2o(offset); plgpio 140 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o_regs & PTO_DIR_REG) plgpio 142 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o_regs & PTO_WDATA_REG) plgpio 146 drivers/pinctrl/spear/pinctrl-plgpio.c spin_lock_irqsave(&plgpio->lock, flags); plgpio 148 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_set(plgpio->base, wdata_offset, plgpio 149 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.wdata); plgpio 151 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_reset(plgpio->base, wdata_offset, plgpio 152 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.wdata); plgpio 154 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_reset(plgpio->base, dir_offset, plgpio->regs.dir); plgpio 155 drivers/pinctrl/spear/pinctrl-plgpio.c spin_unlock_irqrestore(&plgpio->lock, flags); plgpio 162 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(chip); plgpio 168 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & PTO_RDATA_REG)) { plgpio 169 drivers/pinctrl/spear/pinctrl-plgpio.c offset = plgpio->p2o(offset); plgpio 174 drivers/pinctrl/spear/pinctrl-plgpio.c return is_plgpio_set(plgpio->base, offset, plgpio->regs.rdata); plgpio 179 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(chip); plgpio 185 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & PTO_WDATA_REG)) { plgpio 186 drivers/pinctrl/spear/pinctrl-plgpio.c offset = plgpio->p2o(offset); plgpio 192 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_set(plgpio->base, offset, plgpio->regs.wdata); plgpio 194 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_reset(plgpio->base, offset, plgpio->regs.wdata); plgpio 199 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(chip); plgpio 211 drivers/pinctrl/spear/pinctrl-plgpio.c if (!IS_ERR(plgpio->clk)) { plgpio 212 drivers/pinctrl/spear/pinctrl-plgpio.c ret = clk_enable(plgpio->clk); plgpio 217 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.enb == -1) plgpio 228 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & PTO_ENB_REG)) { plgpio 229 drivers/pinctrl/spear/pinctrl-plgpio.c offset = plgpio->p2o(offset); plgpio 236 drivers/pinctrl/spear/pinctrl-plgpio.c spin_lock_irqsave(&plgpio->lock, flags); plgpio 237 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_set(plgpio->base, offset, plgpio->regs.enb); plgpio 238 drivers/pinctrl/spear/pinctrl-plgpio.c spin_unlock_irqrestore(&plgpio->lock, flags); plgpio 242 drivers/pinctrl/spear/pinctrl-plgpio.c if (!IS_ERR(plgpio->clk)) plgpio 243 drivers/pinctrl/spear/pinctrl-plgpio.c clk_disable(plgpio->clk); plgpio 251 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(chip); plgpio 258 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.enb == -1) plgpio 262 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & PTO_ENB_REG)) { plgpio 263 drivers/pinctrl/spear/pinctrl-plgpio.c offset = plgpio->p2o(offset); plgpio 268 drivers/pinctrl/spear/pinctrl-plgpio.c spin_lock_irqsave(&plgpio->lock, flags); plgpio 269 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_reset(plgpio->base, offset, plgpio->regs.enb); plgpio 270 drivers/pinctrl/spear/pinctrl-plgpio.c spin_unlock_irqrestore(&plgpio->lock, flags); plgpio 273 drivers/pinctrl/spear/pinctrl-plgpio.c if (!IS_ERR(plgpio->clk)) plgpio 274 drivers/pinctrl/spear/pinctrl-plgpio.c clk_disable(plgpio->clk); plgpio 283 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(gc); plgpio 288 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & PTO_IE_REG)) { plgpio 289 drivers/pinctrl/spear/pinctrl-plgpio.c offset = plgpio->p2o(offset); plgpio 294 drivers/pinctrl/spear/pinctrl-plgpio.c spin_lock_irqsave(&plgpio->lock, flags); plgpio 295 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_set(plgpio->base, offset, plgpio->regs.ie); plgpio 296 drivers/pinctrl/spear/pinctrl-plgpio.c spin_unlock_irqrestore(&plgpio->lock, flags); plgpio 302 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(gc); plgpio 307 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->p2o && (plgpio->p2o_regs & PTO_IE_REG)) { plgpio 308 drivers/pinctrl/spear/pinctrl-plgpio.c offset = plgpio->p2o(offset); plgpio 313 drivers/pinctrl/spear/pinctrl-plgpio.c spin_lock_irqsave(&plgpio->lock, flags); plgpio 314 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio_reg_reset(plgpio->base, offset, plgpio->regs.ie); plgpio 315 drivers/pinctrl/spear/pinctrl-plgpio.c spin_unlock_irqrestore(&plgpio->lock, flags); plgpio 321 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(gc); plgpio 326 drivers/pinctrl/spear/pinctrl-plgpio.c if (offset >= plgpio->chip.ngpio) plgpio 329 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.eit == -1) plgpio 337 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.eit == -1) plgpio 340 drivers/pinctrl/spear/pinctrl-plgpio.c reg_off = REG_OFFSET(plgpio->base, plgpio->regs.eit, offset); plgpio 362 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = gpiochip_get_data(gc); plgpio 367 drivers/pinctrl/spear/pinctrl-plgpio.c count = plgpio->chip.ngpio; plgpio 373 drivers/pinctrl/spear/pinctrl-plgpio.c pending = readl_relaxed(plgpio->base + plgpio->regs.mis + plgpio 379 drivers/pinctrl/spear/pinctrl-plgpio.c writel_relaxed(~pending, plgpio->base + plgpio->regs.mis + plgpio 394 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->o2p && (plgpio->p2o_regs & PTO_MIS_REG)) { plgpio 395 drivers/pinctrl/spear/pinctrl-plgpio.c pin = plgpio->o2p(offset); plgpio 445 drivers/pinctrl/spear/pinctrl-plgpio.c static int plgpio_probe_dt(struct platform_device *pdev, struct plgpio *plgpio) plgpio 452 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->p2o = spear310_p2o; plgpio 453 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->o2p = spear310_o2p; plgpio 454 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->p2o_regs = PTO_WDATA_REG | PTO_DIR_REG | PTO_IE_REG | plgpio 459 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.ngpio = val; plgpio 466 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.enb = val; plgpio 468 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.enb = -1; plgpio 471 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.wdata = val; plgpio 478 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.dir = val; plgpio 485 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.ie = val; plgpio 492 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.rdata = val; plgpio 499 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.mis = val; plgpio 506 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.eit = val; plgpio 508 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.eit = -1; plgpio 517 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio; plgpio 521 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio = devm_kzalloc(&pdev->dev, sizeof(*plgpio), GFP_KERNEL); plgpio 522 drivers/pinctrl/spear/pinctrl-plgpio.c if (!plgpio) plgpio 526 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->base = devm_ioremap_resource(&pdev->dev, res); plgpio 527 drivers/pinctrl/spear/pinctrl-plgpio.c if (IS_ERR(plgpio->base)) plgpio 528 drivers/pinctrl/spear/pinctrl-plgpio.c return PTR_ERR(plgpio->base); plgpio 530 drivers/pinctrl/spear/pinctrl-plgpio.c ret = plgpio_probe_dt(pdev, plgpio); plgpio 536 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->clk = devm_clk_get(&pdev->dev, NULL); plgpio 537 drivers/pinctrl/spear/pinctrl-plgpio.c if (IS_ERR(plgpio->clk)) plgpio 541 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->csave_regs = devm_kcalloc(&pdev->dev, plgpio 542 drivers/pinctrl/spear/pinctrl-plgpio.c DIV_ROUND_UP(plgpio->chip.ngpio, MAX_GPIO_PER_REG), plgpio 543 drivers/pinctrl/spear/pinctrl-plgpio.c sizeof(*plgpio->csave_regs), plgpio 545 drivers/pinctrl/spear/pinctrl-plgpio.c if (!plgpio->csave_regs) plgpio 549 drivers/pinctrl/spear/pinctrl-plgpio.c platform_set_drvdata(pdev, plgpio); plgpio 550 drivers/pinctrl/spear/pinctrl-plgpio.c spin_lock_init(&plgpio->lock); plgpio 552 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.base = -1; plgpio 553 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.request = plgpio_request; plgpio 554 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.free = plgpio_free; plgpio 555 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.direction_input = plgpio_direction_input; plgpio 556 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.direction_output = plgpio_direction_output; plgpio 557 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.get = plgpio_get_value; plgpio 558 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.set = plgpio_set_value; plgpio 559 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.label = dev_name(&pdev->dev); plgpio 560 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.parent = &pdev->dev; plgpio 561 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.owner = THIS_MODULE; plgpio 562 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->chip.of_node = pdev->dev.of_node; plgpio 564 drivers/pinctrl/spear/pinctrl-plgpio.c if (!IS_ERR(plgpio->clk)) { plgpio 565 drivers/pinctrl/spear/pinctrl-plgpio.c ret = clk_prepare(plgpio->clk); plgpio 572 drivers/pinctrl/spear/pinctrl-plgpio.c ret = gpiochip_add_data(&plgpio->chip, plgpio); plgpio 584 drivers/pinctrl/spear/pinctrl-plgpio.c ret = gpiochip_irqchip_add(&plgpio->chip, plgpio 594 drivers/pinctrl/spear/pinctrl-plgpio.c gpiochip_set_chained_irqchip(&plgpio->chip, plgpio 605 drivers/pinctrl/spear/pinctrl-plgpio.c gpiochip_remove(&plgpio->chip); plgpio 607 drivers/pinctrl/spear/pinctrl-plgpio.c if (!IS_ERR(plgpio->clk)) plgpio 608 drivers/pinctrl/spear/pinctrl-plgpio.c clk_unprepare(plgpio->clk); plgpio 616 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = dev_get_drvdata(dev); plgpio 617 drivers/pinctrl/spear/pinctrl-plgpio.c int i, reg_count = DIV_ROUND_UP(plgpio->chip.ngpio, MAX_GPIO_PER_REG); plgpio 621 drivers/pinctrl/spear/pinctrl-plgpio.c off = plgpio->base + i * sizeof(int *); plgpio 623 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.enb != -1) plgpio 624 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->csave_regs[i].enb = plgpio 625 drivers/pinctrl/spear/pinctrl-plgpio.c readl_relaxed(plgpio->regs.enb + off); plgpio 626 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.eit != -1) plgpio 627 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->csave_regs[i].eit = plgpio 628 drivers/pinctrl/spear/pinctrl-plgpio.c readl_relaxed(plgpio->regs.eit + off); plgpio 629 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->csave_regs[i].wdata = readl_relaxed(plgpio->regs.wdata + plgpio 631 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->csave_regs[i].dir = readl_relaxed(plgpio->regs.dir + plgpio 633 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->csave_regs[i].ie = readl_relaxed(plgpio->regs.ie + off); plgpio 647 drivers/pinctrl/spear/pinctrl-plgpio.c _tmp = readl_relaxed(plgpio->regs.__reg + _off); \ plgpio 649 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->csave_regs[i].__reg = \ plgpio 650 drivers/pinctrl/spear/pinctrl-plgpio.c _tmp | (plgpio->csave_regs[i].__reg & _mask); \ plgpio 655 drivers/pinctrl/spear/pinctrl-plgpio.c struct plgpio *plgpio = dev_get_drvdata(dev); plgpio 656 drivers/pinctrl/spear/pinctrl-plgpio.c int i, reg_count = DIV_ROUND_UP(plgpio->chip.ngpio, MAX_GPIO_PER_REG); plgpio 661 drivers/pinctrl/spear/pinctrl-plgpio.c off = plgpio->base + i * sizeof(int *); plgpio 664 drivers/pinctrl/spear/pinctrl-plgpio.c mask = (1 << (plgpio->chip.ngpio - i * plgpio 667 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.enb != -1) plgpio 670 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.eit != -1) plgpio 678 drivers/pinctrl/spear/pinctrl-plgpio.c writel_relaxed(plgpio->csave_regs[i].wdata, plgpio->regs.wdata + plgpio 680 drivers/pinctrl/spear/pinctrl-plgpio.c writel_relaxed(plgpio->csave_regs[i].dir, plgpio->regs.dir + plgpio 683 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.eit != -1) plgpio 684 drivers/pinctrl/spear/pinctrl-plgpio.c writel_relaxed(plgpio->csave_regs[i].eit, plgpio 685 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.eit + off); plgpio 687 drivers/pinctrl/spear/pinctrl-plgpio.c writel_relaxed(plgpio->csave_regs[i].ie, plgpio->regs.ie + off); plgpio 689 drivers/pinctrl/spear/pinctrl-plgpio.c if (plgpio->regs.enb != -1) plgpio 690 drivers/pinctrl/spear/pinctrl-plgpio.c writel_relaxed(plgpio->csave_regs[i].enb, plgpio 691 drivers/pinctrl/spear/pinctrl-plgpio.c plgpio->regs.enb + off);