wimax: allow WIMAX_RF_QUERY calls when state is still uninitialized
Until now, calls to wimax_rfkill() will be blocked until the device is at least past the WIMAX_ST_UNINITIALIZED state, return -ENOMEDIUM when the device is in the WIMAX_ST_DOWN state. In parallel, wimax-tools would issue a wimax_rfkill(WIMAX_RF_QUERY) call right after opening a handle with wimaxll_open() as means to verify if the interface is really a WiMAX interface [newer kernel version will have a call specifically for this]. The combination of these two facts is that in some cases, before the driver has finalized initializing its device's firmware, a wimaxll_open() call would fail, when it should not. Thus, change the wimax_rfkill() code to allow queries when the device is in WIMAX_ST_UNINITIALIZED state. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
This commit is contained in:
parent
de9315fa3a
commit
81d3f90538
|
@ -305,8 +305,15 @@ int wimax_rfkill(struct wimax_dev *wimax_dev, enum wimax_rf_state state)
|
|||
d_fnstart(3, dev, "(wimax_dev %p state %u)\n", wimax_dev, state);
|
||||
mutex_lock(&wimax_dev->mutex);
|
||||
result = wimax_dev_is_ready(wimax_dev);
|
||||
if (result < 0)
|
||||
if (result < 0) {
|
||||
/* While initializing, < 1.4.3 wimax-tools versions use
|
||||
* this call to check if the device is a valid WiMAX
|
||||
* device; so we allow it to proceed always,
|
||||
* considering the radios are all off. */
|
||||
if (result == -ENOMEDIUM && state == WIMAX_RF_QUERY)
|
||||
result = WIMAX_RF_OFF << 1 | WIMAX_RF_OFF;
|
||||
goto error_not_ready;
|
||||
}
|
||||
switch (state) {
|
||||
case WIMAX_RF_ON:
|
||||
case WIMAX_RF_OFF:
|
||||
|
|
Loading…
Reference in New Issue