Lines Matching refs:sprd_eic

92 struct sprd_eic {  struct
131 static inline void __iomem *sprd_eic_offset_base(struct sprd_eic *sprd_eic, in sprd_eic_offset_base() argument
137 return sprd_eic->base[bank]; in sprd_eic_offset_base()
143 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_update() local
145 sprd_eic_offset_base(sprd_eic, offset / SPRD_EIC_PER_BANK_NR); in sprd_eic_update()
149 spin_lock_irqsave(&sprd_eic->lock, flags); in sprd_eic_update()
158 spin_unlock_irqrestore(&sprd_eic->lock, flags); in sprd_eic_update()
163 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_read() local
165 sprd_eic_offset_base(sprd_eic, offset / SPRD_EIC_PER_BANK_NR); in sprd_eic_read()
183 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_get() local
185 switch (sprd_eic->type) { in sprd_eic_get()
211 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_set_debounce() local
213 sprd_eic_offset_base(sprd_eic, offset / SPRD_EIC_PER_BANK_NR); in sprd_eic_set_debounce()
238 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_mask() local
241 switch (sprd_eic->type) { in sprd_eic_irq_mask()
263 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_unmask() local
266 switch (sprd_eic->type) { in sprd_eic_irq_unmask()
288 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_ack() local
291 switch (sprd_eic->type) { in sprd_eic_irq_ack()
312 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_irq_set_type() local
316 switch (sprd_eic->type) { in sprd_eic_irq_set_type()
448 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_toggle_trigger() local
457 if ((sprd_eic->type != SPRD_EIC_DEBOUNCE && in sprd_eic_toggle_trigger()
458 sprd_eic->type != SPRD_EIC_LATCH) || in sprd_eic_toggle_trigger()
466 switch (sprd_eic->type) { in sprd_eic_toggle_trigger()
503 struct sprd_eic *sprd_eic = gpiochip_get_data(chip); in sprd_eic_handle_one_type() local
507 void __iomem *base = sprd_eic_offset_base(sprd_eic, bank); in sprd_eic_handle_one_type()
510 switch (sprd_eic->type) { in sprd_eic_handle_one_type()
571 struct sprd_eic *sprd_eic; in sprd_eic_probe() local
581 sprd_eic = devm_kzalloc(&pdev->dev, sizeof(*sprd_eic), GFP_KERNEL); in sprd_eic_probe()
582 if (!sprd_eic) in sprd_eic_probe()
585 spin_lock_init(&sprd_eic->lock); in sprd_eic_probe()
586 sprd_eic->type = pdata->type; in sprd_eic_probe()
588 sprd_eic->irq = platform_get_irq(pdev, 0); in sprd_eic_probe()
589 if (sprd_eic->irq < 0) in sprd_eic_probe()
590 return sprd_eic->irq; in sprd_eic_probe()
603 sprd_eic->base[i] = devm_ioremap_resource(&pdev->dev, res); in sprd_eic_probe()
604 if (IS_ERR(sprd_eic->base[i])) in sprd_eic_probe()
605 return PTR_ERR(sprd_eic->base[i]); in sprd_eic_probe()
608 sprd_eic->chip.label = sprd_eic_label_name[sprd_eic->type]; in sprd_eic_probe()
609 sprd_eic->chip.ngpio = pdata->num_eics; in sprd_eic_probe()
610 sprd_eic->chip.base = -1; in sprd_eic_probe()
611 sprd_eic->chip.parent = &pdev->dev; in sprd_eic_probe()
612 sprd_eic->chip.of_node = pdev->dev.of_node; in sprd_eic_probe()
613 sprd_eic->chip.direction_input = sprd_eic_direction_input; in sprd_eic_probe()
614 switch (sprd_eic->type) { in sprd_eic_probe()
616 sprd_eic->chip.request = sprd_eic_request; in sprd_eic_probe()
617 sprd_eic->chip.free = sprd_eic_free; in sprd_eic_probe()
618 sprd_eic->chip.set_config = sprd_eic_set_config; in sprd_eic_probe()
619 sprd_eic->chip.set = sprd_eic_set; in sprd_eic_probe()
623 sprd_eic->chip.get = sprd_eic_get; in sprd_eic_probe()
630 sprd_eic->intc.name = dev_name(&pdev->dev); in sprd_eic_probe()
631 sprd_eic->intc.irq_ack = sprd_eic_irq_ack; in sprd_eic_probe()
632 sprd_eic->intc.irq_mask = sprd_eic_irq_mask; in sprd_eic_probe()
633 sprd_eic->intc.irq_unmask = sprd_eic_irq_unmask; in sprd_eic_probe()
634 sprd_eic->intc.irq_set_type = sprd_eic_irq_set_type; in sprd_eic_probe()
635 sprd_eic->intc.flags = IRQCHIP_SKIP_SET_WAKE; in sprd_eic_probe()
637 irq = &sprd_eic->chip.irq; in sprd_eic_probe()
638 irq->chip = &sprd_eic->intc; in sprd_eic_probe()
642 irq->parent_handler_data = sprd_eic; in sprd_eic_probe()
644 irq->parents = &sprd_eic->irq; in sprd_eic_probe()
646 ret = devm_gpiochip_add_data(&pdev->dev, &sprd_eic->chip, sprd_eic); in sprd_eic_probe()
652 platform_set_drvdata(pdev, sprd_eic); in sprd_eic_probe()