From d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 02:45:28 +0000
Subject: [PATCH] add boot partition size
---
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