View | Details | Raw Unified | Return to bug 248138
Collapse All | Expand All

(-)b/sys/arm/allwinner/aw_gpio.c (+12 lines)
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

Return to bug 248138