static void vibrator_work(struct work_struct *_work) { struct vibrator_drvdata *data = container_of(_work, struct vibrator_drvdata, work); pr_debug("[VIB] time = %dms\n", data->timeout); if (0 == data->timeout) { if (!data->running) return ; pwm_disable(data->pwm); i2c_max8997_hapticmotor(data, false); if (data->pdata->motor_en) data->pdata->motor_en(false); else regulator_force_disable(data->regulator); data->running = false; } else { if (data->running) return ; if (data->pdata->motor_en) data->pdata->motor_en(true); else regulator_enable(data->regulator); i2c_max8997_hapticmotor(data, true); pwm_config(data->pwm, pwm_duty, data->pdata->period); pr_info("[VIB] %s: pwm_config duty=%d\n", __func__, pwm_duty); pwm_enable(data->pwm); data->running = true; } }
void vibtonz_en(bool en) { struct vibrator_drvdata *data = g_data; if (en) { if (data->running) return ; if (data->pdata->motor_en) data->pdata->motor_en(true); else regulator_enable(data->regulator); i2c_max8997_hapticmotor(data, true); pwm_enable(data->pwm); data->running = true; } else { if (!data->running) return ; pwm_disable(data->pwm); i2c_max8997_hapticmotor(data, false); if (data->pdata->motor_en) data->pdata->motor_en(false); else regulator_force_disable(data->regulator); data->running = false; } }
static void vibrator_work(struct work_struct *_work) { struct vibrator_drvdata *data = container_of(_work, struct vibrator_drvdata, work); printk(KERN_DEBUG "[VIB] time = %dms\n", data->timeout); if (0 == data->timeout) { if (!data->running) return ; regulator_force_disable(data->regulator); pwm_disable(data->pwm); i2c_max8997_hapticmotor(data, false); if (data->pdata->motor_en) data->pdata->motor_en(false); data->running = false; } else { if (data->running) return ; if (data->pdata->motor_en) data->pdata->motor_en(true); i2c_max8997_hapticmotor(data, true); pwm_config(data->pwm, data->pdata->duty, data->pdata->period); pwm_enable(data->pwm); regulator_enable(data->regulator); data->running = true; } }