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()
215 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_set_debounce() local
217 sprd_eic_offset_base(sprd_eic, offset / SPRD_EIC_PER_BANK_NR); in sprd_eic_set_debounce()
242 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_mask() local
245 switch (sprd_eic->type) { in sprd_eic_irq_mask()
269 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_unmask() local
274 switch (sprd_eic->type) { in sprd_eic_irq_unmask()
296 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_ack() local
299 switch (sprd_eic->type) { in sprd_eic_irq_ack()
320 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_set_type() local
324 switch (sprd_eic->type) { in sprd_eic_irq_set_type()
480 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_toggle_trigger() local
489 if ((sprd_eic->type != SPRD_EIC_DEBOUNCE && in sprd_eic_toggle_trigger()
490 sprd_eic->type != SPRD_EIC_LATCH) || in sprd_eic_toggle_trigger()
498 switch (sprd_eic->type) { in sprd_eic_toggle_trigger()
528 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_handle_one_type() local
532 void __iomem *base = sprd_eic_offset_base(sprd_eic, bank); in sprd_eic_handle_one_type()
535 switch (sprd_eic->type) { in sprd_eic_handle_one_type()
587 struct sprd_eic *sprd_eic = to_sprd_eic(nb); in sprd_eic_irq_notify() local
589 sprd_eic_handle_one_type(&sprd_eic->chip); in sprd_eic_irq_notify()
616 struct sprd_eic *sprd_eic; in sprd_eic_probe() local
627 sprd_eic = devm_kzalloc(dev, sizeof(*sprd_eic), GFP_KERNEL); in sprd_eic_probe()
628 if (!sprd_eic) in sprd_eic_probe()
631 spin_lock_init(&sprd_eic->lock); in sprd_eic_probe()
632 sprd_eic->type = pdata->type; in sprd_eic_probe()
634 sprd_eic->irq = platform_get_irq(pdev, 0); in sprd_eic_probe()
635 if (sprd_eic->irq < 0) in sprd_eic_probe()
636 return sprd_eic->irq; in sprd_eic_probe()
649 sprd_eic->base[i] = devm_ioremap_resource(dev, res); in sprd_eic_probe()
650 if (IS_ERR(sprd_eic->base[i])) in sprd_eic_probe()
651 return PTR_ERR(sprd_eic->base[i]); in sprd_eic_probe()
656 sprd_eic->chip.label = sprd_eic_label_name[sprd_eic->type]; in sprd_eic_probe()
657 sprd_eic->chip.ngpio = num_banks * SPRD_EIC_PER_BANK_NR; in sprd_eic_probe()
658 sprd_eic->chip.base = -1; in sprd_eic_probe()
659 sprd_eic->chip.parent = dev; in sprd_eic_probe()
660 sprd_eic->chip.direction_input = sprd_eic_direction_input; in sprd_eic_probe()
661 switch (sprd_eic->type) { in sprd_eic_probe()
663 sprd_eic->chip.request = sprd_eic_request; in sprd_eic_probe()
664 sprd_eic->chip.free = sprd_eic_free; in sprd_eic_probe()
665 sprd_eic->chip.set_config = sprd_eic_set_config; in sprd_eic_probe()
666 sprd_eic->chip.set = sprd_eic_set; in sprd_eic_probe()
670 sprd_eic->chip.get = sprd_eic_get; in sprd_eic_probe()
677 irq = &sprd_eic->chip.irq; in sprd_eic_probe()
682 irq->parent_handler_data = sprd_eic; in sprd_eic_probe()
684 irq->parents = &sprd_eic->irq; in sprd_eic_probe()
686 ret = devm_gpiochip_add_data(dev, &sprd_eic->chip, sprd_eic); in sprd_eic_probe()
692 sprd_eic->irq_nb.notifier_call = sprd_eic_irq_notify; in sprd_eic_probe()
694 &sprd_eic->irq_nb); in sprd_eic_probe()
700 &sprd_eic->irq_nb); in sprd_eic_probe()