From 01573e231f18eb2d99162747186f59511f56b64d Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 08 Dec 2023 10:40:48 +0000 Subject: [PATCH] 移去rt --- kernel/net/rfkill/rfkill-bt.c | 191 +++++++++-------------------------------------- 1 files changed, 36 insertions(+), 155 deletions(-) diff --git a/kernel/net/rfkill/rfkill-bt.c b/kernel/net/rfkill/rfkill-bt.c index a2d31bc..719a23d 100644 --- a/kernel/net/rfkill/rfkill-bt.c +++ b/kernel/net/rfkill/rfkill-bt.c @@ -25,7 +25,6 @@ #include <linux/rfkill-bt.h> #include <linux/rfkill-wlan.h> #include <linux/wakelock.h> -#include <linux/input.h> #include <linux/interrupt.h> #include <asm/irq.h> #include <linux/suspend.h> @@ -70,11 +69,9 @@ struct wake_lock bt_irq_wl; struct delayed_work bt_sleep_delay_work; int irq_req; - bool enable_power_key; }; static struct rfkill_rk_data *g_rfkill = NULL; -static struct input_dev *power_key_dev; static const char bt_name[] = #if defined(CONFIG_BCM4330) @@ -116,20 +113,6 @@ #endif ; -static int rfkill_rk_power_key_up(void) -{ - if (!power_key_dev) - return -ENODEV; - - input_report_key(power_key_dev, KEY_POWER, 1); - input_sync(power_key_dev); - msleep(20); - input_report_key(power_key_dev, KEY_POWER, 0); - input_sync(power_key_dev); - - return 0; -} - static irqreturn_t rfkill_rk_wake_host_irq(int irq, void *dev) { struct rfkill_rk_data *rfkill = dev; @@ -140,16 +123,6 @@ wake_lock_timeout(&rfkill->bt_irq_wl, msecs_to_jiffies(BT_IRQ_WAKELOCK_TIMEOUT)); - - if (rfkill->enable_power_key) - return IRQ_WAKE_THREAD; - - return IRQ_HANDLED; -} - -static irqreturn_t rfkill_rk_wake_host_irq_thread(int irq, void *dev) -{ - rfkill_rk_power_key_up(); return IRQ_HANDLED; } @@ -192,22 +165,25 @@ LOG("Request irq for bt wakeup host\n"); irq->irq = gpio_to_irq(irq->gpio.io); sprintf(irq->name, "%s_irq", irq->gpio.name); - ret = request_threaded_irq(irq->irq, rfkill_rk_wake_host_irq, - rfkill_rk_wake_host_irq_thread, - IRQF_ONESHOT | ((irq->gpio.enable == GPIO_ACTIVE_LOW) ? - IRQF_TRIGGER_FALLING : - IRQF_TRIGGER_RISING), - irq->name, rfkill); + ret = request_irq(irq->irq, rfkill_rk_wake_host_irq, + (irq->gpio.enable == GPIO_ACTIVE_LOW) ? + IRQF_TRIGGER_FALLING : + IRQF_TRIGGER_RISING, + irq->name, rfkill); if (ret) goto fail2; rfkill->irq_req = 1; LOG("** disable irq\n"); disable_irq(irq->irq); - /*ret = disable_irq_wake(irq->irq);init irq wake is disabled,no need to disable*/ + ret = enable_irq_wake(irq->irq); + if (ret) + goto fail3; } return ret; +fail3: + free_irq(irq->irq, rfkill); fail2: gpio_free(irq->gpio.io); fail1: @@ -255,7 +231,6 @@ { struct rfkill_rk_data *rfkill = g_rfkill; struct rfkill_rk_gpio *wake; - bool ret; DBG("Enter %s\n", __func__); @@ -270,7 +245,7 @@ return; } - ret = cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work); + cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work); rfkill_rk_sleep_bt_internal(rfkill, sleep); @@ -317,6 +292,12 @@ toggle = rfkill->pdata->power_toggle; + if (toggle) { + if (rfkill_get_wifi_power_state(&wifi_power)) { + LOG("%s: cannot get wifi power state!\n", __func__); + return -1; + } + } DBG("%s: toggle = %s\n", __func__, toggle ? "true" : "false"); @@ -388,10 +369,6 @@ } } if (toggle) { - if (rfkill_get_wifi_power_state(&wifi_power)) { - LOG("%s: cannot get wifi power state!\n", __func__); - return -EPERM; - } if (!wifi_power) { LOG("%s: bt will set vbat to low\n", __func__); rfkill_set_wifi_bt_power(0); @@ -409,7 +386,6 @@ struct rfkill_rk_data *rfkill = g_rfkill; struct rfkill_rk_gpio *rts; struct rfkill_rk_irq *wake_host_irq; - struct pinctrl *pinctrl = rfkill->pdata->pinctrl; DBG("Enter %s\n", __func__); @@ -420,9 +396,9 @@ wake_host_irq = &rfkill->pdata->wake_host_irq; //To prevent uart to receive bt data when suspended - if (pinctrl && gpio_is_valid(rts->io)) { + if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) { DBG("Disable UART_RTS\n"); - pinctrl_select_state(pinctrl, rts->gpio_state); + pinctrl_select_state(rfkill->pdata->pinctrl, rts->gpio_state); gpio_direction_output(rts->io, !rts->enable); } @@ -434,11 +410,12 @@ if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { DBG("enable irq for bt wakeup host\n"); enable_irq(wake_host_irq->irq); - enable_irq_wake(wake_host_irq->irq); } #ifdef CONFIG_RFKILL_RESET - rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false); + rfkill_init_sw_state(rfkill->rfkill_dev, BT_BLOCKED); + rfkill_set_sw_state(rfkill->rfkill_dev, BT_BLOCKED); + rfkill_set_hw_state(rfkill->rfkill_dev, false); rfkill_rk_set_power(rfkill, BT_BLOCKED); #endif @@ -450,7 +427,6 @@ struct rfkill_rk_data *rfkill = g_rfkill; struct rfkill_rk_irq *wake_host_irq; struct rfkill_rk_gpio *rts; - struct pinctrl *pinctrl = rfkill->pdata->pinctrl; DBG("Enter %s\n", __func__); @@ -463,13 +439,12 @@ if (gpio_is_valid(wake_host_irq->gpio.io) && bt_power_state) { LOG("** disable irq\n"); disable_irq(wake_host_irq->irq); - disable_irq_wake(wake_host_irq->irq); } - if (pinctrl && gpio_is_valid(rts->io)) { + if (rfkill->pdata->pinctrl && gpio_is_valid(rts->io)) { DBG("Enable UART_RTS\n"); gpio_direction_output(rts->io, rts->enable); - pinctrl_select_state(pinctrl, rts->default_state); + pinctrl_select_state(rfkill->pdata->pinctrl, rts->default_state); } } @@ -514,56 +489,11 @@ return -EFAULT; DBG("btwrite %c\n", b); + /* HCI_DEV_WRITE */ if (b != '0') rfkill_rk_sleep_bt(BT_WAKEUP); else rfkill_rk_sleep_bt(BT_SLEEP); - - return count; -} - -static ssize_t bluesleep_read_proc_powerupkey(struct file *file, - char __user *buffer, size_t count, - loff_t *data) -{ - struct rfkill_rk_data *rfkill = g_rfkill; - char src[2]; - - if (*data >= 1) - return 0; - - if (!rfkill) - return -EFAULT; - - src[0] = rfkill->enable_power_key ? '1' : '0'; - src[1] = '\n'; - if (copy_to_user(buffer, src, 2)) - return -EFAULT; - *data = 1; - - return 2; -} - -static ssize_t bluesleep_write_proc_powerupkey(struct file *file, - const char __user *buffer, - size_t count, loff_t *data) -{ - char b; - struct rfkill_rk_data *rfkill = g_rfkill; - - if (!rfkill) - return -EFAULT; - - if (count < 1) - return -EINVAL; - - if (copy_from_user(&b, buffer, 1)) - return -EFAULT; - - if (b != '0') - rfkill->enable_power_key = true; - else - rfkill->enable_power_key = false; return count; } @@ -655,50 +585,15 @@ } #endif //CONFIG_OF -static const struct file_operations bluesleep_lpm = { - .owner = THIS_MODULE, - .read = bluesleep_read_proc_lpm, - .write = bluesleep_write_proc_lpm, +static const struct proc_ops bluesleep_lpm = { + .proc_read = bluesleep_read_proc_lpm, + .proc_write = bluesleep_write_proc_lpm, }; -static const struct file_operations bluesleep_btwrite = { - .owner = THIS_MODULE, - .read = bluesleep_read_proc_btwrite, - .write = bluesleep_write_proc_btwrite, +static const struct proc_ops bluesleep_btwrite = { + .proc_read = bluesleep_read_proc_btwrite, + .proc_write = bluesleep_write_proc_btwrite, }; - -static const struct file_operations bluesleep_powerupkey = { - .owner = THIS_MODULE, - .read = bluesleep_read_proc_powerupkey, - .write = bluesleep_write_proc_powerupkey, -}; - -static int rfkill_rk_register_power_key(void) -{ - int ret = 0; - - /* register input device */ - power_key_dev = input_allocate_device(); - if (!power_key_dev) { - LOG("ir_dev: not enough memory for input device\n"); - return -ENOMEM; - } - - power_key_dev->name = "bt-powerkey"; - power_key_dev->id.bustype = BUS_HOST; - - power_key_dev->evbit[0] = BIT_MASK(EV_KEY); - set_bit(KEY_POWER, power_key_dev->keybit); - - ret = input_register_device(power_key_dev); - if (ret) { - input_free_device(power_key_dev); - LOG("ir_rx_init: register input device exception, exit\n"); - return -EBUSY; - } - - return ret; -} static int rfkill_rk_probe(struct platform_device *pdev) { @@ -751,7 +646,7 @@ } /* read/write proc entries */ - ent = proc_create("lpm", 0, sleep_dir, &bluesleep_lpm); + ent = proc_create("lpm", 0444, sleep_dir, &bluesleep_lpm); if (!ent) { LOG("Unable to create /proc/%s/lpm entry", PROC_DIR); ret = -ENOMEM; @@ -759,17 +654,9 @@ } /* read/write proc entries */ - ent = proc_create("btwrite", 0, sleep_dir, &bluesleep_btwrite); + ent = proc_create("btwrite", 0444, sleep_dir, &bluesleep_btwrite); if (!ent) { LOG("Unable to create /proc/%s/btwrite entry", PROC_DIR); - ret = -ENOMEM; - goto fail_alloc; - } - - /* read/write proc entries */ - ent = proc_create("powerupkey", 0, sleep_dir, &bluesleep_powerupkey); - if (!ent) { - LOG("Unable to create /proc/%s/powerupkey entry", PROC_DIR); ret = -ENOMEM; goto fail_alloc; } @@ -809,7 +696,9 @@ if (!rfkill->rfkill_dev) goto fail_alloc; - rfkill_set_states(rfkill->rfkill_dev, BT_BLOCKED, false); + rfkill_init_sw_state(rfkill->rfkill_dev, BT_BLOCKED); + rfkill_set_sw_state(rfkill->rfkill_dev, BT_BLOCKED); + rfkill_set_hw_state(rfkill->rfkill_dev, false); ret = rfkill_register(rfkill->rfkill_dev); if (ret < 0) goto fail_rfkill; @@ -832,16 +721,12 @@ LOG("%s device registered.\n", pdata->name); - if (rfkill_rk_register_power_key() != 0) - goto fail_rfkill; - return 0; fail_rfkill: rfkill_destroy(rfkill->rfkill_dev); fail_alloc: - remove_proc_entry("powerupkey", sleep_dir); remove_proc_entry("btwrite", sleep_dir); remove_proc_entry("lpm", sleep_dir); fail_setup_wake_irq: @@ -860,11 +745,7 @@ rfkill_unregister(rfkill->rfkill_dev); rfkill_destroy(rfkill->rfkill_dev); - remove_proc_entry("powerupkey", sleep_dir); - remove_proc_entry("btwrite", sleep_dir); - remove_proc_entry("lpm", sleep_dir); - input_unregister_device(power_key_dev); cancel_delayed_work_sync(&rfkill->bt_sleep_delay_work); // free gpio -- Gitblit v1.6.2