• Home
  • Raw
  • Download

Lines Matching refs:sgpio

430 sirfsoc_gpio_to_bank(struct sirfsoc_gpio_chip *sgpio, unsigned int offset)  in sirfsoc_gpio_to_bank()  argument
432 return &sgpio->sgpio_bank[offset / SIRFSOC_GPIO_BANK_SIZE]; in sirfsoc_gpio_to_bank()
443 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(gc); in sirfsoc_gpio_irq_ack() local
444 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, d->hwirq); in sirfsoc_gpio_irq_ack()
453 val = readl(sgpio->chip.regs + offset); in sirfsoc_gpio_irq_ack()
455 writel(val, sgpio->chip.regs + offset); in sirfsoc_gpio_irq_ack()
460 static void __sirfsoc_gpio_irq_mask(struct sirfsoc_gpio_chip *sgpio, in __sirfsoc_gpio_irq_mask() argument
471 val = readl(sgpio->chip.regs + offset); in __sirfsoc_gpio_irq_mask()
474 writel(val, sgpio->chip.regs + offset); in __sirfsoc_gpio_irq_mask()
482 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(gc); in sirfsoc_gpio_irq_mask() local
483 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, d->hwirq); in sirfsoc_gpio_irq_mask()
485 __sirfsoc_gpio_irq_mask(sgpio, bank, d->hwirq % SIRFSOC_GPIO_BANK_SIZE); in sirfsoc_gpio_irq_mask()
491 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(gc); in sirfsoc_gpio_irq_unmask() local
492 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, d->hwirq); in sirfsoc_gpio_irq_unmask()
501 val = readl(sgpio->chip.regs + offset); in sirfsoc_gpio_irq_unmask()
504 writel(val, sgpio->chip.regs + offset); in sirfsoc_gpio_irq_unmask()
512 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(gc); in sirfsoc_gpio_irq_type() local
513 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, d->hwirq); in sirfsoc_gpio_irq_type()
522 val = readl(sgpio->chip.regs + offset); in sirfsoc_gpio_irq_type()
555 writel(val, sgpio->chip.regs + offset); in sirfsoc_gpio_irq_type()
573 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(gc); in sirfsoc_gpio_handle_irq() local
581 bank = &sgpio->sgpio_bank[i]; in sirfsoc_gpio_handle_irq()
589 status = readl(sgpio->chip.regs + SIRFSOC_GPIO_INT_STATUS(bank->id)); in sirfsoc_gpio_handle_irq()
599 ctrl = readl(sgpio->chip.regs + SIRFSOC_GPIO_CTRL(bank->id, idx)); in sirfsoc_gpio_handle_irq()
619 static inline void sirfsoc_gpio_set_input(struct sirfsoc_gpio_chip *sgpio, in sirfsoc_gpio_set_input() argument
624 val = readl(sgpio->chip.regs + ctrl_offset); in sirfsoc_gpio_set_input()
626 writel(val, sgpio->chip.regs + ctrl_offset); in sirfsoc_gpio_set_input()
631 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(chip); in sirfsoc_gpio_request() local
632 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, offset); in sirfsoc_gpio_request()
644 sirfsoc_gpio_set_input(sgpio, SIRFSOC_GPIO_CTRL(bank->id, offset)); in sirfsoc_gpio_request()
645 __sirfsoc_gpio_irq_mask(sgpio, bank, offset); in sirfsoc_gpio_request()
654 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(chip); in sirfsoc_gpio_free() local
655 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, offset); in sirfsoc_gpio_free()
660 __sirfsoc_gpio_irq_mask(sgpio, bank, offset); in sirfsoc_gpio_free()
661 sirfsoc_gpio_set_input(sgpio, SIRFSOC_GPIO_CTRL(bank->id, offset)); in sirfsoc_gpio_free()
670 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(chip); in sirfsoc_gpio_direction_input() local
671 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, gpio); in sirfsoc_gpio_direction_input()
680 sirfsoc_gpio_set_input(sgpio, offset); in sirfsoc_gpio_direction_input()
687 static inline void sirfsoc_gpio_set_output(struct sirfsoc_gpio_chip *sgpio, in sirfsoc_gpio_set_output() argument
697 out_ctrl = readl(sgpio->chip.regs + offset); in sirfsoc_gpio_set_output()
705 writel(out_ctrl, sgpio->chip.regs + offset); in sirfsoc_gpio_set_output()
713 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(chip); in sirfsoc_gpio_direction_output() local
714 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, gpio); in sirfsoc_gpio_direction_output()
723 sirfsoc_gpio_set_output(sgpio, bank, offset, value); in sirfsoc_gpio_direction_output()
732 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(chip); in sirfsoc_gpio_get_value() local
733 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, offset); in sirfsoc_gpio_get_value()
739 val = readl(sgpio->chip.regs + SIRFSOC_GPIO_CTRL(bank->id, offset)); in sirfsoc_gpio_get_value()
749 struct sirfsoc_gpio_chip *sgpio = to_sirfsoc_gpio(chip); in sirfsoc_gpio_set_value() local
750 struct sirfsoc_gpio_bank *bank = sirfsoc_gpio_to_bank(sgpio, offset); in sirfsoc_gpio_set_value()
756 ctrl = readl(sgpio->chip.regs + SIRFSOC_GPIO_CTRL(bank->id, offset)); in sirfsoc_gpio_set_value()
761 writel(ctrl, sgpio->chip.regs + SIRFSOC_GPIO_CTRL(bank->id, offset)); in sirfsoc_gpio_set_value()
766 static void sirfsoc_gpio_set_pullup(struct sirfsoc_gpio_chip *sgpio, in sirfsoc_gpio_set_pullup() argument
775 u32 val = readl(sgpio->chip.regs + offset); in sirfsoc_gpio_set_pullup()
778 writel(val, sgpio->chip.regs + offset); in sirfsoc_gpio_set_pullup()
783 static void sirfsoc_gpio_set_pulldown(struct sirfsoc_gpio_chip *sgpio, in sirfsoc_gpio_set_pulldown() argument
792 u32 val = readl(sgpio->chip.regs + offset); in sirfsoc_gpio_set_pulldown()
795 writel(val, sgpio->chip.regs + offset); in sirfsoc_gpio_set_pulldown()
803 static struct sirfsoc_gpio_chip *sgpio; in sirfsoc_gpio_probe() local
815 sgpio = devm_kzalloc(&pdev->dev, sizeof(*sgpio), GFP_KERNEL); in sirfsoc_gpio_probe()
816 if (!sgpio) in sirfsoc_gpio_probe()
826 sgpio->chip.gc.request = sirfsoc_gpio_request; in sirfsoc_gpio_probe()
827 sgpio->chip.gc.free = sirfsoc_gpio_free; in sirfsoc_gpio_probe()
828 sgpio->chip.gc.direction_input = sirfsoc_gpio_direction_input; in sirfsoc_gpio_probe()
829 sgpio->chip.gc.get = sirfsoc_gpio_get_value; in sirfsoc_gpio_probe()
830 sgpio->chip.gc.direction_output = sirfsoc_gpio_direction_output; in sirfsoc_gpio_probe()
831 sgpio->chip.gc.set = sirfsoc_gpio_set_value; in sirfsoc_gpio_probe()
832 sgpio->chip.gc.base = 0; in sirfsoc_gpio_probe()
833 sgpio->chip.gc.ngpio = SIRFSOC_GPIO_BANK_SIZE * SIRFSOC_GPIO_NO_OF_BANKS; in sirfsoc_gpio_probe()
834 sgpio->chip.gc.label = kstrdup(np->full_name, GFP_KERNEL); in sirfsoc_gpio_probe()
835 sgpio->chip.gc.of_node = np; in sirfsoc_gpio_probe()
836 sgpio->chip.gc.of_xlate = sirfsoc_gpio_of_xlate; in sirfsoc_gpio_probe()
837 sgpio->chip.gc.of_gpio_n_cells = 2; in sirfsoc_gpio_probe()
838 sgpio->chip.gc.dev = &pdev->dev; in sirfsoc_gpio_probe()
839 sgpio->chip.regs = regs; in sirfsoc_gpio_probe()
840 sgpio->is_marco = is_marco; in sirfsoc_gpio_probe()
842 err = gpiochip_add(&sgpio->chip.gc); in sirfsoc_gpio_probe()
849 err = gpiochip_irqchip_add(&sgpio->chip.gc, in sirfsoc_gpio_probe()
860 bank = &sgpio->sgpio_bank[i]; in sirfsoc_gpio_probe()
868 gpiochip_set_chained_irqchip(&sgpio->chip.gc, in sirfsoc_gpio_probe()
874 err = gpiochip_add_pin_range(&sgpio->chip.gc, dev_name(&pdev->dev), in sirfsoc_gpio_probe()
884 sirfsoc_gpio_set_pullup(sgpio, pullups); in sirfsoc_gpio_probe()
888 sirfsoc_gpio_set_pulldown(sgpio, pulldowns); in sirfsoc_gpio_probe()
894 gpiochip_remove(&sgpio->chip.gc); in sirfsoc_gpio_probe()