Lines Matching refs:ochip

51 static void __iomem *GPIO_OUT(struct orion_gpio_chip *ochip)
53 return ochip->base + GPIO_OUT_OFF;
56 static void __iomem *GPIO_IO_CONF(struct orion_gpio_chip *ochip)
58 return ochip->base + GPIO_IO_CONF_OFF;
61 static void __iomem *GPIO_BLINK_EN(struct orion_gpio_chip *ochip)
63 return ochip->base + GPIO_BLINK_EN_OFF;
66 static void __iomem *GPIO_IN_POL(struct orion_gpio_chip *ochip)
68 return ochip->base + GPIO_IN_POL_OFF;
71 static void __iomem *GPIO_DATA_IN(struct orion_gpio_chip *ochip)
73 return ochip->base + GPIO_DATA_IN_OFF;
76 static void __iomem *GPIO_EDGE_CAUSE(struct orion_gpio_chip *ochip)
78 return ochip->base + GPIO_EDGE_CAUSE_OFF;
81 static void __iomem *GPIO_EDGE_MASK(struct orion_gpio_chip *ochip)
83 return ochip->base + ochip->mask_offset + GPIO_EDGE_MASK_OFF;
86 static void __iomem *GPIO_LEVEL_MASK(struct orion_gpio_chip *ochip)
88 return ochip->base + ochip->mask_offset + GPIO_LEVEL_MASK_OFF;
96 __set_direction(struct orion_gpio_chip *ochip, unsigned pin, int input)
100 u = readl(GPIO_IO_CONF(ochip));
105 writel(u, GPIO_IO_CONF(ochip));
108 static void __set_level(struct orion_gpio_chip *ochip, unsigned pin, int high)
112 u = readl(GPIO_OUT(ochip));
117 writel(u, GPIO_OUT(ochip));
121 __set_blinking(struct orion_gpio_chip *ochip, unsigned pin, int blink)
125 u = readl(GPIO_BLINK_EN(ochip));
130 writel(u, GPIO_BLINK_EN(ochip));
134 orion_gpio_is_valid(struct orion_gpio_chip *ochip, unsigned pin, int mode)
136 if (pin >= ochip->chip.ngpio)
139 if ((mode & GPIO_INPUT_OK) && !test_bit(pin, &ochip->valid_input))
142 if ((mode & GPIO_OUTPUT_OK) && !test_bit(pin, &ochip->valid_output))
157 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
159 if (orion_gpio_is_valid(ochip, pin, GPIO_INPUT_OK) ||
160 orion_gpio_is_valid(ochip, pin, GPIO_OUTPUT_OK))
168 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
171 if (!orion_gpio_is_valid(ochip, pin, GPIO_INPUT_OK))
174 spin_lock_irqsave(&ochip->lock, flags);
175 __set_direction(ochip, pin, 1);
176 spin_unlock_irqrestore(&ochip->lock, flags);
183 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
186 if (readl(GPIO_IO_CONF(ochip)) & (1 << pin)) {
187 val = readl(GPIO_DATA_IN(ochip)) ^ readl(GPIO_IN_POL(ochip));
189 val = readl(GPIO_OUT(ochip));
198 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
201 if (!orion_gpio_is_valid(ochip, pin, GPIO_OUTPUT_OK))
204 spin_lock_irqsave(&ochip->lock, flags);
205 __set_blinking(ochip, pin, 0);
206 __set_level(ochip, pin, value);
207 __set_direction(ochip, pin, 0);
208 spin_unlock_irqrestore(&ochip->lock, flags);
215 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
218 spin_lock_irqsave(&ochip->lock, flags);
219 __set_level(ochip, pin, value);
220 spin_unlock_irqrestore(&ochip->lock, flags);
225 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
227 return irq_create_mapping(ochip->domain,
228 ochip->secondary_irq_base + pin);
239 struct orion_gpio_chip *ochip = orion_gpio_chips + i;
240 struct gpio_chip *chip = &ochip->chip;
243 return ochip;
251 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin);
253 if (ochip == NULL)
256 pin -= ochip->chip.base;
259 __set_level(ochip, pin, 0);
260 __set_direction(ochip, pin, 0);
265 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin);
267 if (ochip == NULL)
270 pin -= ochip->chip.base;
276 __set_bit(pin, &ochip->valid_input);
278 __clear_bit(pin, &ochip->valid_input);
281 __set_bit(pin, &ochip->valid_output);
283 __clear_bit(pin, &ochip->valid_output);
288 struct orion_gpio_chip *ochip = orion_gpio_chip_find(pin);
291 if (ochip == NULL)
294 spin_lock_irqsave(&ochip->lock, flags);
295 __set_level(ochip, pin & 31, 0);
296 __set_blinking(ochip, pin & 31, blink);
297 spin_unlock_irqrestore(&ochip->lock, flags);
355 struct orion_gpio_chip *ochip = gc->private;
359 pin = d->hwirq - ochip->secondary_irq_base;
361 u = readl(GPIO_IO_CONF(ochip)) & (1 << pin);
379 u = readl(GPIO_IN_POL(ochip));
381 writel(u, GPIO_IN_POL(ochip));
383 u = readl(GPIO_IN_POL(ochip));
385 writel(u, GPIO_IN_POL(ochip));
389 v = readl(GPIO_IN_POL(ochip)) ^ readl(GPIO_DATA_IN(ochip));
394 u = readl(GPIO_IN_POL(ochip));
399 writel(u, GPIO_IN_POL(ochip));
406 struct orion_gpio_chip *ochip = irq_desc_get_handler_data(desc);
410 if (ochip == NULL)
413 cause = readl(GPIO_DATA_IN(ochip)) & readl(GPIO_LEVEL_MASK(ochip));
414 cause |= readl(GPIO_EDGE_CAUSE(ochip)) & readl(GPIO_EDGE_MASK(ochip));
416 for (i = 0; i < ochip->chip.ngpio; i++) {
419 irq = ochip->secondary_irq_base + i;
429 polarity = readl(GPIO_IN_POL(ochip));
431 writel(polarity, GPIO_IN_POL(ochip));
443 struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
448 out = readl_relaxed(GPIO_OUT(ochip));
449 io_conf = readl_relaxed(GPIO_IO_CONF(ochip));
450 blink = readl_relaxed(GPIO_BLINK_EN(ochip));
451 in_pol = readl_relaxed(GPIO_IN_POL(ochip));
452 data_in = readl_relaxed(GPIO_DATA_IN(ochip));
453 cause = readl_relaxed(GPIO_EDGE_CAUSE(ochip));
454 edg_msk = readl_relaxed(GPIO_EDGE_MASK(ochip));
455 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;
549 ochip->chip.of_node = np;
551 ochip->chip.dbg_show = orion_gpio_dbg_show;
553 spin_lock_init(&ochip->lock);
554 ochip->base = (void __iomem *)base;
555 ochip->valid_input = 0;
556 ochip->valid_output = 0;
557 ochip->mask_offset = mask_offset;
558 ochip->secondary_irq_base = secondary_irq_base;
560 gpiochip_add_data(&ochip->chip, ochip);
565 writel(0, GPIO_EDGE_CAUSE(ochip));
566 writel(0, GPIO_EDGE_MASK(ochip));
567 writel(0, GPIO_LEVEL_MASK(ochip));
577 ochip);
583 ochip->base, handle_level_irq);
584 gc->private = ochip;
586 ct->regs.mask = ochip->mask_offset + GPIO_LEVEL_MASK_OFF;
591 ct->chip.name = ochip->chip.label;
594 ct->regs.mask = ochip->mask_offset + GPIO_EDGE_MASK_OFF;
602 ct->chip.name = ochip->chip.label;
608 ochip->domain = irq_domain_add_legacy(np,
609 ochip->chip.ngpio,
610 ochip->secondary_irq_base,
611 ochip->secondary_irq_base,
613 ochip);
614 if (!ochip->domain)
616 ochip->chip.label);