• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/arm/allwinner/

Lines Matching refs:pin

265 	uint32_t		pin;
328 static int aw_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *value);
329 static int aw_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value);
330 static int aw_gpio_pin_get_locked(struct aw_gpio_softc *sc, uint32_t pin, unsigned int *value);
331 static int aw_gpio_pin_set_locked(struct aw_gpio_softc *sc, uint32_t pin, unsigned int value);
345 aw_gpio_get_function(struct aw_gpio_softc *sc, uint32_t pin)
352 if (pin > sc->conf->padconf->npins)
354 bank = sc->conf->padconf->pins[pin].port;
355 pin = sc->conf->padconf->pins[pin].pin;
356 offset = ((pin & 0x07) << 2);
358 func = AW_GPIO_READ(sc, AW_GPIO_GP_CFG(bank, pin >> 3));
364 aw_gpio_set_function(struct aw_gpio_softc *sc, uint32_t pin, uint32_t f)
369 if (sc->conf->padconf->pins[pin].functions[f] == NULL)
375 bank = sc->conf->padconf->pins[pin].port;
376 pin = sc->conf->padconf->pins[pin].pin;
377 offset = ((pin & 0x07) << 2);
379 data = AW_GPIO_READ(sc, AW_GPIO_GP_CFG(bank, pin >> 3));
382 AW_GPIO_WRITE(sc, AW_GPIO_GP_CFG(bank, pin >> 3), data);
388 aw_gpio_get_pud(struct aw_gpio_softc *sc, uint32_t pin)
395 bank = sc->conf->padconf->pins[pin].port;
396 pin = sc->conf->padconf->pins[pin].pin;
397 offset = ((pin & 0x0f) << 1);
399 val = AW_GPIO_READ(sc, AW_GPIO_GP_PUL(bank, pin >> 4));
405 aw_gpio_set_pud(struct aw_gpio_softc *sc, uint32_t pin, uint32_t state)
409 if (aw_gpio_get_pud(sc, pin) == state)
415 bank = sc->conf->padconf->pins[pin].port;
416 pin = sc->conf->padconf->pins[pin].pin;
417 offset = ((pin & 0x0f) << 1);
419 val = AW_GPIO_READ(sc, AW_GPIO_GP_PUL(bank, pin >> 4));
422 AW_GPIO_WRITE(sc, AW_GPIO_GP_PUL(bank, pin >> 4), val);
426 aw_gpio_get_drv(struct aw_gpio_softc *sc, uint32_t pin)
433 bank = sc->conf->padconf->pins[pin].port;
434 pin = sc->conf->padconf->pins[pin].pin;
435 offset = ((pin & 0x0f) << 1);
437 val = AW_GPIO_READ(sc, AW_GPIO_GP_DRV(bank, pin >> 4));
443 aw_gpio_set_drv(struct aw_gpio_softc *sc, uint32_t pin, uint32_t drive)
447 if (aw_gpio_get_drv(sc, pin) == drive)
453 bank = sc->conf->padconf->pins[pin].port;
454 pin = sc->conf->padconf->pins[pin].pin;
455 offset = ((pin & 0x0f) << 1);
457 val = AW_GPIO_READ(sc, AW_GPIO_GP_DRV(bank, pin >> 4));
460 AW_GPIO_WRITE(sc, AW_GPIO_GP_DRV(bank, pin >> 4), val);
464 aw_gpio_pin_configure(struct aw_gpio_softc *sc, uint32_t pin, uint32_t flags)
472 if (pin > sc->conf->padconf->npins)
477 err = aw_gpio_set_function(sc, pin, AW_GPIO_INPUT);
479 aw_gpio_get_function(sc, pin) != AW_GPIO_OUTPUT) {
481 aw_gpio_pin_set_locked(sc, pin, 0);
483 aw_gpio_pin_set_locked(sc, pin, 1);
485 /* Read the pin and preset output to current state. */
486 err = aw_gpio_set_function(sc, pin, AW_GPIO_INPUT);
488 aw_gpio_pin_get_locked(sc, pin, &val);
489 aw_gpio_pin_set_locked(sc, pin, val);
493 err = aw_gpio_set_function(sc, pin, AW_GPIO_OUTPUT);
501 aw_gpio_set_pud(sc, pin, AW_GPIO_PULLUP);
503 aw_gpio_set_pud(sc, pin, AW_GPIO_PULLDOWN);
505 aw_gpio_set_pud(sc, pin, AW_GPIO_NONE);
532 aw_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps)
537 if (pin >= sc->conf->padconf->npins)
541 if (sc->conf->padconf->pins[pin].eint_func != 0)
548 aw_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags)
555 if (pin >= sc->conf->padconf->npins)
559 func = aw_gpio_get_function(sc, pin);
572 pud = aw_gpio_get_pud(sc, pin);
590 aw_gpio_pin_getname(device_t dev, uint32_t pin, char *name)
595 if (pin >= sc->conf->padconf->npins)
599 sc->conf->padconf->pins[pin].name);
606 aw_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags)
612 if (pin > sc->conf->padconf->npins)
616 err = aw_gpio_pin_configure(sc, pin, flags);
623 aw_gpio_pin_set_locked(struct aw_gpio_softc *sc, uint32_t pin,
630 if (pin > sc->conf->padconf->npins)
633 bank = sc->conf->padconf->pins[pin].port;
634 pin = sc->conf->padconf->pins[pin].pin;
638 data |= (1 << pin);
640 data &= ~(1 << pin);
647 aw_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value)
655 ret = aw_gpio_pin_set_locked(sc, pin, value);
662 aw_gpio_pin_get_locked(struct aw_gpio_softc *sc,uint32_t pin,
669 if (pin > sc->conf->padconf->npins)
672 bank = sc->conf->padconf->pins[pin].port;
673 pin = sc->conf->padconf->pins[pin].pin;
676 *val = (reg_data & (1 << pin)) ? 1 : 0;
751 aw_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val)
759 ret = aw_gpio_pin_get_locked(sc, pin, val);
766 aw_gpio_pin_toggle(device_t dev, uint32_t pin)
772 if (pin > sc->conf->padconf->npins)
775 bank = sc->conf->padconf->pins[pin].port;
776 pin = sc->conf->padconf->pins[pin].pin;
780 if (data & (1 << pin))
781 data &= ~(1 << pin);
783 data |= (1 << pin);
795 uint32_t bank, data, pin;
802 * We require that first_pin refers to the first pin in a bank, because
808 pin = sc->conf->padconf->pins[first_pin].pin;
809 if (pin != 0)
830 uint32_t bank, pin;
838 if (sc->conf->padconf->pins[first_pin].pin != 0)
845 * configuring each pin for now. If there was a strong need, it might
849 for (err = 0, pin = first_pin; err == 0 && pin < num_pins; ++pin) {
850 if (pin_flags[pin] & (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT))
851 err = aw_gpio_pin_configure(sc, pin, pin_flags[pin]);
859 pcell_t *gpios, uint32_t *pin, uint32_t *flags)
866 /* The GPIO pins are mapped as: <gpio-phandle bank pin flags>. */
869 sc->conf->padconf->pins[i].pin == gpios[1]) {
870 *pin = i;
891 aw_find_pin_func(struct aw_gpio_softc *sc, int pin, const char *func)
896 if (sc->conf->padconf->pins[pin].functions[i] &&
897 !strcmp(func, sc->conf->padconf->pins[pin].functions[i]))
935 /* Configure each pin to the correct function, drive and pull */
1041 /* Use the right pin data for the current SoC */
1170 int pin;
1175 for (nirqs = 0, pin = 0; pin < sc->conf->padconf->npins; pin++) {
1176 if (sc->conf->padconf->pins[pin].eint_func == 0)
1184 for (nirqs = 0, pin = 0; pin < sc->conf->padconf->npins; pin++) {
1185 if (sc->conf->padconf->pins[pin].eint_func == 0)
1188 sc->gpio_pic_irqsrc[nirqs].pin = pin;
1189 sc->gpio_pic_irqsrc[nirqs].bank = sc->conf->padconf->pins[pin].eint_bank;
1190 sc->gpio_pic_irqsrc[nirqs].intnum = sc->conf->padconf->pins[pin].eint_num;
1191 sc->gpio_pic_irqsrc[nirqs].intfunc = sc->conf->padconf->pins[pin].eint_func;
1197 sc->conf->padconf->pins[pin].functions[sc->conf->padconf->pins[pin].eint_func]);
1260 int pin;
1264 for (pin = 0; pin < sc->nirqs; pin++)
1265 if (sc->gpio_pic_irqsrc[pin].pin == irq)
1267 if (pin == sc->nirqs) {
1285 *irqp = pin;
1361 /* Switch the pin to interrupt mode */
1363 sc->gpio_pic_irqsrc[irq].pin);
1364 aw_gpio_set_function(sc, sc->gpio_pic_irqsrc[irq].pin,
1393 /* Switch back the pin to it's original function */
1395 aw_gpio_set_function(sc, gi->pin, gi->oldfunc);