Lines Matching refs:haptics
258 struct drv260x_data *haptics = container_of(work, struct drv260x_data, work); in drv260x_worker() local
261 gpiod_set_value(haptics->enable_gpio, 1); in drv260x_worker()
265 error = regmap_write(haptics->regmap, in drv260x_worker()
268 dev_err(&haptics->client->dev, in drv260x_worker()
271 error = regmap_write(haptics->regmap, in drv260x_worker()
272 DRV260X_RT_PB_IN, haptics->magnitude); in drv260x_worker()
274 dev_err(&haptics->client->dev, in drv260x_worker()
282 struct drv260x_data *haptics = input_get_drvdata(input); in drv260x_haptics_play() local
284 haptics->mode = DRV260X_LRA_NO_CAL_MODE; in drv260x_haptics_play()
287 haptics->magnitude = effect->u.rumble.strong_magnitude; in drv260x_haptics_play()
289 haptics->magnitude = effect->u.rumble.weak_magnitude; in drv260x_haptics_play()
291 haptics->magnitude = 0; in drv260x_haptics_play()
293 schedule_work(&haptics->work); in drv260x_haptics_play()
300 struct drv260x_data *haptics = input_get_drvdata(input); in drv260x_close() local
303 cancel_work_sync(&haptics->work); in drv260x_close()
305 error = regmap_write(haptics->regmap, DRV260X_MODE, DRV260X_STANDBY); in drv260x_close()
307 dev_err(&haptics->client->dev, in drv260x_close()
310 gpiod_set_value(haptics->enable_gpio, 0); in drv260x_close()
352 static int drv260x_init(struct drv260x_data *haptics) in drv260x_init() argument
357 error = regmap_write(haptics->regmap, in drv260x_init()
358 DRV260X_RATED_VOLT, haptics->rated_voltage); in drv260x_init()
360 dev_err(&haptics->client->dev, in drv260x_init()
366 error = regmap_write(haptics->regmap, in drv260x_init()
367 DRV260X_OD_CLAMP_VOLT, haptics->overdrive_voltage); in drv260x_init()
369 dev_err(&haptics->client->dev, in drv260x_init()
375 switch (haptics->mode) { in drv260x_init()
377 error = regmap_register_patch(haptics->regmap, in drv260x_init()
381 dev_err(&haptics->client->dev, in drv260x_init()
390 error = regmap_register_patch(haptics->regmap, in drv260x_init()
394 dev_err(&haptics->client->dev, in drv260x_init()
400 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL, in drv260x_init()
402 haptics->library); in drv260x_init()
404 dev_err(&haptics->client->dev, in drv260x_init()
413 error = regmap_register_patch(haptics->regmap, in drv260x_init()
417 dev_err(&haptics->client->dev, in drv260x_init()
423 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL, in drv260x_init()
425 haptics->library); in drv260x_init()
427 dev_err(&haptics->client->dev, in drv260x_init()
437 error = regmap_write(haptics->regmap, DRV260X_GO, DRV260X_GO_BIT); in drv260x_init()
439 dev_err(&haptics->client->dev, in drv260x_init()
446 error = regmap_read(haptics->regmap, DRV260X_GO, &cal_buf); in drv260x_init()
448 dev_err(&haptics->client->dev, in drv260x_init()
472 struct drv260x_data *haptics; in drv260x_probe() local
476 haptics = devm_kzalloc(dev, sizeof(*haptics), GFP_KERNEL); in drv260x_probe()
477 if (!haptics) in drv260x_probe()
480 error = device_property_read_u32(dev, "mode", &haptics->mode); in drv260x_probe()
486 if (haptics->mode < DRV260X_LRA_MODE || in drv260x_probe()
487 haptics->mode > DRV260X_ERM_MODE) { in drv260x_probe()
488 dev_err(dev, "Vibrator mode is invalid: %i\n", haptics->mode); in drv260x_probe()
492 error = device_property_read_u32(dev, "library-sel", &haptics->library); in drv260x_probe()
498 if (haptics->library < DRV260X_LIB_EMPTY || in drv260x_probe()
499 haptics->library > DRV260X_ERM_LIB_F) { in drv260x_probe()
501 "Library value is invalid: %i\n", haptics->library); in drv260x_probe()
505 if (haptics->mode == DRV260X_LRA_MODE && in drv260x_probe()
506 haptics->library != DRV260X_LIB_EMPTY && in drv260x_probe()
507 haptics->library != DRV260X_LIB_LRA) { in drv260x_probe()
512 if (haptics->mode == DRV260X_ERM_MODE && in drv260x_probe()
513 (haptics->library == DRV260X_LIB_EMPTY || in drv260x_probe()
514 haptics->library == DRV260X_LIB_LRA)) { in drv260x_probe()
520 haptics->rated_voltage = error ? DRV260X_DEF_RATED_VOLT : in drv260x_probe()
524 haptics->overdrive_voltage = error ? DRV260X_DEF_OD_CLAMP_VOLT : in drv260x_probe()
527 haptics->regulator = devm_regulator_get(dev, "vbat"); in drv260x_probe()
528 if (IS_ERR(haptics->regulator)) { in drv260x_probe()
529 error = PTR_ERR(haptics->regulator); in drv260x_probe()
534 haptics->enable_gpio = devm_gpiod_get_optional(dev, "enable", in drv260x_probe()
536 if (IS_ERR(haptics->enable_gpio)) in drv260x_probe()
537 return PTR_ERR(haptics->enable_gpio); in drv260x_probe()
539 haptics->input_dev = devm_input_allocate_device(dev); in drv260x_probe()
540 if (!haptics->input_dev) { in drv260x_probe()
545 haptics->input_dev->name = "drv260x:haptics"; in drv260x_probe()
546 haptics->input_dev->close = drv260x_close; in drv260x_probe()
547 input_set_drvdata(haptics->input_dev, haptics); in drv260x_probe()
548 input_set_capability(haptics->input_dev, EV_FF, FF_RUMBLE); in drv260x_probe()
550 error = input_ff_create_memless(haptics->input_dev, NULL, in drv260x_probe()
557 INIT_WORK(&haptics->work, drv260x_worker); in drv260x_probe()
559 haptics->client = client; in drv260x_probe()
560 i2c_set_clientdata(client, haptics); in drv260x_probe()
562 haptics->regmap = devm_regmap_init_i2c(client, &drv260x_regmap_config); in drv260x_probe()
563 if (IS_ERR(haptics->regmap)) { in drv260x_probe()
564 error = PTR_ERR(haptics->regmap); in drv260x_probe()
569 error = drv260x_init(haptics); in drv260x_probe()
575 error = input_register_device(haptics->input_dev); in drv260x_probe()
586 struct drv260x_data *haptics = dev_get_drvdata(dev); in drv260x_suspend() local
589 mutex_lock(&haptics->input_dev->mutex); in drv260x_suspend()
591 if (haptics->input_dev->users) { in drv260x_suspend()
592 ret = regmap_update_bits(haptics->regmap, in drv260x_suspend()
601 gpiod_set_value(haptics->enable_gpio, 0); in drv260x_suspend()
603 ret = regulator_disable(haptics->regulator); in drv260x_suspend()
606 regmap_update_bits(haptics->regmap, in drv260x_suspend()
612 mutex_unlock(&haptics->input_dev->mutex); in drv260x_suspend()
618 struct drv260x_data *haptics = dev_get_drvdata(dev); in drv260x_resume() local
621 mutex_lock(&haptics->input_dev->mutex); in drv260x_resume()
623 if (haptics->input_dev->users) { in drv260x_resume()
624 ret = regulator_enable(haptics->regulator); in drv260x_resume()
630 ret = regmap_update_bits(haptics->regmap, in drv260x_resume()
635 regulator_disable(haptics->regulator); in drv260x_resume()
639 gpiod_set_value(haptics->enable_gpio, 1); in drv260x_resume()
643 mutex_unlock(&haptics->input_dev->mutex); in drv260x_resume()