Lines Matching refs:pio
40 struct pio_device *pio; in gpio_to_pio() local
46 pio = &pio_dev[index]; in gpio_to_pio()
47 if (!pio->regs) in gpio_to_pio()
50 return pio; in gpio_to_pio()
59 struct pio_device *pio; in at32_select_periph() local
62 pio = gpio_to_pio(port); in at32_select_periph()
63 if (unlikely(!pio)) { in at32_select_periph()
70 if (unlikely(pio->pinmux_mask & pin_mask)) { in at32_select_periph()
72 pio->name, pin_mask, pio->pinmux_mask & pin_mask); in at32_select_periph()
77 pio->pinmux_mask |= pin_mask; in at32_select_periph()
80 pio_writel(pio, PUER, pin_mask); in at32_select_periph()
84 pio_writel(pio, BSR, pin_mask); in at32_select_periph()
86 pio_writel(pio, ASR, pin_mask); in at32_select_periph()
89 pio_writel(pio, PDR, pin_mask); in at32_select_periph()
93 pio_writel(pio, PUDR, pin_mask); in at32_select_periph()
105 struct pio_device *pio; in at32_select_gpio() local
109 pio = gpio_to_pio(pin); in at32_select_gpio()
110 if (unlikely(!pio)) { in at32_select_gpio()
115 if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask))) { in at32_select_gpio()
116 printk("%s: pin %u is busy\n", pio->name, pin_index); in at32_select_gpio()
122 pio_writel(pio, SODR, mask); in at32_select_gpio()
124 pio_writel(pio, CODR, mask); in at32_select_gpio()
126 pio_writel(pio, MDER, mask); in at32_select_gpio()
128 pio_writel(pio, MDDR, mask); in at32_select_gpio()
129 pio_writel(pio, PUDR, mask); in at32_select_gpio()
130 pio_writel(pio, OER, mask); in at32_select_gpio()
133 pio_writel(pio, PUER, mask); in at32_select_gpio()
135 pio_writel(pio, PUDR, mask); in at32_select_gpio()
137 pio_writel(pio, IFER, mask); in at32_select_gpio()
139 pio_writel(pio, IFDR, mask); in at32_select_gpio()
140 pio_writel(pio, ODR, mask); in at32_select_gpio()
143 pio_writel(pio, PER, mask); in at32_select_gpio()
157 struct pio_device *pio; in at32_deselect_pin() local
160 pio = gpio_to_pio(pin); in at32_deselect_pin()
161 if (unlikely(!pio)) { in at32_deselect_pin()
167 clear_bit(pin_index, &pio->pinmux_mask); in at32_deselect_pin()
173 struct pio_device *pio; in at32_reserve_pin() local
176 pio = gpio_to_pio(port); in at32_reserve_pin()
177 if (unlikely(!pio)) { in at32_reserve_pin()
184 if (unlikely(pio->pinmux_mask & pin_mask)) { in at32_reserve_pin()
186 pio->name, pin_mask, pio->pinmux_mask & pin_mask); in at32_reserve_pin()
192 pio->pinmux_mask |= pin_mask; in at32_reserve_pin()
206 struct pio_device *pio = container_of(chip, struct pio_device, chip); in direction_input() local
209 if (!(pio_readl(pio, PSR) & mask)) in direction_input()
212 pio_writel(pio, ODR, mask); in direction_input()
218 struct pio_device *pio = container_of(chip, struct pio_device, chip); in gpio_get() local
220 return (pio_readl(pio, PDSR) >> offset) & 1; in gpio_get()
227 struct pio_device *pio = container_of(chip, struct pio_device, chip); in direction_output() local
230 if (!(pio_readl(pio, PSR) & mask)) in direction_output()
234 pio_writel(pio, OER, mask); in direction_output()
240 struct pio_device *pio = container_of(chip, struct pio_device, chip); in gpio_set() local
244 pio_writel(pio, SODR, mask); in gpio_set()
246 pio_writel(pio, CODR, mask); in gpio_set()
256 struct pio_device *pio = &pio_dev[gpio >> 5]; in gpio_irq_mask() local
258 pio_writel(pio, IDR, 1 << (gpio & 0x1f)); in gpio_irq_mask()
264 struct pio_device *pio = &pio_dev[gpio >> 5]; in gpio_irq_unmask() local
266 pio_writel(pio, IER, 1 << (gpio & 0x1f)); in gpio_irq_unmask()
286 struct pio_device *pio = irq_desc_get_chip_data(desc); in gpio_irq_handler() local
294 isr = pio_readl(pio, ISR) & pio_readl(pio, IMR); in gpio_irq_handler()
310 gpio_irq_setup(struct pio_device *pio, int irq, int gpio_irq) in gpio_irq_setup() argument
314 irq_set_chip_data(irq, pio); in gpio_irq_setup()
318 irq_set_chip_data(gpio_irq, pio); in gpio_irq_setup()
338 struct pio_device *pio = container_of(chip, struct pio_device, chip); in pio_bank_show() local
344 psr = pio_readl(pio, PSR); in pio_bank_show()
345 osr = pio_readl(pio, OSR); in pio_bank_show()
346 imr = pio_readl(pio, IMR); in pio_bank_show()
347 pdsr = pio_readl(pio, PDSR); in pio_bank_show()
348 pusr = pio_readl(pio, PUSR); in pio_bank_show()
349 ifsr = pio_readl(pio, IFSR); in pio_bank_show()
350 mdsr = pio_readl(pio, MDSR); in pio_bank_show()
352 bank = 'A' + pio->pdev->id; in pio_bank_show()
389 struct pio_device *pio = NULL; in pio_probe() local
394 pio = &pio_dev[pdev->id]; in pio_probe()
395 BUG_ON(!pio->regs); in pio_probe()
397 pio->chip.label = pio->name; in pio_probe()
398 pio->chip.base = pdev->id * 32; in pio_probe()
399 pio->chip.ngpio = 32; in pio_probe()
400 pio->chip.dev = &pdev->dev; in pio_probe()
401 pio->chip.owner = THIS_MODULE; in pio_probe()
403 pio->chip.direction_input = direction_input; in pio_probe()
404 pio->chip.get = gpio_get; in pio_probe()
405 pio->chip.direction_output = direction_output; in pio_probe()
406 pio->chip.set = gpio_set; in pio_probe()
407 pio->chip.dbg_show = pio_bank_show; in pio_probe()
409 gpiochip_add(&pio->chip); in pio_probe()
411 gpio_irq_setup(pio, irq, gpio_irq_base); in pio_probe()
413 platform_set_drvdata(pdev, pio); in pio_probe()
416 pio->name, pio->regs, irq, gpio_irq_base, gpio_irq_base + 31); in pio_probe()
436 struct pio_device *pio; in at32_init_pio() local
444 pio = &pio_dev[pdev->id]; in at32_init_pio()
445 snprintf(pio->name, sizeof(pio->name), "pio%d", pdev->id); in at32_init_pio()
453 pio->clk = clk_get(&pdev->dev, "mck"); in at32_init_pio()
454 if (IS_ERR(pio->clk)) in at32_init_pio()
462 clk_enable(pio->clk); in at32_init_pio()
464 pio->pdev = pdev; in at32_init_pio()
465 pio->regs = ioremap(regs->start, resource_size(regs)); in at32_init_pio()
468 pio_writel(pio, IDR, ~0UL); in at32_init_pio()
469 (void) pio_readl(pio, ISR); in at32_init_pio()