From 23fa18eaa71266feff7ba8d83022d9e1cc83c65a Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 07:42:03 +0000
Subject: [PATCH] disable pwm7
---
kernel/net/rfkill/rfkill-bt.c | 180 ++++++++++--------------------------------------------------
1 files changed, 30 insertions(+), 150 deletions(-)
diff --git a/kernel/net/rfkill/rfkill-bt.c b/kernel/net/rfkill/rfkill-bt.c
index a2d31bc..73b802c 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,12 +165,11 @@
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;
@@ -255,7 +227,6 @@
{
struct rfkill_rk_data *rfkill = g_rfkill;
struct rfkill_rk_gpio *wake;
- bool ret;
DBG("Enter %s\n", __func__);
@@ -270,7 +241,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);
@@ -342,8 +313,6 @@
gpio_direction_output(poweron->io,
poweron->enable);
msleep(20);
- if (gpio_is_valid(wake_host->io))
- gpio_direction_input(wake_host->io);
}
}
@@ -354,6 +323,11 @@
msleep(20);
gpio_direction_output(reset->io, reset->enable);
}
+ }
+
+ if (gpio_is_valid(wake_host->io)) {
+ LOG("%s: set bt wake_host input!\n", __func__);
+ gpio_direction_input(wake_host->io);
}
if (pinctrl && gpio_is_valid(rts->io)) {
@@ -409,7 +383,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 +393,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);
}
@@ -438,7 +411,9 @@
}
#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 +425,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__);
@@ -466,10 +440,10 @@
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 +488,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 +584,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 +645,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 +653,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 +695,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 +720,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 +744,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