From 12edbc9f1492d3e9c5fb86fb2c9363da35b8e9d4 Mon Sep 17 00:00:00 2001 From: wunan3 Date: Thu, 3 Jan 2019 15:30:36 +0800 Subject: [PATCH] capsensor:optimize suspend and resume process of sx9311 chip -suspend,let capsensor enter sleep state -resume,let capsensor enter active state Change-Id: I34fa8a320def5e8a45c194f367ecd0ce5744a48b Signed-off-by: wunan3 Reviewed-on: https://gerrit.mot.com/1289270 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wen Xie Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- drivers/misc/sx9310/sx9310_triple.c | 7 +++++++ drivers/misc/sx9325/sx9325_sar.c | 10 ++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/misc/sx9310/sx9310_triple.c b/drivers/misc/sx9310/sx9310_triple.c index 7c19a5322267..38d5d16acfd2 100644 --- a/drivers/misc/sx9310/sx9310_triple.c +++ b/drivers/misc/sx9310/sx9310_triple.c @@ -1660,6 +1660,10 @@ void sx93XX_suspend(psx93XX_t this) if (sx9310_debug_enable) LOG_INFO("sx9310 suspend: disable irq!\n"); disable_irq(this->irq); + /* if upper layer don't disable capsensor, */ + /* we should let it enter sleep in suspend. */ + if (mEnabled) + write_register(this, SX9310_CPS_CTRL0_REG, 0x20); } } void sx93XX_resume(psx93XX_t this) @@ -1675,6 +1679,9 @@ void sx93XX_resume(psx93XX_t this) #else sx93XX_schedule_work(this, 0); #endif + /* we should let capsensor enter active in resume*/ + if (mEnabled) + write_register(this, SX9310_CPS_CTRL0_REG, 0x2f); enable_irq(this->irq); write_register(this,0x41,0x01); } diff --git a/drivers/misc/sx9325/sx9325_sar.c b/drivers/misc/sx9325/sx9325_sar.c index d77bfe81d06f..cdba28bb3aff 100644 --- a/drivers/misc/sx9325/sx9325_sar.c +++ b/drivers/misc/sx9325/sx9325_sar.c @@ -1578,8 +1578,9 @@ static void sx93XX_worker_func(struct work_struct *work) void sx93XX_suspend(psx93XX_t this) { if (this) { - write_register(this, SX932x_CTRL1_REG, - this->board->cust_prox_ctrl0&0xdf); + if (mEnabled) + write_register(this, SX932x_CTRL1_REG, + this->board->cust_prox_ctrl0&0x20); if (sx9325_debug_enable) LOG_INFO("sx9325 suspend: disable irq!\n"); disable_irq(this->irq); @@ -1599,8 +1600,9 @@ void sx93XX_resume(psx93XX_t this) sx93XX_schedule_work(this, 0); #endif enable_irq(this->irq); - write_register(this, SX932x_CTRL1_REG, - this->board->cust_prox_ctrl0|0x20); + if (mEnabled) + write_register(this, SX932x_CTRL1_REG, + this->board->cust_prox_ctrl0); } }