summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorflar2 <asegaert@gmail.com>2018-06-02 02:56:23 -0400
committerDavide Garberi <dade.garberi@gmail.com>2022-07-27 19:23:18 +0200
commit54ebbb429af28cd1ab494858d9ffb3a24885ac5e (patch)
treed001420cfff05df8b55b113cbcdf2223377b2917
parent7ad4a0faea6e754998445f7e60c96978cd470f51 (diff)
leds-qpnp-haptics: expose vibrator
Thanks tbalden
-rw-r--r--drivers/leds/leds-qpnp-haptics.c32
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: