Searched refs:ochip (Results 1 - 1 of 1) sorted by relevance

/linux-4.4.14/arch/arm/plat-orion/
H A Dgpio.c51 static void __iomem *GPIO_OUT(struct orion_gpio_chip *ochip) GPIO_OUT() argument
53 return ochip->base + GPIO_OUT_OFF; GPIO_OUT()
56 static void __iomem *GPIO_IO_CONF(struct orion_gpio_chip *ochip) GPIO_IO_CONF() argument
58 return ochip->base + GPIO_IO_CONF_OFF; GPIO_IO_CONF()
61 static void __iomem *GPIO_BLINK_EN(struct orion_gpio_chip *ochip) GPIO_BLINK_EN() argument
63 return ochip->base + GPIO_BLINK_EN_OFF; GPIO_BLINK_EN()
66 static void __iomem *GPIO_IN_POL(struct orion_gpio_chip *ochip) GPIO_IN_POL() argument
68 return ochip->base + GPIO_IN_POL_OFF; GPIO_IN_POL()
71 static void __iomem *GPIO_DATA_IN(struct orion_gpio_chip *ochip) GPIO_DATA_IN() argument
73 return ochip->base + GPIO_DATA_IN_OFF; GPIO_DATA_IN()
76 static void __iomem *GPIO_EDGE_CAUSE(struct orion_gpio_chip *ochip) GPIO_EDGE_CAUSE() argument
78 return ochip->base + GPIO_EDGE_CAUSE_OFF; GPIO_EDGE_CAUSE()
81 static void __iomem *GPIO_EDGE_MASK(struct orion_gpio_chip *ochip) GPIO_EDGE_MASK() argument
83 return ochip->base + ochip->mask_offset + GPIO_EDGE_MASK_OFF; GPIO_EDGE_MASK()
86 static void __iomem *GPIO_LEVEL_MASK(struct orion_gpio_chip *ochip) GPIO_LEVEL_MASK() argument
88 return ochip->base + ochip->mask_offset + GPIO_LEVEL_MASK_OFF; GPIO_LEVEL_MASK()
96 __set_direction(struct orion_gpio_chip *ochip, unsigned pin, int input) __set_direction() argument
100 u = readl(GPIO_IO_CONF(ochip)); __set_direction()
105 writel(u, GPIO_IO_CONF(ochip)); __set_direction()
108 static void __set_level(struct orion_gpio_chip *ochip, unsigned pin, int high) __set_level() argument
112 u = readl(GPIO_OUT(ochip)); __set_level()
117 writel(u, GPIO_OUT(ochip)); __set_level()
121 __set_blinking(struct orion_gpio_chip *ochip, unsigned pin, int blink) __set_blinking() argument
125 u = readl(GPIO_BLINK_EN(ochip)); __set_blinking()
130 writel(u, GPIO_BLINK_EN(ochip)); __set_blinking()
134 orion_gpio_is_valid(struct orion_gpio_chip *ochip, unsigned pin, int mode) orion_gpio_is_valid() argument
136 if (pin >= ochip->chip.ngpio) orion_gpio_is_valid()
139 if ((mode & GPIO_INPUT_OK) && !test_bit(pin, &ochip->valid_input)) orion_gpio_is_valid()
142 if ((mode & GPIO_OUTPUT_OK) && !test_bit(pin, &ochip->valid_output)) orion_gpio_is_valid()
157 struct orion_gpio_chip *ochip = orion_gpio_request() local
160 if (orion_gpio_is_valid(ochip, pin, GPIO_INPUT_OK) || orion_gpio_request()
161 orion_gpio_is_valid(ochip, pin, GPIO_OUTPUT_OK)) orion_gpio_request()
169 struct orion_gpio_chip *ochip = orion_gpio_direction_input() local
173 if (!orion_gpio_is_valid(ochip, pin, GPIO_INPUT_OK)) orion_gpio_direction_input()
176 spin_lock_irqsave(&ochip->lock, flags); orion_gpio_direction_input()
177 __set_direction(ochip, pin, 1); orion_gpio_direction_input()
178 spin_unlock_irqrestore(&ochip->lock, flags); orion_gpio_direction_input()
185 struct orion_gpio_chip *ochip = orion_gpio_get() local
189 if (readl(GPIO_IO_CONF(ochip)) & (1 << pin)) { orion_gpio_get()
190 val = readl(GPIO_DATA_IN(ochip)) ^ readl(GPIO_IN_POL(ochip)); orion_gpio_get()
192 val = readl(GPIO_OUT(ochip)); orion_gpio_get()
201 struct orion_gpio_chip *ochip = orion_gpio_direction_output() local
205 if (!orion_gpio_is_valid(ochip, pin, GPIO_OUTPUT_OK)) orion_gpio_direction_output()
208 spin_lock_irqsave(&ochip->lock, flags); orion_gpio_direction_output()
209 __set_blinking(ochip, pin, 0); orion_gpio_direction_output()
210 __set_level(ochip, pin, value); orion_gpio_direction_output()
211 __set_direction(ochip, pin, 0); orion_gpio_direction_output()
212 spin_unlock_irqrestore(&ochip->lock, flags); orion_gpio_direction_output()
219 struct orion_gpio_chip *ochip = orion_gpio_set() local
223 spin_lock_irqsave(&ochip->lock, flags); orion_gpio_set()
224 __set_level(ochip, pin, value); orion_gpio_set()
225 spin_unlock_irqrestore(&ochip->lock, flags); orion_gpio_set()
230 struct orion_gpio_chip *ochip = orion_gpio_to_irq() local
233 return irq_create_mapping(ochip->domain, orion_gpio_to_irq()
234 ochip->secondary_irq_base + pin); orion_gpio_to_irq()
245 struct orion_gpio_chip *ochip = orion_gpio_chips + i; orion_gpio_chip_find() local
246 struct gpio_chip *chip = &ochip->chip; orion_gpio_chip_find()
249 return ochip; orion_gpio_chip_find()
257 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin); orion_gpio_set_unused() local
259 if (ochip == NULL) orion_gpio_set_unused()
262 pin -= ochip->chip.base; orion_gpio_set_unused()
265 __set_level(ochip, pin, 0); orion_gpio_set_unused()
266 __set_direction(ochip, pin, 0); orion_gpio_set_unused()
271 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin); orion_gpio_set_valid() local
273 if (ochip == NULL) orion_gpio_set_valid()
276 pin -= ochip->chip.base; orion_gpio_set_valid()
282 __set_bit(pin, &ochip->valid_input); orion_gpio_set_valid()
284 __clear_bit(pin, &ochip->valid_input); orion_gpio_set_valid()
287 __set_bit(pin, &ochip->valid_output); orion_gpio_set_valid()
289 __clear_bit(pin, &ochip->valid_output); orion_gpio_set_valid()
294 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin); orion_gpio_set_blink() local
297 if (ochip == NULL) orion_gpio_set_blink()
300 spin_lock_irqsave(&ochip->lock, flags); orion_gpio_set_blink()
301 __set_level(ochip, pin & 31, 0); orion_gpio_set_blink()
302 __set_blinking(ochip, pin & 31, blink); orion_gpio_set_blink()
303 spin_unlock_irqrestore(&ochip->lock, flags); orion_gpio_set_blink()
361 struct orion_gpio_chip *ochip = gc->private; gpio_irq_set_type() local
365 pin = d->hwirq - ochip->secondary_irq_base; gpio_irq_set_type()
367 u = readl(GPIO_IO_CONF(ochip)) & (1 << pin); gpio_irq_set_type()
385 u = readl(GPIO_IN_POL(ochip)); gpio_irq_set_type()
387 writel(u, GPIO_IN_POL(ochip)); gpio_irq_set_type()
389 u = readl(GPIO_IN_POL(ochip)); gpio_irq_set_type()
391 writel(u, GPIO_IN_POL(ochip)); gpio_irq_set_type()
395 v = readl(GPIO_IN_POL(ochip)) ^ readl(GPIO_DATA_IN(ochip)); gpio_irq_set_type()
400 u = readl(GPIO_IN_POL(ochip)); gpio_irq_set_type()
405 writel(u, GPIO_IN_POL(ochip)); gpio_irq_set_type()
412 struct orion_gpio_chip *ochip = irq_desc_get_handler_data(desc); gpio_irq_handler() local
416 if (ochip == NULL) gpio_irq_handler()
419 cause = readl(GPIO_DATA_IN(ochip)) & readl(GPIO_LEVEL_MASK(ochip)); gpio_irq_handler()
420 cause |= readl(GPIO_EDGE_CAUSE(ochip)) & readl(GPIO_EDGE_MASK(ochip)); gpio_irq_handler()
422 for (i = 0; i < ochip->chip.ngpio; i++) { gpio_irq_handler()
425 irq = ochip->secondary_irq_base + i; gpio_irq_handler()
435 polarity = readl(GPIO_IN_POL(ochip)); gpio_irq_handler()
437 writel(polarity, GPIO_IN_POL(ochip)); gpio_irq_handler()
448 struct orion_gpio_chip *ochip = orion_gpio_dbg_show() local
453 out = readl_relaxed(GPIO_OUT(ochip)); orion_gpio_dbg_show()
454 io_conf = readl_relaxed(GPIO_IO_CONF(ochip)); orion_gpio_dbg_show()
455 blink = readl_relaxed(GPIO_BLINK_EN(ochip)); orion_gpio_dbg_show()
456 in_pol = readl_relaxed(GPIO_IN_POL(ochip)); orion_gpio_dbg_show()
457 data_in = readl_relaxed(GPIO_DATA_IN(ochip)); orion_gpio_dbg_show()
458 cause = readl_relaxed(GPIO_EDGE_CAUSE(ochip)); orion_gpio_dbg_show()
459 edg_msk = readl_relaxed(GPIO_EDGE_MASK(ochip)); orion_gpio_dbg_show()
460 lvl_msk = readl_relaxed(GPIO_LEVEL_MASK(ochip)); orion_gpio_dbg_show()
535 struct orion_gpio_chip *ochip; orion_gpio_init() local
547 ochip = orion_gpio_chips + orion_gpio_chip_count; orion_gpio_init()
548 ochip->chip.label = kstrdup(gc_label, GFP_KERNEL); orion_gpio_init()
549 ochip->chip.request = orion_gpio_request; orion_gpio_init()
550 ochip->chip.direction_input = orion_gpio_direction_input; orion_gpio_init()
551 ochip->chip.get = orion_gpio_get; orion_gpio_init()
552 ochip->chip.direction_output = orion_gpio_direction_output; orion_gpio_init()
553 ochip->chip.set = orion_gpio_set; orion_gpio_init()
554 ochip->chip.to_irq = orion_gpio_to_irq; orion_gpio_init()
555 ochip->chip.base = gpio_base; orion_gpio_init()
556 ochip->chip.ngpio = ngpio; orion_gpio_init()
557 ochip->chip.can_sleep = 0; orion_gpio_init()
559 ochip->chip.of_node = np; orion_gpio_init()
561 ochip->chip.dbg_show = orion_gpio_dbg_show; orion_gpio_init()
563 spin_lock_init(&ochip->lock); orion_gpio_init()
564 ochip->base = (void __iomem *)base; orion_gpio_init()
565 ochip->valid_input = 0; orion_gpio_init()
566 ochip->valid_output = 0; orion_gpio_init()
567 ochip->mask_offset = mask_offset; orion_gpio_init()
568 ochip->secondary_irq_base = secondary_irq_base; orion_gpio_init()
570 gpiochip_add(&ochip->chip); orion_gpio_init()
575 writel(0, GPIO_EDGE_CAUSE(ochip)); orion_gpio_init()
576 writel(0, GPIO_EDGE_MASK(ochip)); orion_gpio_init()
577 writel(0, GPIO_LEVEL_MASK(ochip)); orion_gpio_init()
587 ochip); orion_gpio_init()
593 ochip->base, handle_level_irq); orion_gpio_init()
594 gc->private = ochip; orion_gpio_init()
596 ct->regs.mask = ochip->mask_offset + GPIO_LEVEL_MASK_OFF; orion_gpio_init()
601 ct->chip.name = ochip->chip.label; orion_gpio_init()
604 ct->regs.mask = ochip->mask_offset + GPIO_EDGE_MASK_OFF; orion_gpio_init()
612 ct->chip.name = ochip->chip.label; orion_gpio_init()
618 ochip->domain = irq_domain_add_legacy(np, orion_gpio_init()
619 ochip->chip.ngpio, orion_gpio_init()
620 ochip->secondary_irq_base, orion_gpio_init()
621 ochip->secondary_irq_base, orion_gpio_init()
623 ochip); orion_gpio_init()
624 if (!ochip->domain) orion_gpio_init()
626 ochip->chip.label); orion_gpio_init()

Completed in 86 milliseconds