hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/net/rfkill/rfkill-bt.c
....@@ -175,11 +175,15 @@
175175 rfkill->irq_req = 1;
176176 LOG("** disable irq\n");
177177 disable_irq(irq->irq);
178
- /*ret = disable_irq_wake(irq->irq);init irq wake is disabled,no need to disable*/
178
+ ret = enable_irq_wake(irq->irq);
179
+ if (ret)
180
+ goto fail3;
179181 }
180182
181183 return ret;
182184
185
+fail3:
186
+ free_irq(irq->irq, rfkill);
183187 fail2:
184188 gpio_free(irq->gpio.io);
185189 fail1:
....@@ -227,7 +231,6 @@
227231 {
228232 struct rfkill_rk_data *rfkill = g_rfkill;
229233 struct rfkill_rk_gpio *wake;
230
- bool ret;
231234
232235 DBG("Enter %s\n", __func__);
233236
....@@ -242,7 +245,7 @@
242245 return;
243246 }
244247
245
- ret = cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work);
248
+ cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work);
246249
247250 rfkill_rk_sleep_bt_internal(rfkill, sleep);
248251
....@@ -271,110 +274,6 @@
271274
272275 return 0;
273276 }
274
-static int proc_rk_set_power(void *data, bool blocked)
275
-{
276
- struct rfkill_rk_data *rfkill = data;
277
- struct rfkill_rk_gpio *wake_host = &rfkill->pdata->wake_host_irq.gpio;
278
- struct rfkill_rk_gpio *poweron = &rfkill->pdata->poweron_gpio;
279
- struct rfkill_rk_gpio *reset = &rfkill->pdata->reset_gpio;
280
- struct rfkill_rk_gpio *rts = &rfkill->pdata->rts_gpio;
281
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
282
- int wifi_power = 0;
283
- bool toggle = false;
284
-
285
- DBG("Enter %s\n", __func__);
286
-
287
- DBG("Set blocked:%d\n", blocked);
288
-
289
- toggle = rfkill->pdata->power_toggle;
290
-
291
-
292
- DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false");
293
-
294
- if (!blocked) {
295
- if (toggle) {
296
- rfkill_set_wifi_bt_power(1);
297
- msleep(100);
298
- }
299
-
300
- rfkill_rk_sleep_bt(BT_WAKEUP); // ensure bt is wakeup
301
-
302
- if (gpio_is_valid(wake_host->io)) {
303
- LOG("%s: set bt wake_host high!\n", __func__);
304
- gpio_direction_output(wake_host->io, 1);
305
- msleep(20);
306
- }
307
-
308
- if (gpio_is_valid(poweron->io)) {
309
- if (gpio_get_value(poweron->io) == !poweron->enable) {
310
- gpio_direction_output(poweron->io,
311
- !poweron->enable);
312
- msleep(20);
313
- gpio_direction_output(poweron->io,
314
- poweron->enable);
315
- msleep(20);
316
- if (gpio_is_valid(wake_host->io))
317
- gpio_direction_input(wake_host->io);
318
- }
319
- }
320
-
321
- if (gpio_is_valid(reset->io)) {
322
- if (gpio_get_value(reset->io) == !reset->enable) {
323
- gpio_direction_output(reset->io,
324
- !reset->enable);
325
- msleep(20);
326
- gpio_direction_output(reset->io, reset->enable);
327
- }
328
- }
329
-
330
- if (pinctrl && gpio_is_valid(rts->io)) {
331
- pinctrl_select_state(pinctrl, rts->gpio_state);
332
- LOG("ENABLE UART_RTS\n");
333
- gpio_direction_output(rts->io, rts->enable);
334
- msleep(100);
335
- LOG("DISABLE UART_RTS\n");
336
- gpio_direction_output(rts->io, !rts->enable);
337
- pinctrl_select_state(pinctrl, rts->default_state);
338
- }
339
-
340
- bt_power_state = 1;
341
- LOG("bt turn on power\n");
342
- rfkill_rk_setup_wake_irq(rfkill, 1);
343
- } else {
344
- if (gpio_is_valid(poweron->io)) {
345
- if (gpio_get_value(poweron->io) == poweron->enable) {
346
- gpio_direction_output(poweron->io,
347
- !poweron->enable);
348
- msleep(20);
349
- }
350
- }
351
-
352
- bt_power_state = 0;
353
- LOG("bt shut off power\n");
354
- if (gpio_is_valid(reset->io)) {
355
- if (gpio_get_value(reset->io) == reset->enable) {
356
- gpio_direction_output(reset->io,
357
- !reset->enable);
358
- msleep(20);
359
- }
360
- }
361
- if (toggle) {
362
- if (rfkill_get_wifi_power_state(&wifi_power)) {
363
- LOG("%s: cannot get wifi power state!\n", __func__);
364
- return -EPERM;
365
- }
366
- if (!wifi_power) {
367
- LOG("%s: bt will set vbat to low\n", __func__);
368
- rfkill_set_wifi_bt_power(0);
369
- } else {
370
- LOG("%s: bt shouldn't control the vbat\n", __func__);
371
- }
372
- }
373
- }
374
-
375
- return 0;
376
-}
377
-
378277
379278 static int rfkill_rk_set_power(void *data, bool blocked)
380279 {
....@@ -455,7 +354,7 @@
455354 if (gpio_is_valid(poweron->io)) {
456355 if (gpio_get_value(poweron->io) == poweron->enable) {
457356 gpio_direction_output(poweron->io,
458
- poweron->enable);
357
+ !poweron->enable);
459358 msleep(20);
460359 }
461360 }
....@@ -465,7 +364,7 @@
465364 if (gpio_is_valid(reset->io)) {
466365 if (gpio_get_value(reset->io) == reset->enable) {
467366 gpio_direction_output(reset->io,
468
- reset->enable);
367
+ !reset->enable);
469368 msleep(20);
470369 }
471370 }
....@@ -487,7 +386,6 @@
487386 struct rfkill_rk_data *rfkill = g_rfkill;
488387 struct rfkill_rk_gpio *rts;
489388 struct rfkill_rk_irq *wake_host_irq;
490
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
491389
492390 DBG("Enter %s\n", __func__);
493391
....@@ -498,9 +396,9 @@
498396 wake_host_irq = &rfkill->pdata->wake_host_irq;
499397
500398 //To prevent uart to receive bt data when suspended
501
- if (pinctrl && gpio_is_valid(rts->io)) {
399
+ if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) {
502400 DBG("Disable UART_RTS\n");
503
- pinctrl_select_state(pinctrl, rts->gpio_state);
401
+ pinctrl_select_state(rfkill->pdata->pinctrl, rts->gpio_state);
504402 gpio_direction_output(rts->io, !rts->enable);
505403 }
506404
....@@ -512,11 +410,12 @@
512410 if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) {
513411 DBG("enable irq for bt wakeup host\n");
514412 enable_irq(wake_host_irq->irq);
515
- enable_irq_wake(wake_host_irq->irq);
516413 }
517414
518415 #ifdef CONFIG_RFKILL_RESET
519
- rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false);
416
+ rfkill_init_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
417
+ rfkill_set_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
418
+ rfkill_set_hw_state(rfkill->rfkill_dev, false);
520419 rfkill_rk_set_power(rfkill, BT_BLOCKED);
521420 #endif
522421
....@@ -528,7 +427,6 @@
528427 struct rfkill_rk_data *rfkill = g_rfkill;
529428 struct rfkill_rk_irq *wake_host_irq;
530429 struct rfkill_rk_gpio *rts;
531
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
532430
533431 DBG("Enter %s\n", __func__);
534432
....@@ -541,13 +439,12 @@
541439 if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) {
542440 LOG("** disable irq\n");
543441 disable_irq(wake_host_irq->irq);
544
- disable_irq_wake(wake_host_irq->irq);
545442 }
546443
547
- if (pinctrl && gpio_is_valid(rts->io)) {
444
+ if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) {
548445 DBG("Enable UART_RTS\n");
549446 gpio_direction_output(rts->io, rts->enable);
550
- pinctrl_select_state(pinctrl, rts->default_state);
447
+ pinctrl_select_state(rfkill->pdata->pinctrl, rts->default_state);
551448 }
552449 }
553450
....@@ -594,9 +491,9 @@
594491 DBG("btwrite %c\n", b);
595492 /* HCI_DEV_WRITE */
596493 if (b != '0')
597
- proc_rk_set_power(g_rfkill, 0);
494
+ rfkill_rk_sleep_bt(BT_WAKEUP);
598495 else
599
- proc_rk_set_power(g_rfkill, 1);
496
+ rfkill_rk_sleep_bt(BT_SLEEP);
600497
601498 return count;
602499 }
....@@ -688,16 +585,14 @@
688585 }
689586 #endif //CONFIG_OF
690587
691
-static const struct file_operations bluesleep_lpm = {
692
- .owner = THIS_MODULE,
693
- .read = bluesleep_read_proc_lpm,
694
- .write = bluesleep_write_proc_lpm,
588
+static const struct proc_ops bluesleep_lpm = {
589
+ .proc_read = bluesleep_read_proc_lpm,
590
+ .proc_write = bluesleep_write_proc_lpm,
695591 };
696592
697
-static const struct file_operations bluesleep_btwrite = {
698
- .owner = THIS_MODULE,
699
- .read = bluesleep_read_proc_btwrite,
700
- .write = bluesleep_write_proc_btwrite,
593
+static const struct proc_ops bluesleep_btwrite = {
594
+ .proc_read = bluesleep_read_proc_btwrite,
595
+ .proc_write = bluesleep_write_proc_btwrite,
701596 };
702597
703598 static int rfkill_rk_probe(struct platform_device *pdev)
....@@ -751,7 +646,7 @@
751646 }
752647
753648 /* read/write proc entries */
754
- ent = proc_create("lpm", 0, sleep_dir, &bluesleep_lpm);
649
+ ent = proc_create("lpm", 0444, sleep_dir, &bluesleep_lpm);
755650 if (!ent) {
756651 LOG("Unable to create /proc/%s/lpm entry", PROC_DIR);
757652 ret = -ENOMEM;
....@@ -759,7 +654,7 @@
759654 }
760655
761656 /* read/write proc entries */
762
- ent = proc_create("btwrite", 0, sleep_dir, &bluesleep_btwrite);
657
+ ent = proc_create("btwrite", 0444, sleep_dir, &bluesleep_btwrite);
763658 if (!ent) {
764659 LOG("Unable to create /proc/%s/btwrite entry", PROC_DIR);
765660 ret = -ENOMEM;
....@@ -801,7 +696,9 @@
801696 if (!rfkill->rfkill_dev)
802697 goto fail_alloc;
803698
804
- rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false);
699
+ rfkill_init_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
700
+ rfkill_set_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
701
+ rfkill_set_hw_state(rfkill->rfkill_dev, false);
805702 ret = rfkill_register(rfkill->rfkill_dev);
806703 if (ret < 0)
807704 goto fail_rfkill;