diff options
| author | flar2 <asegaert@gmail.com> | 2018-06-02 02:56:23 -0400 |
|---|---|---|
| committer | Davide Garberi <dade.garberi@gmail.com> | 2022-07-27 19:23:18 +0200 |
| commit | 54ebbb429af28cd1ab494858d9ffb3a24885ac5e (patch) | |
| tree | d001420cfff05df8b55b113cbcdf2223377b2917 | |
| parent | 7ad4a0faea6e754998445f7e60c96978cd470f51 (diff) | |
leds-qpnp-haptics: expose vibrator
Thanks tbalden
| -rw-r--r-- | drivers/leds/leds-qpnp-haptics.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/leds/leds-qpnp-haptics.c b/drivers/leds/leds-qpnp-haptics.c index 9c62ab6521e8..d62807e0a9d3 100644 --- a/drivers/leds/leds-qpnp-haptics.c +++ b/drivers/leds/leds-qpnp-haptics.c @@ -361,6 +361,8 @@ struct hap_chip { bool vcc_pon_enabled; }; +struct hap_chip *gchip; + static int qpnp_haptics_parse_buffer_dt(struct hap_chip *chip); static int qpnp_haptics_parse_pwm_dt(struct hap_chip *chip); @@ -1331,6 +1333,34 @@ static int qpnp_haptics_auto_mode_config(struct hap_chip *chip, int time_ms) return 0; } +void set_vibrate(int val) +{ + int rc; + + if (val > gchip->max_play_time_ms) + return; + + mutex_lock(&gchip->param_lock); + rc = qpnp_haptics_auto_mode_config(gchip, val); + if (rc < 0) { + pr_err("Unable to do auto mode config\n"); + mutex_unlock(&gchip->param_lock); + return; + } + + gchip->play_time_ms = val; + mutex_unlock(&gchip->param_lock); + + hrtimer_cancel(&gchip->stop_timer); + if (is_sw_lra_auto_resonance_control(gchip)) + hrtimer_cancel(&gchip->auto_res_err_poll_timer); + cancel_work_sync(&gchip->haptics_work); + + atomic_set(&gchip->state, 1); + schedule_work(&gchip->haptics_work); + +} + static irqreturn_t qpnp_haptics_play_irq_handler(int irq, void *data) { struct hap_chip *chip = data; @@ -2481,6 +2511,8 @@ static int qpnp_haptics_probe(struct platform_device *pdev) } } + gchip = chip; + return 0; sysfs_fail: |
