Lines Matching refs:tgpio

56 	struct timbgpio *tgpio = container_of(gpio, struct timbgpio, gpio);  in timbgpio_update_bit()  local
59 spin_lock(&tgpio->lock); in timbgpio_update_bit()
60 reg = ioread32(tgpio->membase + offset); in timbgpio_update_bit()
67 iowrite32(reg, tgpio->membase + offset); in timbgpio_update_bit()
68 spin_unlock(&tgpio->lock); in timbgpio_update_bit()
80 struct timbgpio *tgpio = container_of(gpio, struct timbgpio, gpio); in timbgpio_gpio_get() local
83 value = ioread32(tgpio->membase + TGPIOVAL); in timbgpio_gpio_get()
101 struct timbgpio *tgpio = container_of(gpio, struct timbgpio, gpio); in timbgpio_to_irq() local
103 if (tgpio->irq_base <= 0) in timbgpio_to_irq()
106 return tgpio->irq_base + offset; in timbgpio_to_irq()
114 struct timbgpio *tgpio = irq_data_get_irq_chip_data(d); in timbgpio_irq_disable() local
115 int offset = d->irq - tgpio->irq_base; in timbgpio_irq_disable()
118 spin_lock_irqsave(&tgpio->lock, flags); in timbgpio_irq_disable()
119 tgpio->last_ier &= ~(1UL << offset); in timbgpio_irq_disable()
120 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); in timbgpio_irq_disable()
121 spin_unlock_irqrestore(&tgpio->lock, flags); in timbgpio_irq_disable()
126 struct timbgpio *tgpio = irq_data_get_irq_chip_data(d); in timbgpio_irq_enable() local
127 int offset = d->irq - tgpio->irq_base; in timbgpio_irq_enable()
130 spin_lock_irqsave(&tgpio->lock, flags); in timbgpio_irq_enable()
131 tgpio->last_ier |= 1UL << offset; in timbgpio_irq_enable()
132 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); in timbgpio_irq_enable()
133 spin_unlock_irqrestore(&tgpio->lock, flags); in timbgpio_irq_enable()
138 struct timbgpio *tgpio = irq_data_get_irq_chip_data(d); in timbgpio_irq_type() local
139 int offset = d->irq - tgpio->irq_base; in timbgpio_irq_type()
145 if (offset < 0 || offset > tgpio->gpio.ngpio) in timbgpio_irq_type()
148 ver = ioread32(tgpio->membase + TGPIO_VER); in timbgpio_irq_type()
150 spin_lock_irqsave(&tgpio->lock, flags); in timbgpio_irq_type()
152 lvr = ioread32(tgpio->membase + TGPIO_LVR); in timbgpio_irq_type()
153 flr = ioread32(tgpio->membase + TGPIO_FLR); in timbgpio_irq_type()
155 bflr = ioread32(tgpio->membase + TGPIO_BFLR); in timbgpio_irq_type()
183 iowrite32(lvr, tgpio->membase + TGPIO_LVR); in timbgpio_irq_type()
184 iowrite32(flr, tgpio->membase + TGPIO_FLR); in timbgpio_irq_type()
186 iowrite32(bflr, tgpio->membase + TGPIO_BFLR); in timbgpio_irq_type()
188 iowrite32(1 << offset, tgpio->membase + TGPIO_ICR); in timbgpio_irq_type()
191 spin_unlock_irqrestore(&tgpio->lock, flags); in timbgpio_irq_type()
197 struct timbgpio *tgpio = irq_desc_get_handler_data(desc); in timbgpio_irq() local
203 ipr = ioread32(tgpio->membase + TGPIO_IPR); in timbgpio_irq()
204 iowrite32(ipr, tgpio->membase + TGPIO_ICR); in timbgpio_irq()
210 iowrite32(0, tgpio->membase + TGPIO_IER); in timbgpio_irq()
212 for_each_set_bit(offset, &ipr, tgpio->gpio.ngpio) in timbgpio_irq()
213 generic_handle_irq(timbgpio_to_irq(&tgpio->gpio, offset)); in timbgpio_irq()
215 iowrite32(tgpio->last_ier, tgpio->membase + TGPIO_IER); in timbgpio_irq()
230 struct timbgpio *tgpio; in timbgpio_probe() local
246 tgpio = devm_kzalloc(dev, sizeof(struct timbgpio), GFP_KERNEL); in timbgpio_probe()
247 if (!tgpio) { in timbgpio_probe()
251 tgpio->irq_base = pdata->irq_base; in timbgpio_probe()
253 spin_lock_init(&tgpio->lock); in timbgpio_probe()
261 tgpio->membase = devm_ioremap(dev, iomem->start, resource_size(iomem)); in timbgpio_probe()
262 if (!tgpio->membase) { in timbgpio_probe()
267 gc = &tgpio->gpio; in timbgpio_probe()
276 gc->to_irq = (irq >= 0 && tgpio->irq_base > 0) ? timbgpio_to_irq : NULL; in timbgpio_probe()
286 platform_set_drvdata(pdev, tgpio); in timbgpio_probe()
289 iowrite32(0x0, tgpio->membase + TGPIO_IER); in timbgpio_probe()
291 if (irq < 0 || tgpio->irq_base <= 0) in timbgpio_probe()
295 irq_set_chip_and_handler(tgpio->irq_base + i, in timbgpio_probe()
297 irq_set_chip_data(tgpio->irq_base + i, tgpio); in timbgpio_probe()
298 irq_clear_status_flags(tgpio->irq_base + i, IRQ_NOREQUEST | IRQ_NOPROBE); in timbgpio_probe()
301 irq_set_chained_handler_and_data(irq, timbgpio_irq, tgpio); in timbgpio_probe()
309 struct timbgpio *tgpio = platform_get_drvdata(pdev); in timbgpio_remove() local
312 if (irq >= 0 && tgpio->irq_base > 0) { in timbgpio_remove()
315 irq_set_chip(tgpio->irq_base + i, NULL); in timbgpio_remove()
316 irq_set_chip_data(tgpio->irq_base + i, NULL); in timbgpio_remove()
323 gpiochip_remove(&tgpio->gpio); in timbgpio_remove()