Lines Matching refs:haptics

261 	struct drv260x_data *haptics = container_of(work, struct drv260x_data, work);  in drv260x_worker()  local
264 gpiod_set_value(haptics->enable_gpio, 1); in drv260x_worker()
268 error = regmap_write(haptics->regmap, in drv260x_worker()
271 dev_err(&haptics->client->dev, in drv260x_worker()
274 error = regmap_write(haptics->regmap, in drv260x_worker()
275 DRV260X_RT_PB_IN, haptics->magnitude); in drv260x_worker()
277 dev_err(&haptics->client->dev, in drv260x_worker()
285 struct drv260x_data *haptics = input_get_drvdata(input); in drv260x_haptics_play() local
287 haptics->mode = DRV260X_LRA_NO_CAL_MODE; in drv260x_haptics_play()
290 haptics->magnitude = effect->u.rumble.strong_magnitude; in drv260x_haptics_play()
292 haptics->magnitude = effect->u.rumble.weak_magnitude; in drv260x_haptics_play()
294 haptics->magnitude = 0; in drv260x_haptics_play()
296 schedule_work(&haptics->work); in drv260x_haptics_play()
303 struct drv260x_data *haptics = input_get_drvdata(input); in drv260x_close() local
306 cancel_work_sync(&haptics->work); in drv260x_close()
308 error = regmap_write(haptics->regmap, DRV260X_MODE, DRV260X_STANDBY); in drv260x_close()
310 dev_err(&haptics->client->dev, in drv260x_close()
313 gpiod_set_value(haptics->enable_gpio, 0); in drv260x_close()
355 static int drv260x_init(struct drv260x_data *haptics) in drv260x_init() argument
360 error = regmap_write(haptics->regmap, in drv260x_init()
361 DRV260X_RATED_VOLT, haptics->rated_voltage); in drv260x_init()
363 dev_err(&haptics->client->dev, in drv260x_init()
369 error = regmap_write(haptics->regmap, in drv260x_init()
370 DRV260X_OD_CLAMP_VOLT, haptics->overdrive_voltage); in drv260x_init()
372 dev_err(&haptics->client->dev, in drv260x_init()
378 switch (haptics->mode) { in drv260x_init()
380 error = regmap_register_patch(haptics->regmap, in drv260x_init()
384 dev_err(&haptics->client->dev, in drv260x_init()
393 error = regmap_register_patch(haptics->regmap, in drv260x_init()
397 dev_err(&haptics->client->dev, in drv260x_init()
403 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL, in drv260x_init()
405 haptics->library); in drv260x_init()
407 dev_err(&haptics->client->dev, in drv260x_init()
416 error = regmap_register_patch(haptics->regmap, in drv260x_init()
420 dev_err(&haptics->client->dev, in drv260x_init()
426 error = regmap_update_bits(haptics->regmap, DRV260X_LIB_SEL, in drv260x_init()
428 haptics->library); in drv260x_init()
430 dev_err(&haptics->client->dev, in drv260x_init()
440 error = regmap_write(haptics->regmap, DRV260X_GO, DRV260X_GO_BIT); in drv260x_init()
442 dev_err(&haptics->client->dev, in drv260x_init()
449 error = regmap_read(haptics->regmap, DRV260X_GO, &cal_buf); in drv260x_init()
451 dev_err(&haptics->client->dev, in drv260x_init()
473 struct drv260x_data *haptics) in drv260x_parse_dt() argument
479 error = of_property_read_u32(np, "mode", &haptics->mode); in drv260x_parse_dt()
485 error = of_property_read_u32(np, "library-sel", &haptics->library); in drv260x_parse_dt()
494 haptics->rated_voltage = drv260x_calculate_voltage(voltage); in drv260x_parse_dt()
499 haptics->overdrive_voltage = drv260x_calculate_voltage(voltage); in drv260x_parse_dt()
505 struct drv260x_data *haptics) in drv260x_parse_dt() argument
517 struct drv260x_data *haptics; in drv260x_probe() local
520 haptics = devm_kzalloc(&client->dev, sizeof(*haptics), GFP_KERNEL); in drv260x_probe()
521 if (!haptics) in drv260x_probe()
524 haptics->rated_voltage = DRV260X_DEF_OD_CLAMP_VOLT; in drv260x_probe()
525 haptics->rated_voltage = DRV260X_DEF_RATED_VOLT; in drv260x_probe()
528 haptics->mode = pdata->mode; in drv260x_probe()
529 haptics->library = pdata->library_selection; in drv260x_probe()
531 haptics->overdrive_voltage = drv260x_calculate_voltage(pdata->vib_overdrive_voltage); in drv260x_probe()
533 haptics->rated_voltage = drv260x_calculate_voltage(pdata->vib_rated_voltage); in drv260x_probe()
535 error = drv260x_parse_dt(&client->dev, haptics); in drv260x_probe()
544 if (haptics->mode < DRV260X_LRA_MODE || in drv260x_probe()
545 haptics->mode > DRV260X_ERM_MODE) { in drv260x_probe()
548 haptics->mode); in drv260x_probe()
552 if (haptics->library < DRV260X_LIB_EMPTY || in drv260x_probe()
553 haptics->library > DRV260X_ERM_LIB_F) { in drv260x_probe()
555 "Library value is invalid: %i\n", haptics->library); in drv260x_probe()
559 if (haptics->mode == DRV260X_LRA_MODE && in drv260x_probe()
560 haptics->library != DRV260X_LIB_EMPTY && in drv260x_probe()
561 haptics->library != DRV260X_LIB_LRA) { in drv260x_probe()
567 if (haptics->mode == DRV260X_ERM_MODE && in drv260x_probe()
568 (haptics->library == DRV260X_LIB_EMPTY || in drv260x_probe()
569 haptics->library == DRV260X_LIB_LRA)) { in drv260x_probe()
575 haptics->regulator = devm_regulator_get(&client->dev, "vbat"); in drv260x_probe()
576 if (IS_ERR(haptics->regulator)) { in drv260x_probe()
577 error = PTR_ERR(haptics->regulator); in drv260x_probe()
583 haptics->enable_gpio = devm_gpiod_get(&client->dev, "enable"); in drv260x_probe()
584 if (IS_ERR(haptics->enable_gpio)) { in drv260x_probe()
585 error = PTR_ERR(haptics->enable_gpio); in drv260x_probe()
588 haptics->enable_gpio = NULL; in drv260x_probe()
590 gpiod_direction_output(haptics->enable_gpio, 1); in drv260x_probe()
593 haptics->input_dev = devm_input_allocate_device(&client->dev); in drv260x_probe()
594 if (!haptics->input_dev) { in drv260x_probe()
599 haptics->input_dev->name = "drv260x:haptics"; in drv260x_probe()
600 haptics->input_dev->dev.parent = client->dev.parent; in drv260x_probe()
601 haptics->input_dev->close = drv260x_close; in drv260x_probe()
602 input_set_drvdata(haptics->input_dev, haptics); in drv260x_probe()
603 input_set_capability(haptics->input_dev, EV_FF, FF_RUMBLE); in drv260x_probe()
605 error = input_ff_create_memless(haptics->input_dev, NULL, in drv260x_probe()
613 INIT_WORK(&haptics->work, drv260x_worker); in drv260x_probe()
615 haptics->client = client; in drv260x_probe()
616 i2c_set_clientdata(client, haptics); in drv260x_probe()
618 haptics->regmap = devm_regmap_init_i2c(client, &drv260x_regmap_config); in drv260x_probe()
619 if (IS_ERR(haptics->regmap)) { in drv260x_probe()
620 error = PTR_ERR(haptics->regmap); in drv260x_probe()
626 error = drv260x_init(haptics); in drv260x_probe()
632 error = input_register_device(haptics->input_dev); in drv260x_probe()
644 struct drv260x_data *haptics = dev_get_drvdata(dev); in drv260x_suspend() local
647 mutex_lock(&haptics->input_dev->mutex); in drv260x_suspend()
649 if (haptics->input_dev->users) { in drv260x_suspend()
650 ret = regmap_update_bits(haptics->regmap, in drv260x_suspend()
659 gpiod_set_value(haptics->enable_gpio, 0); in drv260x_suspend()
661 ret = regulator_disable(haptics->regulator); in drv260x_suspend()
664 regmap_update_bits(haptics->regmap, in drv260x_suspend()
670 mutex_unlock(&haptics->input_dev->mutex); in drv260x_suspend()
676 struct drv260x_data *haptics = dev_get_drvdata(dev); in drv260x_resume() local
679 mutex_lock(&haptics->input_dev->mutex); in drv260x_resume()
681 if (haptics->input_dev->users) { in drv260x_resume()
682 ret = regulator_enable(haptics->regulator); in drv260x_resume()
688 ret = regmap_update_bits(haptics->regmap, in drv260x_resume()
693 regulator_disable(haptics->regulator); in drv260x_resume()
697 gpiod_set_value(haptics->enable_gpio, 1); in drv260x_resume()
701 mutex_unlock(&haptics->input_dev->mutex); in drv260x_resume()