From e222b9be7fc3b6a0f389f50859fa47a72941888e Mon Sep 17 00:00:00 2001 From: zhangh12 Date: Wed, 14 Oct 2020 16:17:22 +0800 Subject: [PATCH] [capsensor] add debug info for read_rawdata venor provide a new driver for adding some debug messages on read_rawdata(). cmd: adb shell "logcat -b kernel | grep SMTC_D" Change-Id: I0e0ebc09d48b1d34d40d581f9a3cdf43dcd7cf97 Signed-off-by: zhangh12 Reviewed-on: https://gerrit.mot.com/1773854 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Wen Xie Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key Reviewed-by: Jiyue Cui --- drivers/misc/sx933x/sx933x_sar.c | 184 +++++++++++++++++++++++++++++-- include/linux/input/sx933x.h | 8 ++ 2 files changed, 181 insertions(+), 11 deletions(-) diff --git a/drivers/misc/sx933x/sx933x_sar.c b/drivers/misc/sx933x/sx933x_sar.c index 43b8f67f42c9..5ec97952bea0 100644 --- a/drivers/misc/sx933x/sx933x_sar.c +++ b/drivers/misc/sx933x/sx933x_sar.c @@ -245,22 +245,158 @@ static int manual_offset_calibration(psx93XX_t this) } -/****************************************************************************/ -/*! \brief sysfs show function for manual calibration which currently just - * returns register value. - */ +static void read_dbg_raw(psx93XX_t this) +{ + int ph, state; + u32 uData, ph_sel; + s32 ant_use, ant_raw; + s32 avg, diff; + u16 off; + s32 adc_min, adc_max, use_flt_dlt_var; + s32 ref_a_use=0, ref_b_use=0; + int ref_ph_a, ref_ph_b; + + psx933x_t pDevice = NULL; + psx933x_platform_data_t pdata = NULL; + + pDevice = this->pDevice; + pdata = pDevice->hw; + ref_ph_a = pdata->ref_phase_a; + ref_ph_b = pdata->ref_phase_b; + LOG_DBG("[SX933x] ref_ph_a= %d ref_ph_b= %d\n", ref_ph_a, ref_ph_b); + + sx933x_i2c_read_16bit(this, SX933X_STAT0_REG, &uData); + LOG_DBG("SX933X_STAT0_REG= 0x%X\n", uData); + + if(ref_ph_a != 0xFF) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH0_REG + ref_ph_a*4, &uData); + ref_a_use = (s32)uData >> 10; + } + if(ref_ph_b != 0xFF) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH0_REG + ref_ph_b*4, &uData); + ref_b_use = (s32)uData >> 10; + } + + sx933x_i2c_read_16bit(this, SX933X_REG_DBG_PHASE_SEL, &ph_sel); + + sx933x_i2c_read_16bit(this, SX933X_REG_PROX_ADC_MIN, &uData); + adc_min = (s32)uData>>10; + sx933x_i2c_read_16bit(this, SX933X_REG_PROX_ADC_MAX, &uData); + adc_max = (s32)uData>>10; + sx933x_i2c_read_16bit(this, SX933X_REG_PROX_RAW, &uData); + ant_raw = (s32)uData>>10; + sx933x_i2c_read_16bit(this, SX933X_REG_DLT_VAR, &uData); + use_flt_dlt_var = (s32)uData>>3; + + if (((ph_sel >> 3) & 0x7) == 0) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH0_REG, &uData); + ant_use = (s32)uData>>10; + ph = 0; + } + else if (((ph_sel >> 3) & 0x7) == 1) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH1_REG, &uData); + ant_use = (s32)uData>>10; + ph = 1; + } + else if (((ph_sel >> 3) & 0x7) == 2) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH2_REG, &uData); + ant_use = (s32)uData>>10; + ph = 2; + } + else if (((ph_sel >> 3) & 0x7) == 3) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH3_REG, &uData); + ant_use = (s32)uData>>10; + ph = 3; + } + else if (((ph_sel >> 3) & 0x7) == 4) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH4_REG, &uData); + ant_use = (s32)uData>>10; + ph = 4; + } + else + { + LOG_DBG("read_dbg_raw(): invalid reg_val= 0x%X\n", ph_sel); + ph = -1; + } + + if(ph != -1) + { + sx933x_i2c_read_16bit(this, SX933X_AVGPH0_REG + ph*4, &uData); + avg = (s32)uData>>10; + sx933x_i2c_read_16bit(this, SX933X_DIFFPH0_REG + ph*4, &uData); + diff = (s32)uData>>10; + sx933x_i2c_read_16bit(this, SX933X_OFFSETPH0_REG + ph*4*2, &uData); + off = (u16)(uData & 0x7FFF); + state = psmtcButtons[ph].state; + + if(ref_ph_a != 0xFF && ref_ph_b != 0xFF) + { + LOG_DBG( + "SMTC_DBG PH= %d USE= %d RAW= %d PH%d_USE= %d PH%d_USE= %d STATE= %d AVG= %d DIFF= %d OFF= %d ADC_MIN= %d ADC_MAX= %d DLT= %d SMTC_END\n", + ph, ant_use, ant_raw, ref_ph_a, ref_a_use, ref_ph_b, ref_b_use, state, avg, diff, off, adc_min, adc_max, use_flt_dlt_var); + } + else if(ref_ph_a != 0xFF) + { + LOG_DBG( + "SMTC_DBG PH= %d USE= %d RAW= %d PH%d_USE= %d STATE= %d AVG= %d DIFF= %d OFF= %d ADC_MIN= %d ADC_MAX= %d DLT= %d SMTC_END\n", + ph, ant_use, ant_raw, ref_ph_a, ref_a_use, state, avg, diff, off, adc_min, adc_max, use_flt_dlt_var); + } + else if(ref_ph_b != 0xFF) + { + LOG_DBG( + "SMTC_DBG PH= %d USE= %d RAW= %d PH%d_USE= %d STATE= %d AVG= %d DIFF= %d OFF= %d ADC_MIN= %d ADC_MAX= %d DLT= %d SMTC_END\n", + ph, ant_use, ant_raw, ref_ph_b, ref_b_use, state, avg, diff, off, adc_min, adc_max, use_flt_dlt_var); + } + else + { + LOG_DBG( + "SMTC_DBG PH= %d USE= %d RAW= %d STATE= %d AVG= %d DIFF= %d OFF= %d ADC_MIN= %d ADC_MAX= %d DLT= %d SMTC_END\n", + ph, ant_use, ant_raw, state, avg, diff, off, adc_min, adc_max, use_flt_dlt_var); + } + } +} + static void read_rawData(psx93XX_t this) { u8 csx, index; - s32 useful; - s32 average; - s32 diff; + s32 useful, average, diff; + s32 ref_a_use=0, ref_b_use=0; u32 uData; u16 offset; - //s32 state = 0; + int state; + psx933x_t pDevice = NULL; + psx933x_platform_data_t pdata = NULL; + int ref_ph_a, ref_ph_b; if(this) { + pDevice = this->pDevice; + pdata = pDevice->hw; + ref_ph_a = pdata->ref_phase_a; + ref_ph_b = pdata->ref_phase_b; + LOG_DBG("[SX933x] ref_ph_a= %d ref_ph_b= %d\n", ref_ph_a, ref_ph_b); + + sx933x_i2c_read_16bit(this, SX933X_STAT0_REG, &uData); + LOG_DBG("SX933X_STAT0_REG= 0x%X\n", uData); + + if(ref_ph_a != 0xFF) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH0_REG + ref_ph_a*4, &uData); + ref_a_use = (s32)uData >> 10; + } + if(ref_ph_b != 0xFF) + { + sx933x_i2c_read_16bit(this, SX933X_USEPH0_REG + ref_ph_b*4, &uData); + ref_b_use = (s32)uData >> 10; + } + for(csx =0; csx<5; csx++) { index = csx*4; @@ -272,10 +408,36 @@ static void read_rawData(psx93XX_t this) diff = (s32)uData>>10; sx933x_i2c_read_16bit(this, SX933X_OFFSETPH0_REG + index*2, &uData); offset = (u16)(uData & 0x7FFF); - //state = psmtcButtons[csx].state; - LOG_DBG("[PH: %d] Useful = %d Average = %d, DIFF = %d Offset = %d \n", - csx,useful,average,diff,offset); + + state = psmtcButtons[csx].state; + + if(ref_ph_a != 0xFF && ref_ph_b != 0xFF) + { + LOG_DBG( + "SMTC_DAT PH= %d DIFF= %d USE= %d PH%d_USE= %d PH%d_USE= %d STATE= %d OFF= %d AVG= %d SMTC_END\n", + csx, diff, useful, ref_ph_a, ref_a_use, ref_ph_b, ref_b_use, state, offset, average); + } + else if(ref_ph_a != 0xFF) + { + LOG_DBG( + "SMTC_DAT PH= %d DIFF= %d USE= %d PH%d_USE= %d STATE= %d OFF= %d AVG= %d SMTC_END\n", + csx, diff, useful, ref_ph_a, ref_a_use, state, offset, average); + } + else if(ref_ph_b != 0xFF) + { + LOG_DBG( + "SMTC_DAT PH= %d DIFF= %d USE= %d PH%d_USE= %d STATE= %d OFF= %d AVG= %d SMTC_END\n", + csx, diff, useful, ref_ph_b, ref_b_use, state, offset, average); + } + else + { + LOG_DBG( + "SMTC_DAT PH= %d DIFF= %d USE= %d STATE= %d OFF= %d AVG= %d SMTC_END\n", + csx, diff, useful, state, offset, average); + } } + + read_dbg_raw(this); } } diff --git a/include/linux/input/sx933x.h b/include/linux/input/sx933x.h index ba91d3833720..1b6d4de8f0a6 100644 --- a/include/linux/input/sx933x.h +++ b/include/linux/input/sx933x.h @@ -156,6 +156,12 @@ #define SX933X_OFFSETPH4_REG SX933X_AFEPHPH4_REG//bit14:0 #define SX933X_OFFSETPH5_REG SX933X_AFEPHPH5_REG//bit14:0 +#define SX933X_REG_DBG_PHASE_SEL 0x81A4 +#define SX933X_REG_PROX_ADC_MIN 0x81A8 +#define SX933X_REG_PROX_ADC_MAX 0x81AC +#define SX933X_REG_PROX_RAW 0x81B0 +#define SX933X_REG_DLT_VAR 0X81B4 + //i2c register bit mask #define MSK_IRQSTAT_RESET 0x00000080 #define MSK_IRQSTAT_TOUCH 0x00000040 @@ -706,6 +712,8 @@ struct sx933x_platform_data bool cap_vdd_en; struct smtc_reg_data *pi2c_reg; int irq_gpio; + int ref_phase_a; + int ref_phase_b; int eldo_gpio; bool eldo_vdd_en; sx933x_power_supply_type_t power_supply_type;