Lines Matching defs:bank
72 static inline void rockchip_gpio_writel(struct rockchip_pin_bank *bank, u32 value, unsigned int offset)
74 void __iomem *reg = bank->reg_base + offset;
76 if (bank->gpio_type == GPIO_TYPE_V2) {
83 static inline u32 rockchip_gpio_readl(struct rockchip_pin_bank *bank, unsigned int offset)
85 void __iomem *reg = bank->reg_base + offset;
88 if (bank->gpio_type == GPIO_TYPE_V2) {
97 static inline void rockchip_gpio_writel_bit(struct rockchip_pin_bank *bank, u32 bit, u32 value, unsigned int offset)
99 void __iomem *reg = bank->reg_base + offset;
102 if (bank->gpio_type == GPIO_TYPE_V2) {
119 static inline u32 rockchip_gpio_readl_bit(struct rockchip_pin_bank *bank, u32 bit, unsigned int offset)
121 void __iomem *reg = bank->reg_base + offset;
124 if (bank->gpio_type == GPIO_TYPE_V2) {
137 struct rockchip_pin_bank *bank = gpiochip_get_data(gc);
140 raw_spin_lock_irqsave(&bank->slock, flags);
141 rockchip_gpio_writel_bit(bank, offset, value, bank->gpio_regs->port_dr);
142 raw_spin_unlock_irqrestore(&bank->slock, flags);
147 struct rockchip_pin_bank *bank = gpiochip_get_data(gc);
150 data = readl(bank->reg_base + bank->gpio_regs->ext_port);
159 struct rockchip_pin_bank *bank = gpiochip_get_data(chip);
162 data = rockchip_gpio_readl_bit(bank, offset, bank->gpio_regs->port_ddr);
169 struct rockchip_pin_bank *bank = gpiochip_get_data(chip);
172 rockchip_gpio_writel_bit(bank, offset, data, bank->gpio_regs->port_ddr);
191 struct rockchip_pin_bank *bank = gpiochip_get_data(gc);
192 const struct rockchip_gpio_regs *reg = bank->gpio_regs;
198 if (!IS_ERR(bank->db_clk)) {
200 freq = clk_get_rate(bank->db_clk);
215 raw_spin_lock_irqsave(&bank->slock, flags);
221 cur_div_reg = readl(bank->reg_base + reg->dbclk_div_con);
223 writel(div_reg, bank->reg_base + reg->dbclk_div_con);
225 rockchip_gpio_writel_bit(bank, offset, 1, reg->dbclk_div_en);
228 rockchip_gpio_writel_bit(bank, offset, 1, reg->debounce);
231 rockchip_gpio_writel_bit(bank, offset, 0, reg->dbclk_div_en);
234 rockchip_gpio_writel_bit(bank, offset, 0, reg->debounce);
237 raw_spin_unlock_irqrestore(&bank->slock, flags);
242 clk_prepare_enable(bank->db_clk);
244 clk_disable_unprepare(bank->db_clk);
292 struct rockchip_pin_bank *bank = gpiochip_get_data(gc);
295 if (!bank->domain) {
299 virq = irq_create_mapping(bank->domain, offset);
320 struct rockchip_pin_bank *bank = irq_desc_get_handler_data(desc);
321 const struct rockchip_gpio_regs *reg = bank->gpio_regs;
324 dev_dbg(bank->dev, "got irq for bank %s\n", bank->name);
328 pend = readl_relaxed(bank->reg_base + reg->int_status);
335 virq = irq_find_mapping(bank->domain, irq);
337 dev_err(bank->dev, "unmapped irq %d\n", irq);
341 dev_dbg(bank->dev, "handling irq %d\n", irq);
347 if (bank->toggle_edge_mode & BIT(irq)) {
351 data = readl_relaxed(bank->reg_base + reg->ext_port);
353 raw_spin_lock_irqsave(&bank->slock, flags);
355 polarity = readl_relaxed(bank->reg_base + reg->int_polarity);
361 writel(polarity, bank->reg_base + reg->int_polarity);
363 raw_spin_unlock_irqrestore(&bank->slock, flags);
366 data = readl_relaxed(bank->reg_base + reg->ext_port);
379 struct rockchip_pin_bank *bank = gc->private;
387 raw_spin_lock_irqsave(&bank->slock, flags);
389 rockchip_gpio_writel_bit(bank, d->hwirq, 0, bank->gpio_regs->port_ddr);
391 raw_spin_unlock_irqrestore(&bank->slock, flags);
399 raw_spin_lock_irqsave(&bank->slock, flags);
401 level = rockchip_gpio_readl(bank, bank->gpio_regs->int_type);
402 polarity = rockchip_gpio_readl(bank, bank->gpio_regs->int_polarity);
406 if (bank->gpio_type == GPIO_TYPE_V2) {
407 bank->toggle_edge_mode &= ~mask;
408 rockchip_gpio_writel_bit(bank, d->hwirq, 1, bank->gpio_regs->int_bothedge);
411 bank->toggle_edge_mode |= mask;
418 data = readl(bank->reg_base + bank->gpio_regs->ext_port);
427 bank->toggle_edge_mode &= ~mask;
432 bank->toggle_edge_mode &= ~mask;
437 bank->toggle_edge_mode &= ~mask;
442 bank->toggle_edge_mode &= ~mask;
451 rockchip_gpio_writel(bank, level, bank->gpio_regs->int_type);
452 rockchip_gpio_writel(bank, polarity, bank->gpio_regs->int_polarity);
454 raw_spin_unlock_irqrestore(&bank->slock, flags);
462 struct rockchip_pin_bank *bank = gc->private;
464 bank->saved_masks = irq_reg_readl(gc, bank->gpio_regs->int_mask);
465 irq_reg_writel(gc, ~gc->wake_active, bank->gpio_regs->int_mask);
471 struct rockchip_pin_bank *bank = gc->private;
473 irq_reg_writel(gc, bank->saved_masks, bank->gpio_regs->int_mask);
476 static int rockchip_interrupts_register(struct rockchip_pin_bank *bank)
482 bank->domain = irq_domain_add_linear(bank->of_node, 0x20, &irq_generic_chip_ops, NULL);
483 if (!bank->domain) {
484 dev_warn(bank->dev, "could not initialize irq domain for bank %s\n", bank->name);
488 ret = irq_alloc_domain_generic_chips(bank->domain, 0x20, 1, bank->name, handle_level_irq, clr, 0, 0);
490 dev_err(bank->dev, "could not alloc generic chips for bank %s\n", bank->name);
491 irq_domain_remove(bank->domain);
495 gc = irq_get_domain_generic_chip(bank->domain, 0);
496 if (bank->gpio_type == GPIO_TYPE_V2) {
500 gc->reg_base = bank->reg_base;
501 gc->private = bank;
502 gc->chip_types[0].regs.mask = bank->gpio_regs->int_mask;
503 gc->chip_types[0].regs.ack = bank->gpio_regs->port_eoi;
513 gc->wake_enabled = IRQ_MSK(bank->nr_pins);
520 rockchip_gpio_writel(bank, 0xffffffff, bank->gpio_regs->int_mask);
521 rockchip_gpio_writel(bank, 0xffffffff, bank->gpio_regs->port_eoi);
522 rockchip_gpio_writel(bank, 0xffffffff, bank->gpio_regs->int_en);
525 irq_set_chained_handler_and_data(bank->irq, rockchip_irq_demux, bank);
530 static int rockchip_gpiolib_register(struct rockchip_pin_bank *bank)
535 bank->gpio_chip = rockchip_gpiolib_chip;
537 gc = &bank->gpio_chip;
538 gc->base = bank->pin_base;
539 gc->ngpio = bank->nr_pins;
540 gc->label = bank->name;
541 gc->parent = bank->dev;
543 gc->of_node = of_node_get(bank->of_node);
546 ret = gpiochip_add_data(gc, bank);
548 dev_err(bank->dev, "failed to add gpiochip %s, %d\n", gc->label, ret);
562 if (!of_property_read_bool(bank->of_node, "gpio-ranges")) {
563 struct device_node *pctlnp = of_get_parent(bank->of_node);
577 dev_err(bank->dev, "Failed to add pin range\n");
582 ret = rockchip_interrupts_register(bank);
584 dev_err(bank->dev, "failed to register interrupt, %d\n", ret);
591 gpiochip_remove(&bank->gpio_chip);
596 static int rockchip_get_bank_data(struct rockchip_pin_bank *bank)
601 if (of_address_to_resource(bank->of_node, 0, &res)) {
605 bank->reg_base = devm_ioremap_resource(bank->dev, &res);
606 if (IS_ERR(bank->reg_base)) {
607 return PTR_ERR(bank->reg_base);
610 bank->irq = irq_of_parse_and_map(bank->of_node, 0);
611 if (!bank->irq) {
615 bank->clk = of_clk_get(bank->of_node, 0);
616 if (IS_ERR(bank->clk)) {
617 return PTR_ERR(bank->clk);
620 clk_prepare_enable(bank->clk);
621 id = readl(bank->reg_base + gpio_regs_v2.version_id);
624 bank->gpio_regs = &gpio_regs_v2;
625 bank->gpio_type = GPIO_TYPE_V2;
626 bank->db_clk = of_clk_get(bank->of_node, 1);
627 if (IS_ERR(bank->db_clk)) {
628 dev_err(bank->dev, "cannot find debounce clk\n");
629 bank->db_clk = NULL;
633 bank->gpio_regs = &gpio_regs_v1;
634 bank->gpio_type = GPIO_TYPE_V1;
643 struct rockchip_pin_bank *bank;
647 bank = info->ctrl->pin_banks;
648 for (i = 0; i < info->ctrl->nr_banks; i++, bank++) {
649 if (bank->bank_num == id) {
655 return found ? bank : NULL;
664 struct rockchip_pin_bank *bank = NULL;
682 bank = rockchip_gpio_find_bank(pctldev, id);
683 if (!bank) {
687 bank->dev = dev;
688 bank->of_node = dev->of_node;
690 raw_spin_lock_init(&bank->slock);
692 ret = rockchip_get_bank_data(bank);
697 ret = rockchip_gpiolib_register(bank);
702 platform_set_drvdata(pdev, bank);
703 dev_info(dev, "probed %s (%s)\n", bank->name, dev_name(dev));
707 clk_disable_unprepare(bank->clk);
714 struct rockchip_pin_bank *bank = platform_get_drvdata(pdev);
716 clk_disable_unprepare(bank->clk);
717 gpiochip_remove(&bank->gpio_chip);
724 .compatible = "rockchip,gpio-bank",