Lines Matching refs:tgpio
45 struct timbgpio *tgpio = gpiochip_get_data(gpio); in timbgpio_update_bit() local
49 spin_lock_irqsave(&tgpio->lock, flags); in timbgpio_update_bit()
50 reg = ioread32(tgpio->membase + offset); in timbgpio_update_bit()
57 iowrite32(reg, tgpio->membase + offset); in timbgpio_update_bit()
58 spin_unlock_irqrestore(&tgpio->lock, flags); in timbgpio_update_bit()
70 struct timbgpio *tgpio = gpiochip_get_data(gpio); in timbgpio_gpio_get() local
73 value = ioread32(tgpio->membase + TGPIOVAL); in timbgpio_gpio_get()
90 struct timbgpio *tgpio = gpiochip_get_data(gpio); in timbgpio_to_irq() local
92 if (tgpio->irq_base <= 0) in timbgpio_to_irq()
95 return tgpio->irq_base + offset; in timbgpio_to_irq()
103 struct timbgpio *tgpio = irq_data_get_irq_chip_data(d); in timbgpio_irq_disable() local
104 int offset = d->irq - tgpio->irq_base; in timbgpio_irq_disable()
108 spin_lock_irqsave(&tgpio->lock, flags); in timbgpio_irq_disable()
109 tgpio->last_ier &= ~(1UL << offset); in timbgpio_irq_disable()
110 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); in timbgpio_irq_disable()
111 spin_unlock_irqrestore(&tgpio->lock, flags); in timbgpio_irq_disable()
113 gpiochip_disable_irq(&tgpio->gpio, hwirq); in timbgpio_irq_disable()
118 struct timbgpio *tgpio = irq_data_get_irq_chip_data(d); in timbgpio_irq_enable() local
119 int offset = d->irq - tgpio->irq_base; in timbgpio_irq_enable()
123 gpiochip_enable_irq(&tgpio->gpio, hwirq); in timbgpio_irq_enable()
125 spin_lock_irqsave(&tgpio->lock, flags); in timbgpio_irq_enable()
126 tgpio->last_ier |= 1UL << offset; in timbgpio_irq_enable()
127 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); in timbgpio_irq_enable()
128 spin_unlock_irqrestore(&tgpio->lock, flags); in timbgpio_irq_enable()
133 struct timbgpio *tgpio = irq_data_get_irq_chip_data(d); in timbgpio_irq_type() local
134 int offset = d->irq - tgpio->irq_base; in timbgpio_irq_type()
140 if (offset < 0 || offset > tgpio->gpio.ngpio) in timbgpio_irq_type()
143 ver = ioread32(tgpio->membase + TGPIO_VER); in timbgpio_irq_type()
145 spin_lock_irqsave(&tgpio->lock, flags); in timbgpio_irq_type()
147 lvr = ioread32(tgpio->membase + TGPIO_LVR); in timbgpio_irq_type()
148 flr = ioread32(tgpio->membase + TGPIO_FLR); in timbgpio_irq_type()
150 bflr = ioread32(tgpio->membase + TGPIO_BFLR); in timbgpio_irq_type()
178 iowrite32(lvr, tgpio->membase + TGPIO_LVR); in timbgpio_irq_type()
179 iowrite32(flr, tgpio->membase + TGPIO_FLR); in timbgpio_irq_type()
181 iowrite32(bflr, tgpio->membase + TGPIO_BFLR); in timbgpio_irq_type()
183 iowrite32(1 << offset, tgpio->membase + TGPIO_ICR); in timbgpio_irq_type()
186 spin_unlock_irqrestore(&tgpio->lock, flags); in timbgpio_irq_type()
192 struct timbgpio *tgpio = irq_desc_get_handler_data(desc); in timbgpio_irq() local
198 ipr = ioread32(tgpio->membase + TGPIO_IPR); in timbgpio_irq()
199 iowrite32(ipr, tgpio->membase + TGPIO_ICR); in timbgpio_irq()
205 iowrite32(0, tgpio->membase + TGPIO_IER); in timbgpio_irq()
207 for_each_set_bit(offset, &ipr, tgpio->gpio.ngpio) in timbgpio_irq()
208 generic_handle_irq(timbgpio_to_irq(&tgpio->gpio, offset)); in timbgpio_irq()
210 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); in timbgpio_irq()
227 struct timbgpio *tgpio; in timbgpio_probe() local
236 tgpio = devm_kzalloc(dev, sizeof(*tgpio), GFP_KERNEL); in timbgpio_probe()
237 if (!tgpio) in timbgpio_probe()
240 tgpio->irq_base = pdata->irq_base; in timbgpio_probe()
242 spin_lock_init(&tgpio->lock); in timbgpio_probe()
244 tgpio->membase = devm_platform_ioremap_resource(pdev, 0); in timbgpio_probe()
245 if (IS_ERR(tgpio->membase)) in timbgpio_probe()
246 return PTR_ERR(tgpio->membase); in timbgpio_probe()
248 gc = &tgpio->gpio; in timbgpio_probe()
257 gc->to_irq = (irq >= 0 && tgpio->irq_base > 0) ? timbgpio_to_irq : NULL; in timbgpio_probe()
263 err = devm_gpiochip_add_data(&pdev->dev, gc, tgpio); in timbgpio_probe()
268 iowrite32(0x0, tgpio->membase + TGPIO_IER); in timbgpio_probe()
270 if (irq < 0 || tgpio->irq_base <= 0) in timbgpio_probe()
274 irq_set_chip_and_handler(tgpio->irq_base + i, in timbgpio_probe()
276 irq_set_chip_data(tgpio->irq_base + i, tgpio); in timbgpio_probe()
277 irq_clear_status_flags(tgpio->irq_base + i, IRQ_NOREQUEST | IRQ_NOPROBE); in timbgpio_probe()
280 irq_set_chained_handler_and_data(irq, timbgpio_irq, tgpio); in timbgpio_probe()