input: qcom-hv-haptics: Update autoresonance registers for F0 calibration

Update the register configuration for F0 detection/calibration
based on hardware recommendation.

Change-Id: I423ed84bf10508dc6ded2bc4248ac9ce396ce8cb
Signed-off-by: Anjelique Melendez <quic_amelende@quicinc.com>
This commit is contained in:
Anjelique Melendez 2022-08-22 16:52:18 -07:00 committed by Fenglin Wu
parent cbda83d0be
commit d6bb90e31c

View File

@ -140,6 +140,12 @@
#define HAP_CFG_DRV_DUTY_CFG_REG 0x60
#define ADT_DRV_DUTY_EN_BIT BIT(7)
#define ADT_BRK_DUTY_EN_BIT BIT(6)
#define DRV_DUTY_MASK GENMASK(5, 3)
#define DRV_DUTY_62P5_PCT 2
#define DRV_DUTY_SHIFT 3
#define BRK_DUTY_MASK GENMASK(2, 0)
#define BRK_DUTY_75_PCT 6
#define HAP_CFG_ADT_DRV_DUTY_CFG_REG 0x61
#define HAP_CFG_ZX_WIND_CFG_REG 0x62
@ -149,6 +155,7 @@
#define AUTORES_EN_DLY_MASK GENMASK(5, 2)
#define AUTORES_EN_DLY(cycles) ((cycles) * 2)
#define AUTORES_EN_DLY_6_CYCLES AUTORES_EN_DLY(6)
#define AUTORES_EN_DLY_7_CYCLES AUTORES_EN_DLY(7)
#define AUTORES_EN_DLY_SHIFT 2
#define AUTORES_ERR_WINDOW_MASK GENMASK(1, 0)
#define AUTORES_ERR_WINDOW_12P5_PERCENT 0x0
@ -5072,7 +5079,7 @@ static int haptics_detect_lra_impedance(struct haptics_chip *chip)
static int haptics_detect_lra_frequency(struct haptics_chip *chip)
{
int rc;
u8 autores_cfg, amplitude;
u8 autores_cfg, drv_duty_cfg, amplitude, mask, val;
u32 vmax_mv = chip->config.vmax_mv;
rc = haptics_read(chip, chip->cfg_addr_base,
@ -5082,16 +5089,38 @@ static int haptics_detect_lra_frequency(struct haptics_chip *chip)
return rc;
}
rc = haptics_read(chip, chip->cfg_addr_base,
HAP_CFG_DRV_DUTY_CFG_REG, &drv_duty_cfg, 1);
if (rc < 0) {
dev_err(chip->dev, "Read DRV_DUTY_CFG failed, rc=%d\n", rc);
return rc;
}
if (chip->hw_type == HAP525_HV)
val = AUTORES_EN_DLY_7_CYCLES << AUTORES_EN_DLY_SHIFT|
AUTORES_ERR_WINDOW_25_PERCENT | AUTORES_EN_BIT;
else
val = AUTORES_EN_DLY_6_CYCLES << AUTORES_EN_DLY_SHIFT|
AUTORES_ERR_WINDOW_50_PERCENT | AUTORES_EN_BIT;
rc = haptics_masked_write(chip, chip->cfg_addr_base,
HAP_CFG_AUTORES_CFG_REG, AUTORES_EN_BIT |
AUTORES_EN_DLY_MASK | AUTORES_ERR_WINDOW_MASK,
AUTORES_EN_DLY_6_CYCLES << AUTORES_EN_DLY_SHIFT
| AUTORES_ERR_WINDOW_50_PERCENT | AUTORES_EN_BIT);
val);
if (rc < 0)
return rc;
if (chip->hw_type == HAP525_HV) {
mask = ADT_DRV_DUTY_EN_BIT | ADT_BRK_DUTY_EN_BIT |
DRV_DUTY_MASK | BRK_DUTY_MASK;
val = DRV_DUTY_62P5_PCT << DRV_DUTY_SHIFT | BRK_DUTY_75_PCT;
} else {
mask = ADT_DRV_DUTY_EN_BIT;
val = 0;
}
rc = haptics_masked_write(chip, chip->cfg_addr_base,
HAP_CFG_DRV_DUTY_CFG_REG, ADT_DRV_DUTY_EN_BIT, 0);
HAP_CFG_DRV_DUTY_CFG_REG, mask, val);
if (rc < 0)
goto restore;
@ -5150,9 +5179,8 @@ static int haptics_detect_lra_frequency(struct haptics_chip *chip)
if (rc < 0)
return rc;
rc = haptics_masked_write(chip, chip->cfg_addr_base,
HAP_CFG_DRV_DUTY_CFG_REG, ADT_DRV_DUTY_EN_BIT,
ADT_DRV_DUTY_EN_BIT);
rc = haptics_write(chip, chip->cfg_addr_base,
HAP_CFG_DRV_DUTY_CFG_REG, &drv_duty_cfg, 1);
return rc;
}