Lines Matching defs:haptics
3 * DRV260X haptics driver family
250 struct drv260x_data *haptics = container_of(work, struct drv260x_data, work);
253 gpiod_set_value(haptics->enable_gpio, 1);
257 error = regmap_write(haptics->regmap,
260 dev_err(&haptics->client->dev,
263 error = regmap_write(haptics->regmap,
264 DRV260X_RT_PB_IN, haptics->magnitude);
266 dev_err(&haptics->client->dev,
274 struct drv260x_data *haptics = input_get_drvdata(input);
276 haptics->mode = DRV260X_LRA_NO_CAL_MODE;
279 haptics->magnitude = effect->u.rumble.strong_magnitude;
281 haptics->magnitude = effect->u.rumble.weak_magnitude;
283 haptics->magnitude = 0;
285 schedule_work(&haptics->work);
292 struct drv260x_data *haptics = input_get_drvdata(input);
295 cancel_work_sync(&haptics->work);
297 error = regmap_write(haptics->regmap, DRV260X_MODE, DRV260X_STANDBY);
299 dev_err(&haptics->client->dev,
302 gpiod_set_value(haptics->enable_gpio, 0);
344 static int drv260x_init(struct drv260x_data *haptics)
349 error = regmap_write(haptics->regmap,
350 DRV260X_RATED_VOLT, haptics->rated_voltage);
352 dev_err(&haptics->client->dev,
358 error = regmap_write(haptics->regmap,
359 DRV260X_OD_CLAMP_VOLT, haptics->overdrive_voltage);
361 dev_err(&haptics->client->dev,
367 switch (haptics->mode) {
369 error = regmap_register_patch(haptics->regmap,
373 dev_err(&haptics->client->dev,
382 error = regmap_register_patch(haptics->regmap,
386 dev_err(&haptics->client->dev,
392 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL,
394 haptics->library);
396 dev_err(&haptics->client->dev,
405 error = regmap_register_patch(haptics->regmap,
409 dev_err(&haptics->client->dev,
415 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL,
417 haptics->library);
419 dev_err(&haptics->client->dev,
429 error = regmap_write(haptics->regmap, DRV260X_GO, DRV260X_GO_BIT);
431 dev_err(&haptics->client->dev,
439 error = regmap_read(haptics->regmap, DRV260X_GO, &cal_buf);
441 dev_err(&haptics->client->dev,
465 struct drv260x_data *haptics;
469 haptics = devm_kzalloc(dev, sizeof(*haptics), GFP_KERNEL);
470 if (!haptics)
473 error = device_property_read_u32(dev, "mode", &haptics->mode);
479 if (haptics->mode < DRV260X_LRA_MODE ||
480 haptics->mode > DRV260X_ERM_MODE) {
481 dev_err(dev, "Vibrator mode is invalid: %i\n", haptics->mode);
485 error = device_property_read_u32(dev, "library-sel", &haptics->library);
491 if (haptics->library < DRV260X_LIB_EMPTY ||
492 haptics->library > DRV260X_ERM_LIB_F) {
494 "Library value is invalid: %i\n", haptics->library);
498 if (haptics->mode == DRV260X_LRA_MODE &&
499 haptics->library != DRV260X_LIB_EMPTY &&
500 haptics->library != DRV260X_LIB_LRA) {
505 if (haptics->mode == DRV260X_ERM_MODE &&
506 (haptics->library == DRV260X_LIB_EMPTY ||
507 haptics->library == DRV260X_LIB_LRA)) {
513 haptics->rated_voltage = error ? DRV260X_DEF_RATED_VOLT :
517 haptics->overdrive_voltage = error ? DRV260X_DEF_OD_CLAMP_VOLT :
520 haptics->regulator = devm_regulator_get(dev, "vbat");
521 if (IS_ERR(haptics->regulator)) {
522 error = PTR_ERR(haptics->regulator);
527 haptics->enable_gpio = devm_gpiod_get_optional(dev, "enable",
529 if (IS_ERR(haptics->enable_gpio))
530 return PTR_ERR(haptics->enable_gpio);
532 haptics->input_dev = devm_input_allocate_device(dev);
533 if (!haptics->input_dev) {
538 haptics->input_dev->name = "drv260x:haptics";
539 haptics->input_dev->close = drv260x_close;
540 input_set_drvdata(haptics->input_dev, haptics);
541 input_set_capability(haptics->input_dev, EV_FF, FF_RUMBLE);
543 error = input_ff_create_memless(haptics->input_dev, NULL,
550 INIT_WORK(&haptics->work, drv260x_worker);
552 haptics->client = client;
553 i2c_set_clientdata(client, haptics);
555 haptics->regmap = devm_regmap_init_i2c(client, &drv260x_regmap_config);
556 if (IS_ERR(haptics->regmap)) {
557 error = PTR_ERR(haptics->regmap);
562 error = drv260x_init(haptics);
568 error = input_register_device(haptics->input_dev);
579 struct drv260x_data *haptics = dev_get_drvdata(dev);
582 mutex_lock(&haptics->input_dev->mutex);
584 if (haptics->input_dev->users) {
585 ret = regmap_update_bits(haptics->regmap,
594 gpiod_set_value(haptics->enable_gpio, 0);
596 ret = regulator_disable(haptics->regulator);
599 regmap_update_bits(haptics->regmap,
605 mutex_unlock(&haptics->input_dev->mutex);
611 struct drv260x_data *haptics = dev_get_drvdata(dev);
614 mutex_lock(&haptics->input_dev->mutex);
616 if (haptics->input_dev->users) {
617 ret = regulator_enable(haptics->regulator);
623 ret = regmap_update_bits(haptics->regmap,
628 regulator_disable(haptics->regulator);
632 gpiod_set_value(haptics->enable_gpio, 1);
636 mutex_unlock(&haptics->input_dev->mutex);
660 .name = "drv260x-haptics",
668 MODULE_DESCRIPTION("TI DRV260x haptics driver");