Lines Matching defs:haptics
3 * DRV260X haptics driver family
212 struct drv260x_data *haptics = container_of(work, struct drv260x_data, work);
215 gpiod_set_value(haptics->enable_gpio, 1);
219 error = regmap_write(haptics->regmap,
222 dev_err(&haptics->client->dev,
225 error = regmap_write(haptics->regmap,
226 DRV260X_RT_PB_IN, haptics->magnitude);
228 dev_err(&haptics->client->dev,
236 struct drv260x_data *haptics = input_get_drvdata(input);
238 haptics->mode = DRV260X_LRA_NO_CAL_MODE;
242 haptics->magnitude = effect->u.rumble.strong_magnitude >> 8;
244 haptics->magnitude = effect->u.rumble.weak_magnitude >> 8;
246 haptics->magnitude = 0;
248 schedule_work(&haptics->work);
255 struct drv260x_data *haptics = input_get_drvdata(input);
258 cancel_work_sync(&haptics->work);
260 error = regmap_write(haptics->regmap, DRV260X_MODE, DRV260X_STANDBY);
262 dev_err(&haptics->client->dev,
265 gpiod_set_value(haptics->enable_gpio, 0);
307 static int drv260x_init(struct drv260x_data *haptics)
312 error = regmap_write(haptics->regmap,
313 DRV260X_RATED_VOLT, haptics->rated_voltage);
315 dev_err(&haptics->client->dev,
321 error = regmap_write(haptics->regmap,
322 DRV260X_OD_CLAMP_VOLT, haptics->overdrive_voltage);
324 dev_err(&haptics->client->dev,
330 switch (haptics->mode) {
332 error = regmap_register_patch(haptics->regmap,
336 dev_err(&haptics->client->dev,
345 error = regmap_register_patch(haptics->regmap,
349 dev_err(&haptics->client->dev,
355 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL,
357 haptics->library);
359 dev_err(&haptics->client->dev,
368 error = regmap_register_patch(haptics->regmap,
372 dev_err(&haptics->client->dev,
378 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL,
380 haptics->library);
382 dev_err(&haptics->client->dev,
392 error = regmap_write(haptics->regmap, DRV260X_GO, DRV260X_GO_BIT);
394 dev_err(&haptics->client->dev,
402 error = regmap_read(haptics->regmap, DRV260X_GO, &cal_buf);
404 dev_err(&haptics->client->dev,
425 struct drv260x_data *haptics;
429 haptics = devm_kzalloc(dev, sizeof(*haptics), GFP_KERNEL);
430 if (!haptics)
433 error = device_property_read_u32(dev, "mode", &haptics->mode);
439 if (haptics->mode < DRV260X_LRA_MODE ||
440 haptics->mode > DRV260X_ERM_MODE) {
441 dev_err(dev, "Vibrator mode is invalid: %i\n", haptics->mode);
445 error = device_property_read_u32(dev, "library-sel", &haptics->library);
451 if (haptics->library < DRV260X_LIB_EMPTY ||
452 haptics->library > DRV260X_ERM_LIB_F) {
454 "Library value is invalid: %i\n", haptics->library);
458 if (haptics->mode == DRV260X_LRA_MODE &&
459 haptics->library != DRV260X_LIB_EMPTY &&
460 haptics->library != DRV260X_LIB_LRA) {
465 if (haptics->mode == DRV260X_ERM_MODE &&
466 (haptics->library == DRV260X_LIB_EMPTY ||
467 haptics->library == DRV260X_LIB_LRA)) {
473 haptics->rated_voltage = error ? DRV260X_DEF_RATED_VOLT :
477 haptics->overdrive_voltage = error ? DRV260X_DEF_OD_CLAMP_VOLT :
480 haptics->regulator = devm_regulator_get(dev, "vbat");
481 if (IS_ERR(haptics->regulator)) {
482 error = PTR_ERR(haptics->regulator);
487 haptics->enable_gpio = devm_gpiod_get_optional(dev, "enable",
489 if (IS_ERR(haptics->enable_gpio))
490 return PTR_ERR(haptics->enable_gpio);
492 haptics->input_dev = devm_input_allocate_device(dev);
493 if (!haptics->input_dev) {
498 haptics->input_dev->name = "drv260x:haptics";
499 haptics->input_dev->close = drv260x_close;
500 input_set_drvdata(haptics->input_dev, haptics);
501 input_set_capability(haptics->input_dev, EV_FF, FF_RUMBLE);
503 error = input_ff_create_memless(haptics->input_dev, NULL,
510 INIT_WORK(&haptics->work, drv260x_worker);
512 haptics->client = client;
513 i2c_set_clientdata(client, haptics);
515 haptics->regmap = devm_regmap_init_i2c(client, &drv260x_regmap_config);
516 if (IS_ERR(haptics->regmap)) {
517 error = PTR_ERR(haptics->regmap);
522 error = drv260x_init(haptics);
528 error = input_register_device(haptics->input_dev);
539 struct drv260x_data *haptics = dev_get_drvdata(dev);
542 mutex_lock(&haptics->input_dev->mutex);
544 if (input_device_enabled(haptics->input_dev)) {
545 ret = regmap_update_bits(haptics->regmap,
554 gpiod_set_value(haptics->enable_gpio, 0);
556 ret = regulator_disable(haptics->regulator);
559 regmap_update_bits(haptics->regmap,
565 mutex_unlock(&haptics->input_dev->mutex);
571 struct drv260x_data *haptics = dev_get_drvdata(dev);
574 mutex_lock(&haptics->input_dev->mutex);
576 if (input_device_enabled(haptics->input_dev)) {
577 ret = regulator_enable(haptics->regulator);
583 ret = regmap_update_bits(haptics->regmap,
588 regulator_disable(haptics->regulator);
592 gpiod_set_value(haptics->enable_gpio, 1);
596 mutex_unlock(&haptics->input_dev->mutex);
620 .name = "drv260x-haptics",
628 MODULE_DESCRIPTION("TI DRV260x haptics driver");