Lines Matching refs:sprd_eic

93 struct sprd_eic {  struct
104 static struct sprd_eic *to_sprd_eic(struct notifier_block *nb) in to_sprd_eic() argument
106 return container_of(nb, struct sprd_eic, irq_nb); in to_sprd_eic()
134 static inline void __iomem *sprd_eic_offset_base(struct sprd_eic *sprd_eic, in sprd_eic_offset_base() argument
140 return sprd_eic->base[bank]; in sprd_eic_offset_base()
146 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_update() local
148 sprd_eic_offset_base(sprd_eic, offset / SPRD_EIC_PER_BANK_NR); in sprd_eic_update()
152 spin_lock_irqsave(&sprd_eic->lock, flags); in sprd_eic_update()
161 spin_unlock_irqrestore(&sprd_eic->lock, flags); in sprd_eic_update()
166 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_read() local
168 sprd_eic_offset_base(sprd_eic, offset / SPRD_EIC_PER_BANK_NR); in sprd_eic_read()
186 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_get() local
188 switch (sprd_eic->type) { in sprd_eic_get()
214 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_set_debounce() local
216 sprd_eic_offset_base(sprd_eic, offset / SPRD_EIC_PER_BANK_NR); in sprd_eic_set_debounce()
241 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_mask() local
244 switch (sprd_eic->type) { in sprd_eic_irq_mask()
268 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_unmask() local
273 switch (sprd_eic->type) { in sprd_eic_irq_unmask()
295 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_ack() local
298 switch (sprd_eic->type) { in sprd_eic_irq_ack()
319 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_set_type() local
323 switch (sprd_eic->type) { in sprd_eic_irq_set_type()
479 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_toggle_trigger() local
488 if ((sprd_eic->type != SPRD_EIC_DEBOUNCE && in sprd_eic_toggle_trigger()
489 sprd_eic->type != SPRD_EIC_LATCH) || in sprd_eic_toggle_trigger()
497 switch (sprd_eic->type) { in sprd_eic_toggle_trigger()
527 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_handle_one_type() local
531 void __iomem *base = sprd_eic_offset_base(sprd_eic, bank); in sprd_eic_handle_one_type()
534 switch (sprd_eic->type) { in sprd_eic_handle_one_type()
586 struct sprd_eic *sprd_eic = to_sprd_eic(nb); in sprd_eic_irq_notify() local
588 sprd_eic_handle_one_type(&sprd_eic->chip); in sprd_eic_irq_notify()
615 struct sprd_eic *sprd_eic; in sprd_eic_probe() local
626 sprd_eic = devm_kzalloc(dev, sizeof(*sprd_eic), GFP_KERNEL); in sprd_eic_probe()
627 if (!sprd_eic) in sprd_eic_probe()
630 spin_lock_init(&sprd_eic->lock); in sprd_eic_probe()
631 sprd_eic->type = pdata->type; in sprd_eic_probe()
633 sprd_eic->irq = platform_get_irq(pdev, 0); in sprd_eic_probe()
634 if (sprd_eic->irq < 0) in sprd_eic_probe()
635 return sprd_eic->irq; in sprd_eic_probe()
648 sprd_eic->base[i] = devm_ioremap_resource(dev, res); in sprd_eic_probe()
649 if (IS_ERR(sprd_eic->base[i])) in sprd_eic_probe()
650 return PTR_ERR(sprd_eic->base[i]); in sprd_eic_probe()
655 sprd_eic->chip.label = sprd_eic_label_name[sprd_eic->type]; in sprd_eic_probe()
656 sprd_eic->chip.ngpio = num_banks * SPRD_EIC_PER_BANK_NR; in sprd_eic_probe()
657 sprd_eic->chip.base = -1; in sprd_eic_probe()
658 sprd_eic->chip.parent = dev; in sprd_eic_probe()
659 sprd_eic->chip.direction_input = sprd_eic_direction_input; in sprd_eic_probe()
660 switch (sprd_eic->type) { in sprd_eic_probe()
662 sprd_eic->chip.request = sprd_eic_request; in sprd_eic_probe()
663 sprd_eic->chip.free = sprd_eic_free; in sprd_eic_probe()
664 sprd_eic->chip.set_config = sprd_eic_set_config; in sprd_eic_probe()
665 sprd_eic->chip.set = sprd_eic_set; in sprd_eic_probe()
669 sprd_eic->chip.get = sprd_eic_get; in sprd_eic_probe()
676 irq = &sprd_eic->chip.irq; in sprd_eic_probe()
681 irq->parent_handler_data = sprd_eic; in sprd_eic_probe()
683 irq->parents = &sprd_eic->irq; in sprd_eic_probe()
685 ret = devm_gpiochip_add_data(dev, &sprd_eic->chip, sprd_eic); in sprd_eic_probe()
691 sprd_eic->irq_nb.notifier_call = sprd_eic_irq_notify; in sprd_eic_probe()
693 &sprd_eic->irq_nb); in sprd_eic_probe()
699 &sprd_eic->irq_nb); in sprd_eic_probe()