hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/net/rfkill/rfkill-bt.c
....@@ -227,7 +227,6 @@
227227 {
228228 struct rfkill_rk_data *rfkill = g_rfkill;
229229 struct rfkill_rk_gpio *wake;
230
- bool ret;
231230
232231 DBG("Enter %s\n", __func__);
233232
....@@ -242,7 +241,7 @@
242241 return;
243242 }
244243
245
- ret = cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work);
244
+ cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work);
246245
247246 rfkill_rk_sleep_bt_internal(rfkill, sleep);
248247
....@@ -271,7 +270,8 @@
271270
272271 return 0;
273272 }
274
-static int proc_rk_set_power(void *data, bool blocked)
273
+
274
+static int rfkill_rk_set_power(void *data, bool blocked)
275275 {
276276 struct rfkill_rk_data *rfkill = data;
277277 struct rfkill_rk_gpio *wake_host = &rfkill->pdata->wake_host_irq.gpio;
....@@ -313,8 +313,6 @@
313313 gpio_direction_output(poweron->io,
314314 poweron->enable);
315315 msleep(20);
316
- if (gpio_is_valid(wake_host->io))
317
- gpio_direction_input(wake_host->io);
318316 }
319317 }
320318
....@@ -325,6 +323,11 @@
325323 msleep(20);
326324 gpio_direction_output(reset->io, reset->enable);
327325 }
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);
328331 }
329332
330333 if (pinctrl && gpio_is_valid(rts->io)) {
....@@ -375,119 +378,11 @@
375378 return 0;
376379 }
377380
378
-
379
-static int rfkill_rk_set_power(void *data, bool blocked)
380
-{
381
- struct rfkill_rk_data *rfkill = data;
382
- struct rfkill_rk_gpio *wake_host = &rfkill->pdata->wake_host_irq.gpio;
383
- struct rfkill_rk_gpio *poweron = &rfkill->pdata->poweron_gpio;
384
- struct rfkill_rk_gpio *reset = &rfkill->pdata->reset_gpio;
385
- struct rfkill_rk_gpio *rts = &rfkill->pdata->rts_gpio;
386
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
387
- int wifi_power = 0;
388
- bool toggle = false;
389
-
390
- DBG("Enter %s\n", __func__);
391
-
392
- DBG("Set blocked:%d\n", blocked);
393
-
394
- toggle = rfkill->pdata->power_toggle;
395
-
396
- if (toggle) {
397
- if (rfkill_get_wifi_power_state(&wifi_power)) {
398
- LOG("%s: cannot get wifi power state!\n", __func__);
399
- return -1;
400
- }
401
- }
402
-
403
- DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false");
404
-
405
- if (!blocked) {
406
- if (toggle) {
407
- rfkill_set_wifi_bt_power(1);
408
- msleep(100);
409
- }
410
-
411
- rfkill_rk_sleep_bt(BT_WAKEUP); // ensure bt is wakeup
412
-
413
- if (gpio_is_valid(wake_host->io)) {
414
- LOG("%s: set bt wake_host high!\n", __func__);
415
- gpio_direction_output(wake_host->io, 1);
416
- msleep(20);
417
- }
418
-
419
- if (gpio_is_valid(poweron->io)) {
420
- if (gpio_get_value(poweron->io) == !poweron->enable) {
421
- gpio_direction_output(poweron->io,
422
- !poweron->enable);
423
- msleep(20);
424
- gpio_direction_output(poweron->io,
425
- poweron->enable);
426
- msleep(20);
427
- if (gpio_is_valid(wake_host->io))
428
- gpio_direction_input(wake_host->io);
429
- }
430
- }
431
-
432
- if (gpio_is_valid(reset->io)) {
433
- if (gpio_get_value(reset->io) == !reset->enable) {
434
- gpio_direction_output(reset->io,
435
- !reset->enable);
436
- msleep(20);
437
- gpio_direction_output(reset->io, reset->enable);
438
- }
439
- }
440
-
441
- if (pinctrl && gpio_is_valid(rts->io)) {
442
- pinctrl_select_state(pinctrl, rts->gpio_state);
443
- LOG("ENABLE UART_RTS\n");
444
- gpio_direction_output(rts->io, rts->enable);
445
- msleep(100);
446
- LOG("DISABLE UART_RTS\n");
447
- gpio_direction_output(rts->io, !rts->enable);
448
- pinctrl_select_state(pinctrl, rts->default_state);
449
- }
450
-
451
- bt_power_state = 1;
452
- LOG("bt turn on power\n");
453
- rfkill_rk_setup_wake_irq(rfkill, 1);
454
- } else {
455
- if (gpio_is_valid(poweron->io)) {
456
- if (gpio_get_value(poweron->io) == poweron->enable) {
457
- gpio_direction_output(poweron->io,
458
- poweron->enable);
459
- msleep(20);
460
- }
461
- }
462
-
463
- bt_power_state = 0;
464
- LOG("bt shut off power\n");
465
- if (gpio_is_valid(reset->io)) {
466
- if (gpio_get_value(reset->io) == reset->enable) {
467
- gpio_direction_output(reset->io,
468
- reset->enable);
469
- msleep(20);
470
- }
471
- }
472
- if (toggle) {
473
- if (!wifi_power) {
474
- LOG("%s: bt will set vbat to low\n", __func__);
475
- rfkill_set_wifi_bt_power(0);
476
- } else {
477
- LOG("%s: bt shouldn't control the vbat\n", __func__);
478
- }
479
- }
480
- }
481
-
482
- return 0;
483
-}
484
-
485381 static int rfkill_rk_pm_prepare(struct device *dev)
486382 {
487383 struct rfkill_rk_data *rfkill = g_rfkill;
488384 struct rfkill_rk_gpio *rts;
489385 struct rfkill_rk_irq *wake_host_irq;
490
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
491386
492387 DBG("Enter %s\n", __func__);
493388
....@@ -498,9 +393,9 @@
498393 wake_host_irq = &rfkill->pdata->wake_host_irq;
499394
500395 //To prevent uart to receive bt data when suspended
501
- if (pinctrl && gpio_is_valid(rts->io)) {
396
+ if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) {
502397 DBG("Disable UART_RTS\n");
503
- pinctrl_select_state(pinctrl, rts->gpio_state);
398
+ pinctrl_select_state(rfkill->pdata->pinctrl, rts->gpio_state);
504399 gpio_direction_output(rts->io, !rts->enable);
505400 }
506401
....@@ -516,7 +411,9 @@
516411 }
517412
518413 #ifdef CONFIG_RFKILL_RESET
519
- rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false);
414
+ rfkill_init_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
415
+ rfkill_set_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
416
+ rfkill_set_hw_state(rfkill->rfkill_dev, false);
520417 rfkill_rk_set_power(rfkill, BT_BLOCKED);
521418 #endif
522419
....@@ -528,7 +425,6 @@
528425 struct rfkill_rk_data *rfkill = g_rfkill;
529426 struct rfkill_rk_irq *wake_host_irq;
530427 struct rfkill_rk_gpio *rts;
531
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
532428
533429 DBG("Enter %s\n", __func__);
534430
....@@ -544,10 +440,10 @@
544440 disable_irq_wake(wake_host_irq->irq);
545441 }
546442
547
- if (pinctrl && gpio_is_valid(rts->io)) {
443
+ if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) {
548444 DBG("Enable UART_RTS\n");
549445 gpio_direction_output(rts->io, rts->enable);
550
- pinctrl_select_state(pinctrl, rts->default_state);
446
+ pinctrl_select_state(rfkill->pdata->pinctrl, rts->default_state);
551447 }
552448 }
553449
....@@ -594,9 +490,9 @@
594490 DBG("btwrite %c\n", b);
595491 /* HCI_DEV_WRITE */
596492 if (b != '0')
597
- proc_rk_set_power(g_rfkill, 0);
493
+ rfkill_rk_sleep_bt(BT_WAKEUP);
598494 else
599
- proc_rk_set_power(g_rfkill, 1);
495
+ rfkill_rk_sleep_bt(BT_SLEEP);
600496
601497 return count;
602498 }
....@@ -688,16 +584,14 @@
688584 }
689585 #endif //CONFIG_OF
690586
691
-static const struct file_operations bluesleep_lpm = {
692
- .owner = THIS_MODULE,
693
- .read = bluesleep_read_proc_lpm,
694
- .write = bluesleep_write_proc_lpm,
587
+static const struct proc_ops bluesleep_lpm = {
588
+ .proc_read = bluesleep_read_proc_lpm,
589
+ .proc_write = bluesleep_write_proc_lpm,
695590 };
696591
697
-static const struct file_operations bluesleep_btwrite = {
698
- .owner = THIS_MODULE,
699
- .read = bluesleep_read_proc_btwrite,
700
- .write = bluesleep_write_proc_btwrite,
592
+static const struct proc_ops bluesleep_btwrite = {
593
+ .proc_read = bluesleep_read_proc_btwrite,
594
+ .proc_write = bluesleep_write_proc_btwrite,
701595 };
702596
703597 static int rfkill_rk_probe(struct platform_device *pdev)
....@@ -751,7 +645,7 @@
751645 }
752646
753647 /* read/write proc entries */
754
- ent = proc_create("lpm", 0, sleep_dir, &bluesleep_lpm);
648
+ ent = proc_create("lpm", 0444, sleep_dir, &bluesleep_lpm);
755649 if (!ent) {
756650 LOG("Unable to create /proc/%s/lpm entry", PROC_DIR);
757651 ret = -ENOMEM;
....@@ -759,7 +653,7 @@
759653 }
760654
761655 /* read/write proc entries */
762
- ent = proc_create("btwrite", 0, sleep_dir, &bluesleep_btwrite);
656
+ ent = proc_create("btwrite", 0444, sleep_dir, &bluesleep_btwrite);
763657 if (!ent) {
764658 LOG("Unable to create /proc/%s/btwrite entry", PROC_DIR);
765659 ret = -ENOMEM;
....@@ -801,7 +695,9 @@
801695 if (!rfkill->rfkill_dev)
802696 goto fail_alloc;
803697
804
- rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false);
698
+ rfkill_init_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
699
+ rfkill_set_sw_state(rfkill->rfkill_dev, BT_BLOCKED);
700
+ rfkill_set_hw_state(rfkill->rfkill_dev, false);
805701 ret = rfkill_register(rfkill->rfkill_dev);
806702 if (ret < 0)
807703 goto fail_rfkill;