summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjonerlin <jonerlin@google.com>2022-02-21 06:23:33 +0800
committerjonerlin <jonerlin@google.com>2022-04-27 22:47:15 +0800
commitd6a4385da5e181e81d5b4bd75a4cd2d70e9c0a51 (patch)
treec86d1486c82bf72d11b2ac513fced3addf4d9e84
parent318ac6f5c98578c87c158df576f1fd3af45f035f (diff)
downloadbroadcom-android-gs-pantah-5.10-android13-qpr2-beta.tar.gz
nitrous: de-assert dev_wake/pm suspend device when Tx is doneandroid-u-qpr3-beta-2_r0.7android-u-qpr3-beta-2_r0.6android-u-qpr3-beta-2_r0.5android-u-qpr3-beta-2_r0.4android-u-qpr3-beta-2_r0.3android-u-qpr3-beta-2_r0.2android-u-qpr3-beta-2.1_r0.7android-u-qpr3-beta-2.1_r0.5android-u-qpr3-beta-2.1_r0.4android-u-qpr3-beta-2.1_r0.3android-u-qpr3-beta-2.1_r0.2android-u-qpr3-beta-2.1_r0.1android-u-qpr3-beta-1_r0.7android-u-qpr3-beta-1_r0.5android-u-qpr3-beta-1_r0.4android-u-qpr3-beta-1_r0.3android-u-qpr3-beta-1_r0.2android-u-qpr3-beta-1_r0.1android-u-qpr2-beta-3_r0.7android-u-qpr2-beta-3_r0.6android-u-qpr2-beta-3_r0.5android-u-qpr2-beta-3_r0.4android-u-qpr2-beta-3_r0.3android-u-qpr2-beta-3_r0.2android-u-qpr2-beta-3.1_r0.7android-u-qpr2-beta-3.1_r0.5android-u-qpr2-beta-3.1_r0.4android-u-qpr2-beta-3.1_r0.3android-u-qpr2-beta-3.1_r0.2android-u-qpr2-beta-3.1_r0.1android-u-qpr2-beta-2_r0.7android-u-qpr2-beta-2_r0.5android-u-qpr2-beta-2_r0.4android-u-qpr2-beta-2_r0.3android-u-qpr2-beta-2_r0.2android-u-qpr2-beta-2_r0.1android-u-qpr2-beta-1_r0.6android-u-qpr2-beta-1_r0.5android-u-qpr2-beta-1_r0.4android-u-qpr2-beta-1_r0.3android-u-qpr2-beta-1_r0.2android-u-qpr2-beta-1_r0.1android-u-qpr1-beta-2_r0.7android-u-qpr1-beta-2_r0.5android-u-qpr1-beta-2_r0.4android-u-qpr1-beta-2_r0.3android-u-qpr1-beta-2_r0.2android-u-qpr1-beta-2_r0.1android-u-qpr1-beta-2.2_r0.6android-u-qpr1-beta-2.2_r0.5android-u-qpr1-beta-2.2_r0.4android-u-qpr1-beta-2.2_r0.3android-u-qpr1-beta-2.2_r0.2android-u-qpr1-beta-2.2_r0.1android-u-qpr1-beta-2.1_r0.7android-u-qpr1-beta-2.1_r0.5android-u-qpr1-beta-2.1_r0.4android-u-qpr1-beta-2.1_r0.3android-u-qpr1-beta-2.1_r0.2android-u-qpr1-beta-2.1_r0.1android-u-qpr1-beta-1_r0.7android-u-qpr1-beta-1_r0.5android-u-qpr1-beta-1_r0.4android-u-qpr1-beta-1_r0.3android-u-qpr1-beta-1_r0.2android-u-qpr1-beta-1_r0.1android-u-preview-2_r0.4android-u-preview-2_r0.3android-u-preview-2_r0.2android-u-preview-1_r0.4android-u-preview-1_r0.3android-u-preview-1_r0.2android-u-beta-5.3_r0.7android-u-beta-5.3_r0.5android-u-beta-5.3_r0.4android-u-beta-5.3_r0.2android-u-beta-5.3_r0.1android-u-beta-4_r0.7android-u-beta-4_r0.5android-u-beta-4_r0.4android-u-beta-4_r0.3android-u-beta-4_r0.2android-u-beta-4_r0.1android-u-beta-3_r0.3android-u-beta-3_r0.2android-u-beta-2_r0.4android-u-beta-2_r0.3android-u-beta-2_r0.2android-u-beta-2.1_r0.4android-u-beta-2.1_r0.3android-u-beta-2.1_r0.2android-u-beta-1_r0.5android-u-beta-1_r0.4android-u-beta-1_r0.3android-t-qpr3-beta-3_r0.5android-t-qpr3-beta-3_r0.4android-t-qpr3-beta-3_r0.3android-t-qpr3-beta-3.1_r0.5android-t-qpr3-beta-3.1_r0.4android-t-qpr3-beta-3.1_r0.3android-t-qpr3-beta-2_r0.5android-t-qpr3-beta-2_r0.4android-t-qpr3-beta-2_r0.3android-t-qpr3-beta-1_r0.5android-t-qpr3-beta-1_r0.4android-t-qpr3-beta-1_r0.3android-t-qpr3-beta-1_r0.1android-t-qpr2-beta-3_r0.5android-t-qpr2-beta-3_r0.4android-t-qpr2-beta-3_r0.3android-t-qpr2-beta-3.2_r0.6android-t-qpr2-beta-3.2_r0.5android-t-qpr2-beta-2_r0.5android-t-qpr2-beta-2_r0.4android-t-qpr2-beta-2_r0.3android-t-qpr2-beta-1_r0.6android-t-qpr2-beta-1_r0.5android-t-qpr2-beta-1_r0.4android-t-qpr1-beta-3_r0.5android-t-qpr1-beta-3_r0.4android-t-qpr1-beta-3_r0.3android-t-qpr1-beta-3.1_r0.1android-t-qpr1-beta-2_r0.5android-t-qpr1-beta-2_r0.4android-t-qpr1-beta-1_r0.4android-t-qpr1-beta-1_r0.3android-t-beta-4_r0.6android-t-beta-4_r0.5android-t-beta-4_r0.4android-t-beta-3_r0.4android-t-beta-3.3_r0.4android-t-beta-3.2_r0.4android-15-dp-2_r0.6android-15-dp-2_r0.5android-15-dp-2_r0.4android-15-dp-2_r0.3android-15-dp-2_r0.2android-15-dp-2_r0.1android-15-dp-1_r0.7android-15-dp-1_r0.5android-15-dp-1_r0.4android-15-dp-1_r0.3android-15-dp-1_r0.2android-15-dp-1_r0.1android-15-beta-2_r0.6android-15-beta-2_r0.5android-15-beta-2_r0.4android-15-beta-2_r0.3android-15-beta-2_r0.2android-15-beta-2_r0.1android-15-beta-1_r0.6android-15-beta-1_r0.5android-15-beta-1_r0.4android-15-beta-1_r0.3android-15-beta-1_r0.2android-15-beta-1_r0.1android-14.0.0_r0.76android-14.0.0_r0.75android-14.0.0_r0.74android-14.0.0_r0.73android-14.0.0_r0.72android-14.0.0_r0.71android-14.0.0_r0.7android-14.0.0_r0.66android-14.0.0_r0.65android-14.0.0_r0.64android-14.0.0_r0.63android-14.0.0_r0.62android-14.0.0_r0.61android-14.0.0_r0.6android-14.0.0_r0.56android-14.0.0_r0.55android-14.0.0_r0.54android-14.0.0_r0.53android-14.0.0_r0.52android-14.0.0_r0.51android-14.0.0_r0.5android-14.0.0_r0.44android-14.0.0_r0.43android-14.0.0_r0.42android-14.0.0_r0.41android-14.0.0_r0.40android-14.0.0_r0.4android-14.0.0_r0.39android-14.0.0_r0.37android-14.0.0_r0.36android-14.0.0_r0.35android-14.0.0_r0.34android-14.0.0_r0.33android-14.0.0_r0.31android-14.0.0_r0.3android-14.0.0_r0.25android-14.0.0_r0.23android-14.0.0_r0.22android-14.0.0_r0.21android-14.0.0_r0.2android-14.0.0_r0.19android-14.0.0_r0.17android-14.0.0_r0.16android-14.0.0_r0.15android-14.0.0_r0.14android-14.0.0_r0.13android-14.0.0_r0.11android-13.0.0_r0.93android-13.0.0_r0.92android-13.0.0_r0.91android-13.0.0_r0.85android-13.0.0_r0.84android-13.0.0_r0.83android-13.0.0_r0.82android-13.0.0_r0.77android-13.0.0_r0.75android-13.0.0_r0.74android-13.0.0_r0.73android-13.0.0_r0.70android-13.0.0_r0.69android-13.0.0_r0.68android-13.0.0_r0.64android-13.0.0_r0.60android-13.0.0_r0.59android-13.0.0_r0.58android-13.0.0_r0.55android-13.0.0_r0.54android-13.0.0_r0.53android-13.0.0_r0.50android-13.0.0_r0.5android-13.0.0_r0.49android-13.0.0_r0.48android-13.0.0_r0.45android-13.0.0_r0.44android-13.0.0_r0.43android-13.0.0_r0.4android-13.0.0_r0.32android-13.0.0_r0.31android-13.0.0_r0.20android-13.0.0_r0.19android-13.0.0_r0.15android-13.0.0_r0.14android-13.0.0_r0.127android-13.0.0_r0.126android-13.0.0_r0.125android-13.0.0_r0.124android-13.0.0_r0.123android-13.0.0_r0.121android-13.0.0_r0.117android-13.0.0_r0.116android-13.0.0_r0.115android-13.0.0_r0.114android-13.0.0_r0.113android-13.0.0_r0.112android-13.0.0_r0.107android-13.0.0_r0.106android-13.0.0_r0.105android-13.0.0_r0.104android-13.0.0_r0.103android-13.0.0_r0.100main-16k-gs-raviole-5.10android-gs-tangorpro-android14-releaseandroid-gs-tangorpro-5.10-u-qpr1-beta2android-gs-tangorpro-5.10-u-beta5.3android-gs-tangorpro-5.10-u-beta4android-gs-tangorpro-5.10-android15-dpandroid-gs-tangorpro-5.10-android15-betaandroid-gs-tangorpro-5.10-android14-qpr3-betaandroid-gs-tangorpro-5.10-android14-qpr2-betaandroid-gs-tangorpro-5.10-android14-qpr2android-gs-tangorpro-5.10-android14-qpr1-betaandroid-gs-tangorpro-5.10-android14-qpr1android-gs-tangorpro-5.10-android14android-gs-tangorpro-5.10-android13-qpr3android-gs-tangorpro-5.10-android13-d2android-gs-raviole-android14-releaseandroid-gs-raviole-5.10-u-qpr1-beta2android-gs-raviole-5.10-u-preview-2android-gs-raviole-5.10-u-preview-1android-gs-raviole-5.10-u-beta5.3android-gs-raviole-5.10-u-beta4android-gs-raviole-5.10-u-beta3android-gs-raviole-5.10-u-beta2android-gs-raviole-5.10-u-beta1android-gs-raviole-5.10-t-qpr3-beta-3android-gs-raviole-5.10-t-qpr3-beta-2android-gs-raviole-5.10-t-qpr2-beta-1android-gs-raviole-5.10-t-qpr1-beta-2android-gs-raviole-5.10-t-beta-4android-gs-raviole-5.10-t-beta-3android-gs-raviole-5.10-android15-dpandroid-gs-raviole-5.10-android15-betaandroid-gs-raviole-5.10-android14-qpr3-betaandroid-gs-raviole-5.10-android14-qpr2-betaandroid-gs-raviole-5.10-android14-qpr2android-gs-raviole-5.10-android14-qpr1-betaandroid-gs-raviole-5.10-android14-qpr1android-gs-raviole-5.10-android14android-gs-raviole-5.10-android13-qpr3-beta1android-gs-raviole-5.10-android13-qpr3android-gs-raviole-5.10-android13-qpr2-betaandroid-gs-raviole-5.10-android13-qpr2android-gs-raviole-5.10-android13-qpr1-beta-3android-gs-raviole-5.10-android13-qpr1-betaandroid-gs-raviole-5.10-android13-qpr1android-gs-raviole-5.10-android13android-gs-pantah-android14-releaseandroid-gs-pantah-5.10-u-qpr1-beta2android-gs-pantah-5.10-u-preview-2android-gs-pantah-5.10-u-preview-1android-gs-pantah-5.10-u-beta5.3android-gs-pantah-5.10-u-beta4android-gs-pantah-5.10-u-beta2android-gs-pantah-5.10-u-beta1android-gs-pantah-5.10-t-qpr3-beta-3android-gs-pantah-5.10-t-qpr3-beta-2android-gs-pantah-5.10-t-qpr2-beta-3.2android-gs-pantah-5.10-t-qpr2-beta-1android-gs-pantah-5.10-t-qpr1-beta-3android-gs-pantah-5.10-android15-dpandroid-gs-pantah-5.10-android15-betaandroid-gs-pantah-5.10-android14-qpr3-betaandroid-gs-pantah-5.10-android14-qpr2-betaandroid-gs-pantah-5.10-android14-qpr2android-gs-pantah-5.10-android14-qpr1-betaandroid-gs-pantah-5.10-android14-qpr1android-gs-pantah-5.10-android14android-gs-pantah-5.10-android13-qpr3-beta1android-gs-pantah-5.10-android13-qpr3android-gs-pantah-5.10-android13-qpr2-betaandroid-gs-pantah-5.10-android13-qpr2android-gs-pantah-5.10-android13-qpr1-beta-3android-gs-pantah-5.10-android13-qpr1android-gs-pantah-5.10-android13-d1android-gs-lynx-android14-releaseandroid-gs-lynx-5.10-u-qpr1-beta2android-gs-lynx-5.10-u-beta4android-gs-lynx-5.10-android15-dpandroid-gs-lynx-5.10-android15-betaandroid-gs-lynx-5.10-android14-qpr3-betaandroid-gs-lynx-5.10-android14-qpr2-betaandroid-gs-lynx-5.10-android14-qpr2android-gs-lynx-5.10-android14-qpr1-betaandroid-gs-lynx-5.10-android14-qpr1android-gs-lynx-5.10-android14android-gs-lynx-5.10-android13-qpr3android-gs-lynx-5.10-android13-qpr2-bandroid-gs-felix-android14-releaseandroid-gs-felix-5.10-u-qpr1-beta2android-gs-felix-5.10-u-beta5.3android-gs-felix-5.10-u-beta4android-gs-felix-5.10-android15-dpandroid-gs-felix-5.10-android15-betaandroid-gs-felix-5.10-android14-qpr3-betaandroid-gs-felix-5.10-android14-qpr2-betaandroid-gs-felix-5.10-android14-qpr2android-gs-felix-5.10-android14-qpr1-betaandroid-gs-felix-5.10-android14-qpr1android-gs-felix-5.10-android14android-gs-felix-5.10-android13-qpr3-candroid-gs-felix-5.10-android13-qpr3android-gs-felix-5.10-android13-d3android-gs-bluejay-android14-releaseandroid-gs-bluejay-5.10-u-qpr1-beta2android-gs-bluejay-5.10-u-preview-2android-gs-bluejay-5.10-u-preview-1android-gs-bluejay-5.10-u-beta5.3android-gs-bluejay-5.10-u-beta4android-gs-bluejay-5.10-u-beta3android-gs-bluejay-5.10-u-beta2android-gs-bluejay-5.10-u-beta1android-gs-bluejay-5.10-t-qpr3-beta-3android-gs-bluejay-5.10-t-qpr3-beta-2android-gs-bluejay-5.10-t-qpr2-beta-3android-gs-bluejay-5.10-t-qpr2-beta-1android-gs-bluejay-5.10-t-qpr1-beta-2android-gs-bluejay-5.10-t-beta-4android-gs-bluejay-5.10-android15-dpandroid-gs-bluejay-5.10-android15-betaandroid-gs-bluejay-5.10-android14-qpr3-betaandroid-gs-bluejay-5.10-android14-qpr2-betaandroid-gs-bluejay-5.10-android14-qpr2android-gs-bluejay-5.10-android14-qpr1-betaandroid-gs-bluejay-5.10-android14-qpr1android-gs-bluejay-5.10-android14android-gs-bluejay-5.10-android13-qpr3-beta1android-gs-bluejay-5.10-android13-qpr3android-gs-bluejay-5.10-android13-qpr2-betaandroid-gs-bluejay-5.10-android13-qpr2android-gs-bluejay-5.10-android13-qpr1-beta-3android-gs-bluejay-5.10-android13-qpr1-betaandroid-gs-bluejay-5.10-android13-qpr1android-gs-bluejay-5.10-android13
* de-assert dev_wake/pm suspend device from nitrous device node PROC_BTWRITE operation * set TX autosleep delay 100 ms and RX autosleep delay 1000 ms * fix clockwork issues Bug: 214732521 Bug: 205950058 Bug: 205943675 Test: Manually Change-Id: I1656008534c3e83de81de7cc054072acb28672e3
-rw-r--r--nitrous.c98
1 files changed, 60 insertions, 38 deletions
diff --git a/nitrous.c b/nitrous.c
index 5926738..fdb0444 100644
--- a/nitrous.c
+++ b/nitrous.c
@@ -25,7 +25,8 @@
#define STATUS_IDLE 1
#define STATUS_BUSY 0
-#define NITROUS_AUTOSUSPEND_DELAY 1000 /* autosleep delay 1000 ms */
+#define NITROUS_TX_AUTOSUSPEND_DELAY 100 /* autosleep delay 100 ms after TX */
+#define NITROUS_RX_AUTOSUSPEND_DELAY 1000 /* autosleep delay 1000 ms after RX */
#define TIMESYNC_TIMESTAMP_MAX_QUEUE 16
#define TIMESYNC_NOT_SUPPORTED 0
#define TIMESYNC_SUPPORTED 1
@@ -78,8 +79,11 @@ struct nitrous_lpm_proc {
static inline void nitrous_wake_controller(struct nitrous_bt_lpm *lpm, bool wake)
{
int assert_level = (wake == lpm->wake_polarity);
+ struct timespec64 ts;
+ ktime_get_real_ts64(&ts);
dev_dbg(lpm->dev, "DEV_WAKE: %s", (assert_level ? "Assert" : "Dessert"));
- logbuffer_log(lpm->log, "DEV_WAKE: %s", (assert_level ? "Assert" : "Dessert"));
+ logbuffer_log(lpm->log, "DEV_WAKE: %s %ptTt.%03ld",
+ (assert_level ? "Assert" : "Dessert"), &ts, ts.tv_nsec / NSEC_PER_MSEC);
gpiod_set_value_cansleep(lpm->gpio_dev_wake, assert_level);
}
@@ -87,7 +91,7 @@ static inline void nitrous_wake_controller(struct nitrous_bt_lpm *lpm, bool wake
* Called before UART driver starts transmitting data out. UART and BT resources
* are requested to allow a transmission.
*/
-static void nitrous_prepare_uart_tx_locked(struct nitrous_bt_lpm *lpm)
+static void nitrous_prepare_uart_tx_locked(struct nitrous_bt_lpm *lpm, bool assert)
{
int ret;
@@ -97,22 +101,26 @@ static void nitrous_prepare_uart_tx_locked(struct nitrous_bt_lpm *lpm)
return;
}
- ret = pm_runtime_get_sync(lpm->dev);
-
- /* Shall be resumed here */
- logbuffer_log(lpm->log, "uart_tx_locked");
+ if (assert && !lpm->uart_tx_dev_pm_resumed) {
+ ret = pm_runtime_get_sync(lpm->dev);
+ lpm->uart_tx_dev_pm_resumed = true;
+ /* Shall be resumed here */
+ logbuffer_log(lpm->log, "uart_tx_locked");
- if (lpm->is_suspended) {
- /* This shouldn't happen. If it does, it will result in a BT crash */
- /* TODO (mullerf): Does this happen? If yes, why? */
- dev_err(lpm->dev,"Tx in device suspended. ret: %d, uc:%d\n",
- ret, atomic_read(&lpm->dev->power.usage_count));
- logbuffer_log(lpm->log,"Tx in device suspended. ret: %d, uc:%d",
- ret, atomic_read(&lpm->dev->power.usage_count));
+ if (lpm->is_suspended) {
+ /* This shouldn't happen. If it does, it will result in a BT crash */
+ /* TODO (mullerf): Does this happen? If yes, why? */
+ dev_err(lpm->dev,"Tx in device suspended. ret: %d, uc:%d\n",
+ ret, atomic_read(&lpm->dev->power.usage_count));
+ logbuffer_log(lpm->log,"Tx in device suspended. ret: %d, uc:%d",
+ ret, atomic_read(&lpm->dev->power.usage_count));
+ }
+ } else if (!assert && lpm->uart_tx_dev_pm_resumed) {
+ logbuffer_log(lpm->log, "uart_tx_unlocked");
+ pm_runtime_mark_last_busy(lpm->dev);
+ pm_runtime_put_autosuspend(lpm->dev);
+ lpm->uart_tx_dev_pm_resumed = false;
}
-
- pm_runtime_mark_last_busy(lpm->dev);
- pm_runtime_put_autosuspend(lpm->dev);
}
/*
@@ -126,6 +134,7 @@ static irqreturn_t nitrous_host_wake_isr(int irq, void *data)
{
struct nitrous_bt_lpm *lpm = data;
int host_wake;
+ struct timespec64 ts;
host_wake = gpiod_get_value(lpm->gpio_host_wake);
dev_dbg(lpm->dev, "Host wake IRQ: %u\n", host_wake);
@@ -136,15 +145,18 @@ static irqreturn_t nitrous_host_wake_isr(int irq, void *data)
return IRQ_HANDLED;
}
+ ktime_get_real_ts64(&ts);
/* Check whether host_wake is ACTIVE (== 1) */
if (host_wake == 1) {
- logbuffer_log(lpm->log, "host_wake_isr asserted");
+ logbuffer_log(lpm->log, "host_wake_isr asserted %ptTt.%03ld",
+ &ts, ts.tv_nsec / NSEC_PER_MSEC);
pm_stay_awake(lpm->dev);
exynos_update_ip_idle_status(lpm->idle_bt_rx_ip_index, STATUS_BUSY);
} else {
- logbuffer_log(lpm->log, "host_wake_isr de-asserted");
+ logbuffer_log(lpm->log, "host_wake_isr de-asserted %ptTt.%03ld",
+ &ts, ts.tv_nsec / NSEC_PER_MSEC);
exynos_update_ip_idle_status(lpm->idle_bt_rx_ip_index, STATUS_IDLE);
- pm_wakeup_dev_event(lpm->dev, NITROUS_AUTOSUSPEND_DELAY, false);
+ pm_wakeup_dev_event(lpm->dev, NITROUS_RX_AUTOSUSPEND_DELAY, false);
}
return IRQ_HANDLED;
@@ -196,7 +208,7 @@ static int nitrous_lpm_runtime_enable(struct nitrous_bt_lpm *lpm)
device_init_wakeup(lpm->dev, true);
pm_runtime_enable(lpm->dev);
- pm_runtime_set_autosuspend_delay(lpm->dev, NITROUS_AUTOSUSPEND_DELAY);
+ pm_runtime_set_autosuspend_delay(lpm->dev, NITROUS_TX_AUTOSUSPEND_DELAY);
pm_runtime_use_autosuspend(lpm->dev);
/* When LPM is enabled, we resume the device right away.
@@ -316,10 +328,19 @@ static ssize_t nitrous_proc_write(struct file *file, const char *buf,
logbuffer_log(lpm->log, "PROC_BTWRITE: not enabled");
return count;
}
- dev_dbg(lpm->dev, "LPM waking up for Tx\n");
- ktime_get_real_ts64(&ts);
- logbuffer_log(lpm->log, "PROC_BTWRITE: waking up %ptTt", &ts);
- nitrous_prepare_uart_tx_locked(lpm);
+ if (lbuf[0] == '1') {
+ dev_dbg(lpm->dev, "LPM waking up for Tx\n");
+ ktime_get_real_ts64(&ts);
+ logbuffer_log(lpm->log, "PROC_BTWRITE: waking up %ptTt.%03ld",
+ &ts, ts.tv_nsec / NSEC_PER_MSEC);
+ nitrous_prepare_uart_tx_locked(lpm, true);
+ } else if (lbuf[0] == '0') {
+ dev_dbg(lpm->dev, "LPM Tx done\n");
+ ktime_get_real_ts64(&ts);
+ logbuffer_log(lpm->log, "PROC_BTWRITE: Tx done %ptTt.%03ld",
+ &ts, ts.tv_nsec / NSEC_PER_MSEC);
+ nitrous_prepare_uart_tx_locked(lpm, false);
+ }
break;
default:
return 0;
@@ -507,10 +528,9 @@ static void toggle_timesync(struct nitrous_bt_lpm *lpm, bool enable) {
static int nitrous_rfkill_set_power(void *data, bool blocked)
{
struct nitrous_bt_lpm *lpm = data;
+ struct timespec64 ts;
if (!lpm) {
- dev_err(lpm->dev, "rfkill: lpm is NULL\n");
- logbuffer_log(lpm->log, "rfkill: lpm is NULL");
return -EINVAL;
}
@@ -528,10 +548,10 @@ static int nitrous_rfkill_set_power(void *data, bool blocked)
/* Reset to make sure LPM is disabled */
nitrous_lpm_runtime_disable(lpm);
-
+ ktime_get_real_ts64(&ts);
if (!blocked) {
/* Power up the BT chip. delay between consecutive toggles. */
- logbuffer_log(lpm->log, "Power up BT chip");
+ logbuffer_log(lpm->log, "Power up BT chip %ptTt", &ts);
dev_dbg(lpm->dev, "REG_ON: Low");
gpiod_set_value_cansleep(lpm->gpio_power, false);
msleep(30);
@@ -549,7 +569,7 @@ static int nitrous_rfkill_set_power(void *data, bool blocked)
gpiod_set_value_cansleep(lpm->gpio_dev_wake, false);
/* Power down the BT chip */
- logbuffer_log(lpm->log, "Power down BT chip");
+ logbuffer_log(lpm->log, "Power down BT chip %ptTt", &ts);
dev_dbg(lpm->dev, "REG_ON: Low");
gpiod_set_value_cansleep(lpm->gpio_power, false);
exynos_update_ip_idle_status(lpm->idle_bt_tx_ip_index, STATUS_IDLE);
@@ -702,8 +722,6 @@ static int nitrous_remove(struct platform_device *pdev)
struct nitrous_bt_lpm *lpm = platform_get_drvdata(pdev);
if (!lpm) {
- dev_err(lpm->dev, "LPM is NULL\n");
- logbuffer_log(lpm->log, "remove: LPM is NULL");
return -EINVAL;
}
@@ -723,7 +741,7 @@ static int nitrous_suspend_device(struct device *dev)
struct nitrous_bt_lpm *lpm = dev_get_drvdata(dev);
dev_dbg(lpm->dev, "suspend_device from %s\n",
- (lpm->is_suspended ? "asleep" : "awake"));
+ (lpm->is_suspended ? "asleep" : "awake"));
logbuffer_log(lpm->log, "suspend_device from %s",
(lpm->is_suspended ? "asleep" : "awake"));
@@ -739,7 +757,7 @@ static int nitrous_resume_device(struct device *dev)
struct nitrous_bt_lpm *lpm = dev_get_drvdata(dev);
dev_dbg(lpm->dev, "resume_device from %s\n",
- (lpm->is_suspended ? "asleep" : "awake"));
+ (lpm->is_suspended ? "asleep" : "awake"));
logbuffer_log(lpm->log, "resume_device from %s",
(lpm->is_suspended ? "asleep" : "awake"));
@@ -753,12 +771,14 @@ static int nitrous_resume_device(struct device *dev)
static int nitrous_suspend(struct device *dev)
{
struct nitrous_bt_lpm *lpm = dev_get_drvdata(dev);
+ struct timespec64 ts;
if (lpm->rfkill_blocked)
return 0;
- dev_dbg(lpm->dev, "nitrous_suspend\n");
- logbuffer_log(lpm->log, "nitrous_suspend");
+ ktime_get_real_ts64(&ts);
+ dev_dbg(lpm->dev, "nitrous_suspend %ptTt\n", &ts);
+ logbuffer_log(lpm->log, "nitrous_suspend %ptTt", &ts);
if (device_may_wakeup(dev) && lpm->lpm_enabled) {
pm_runtime_force_suspend(lpm->dev);
@@ -774,12 +794,14 @@ static int nitrous_suspend(struct device *dev)
static int nitrous_resume(struct device *dev)
{
struct nitrous_bt_lpm *lpm = dev_get_drvdata(dev);
+ struct timespec64 ts;
if (lpm->rfkill_blocked)
return 0;
- dev_dbg(lpm->dev, "nitrous_resume\n");
- logbuffer_log(lpm->log, "nitrous_resume");
+ ktime_get_real_ts64(&ts);
+ dev_dbg(lpm->dev, "nitrous_resume %ptTt\n", &ts);
+ logbuffer_log(lpm->log, "nitrous_resume %ptTt", &ts);
if (device_may_wakeup(dev) && lpm->lpm_enabled) {
disable_irq_wake(lpm->irq_host_wake);