diff options
Diffstat (limited to 'net/wimax/op-rfkill.c')
-rw-r--r-- | net/wimax/op-rfkill.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/net/wimax/op-rfkill.c b/net/wimax/op-rfkill.c index 70ef4df863b9..ae752a64d920 100644 --- a/net/wimax/op-rfkill.c +++ b/net/wimax/op-rfkill.c | |||
@@ -107,8 +107,8 @@ void wimax_report_rfkill_hw(struct wimax_dev *wimax_dev, | |||
107 | 107 | ||
108 | if (state != wimax_dev->rf_hw) { | 108 | if (state != wimax_dev->rf_hw) { |
109 | wimax_dev->rf_hw = state; | 109 | wimax_dev->rf_hw = state; |
110 | if (wimax_dev->rf_hw == WIMAX_RF_ON | 110 | if (wimax_dev->rf_hw == WIMAX_RF_ON && |
111 | && wimax_dev->rf_sw == WIMAX_RF_ON) | 111 | wimax_dev->rf_sw == WIMAX_RF_ON) |
112 | wimax_state = WIMAX_ST_READY; | 112 | wimax_state = WIMAX_ST_READY; |
113 | else | 113 | else |
114 | wimax_state = WIMAX_ST_RADIO_OFF; | 114 | wimax_state = WIMAX_ST_RADIO_OFF; |
@@ -163,8 +163,8 @@ void wimax_report_rfkill_sw(struct wimax_dev *wimax_dev, | |||
163 | 163 | ||
164 | if (state != wimax_dev->rf_sw) { | 164 | if (state != wimax_dev->rf_sw) { |
165 | wimax_dev->rf_sw = state; | 165 | wimax_dev->rf_sw = state; |
166 | if (wimax_dev->rf_hw == WIMAX_RF_ON | 166 | if (wimax_dev->rf_hw == WIMAX_RF_ON && |
167 | && wimax_dev->rf_sw == WIMAX_RF_ON) | 167 | wimax_dev->rf_sw == WIMAX_RF_ON) |
168 | wimax_state = WIMAX_ST_READY; | 168 | wimax_state = WIMAX_ST_READY; |
169 | else | 169 | else |
170 | wimax_state = WIMAX_ST_RADIO_OFF; | 170 | wimax_state = WIMAX_ST_RADIO_OFF; |
@@ -305,8 +305,15 @@ int wimax_rfkill(struct wimax_dev *wimax_dev, enum wimax_rf_state state) | |||
305 | d_fnstart(3, dev, "(wimax_dev %p state %u)\n", wimax_dev, state); | 305 | d_fnstart(3, dev, "(wimax_dev %p state %u)\n", wimax_dev, state); |
306 | mutex_lock(&wimax_dev->mutex); | 306 | mutex_lock(&wimax_dev->mutex); |
307 | result = wimax_dev_is_ready(wimax_dev); | 307 | result = wimax_dev_is_ready(wimax_dev); |
308 | if (result < 0) | 308 | if (result < 0) { |
309 | /* While initializing, < 1.4.3 wimax-tools versions use | ||
310 | * this call to check if the device is a valid WiMAX | ||
311 | * device; so we allow it to proceed always, | ||
312 | * considering the radios are all off. */ | ||
313 | if (result == -ENOMEDIUM && state == WIMAX_RF_QUERY) | ||
314 | result = WIMAX_RF_OFF << 1 | WIMAX_RF_OFF; | ||
309 | goto error_not_ready; | 315 | goto error_not_ready; |
316 | } | ||
310 | switch (state) { | 317 | switch (state) { |
311 | case WIMAX_RF_ON: | 318 | case WIMAX_RF_ON: |
312 | case WIMAX_RF_OFF: | 319 | case WIMAX_RF_OFF: |
@@ -355,6 +362,7 @@ int wimax_rfkill_add(struct wimax_dev *wimax_dev) | |||
355 | 362 | ||
356 | wimax_dev->rfkill = rfkill; | 363 | wimax_dev->rfkill = rfkill; |
357 | 364 | ||
365 | rfkill_init_sw_state(rfkill, 1); | ||
358 | result = rfkill_register(wimax_dev->rfkill); | 366 | result = rfkill_register(wimax_dev->rfkill); |
359 | if (result < 0) | 367 | if (result < 0) |
360 | goto error_rfkill_register; | 368 | goto error_rfkill_register; |