Lines Matching refs:ochip

52 static void __iomem *GPIO_OUT(struct orion_gpio_chip *ochip)
54 return ochip->base + GPIO_OUT_OFF;
57 static void __iomem *GPIO_IO_CONF(struct orion_gpio_chip *ochip)
59 return ochip->base + GPIO_IO_CONF_OFF;
62 static void __iomem *GPIO_BLINK_EN(struct orion_gpio_chip *ochip)
64 return ochip->base + GPIO_BLINK_EN_OFF;
67 static void __iomem *GPIO_IN_POL(struct orion_gpio_chip *ochip)
69 return ochip->base + GPIO_IN_POL_OFF;
72 static void __iomem *GPIO_DATA_IN(struct orion_gpio_chip *ochip)
74 return ochip->base + GPIO_DATA_IN_OFF;
77 static void __iomem *GPIO_EDGE_CAUSE(struct orion_gpio_chip *ochip)
79 return ochip->base + GPIO_EDGE_CAUSE_OFF;
82 static void __iomem *GPIO_EDGE_MASK(struct orion_gpio_chip *ochip)
84 return ochip->base + ochip->mask_offset + GPIO_EDGE_MASK_OFF;
87 static void __iomem *GPIO_LEVEL_MASK(struct orion_gpio_chip *ochip)
89 return ochip->base + ochip->mask_offset + GPIO_LEVEL_MASK_OFF;
97 __set_direction(struct orion_gpio_chip *ochip, unsigned pin, int input)
101 u = readl(GPIO_IO_CONF(ochip));
106 writel(u, GPIO_IO_CONF(ochip));
109 static void __set_level(struct orion_gpio_chip *ochip, unsigned pin, int high)
113 u = readl(GPIO_OUT(ochip));
118 writel(u, GPIO_OUT(ochip));
122 __set_blinking(struct orion_gpio_chip *ochip, unsigned pin, int blink)
126 u = readl(GPIO_BLINK_EN(ochip));
131 writel(u, GPIO_BLINK_EN(ochip));
135 orion_gpio_is_valid(struct orion_gpio_chip *ochip, unsigned pin, int mode)
137 if (pin >= ochip->chip.ngpio)
140 if ((mode & GPIO_INPUT_OK) && !test_bit(pin, &ochip->valid_input))
143 if ((mode & GPIO_OUTPUT_OK) && !test_bit(pin, &ochip->valid_output))
158 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
160 if (orion_gpio_is_valid(ochip, pin, GPIO_INPUT_OK) ||
161 orion_gpio_is_valid(ochip, pin, GPIO_OUTPUT_OK))
169 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
172 if (!orion_gpio_is_valid(ochip, pin, GPIO_INPUT_OK))
175 spin_lock_irqsave(&ochip->lock, flags);
176 __set_direction(ochip, pin, 1);
177 spin_unlock_irqrestore(&ochip->lock, flags);
184 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
187 if (readl(GPIO_IO_CONF(ochip)) & (1 << pin)) {
188 val = readl(GPIO_DATA_IN(ochip)) ^ readl(GPIO_IN_POL(ochip));
190 val = readl(GPIO_OUT(ochip));
199 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
202 if (!orion_gpio_is_valid(ochip, pin, GPIO_OUTPUT_OK))
205 spin_lock_irqsave(&ochip->lock, flags);
206 __set_blinking(ochip, pin, 0);
207 __set_level(ochip, pin, value);
208 __set_direction(ochip, pin, 0);
209 spin_unlock_irqrestore(&ochip->lock, flags);
216 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
219 spin_lock_irqsave(&ochip->lock, flags);
220 __set_level(ochip, pin, value);
221 spin_unlock_irqrestore(&ochip->lock, flags);
226 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
228 return irq_create_mapping(ochip->domain,
229 ochip->secondary_irq_base + pin);
240 struct orion_gpio_chip *ochip = orion_gpio_chips + i;
241 struct gpio_chip *chip = &ochip->chip;
244 return ochip;
252 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin);
254 if (ochip == NULL)
257 pin -= ochip->chip.base;
260 __set_level(ochip, pin, 0);
261 __set_direction(ochip, pin, 0);
266 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin);
268 if (ochip == NULL)
271 pin -= ochip->chip.base;
277 __set_bit(pin, &ochip->valid_input);
279 __clear_bit(pin, &ochip->valid_input);
282 __set_bit(pin, &ochip->valid_output);
284 __clear_bit(pin, &ochip->valid_output);
289 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin);
292 if (ochip == NULL)
295 spin_lock_irqsave(&ochip->lock, flags);
296 __set_level(ochip, pin & 31, 0);
297 __set_blinking(ochip, pin & 31, blink);
298 spin_unlock_irqrestore(&ochip->lock, flags);
356 struct orion_gpio_chip *ochip = gc->private;
360 pin = d->hwirq - ochip->secondary_irq_base;
362 u = readl(GPIO_IO_CONF(ochip)) & (1 << pin);
380 u = readl(GPIO_IN_POL(ochip));
382 writel(u, GPIO_IN_POL(ochip));
384 u = readl(GPIO_IN_POL(ochip));
386 writel(u, GPIO_IN_POL(ochip));
390 v = readl(GPIO_IN_POL(ochip)) ^ readl(GPIO_DATA_IN(ochip));
395 u = readl(GPIO_IN_POL(ochip));
400 writel(u, GPIO_IN_POL(ochip));
407 struct orion_gpio_chip *ochip = irq_desc_get_handler_data(desc);
411 if (ochip == NULL)
414 cause = readl(GPIO_DATA_IN(ochip)) & readl(GPIO_LEVEL_MASK(ochip));
415 cause |= readl(GPIO_EDGE_CAUSE(ochip)) & readl(GPIO_EDGE_MASK(ochip));
417 for (i = 0; i < ochip->chip.ngpio; i++) {
420 irq = ochip->secondary_irq_base + i;
430 polarity = readl(GPIO_IN_POL(ochip));
432 writel(polarity, GPIO_IN_POL(ochip));
444 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
449 out = readl_relaxed(GPIO_OUT(ochip));
450 io_conf = readl_relaxed(GPIO_IO_CONF(ochip));
451 blink = readl_relaxed(GPIO_BLINK_EN(ochip));
452 in_pol = readl_relaxed(GPIO_IN_POL(ochip));
453 data_in = readl_relaxed(GPIO_DATA_IN(ochip));
454 cause = readl_relaxed(GPIO_EDGE_CAUSE(ochip));
455 edg_msk = readl_relaxed(GPIO_EDGE_MASK(ochip));
456 lvl_msk = readl_relaxed(GPIO_LEVEL_MASK(ochip));
525 struct orion_gpio_chip *ochip;
537 ochip = orion_gpio_chips + orion_gpio_chip_count;
538 ochip->chip.label = kstrdup(gc_label, GFP_KERNEL);
539 ochip->chip.request = orion_gpio_request;
540 ochip->chip.direction_input = orion_gpio_direction_input;
541 ochip->chip.get = orion_gpio_get;
542 ochip->chip.direction_output = orion_gpio_direction_output;
543 ochip->chip.set = orion_gpio_set;
544 ochip->chip.to_irq = orion_gpio_to_irq;
545 ochip->chip.base = gpio_base;
546 ochip->chip.ngpio = ngpio;
547 ochip->chip.can_sleep = 0;
548 ochip->chip.dbg_show = orion_gpio_dbg_show;
550 spin_lock_init(&ochip->lock);
551 ochip->base = (void __iomem *)base;
552 ochip->valid_input = 0;
553 ochip->valid_output = 0;
554 ochip->mask_offset = mask_offset;
555 ochip->secondary_irq_base = secondary_irq_base;
557 gpiochip_add_data(&ochip->chip, ochip);
562 writel(0, GPIO_EDGE_CAUSE(ochip));
563 writel(0, GPIO_EDGE_MASK(ochip));
564 writel(0, GPIO_LEVEL_MASK(ochip));
574 ochip);
580 ochip->base, handle_level_irq);
581 gc->private = ochip;
583 ct->regs.mask = ochip->mask_offset + GPIO_LEVEL_MASK_OFF;
588 ct->chip.name = ochip->chip.label;
591 ct->regs.mask = ochip->mask_offset + GPIO_EDGE_MASK_OFF;
599 ct->chip.name = ochip->chip.label;
605 ochip->domain = irq_domain_add_legacy(NULL,
606 ochip->chip.ngpio,
607 ochip->secondary_irq_base,
608 ochip->secondary_irq_base,
610 ochip);
611 if (!ochip->domain)
613 ochip->chip.label);