diff options
author | Lucas Wei <lucaswei@google.com> | 2021-09-14 17:14:16 +0800 |
---|---|---|
committer | Lucas Wei <lucaswei@google.com> | 2021-09-14 17:14:16 +0800 |
commit | aec9255631eee5647bd9b7fd5a9e87988ad24172 (patch) | |
tree | 9ce6569920339b3c69cf33ddd9ae64ff99d544bb | |
parent | fed170f95b348ede131da0dfc10af0614a62a6e7 (diff) | |
parent | 5fc201db21d1817aa58d6fcb867507616531f9bc (diff) | |
download | synaptics-aec9255631eee5647bd9b7fd5a9e87988ad24172.tar.gz |
Merge android12-gs-pixel-5.10-sc-v2 into android13-gs-pixel-5.10
Bug: 195932551
Signed-off-by: Lucas Wei <lucaswei@google.com>
Change-Id: I532d743958292f53aeaffe4e017caef1bb5c6ee1
-rw-r--r-- | nitrous.c | 39 |
1 files changed, 15 insertions, 24 deletions
@@ -37,7 +37,6 @@ struct nitrous_bt_lpm { int wake_polarity; /* 0: active low; 1: active high */ bool is_suspended; /* driver is in suspend state */ - bool host_irq_dev_pm_resumed; struct device *dev; struct rfkill *rfkill; @@ -45,7 +44,8 @@ struct nitrous_bt_lpm { bool lpm_enabled; struct nitrous_lpm_proc *proc; struct logbuffer *log; - int idle_btip_index; + int idle_bt_tx_ip_index; + int idle_bt_rx_ip_index; }; #define PROC_BTWAKE 0 @@ -127,21 +127,10 @@ static irqreturn_t nitrous_host_wake_isr(int irq, void *data) if (host_wake == 1) { logbuffer_log(lpm->log, "host_wake_isr asserted"); pm_stay_awake(lpm->dev); - /* Only resume device when needed to keep usage count synced. - This is because some falling edges can be missed by irq. */ - if (!lpm->host_irq_dev_pm_resumed) { - pm_runtime_get(lpm->dev); - lpm->host_irq_dev_pm_resumed = true; - } + exynos_update_ip_idle_status(lpm->idle_bt_rx_ip_index, STATUS_BUSY); } else { logbuffer_log(lpm->log, "host_wake_isr de-asserted"); - pm_runtime_mark_last_busy(lpm->dev); - /* Only autosuspend device when needed to keep usage count synced. - This is because some rising edges can be missed by irq. */ - if (lpm->host_irq_dev_pm_resumed) { - pm_runtime_put_autosuspend(lpm->dev); - lpm->host_irq_dev_pm_resumed = false; - } + exynos_update_ip_idle_status(lpm->idle_bt_rx_ip_index, STATUS_IDLE); pm_wakeup_dev_event(lpm->dev, NITROUS_AUTOSUSPEND_DELAY, false); } @@ -220,9 +209,6 @@ static void nitrous_lpm_runtime_disable(struct nitrous_bt_lpm *lpm) pm_runtime_disable(lpm->dev); pm_runtime_set_suspended(lpm->dev); - /* Host IRQ has been freed, so safe to set this here */ - lpm->host_irq_dev_pm_resumed = false; - lpm->lpm_enabled = false; } @@ -455,7 +441,8 @@ static int nitrous_rfkill_set_power(void *data, bool blocked) dev_dbg(lpm->dev, "REG_ON: Low"); gpiod_set_value_cansleep(lpm->gpio_power, false); msleep(30); - exynos_update_ip_idle_status(lpm->idle_btip_index, STATUS_BUSY); + exynos_update_ip_idle_status(lpm->idle_bt_tx_ip_index, STATUS_BUSY); + exynos_update_ip_idle_status(lpm->idle_bt_rx_ip_index, STATUS_BUSY); dev_dbg(lpm->dev, "REG_ON: High"); gpiod_set_value_cansleep(lpm->gpio_power, true); @@ -471,7 +458,8 @@ static int nitrous_rfkill_set_power(void *data, bool blocked) logbuffer_log(lpm->log, "Power down BT chip"); dev_dbg(lpm->dev, "REG_ON: Low"); gpiod_set_value_cansleep(lpm->gpio_power, false); - exynos_update_ip_idle_status(lpm->idle_btip_index, STATUS_IDLE); + exynos_update_ip_idle_status(lpm->idle_bt_tx_ip_index, STATUS_IDLE); + exynos_update_ip_idle_status(lpm->idle_bt_rx_ip_index, STATUS_IDLE); } lpm->rfkill_blocked = blocked; @@ -586,8 +574,11 @@ static int nitrous_probe(struct platform_device *pdev) platform_set_drvdata(pdev, lpm); - lpm->idle_btip_index = exynos_get_idle_ip_index("bluetooth"); - exynos_update_ip_idle_status(lpm->idle_btip_index, STATUS_IDLE); + lpm->idle_bt_tx_ip_index = exynos_get_idle_ip_index("bluetooth-tx"); + exynos_update_ip_idle_status(lpm->idle_bt_tx_ip_index, STATUS_IDLE); + + lpm->idle_bt_rx_ip_index = exynos_get_idle_ip_index("bluetooth-rx"); + exynos_update_ip_idle_status(lpm->idle_bt_rx_ip_index, STATUS_IDLE); logbuffer_log(lpm->log, "probe: successful"); @@ -632,7 +623,7 @@ static int nitrous_suspend_device(struct device *dev) (lpm->is_suspended ? "asleep" : "awake")); nitrous_wake_controller(lpm, false); - exynos_update_ip_idle_status(lpm->idle_btip_index, STATUS_IDLE); + exynos_update_ip_idle_status(lpm->idle_bt_tx_ip_index, STATUS_IDLE); lpm->is_suspended = true; return 0; @@ -647,7 +638,7 @@ static int nitrous_resume_device(struct device *dev) logbuffer_log(lpm->log, "resume_device from %s", (lpm->is_suspended ? "asleep" : "awake")); - exynos_update_ip_idle_status(lpm->idle_btip_index, STATUS_BUSY); + exynos_update_ip_idle_status(lpm->idle_bt_tx_ip_index, STATUS_BUSY); nitrous_wake_controller(lpm, true); lpm->is_suspended = false; |