| .. | .. |
|---|
| 175 | 175 | rfkill->irq_req = 1; |
|---|
| 176 | 176 | LOG("** disable irq\n"); |
|---|
| 177 | 177 | disable_irq(irq->irq); |
|---|
| 178 | | - ret = enable_irq_wake(irq->irq); |
|---|
| 179 | | - if (ret) |
|---|
| 180 | | - goto fail3; |
|---|
| 178 | + /*ret = disable_irq_wake(irq->irq);init irq wake is disabled,no need to disable*/ |
|---|
| 181 | 179 | } |
|---|
| 182 | 180 | |
|---|
| 183 | 181 | return ret; |
|---|
| 184 | 182 | |
|---|
| 185 | | -fail3: |
|---|
| 186 | | - free_irq(irq->irq, rfkill); |
|---|
| 187 | 183 | fail2: |
|---|
| 188 | 184 | gpio_free(irq->gpio.io); |
|---|
| 189 | 185 | fail1: |
|---|
| .. | .. |
|---|
| 292 | 288 | |
|---|
| 293 | 289 | toggle = rfkill->pdata->power_toggle; |
|---|
| 294 | 290 | |
|---|
| 295 | | - if (toggle) { |
|---|
| 296 | | - if (rfkill_get_wifi_power_state(&wifi_power)) { |
|---|
| 297 | | - LOG("%s: cannot get wifi power state!\n", __func__); |
|---|
| 298 | | - return -1; |
|---|
| 299 | | - } |
|---|
| 300 | | - } |
|---|
| 301 | 291 | |
|---|
| 302 | 292 | DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); |
|---|
| 303 | 293 | |
|---|
| .. | .. |
|---|
| 323 | 313 | gpio_direction_output(poweron->io, |
|---|
| 324 | 314 | poweron->enable); |
|---|
| 325 | 315 | msleep(20); |
|---|
| 326 | | - if (gpio_is_valid(wake_host->io)) |
|---|
| 327 | | - gpio_direction_input(wake_host->io); |
|---|
| 328 | 316 | } |
|---|
| 329 | 317 | } |
|---|
| 330 | 318 | |
|---|
| .. | .. |
|---|
| 335 | 323 | msleep(20); |
|---|
| 336 | 324 | gpio_direction_output(reset->io, reset->enable); |
|---|
| 337 | 325 | } |
|---|
| 326 | + } |
|---|
| 327 | + |
|---|
| 328 | + if (gpio_is_valid(wake_host->io)) { |
|---|
| 329 | + LOG("%s: set bt wake_host input!\n", __func__); |
|---|
| 330 | + gpio_direction_input(wake_host->io); |
|---|
| 338 | 331 | } |
|---|
| 339 | 332 | |
|---|
| 340 | 333 | if (pinctrl && gpio_is_valid(rts->io)) { |
|---|
| .. | .. |
|---|
| 369 | 362 | } |
|---|
| 370 | 363 | } |
|---|
| 371 | 364 | if (toggle) { |
|---|
| 365 | + if (rfkill_get_wifi_power_state(&wifi_power)) { |
|---|
| 366 | + LOG("%s: cannot get wifi power state!\n", __func__); |
|---|
| 367 | + return -EPERM; |
|---|
| 368 | + } |
|---|
| 372 | 369 | if (!wifi_power) { |
|---|
| 373 | 370 | LOG("%s: bt will set vbat to low\n", __func__); |
|---|
| 374 | 371 | rfkill_set_wifi_bt_power(0); |
|---|
| .. | .. |
|---|
| 410 | 407 | if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { |
|---|
| 411 | 408 | DBG("enable irq for bt wakeup host\n"); |
|---|
| 412 | 409 | enable_irq(wake_host_irq->irq); |
|---|
| 410 | + enable_irq_wake(wake_host_irq->irq); |
|---|
| 413 | 411 | } |
|---|
| 414 | 412 | |
|---|
| 415 | 413 | #ifdef CONFIG_RFKILL_RESET |
|---|
| .. | .. |
|---|
| 439 | 437 | if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { |
|---|
| 440 | 438 | LOG("** disable irq\n"); |
|---|
| 441 | 439 | disable_irq(wake_host_irq->irq); |
|---|
| 440 | + disable_irq_wake(wake_host_irq->irq); |
|---|
| 442 | 441 | } |
|---|
| 443 | 442 | |
|---|
| 444 | 443 | if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) { |
|---|