/* * Once configured for I/O - get input lines */ u_int32_t ar5416GpioGet(struct ath_hal *ah, u_int32_t gpio) { HALASSERT(gpio < AH_PRIVATE(ah)->ah_caps.hal_num_gpio_pins); if (gpio >= AH_PRIVATE(ah)->ah_caps.hal_num_gpio_pins) { return 0xffffffff; } // Read output value for all gpio's, shift it left, and verify whether a // specific gpio bit is set. if(AR_SREV_K2(ah)) { u_int32_t val; val = OS_REG_READ(ah, AR_GPIO_IN_OUT); if (val == (u_int32_t)(-1)) { return 0; } else { return (MS(val, AR9271_GPIO_IN_VAL) & AR_GPIO_BIT(gpio)) != 0; } } else if (AR_SREV_KIWI_10_OR_LATER(ah)) { return (MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR9287_GPIO_IN_VAL) & AR_GPIO_BIT(gpio)) != 0; } else if (AR_SREV_KITE_10_OR_LATER(ah)) { return (MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR9285_GPIO_IN_VAL) & AR_GPIO_BIT(gpio)) != 0; } else if (AR_SREV_MERLIN_10_OR_LATER(ah)) { return (MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR928X_GPIO_IN_VAL) & AR_GPIO_BIT(gpio)) != 0; } else { return (MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR_GPIO_IN_VAL) & AR_GPIO_BIT(gpio)) != 0; } }
/* * Once configured for I/O - get input lines */ uint32_t ar5416GpioGet(struct ath_hal *ah, uint32_t gpio) { uint32_t bits; if (gpio >= AH_PRIVATE(ah)->ah_caps.halNumGpioPins) return 0xffffffff; /* * Read output value for all gpio's, shift it, * and verify whether the specific bit is set. */ if (AR_SREV_KIWI_10_OR_LATER(ah)) bits = MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR9287_GPIO_IN_VAL); if (AR_SREV_KITE_10_OR_LATER(ah)) bits = MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR9285_GPIO_IN_VAL); else if (AR_SREV_MERLIN_10_OR_LATER(ah)) bits = MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR928X_GPIO_IN_VAL); else bits = MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR_GPIO_IN_VAL); return ((bits & AR_GPIO_BIT(gpio)) != 0); }