hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/net/rfkill/rfkill-bt.c
....@@ -25,7 +25,6 @@
2525 #include <linux/rfkill-bt.h>
2626 #include <linux/rfkill-wlan.h>
2727 #include <linux/wakelock.h>
28
-#include <linux/input.h>
2928 #include <linux/interrupt.h>
3029 #include <asm/irq.h>
3130 #include <linux/suspend.h>
....@@ -70,11 +69,9 @@
7069 struct wake_lock bt_irq_wl;
7170 struct delayed_work bt_sleep_delay_work;
7271 int irq_req;
73
- bool enable_power_key;
7472 };
7573
7674 static struct rfkill_rk_data *g_rfkill = NULL;
77
-static struct input_dev *power_key_dev;
7875
7976 static const char bt_name[] =
8077 #if defined(CONFIG_BCM4330)
....@@ -116,20 +113,6 @@
116113 #endif
117114 ;
118115
119
-static int rfkill_rk_power_key_up(void)
120
-{
121
- if (!power_key_dev)
122
- return -ENODEV;
123
-
124
- input_report_key(power_key_dev, KEY_POWER, 1);
125
- input_sync(power_key_dev);
126
- msleep(20);
127
- input_report_key(power_key_dev, KEY_POWER, 0);
128
- input_sync(power_key_dev);
129
-
130
- return 0;
131
-}
132
-
133116 static irqreturn_t rfkill_rk_wake_host_irq(int irq, void *dev)
134117 {
135118 struct rfkill_rk_data *rfkill = dev;
....@@ -140,16 +123,6 @@
140123
141124 wake_lock_timeout(&rfkill->bt_irq_wl,
142125 msecs_to_jiffies(BT_IRQ_WAKELOCK_TIMEOUT));
143
-
144
- if (rfkill->enable_power_key)
145
- return IRQ_WAKE_THREAD;
146
-
147
- return IRQ_HANDLED;
148
-}
149
-
150
-static irqreturn_t rfkill_rk_wake_host_irq_thread(int irq, void *dev)
151
-{
152
- rfkill_rk_power_key_up();
153126
154127 return IRQ_HANDLED;
155128 }
....@@ -192,22 +165,25 @@
192165 LOG("Request irq for bt wakeup host\n");
193166 irq->irq = gpio_to_irq(irq->gpio.io);
194167 sprintf(irq->name, "%s_irq", irq->gpio.name);
195
- ret = request_threaded_irq(irq->irq, rfkill_rk_wake_host_irq,
196
- rfkill_rk_wake_host_irq_thread,
197
- IRQF_ONESHOT | ((irq->gpio.enable == GPIO_ACTIVE_LOW) ?
198
- IRQF_TRIGGER_FALLING :
199
- IRQF_TRIGGER_RISING),
200
- irq->name, rfkill);
168
+ ret = request_irq(irq->irq, rfkill_rk_wake_host_irq,
169
+ (irq->gpio.enable == GPIO_ACTIVE_LOW) ?
170
+ IRQF_TRIGGER_FALLING :
171
+ IRQF_TRIGGER_RISING,
172
+ irq->name, rfkill);
201173 if (ret)
202174 goto fail2;
203175 rfkill->irq_req = 1;
204176 LOG("** disable irq\n");
205177 disable_irq(irq->irq);
206
- /*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;
207181 }
208182
209183 return ret;
210184
185
+fail3:
186
+ free_irq(irq->irq, rfkill);
211187 fail2:
212188 gpio_free(irq->gpio.io);
213189 fail1:
....@@ -255,7 +231,6 @@
255231 {
256232 struct rfkill_rk_data *rfkill = g_rfkill;
257233 struct rfkill_rk_gpio *wake;
258
- bool ret;
259234
260235 DBG("Enter %s\n", __func__);
261236
....@@ -270,7 +245,7 @@
270245 return;
271246 }
272247
273
- ret = cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work);
248
+ cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work);
274249
275250 rfkill_rk_sleep_bt_internal(rfkill, sleep);
276251
....@@ -317,6 +292,12 @@
317292
318293 toggle = rfkill->pdata->power_toggle;
319294
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
+ }
320301
321302 DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false");
322303
....@@ -388,10 +369,6 @@
388369 }
389370 }
390371 if (toggle) {
391
- if (rfkill_get_wifi_power_state(&wifi_power)) {
392
- LOG("%s: cannot get wifi power state!\n", __func__);
393
- return -EPERM;
394
- }
395372 if (!wifi_power) {
396373 LOG("%s: bt will set vbat to low\n", __func__);
397374 rfkill_set_wifi_bt_power(0);
....@@ -409,7 +386,6 @@
409386 struct rfkill_rk_data *rfkill = g_rfkill;
410387 struct rfkill_rk_gpio *rts;
411388 struct rfkill_rk_irq *wake_host_irq;
412
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
413389
414390 DBG("Enter %s\n", __func__);
415391
....@@ -420,9 +396,9 @@
420396 wake_host_irq = &rfkill->pdata->wake_host_irq;
421397
422398 //To prevent uart to receive bt data when suspended
423
- if (pinctrl && gpio_is_valid(rts->io)) {
399
+ if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) {
424400 DBG("Disable UART_RTS\n");
425
- pinctrl_select_state(pinctrl, rts->gpio_state);
401
+ pinctrl_select_state(rfkill->pdata->pinctrl, rts->gpio_state);
426402 gpio_direction_output(rts->io, !rts->enable);
427403 }
428404
....@@ -434,11 +410,12 @@
434410 if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) {
435411 DBG("enable irq for bt wakeup host\n");
436412 enable_irq(wake_host_irq->irq);
437
- enable_irq_wake(wake_host_irq->irq);
438413 }
439414
440415 #ifdef CONFIG_RFKILL_RESET
441
- 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);
442419 rfkill_rk_set_power(rfkill, BT_BLOCKED);
443420 #endif
444421
....@@ -450,7 +427,6 @@
450427 struct rfkill_rk_data *rfkill = g_rfkill;
451428 struct rfkill_rk_irq *wake_host_irq;
452429 struct rfkill_rk_gpio *rts;
453
- struct pinctrl *pinctrl = rfkill->pdata->pinctrl;
454430
455431 DBG("Enter %s\n", __func__);
456432
....@@ -463,13 +439,12 @@
463439 if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) {
464440 LOG("** disable irq\n");
465441 disable_irq(wake_host_irq->irq);
466
- disable_irq_wake(wake_host_irq->irq);
467442 }
468443
469
- if (pinctrl && gpio_is_valid(rts->io)) {
444
+ if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) {
470445 DBG("Enable UART_RTS\n");
471446 gpio_direction_output(rts->io, rts->enable);
472
- pinctrl_select_state(pinctrl, rts->default_state);
447
+ pinctrl_select_state(rfkill->pdata->pinctrl, rts->default_state);
473448 }
474449 }
475450
....@@ -514,56 +489,11 @@
514489 return -EFAULT;
515490
516491 DBG("btwrite %c\n", b);
492
+ /* HCI_DEV_WRITE */
517493 if (b != '0')
518494 rfkill_rk_sleep_bt(BT_WAKEUP);
519495 else
520496 rfkill_rk_sleep_bt(BT_SLEEP);
521
-
522
- return count;
523
-}
524
-
525
-static ssize_t bluesleep_read_proc_powerupkey(struct file *file,
526
- char __user *buffer, size_t count,
527
- loff_t *data)
528
-{
529
- struct rfkill_rk_data *rfkill = g_rfkill;
530
- char src[2];
531
-
532
- if (*data >= 1)
533
- return 0;
534
-
535
- if (!rfkill)
536
- return -EFAULT;
537
-
538
- src[0] = rfkill->enable_power_key ? '1' : '0';
539
- src[1] = '\n';
540
- if (copy_to_user(buffer, src, 2))
541
- return -EFAULT;
542
- *data = 1;
543
-
544
- return 2;
545
-}
546
-
547
-static ssize_t bluesleep_write_proc_powerupkey(struct file *file,
548
- const char __user *buffer,
549
- size_t count, loff_t *data)
550
-{
551
- char b;
552
- struct rfkill_rk_data *rfkill = g_rfkill;
553
-
554
- if (!rfkill)
555
- return -EFAULT;
556
-
557
- if (count < 1)
558
- return -EINVAL;
559
-
560
- if (copy_from_user(&b, buffer, 1))
561
- return -EFAULT;
562
-
563
- if (b != '0')
564
- rfkill->enable_power_key = true;
565
- else
566
- rfkill->enable_power_key = false;
567497
568498 return count;
569499 }
....@@ -655,50 +585,15 @@
655585 }
656586 #endif //CONFIG_OF
657587
658
-static const struct file_operations bluesleep_lpm = {
659
- .owner = THIS_MODULE,
660
- .read = bluesleep_read_proc_lpm,
661
- .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,
662591 };
663592
664
-static const struct file_operations bluesleep_btwrite = {
665
- .owner = THIS_MODULE,
666
- .read = bluesleep_read_proc_btwrite,
667
- .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,
668596 };
669
-
670
-static const struct file_operations bluesleep_powerupkey = {
671
- .owner = THIS_MODULE,
672
- .read = bluesleep_read_proc_powerupkey,
673
- .write = bluesleep_write_proc_powerupkey,
674
-};
675
-
676
-static int rfkill_rk_register_power_key(void)
677
-{
678
- int ret = 0;
679
-
680
- /* register input device */
681
- power_key_dev = input_allocate_device();
682
- if (!power_key_dev) {
683
- LOG("ir_dev: not enough memory for input device\n");
684
- return -ENOMEM;
685
- }
686
-
687
- power_key_dev->name = "bt-powerkey";
688
- power_key_dev->id.bustype = BUS_HOST;
689
-
690
- power_key_dev->evbit[0] = BIT_MASK(EV_KEY);
691
- set_bit(KEY_POWER, power_key_dev->keybit);
692
-
693
- ret = input_register_device(power_key_dev);
694
- if (ret) {
695
- input_free_device(power_key_dev);
696
- LOG("ir_rx_init: register input device exception, exit\n");
697
- return -EBUSY;
698
- }
699
-
700
- return ret;
701
-}
702597
703598 static int rfkill_rk_probe(struct platform_device *pdev)
704599 {
....@@ -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,17 +654,9 @@
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);
765
- ret = -ENOMEM;
766
- goto fail_alloc;
767
- }
768
-
769
- /* read/write proc entries */
770
- ent = proc_create("powerupkey", 0, sleep_dir, &bluesleep_powerupkey);
771
- if (!ent) {
772
- LOG("Unable to create /proc/%s/powerupkey entry", PROC_DIR);
773660 ret = -ENOMEM;
774661 goto fail_alloc;
775662 }
....@@ -809,7 +696,9 @@
809696 if (!rfkill->rfkill_dev)
810697 goto fail_alloc;
811698
812
- 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);
813702 ret = rfkill_register(rfkill->rfkill_dev);
814703 if (ret < 0)
815704 goto fail_rfkill;
....@@ -832,16 +721,12 @@
832721
833722 LOG("%s device registered.\n", pdata->name);
834723
835
- if (rfkill_rk_register_power_key() != 0)
836
- goto fail_rfkill;
837
-
838724 return 0;
839725
840726 fail_rfkill:
841727 rfkill_destroy(rfkill->rfkill_dev);
842728 fail_alloc:
843729
844
- remove_proc_entry("powerupkey", sleep_dir);
845730 remove_proc_entry("btwrite", sleep_dir);
846731 remove_proc_entry("lpm", sleep_dir);
847732 fail_setup_wake_irq:
....@@ -860,11 +745,7 @@
860745
861746 rfkill_unregister(rfkill->rfkill_dev);
862747 rfkill_destroy(rfkill->rfkill_dev);
863
- remove_proc_entry("powerupkey", sleep_dir);
864
- remove_proc_entry("btwrite", sleep_dir);
865
- remove_proc_entry("lpm", sleep_dir);
866748
867
- input_unregister_device(power_key_dev);
868749 cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work);
869750
870751 // free gpio