Lines 663-680
aw_gpio_pin_get_locked(struct aw_gpio_softc *sc,uint32_t pin,
Link Here
|
663 |
unsigned int *val) |
663 |
unsigned int *val) |
664 |
{ |
664 |
{ |
665 |
uint32_t bank, reg_data; |
665 |
uint32_t bank, reg_data; |
|
|
666 |
int32_t func; |
667 |
int err; |
666 |
|
668 |
|
667 |
AW_GPIO_LOCK_ASSERT(sc); |
669 |
AW_GPIO_LOCK_ASSERT(sc); |
668 |
|
670 |
|
669 |
if (pin > sc->conf->padconf->npins) |
671 |
if (pin > sc->conf->padconf->npins) |
670 |
return (EINVAL); |
672 |
return (EINVAL); |
671 |
|
673 |
|
|
|
674 |
func = aw_gpio_get_function(sc, pin); |
675 |
if (func == sc->conf->padconf->pins[pin].eint_func) { /* "pl_eintX */ |
676 |
err = aw_gpio_set_function(sc, pin, AW_GPIO_INPUT); |
677 |
if (err != 0) |
678 |
return (err); |
679 |
} |
680 |
|
672 |
bank = sc->conf->padconf->pins[pin].port; |
681 |
bank = sc->conf->padconf->pins[pin].port; |
673 |
pin = sc->conf->padconf->pins[pin].pin; |
682 |
pin = sc->conf->padconf->pins[pin].pin; |
674 |
|
683 |
|
675 |
reg_data = AW_GPIO_READ(sc, AW_GPIO_GP_DAT(bank)); |
684 |
reg_data = AW_GPIO_READ(sc, AW_GPIO_GP_DAT(bank)); |
676 |
*val = (reg_data & (1 << pin)) ? 1 : 0; |
685 |
*val = (reg_data & (1 << pin)) ? 1 : 0; |
677 |
|
686 |
|
|
|
687 |
if (func == sc->conf->padconf->pins[pin].eint_func) |
688 |
(void)aw_gpio_set_function(sc, pin, func); |
689 |
|
678 |
return (0); |
690 |
return (0); |
679 |
} |
691 |
} |
680 |
|
692 |
|