Lines Matching defs:haptics
3 * DRV2667 haptics driver family
127 static int drv2667_set_waveform_freq(struct drv2667_data *haptics)
136 freq = (haptics->frequency * 1000) / 78125;
138 dev_err(&haptics->client->dev,
143 error = regmap_read(haptics->regmap, DRV2667_PAGE, &read_buf);
145 dev_err(&haptics->client->dev,
151 haptics->page != read_buf) {
152 error = regmap_write(haptics->regmap,
153 DRV2667_PAGE, haptics->page);
155 dev_err(&haptics->client->dev,
161 error = regmap_write(haptics->regmap, DRV2667_RAM_FREQ, freq);
163 dev_err(&haptics->client->dev,
168 haptics->page != read_buf) {
169 error = regmap_write(haptics->regmap, DRV2667_PAGE, read_buf);
171 dev_err(&haptics->client->dev,
182 struct drv2667_data *haptics = container_of(work, struct drv2667_data, work);
185 if (haptics->magnitude) {
186 error = regmap_write(haptics->regmap,
187 DRV2667_PAGE, haptics->page);
189 dev_err(&haptics->client->dev,
194 error = regmap_write(haptics->regmap, DRV2667_RAM_AMP,
195 haptics->magnitude);
197 dev_err(&haptics->client->dev,
202 error = regmap_write(haptics->regmap,
205 dev_err(&haptics->client->dev,
210 error = regmap_write(haptics->regmap,
213 dev_err(&haptics->client->dev,
217 error = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
220 dev_err(&haptics->client->dev,
229 struct drv2667_data *haptics = input_get_drvdata(input);
232 haptics->magnitude = effect->u.rumble.strong_magnitude;
234 haptics->magnitude = effect->u.rumble.weak_magnitude;
236 haptics->magnitude = 0;
238 schedule_work(&haptics->work);
245 struct drv2667_data *haptics = input_get_drvdata(input);
248 cancel_work_sync(&haptics->work);
250 error = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
253 dev_err(&haptics->client->dev,
276 static int drv2667_init(struct drv2667_data *haptics)
281 haptics->frequency = 195;
282 haptics->page = DRV2667_PAGE_1;
284 error = regmap_register_patch(haptics->regmap,
288 dev_err(&haptics->client->dev,
294 error = regmap_write(haptics->regmap, DRV2667_PAGE, haptics->page);
296 dev_err(&haptics->client->dev, "Failed to set page: %d\n",
301 error = drv2667_set_waveform_freq(haptics);
305 error = regmap_register_patch(haptics->regmap,
309 dev_err(&haptics->client->dev,
315 error = regmap_write(haptics->regmap, DRV2667_PAGE, DRV2667_PAGE_0);
319 regmap_write(haptics->regmap, DRV2667_PAGE, DRV2667_PAGE_0);
337 struct drv2667_data *haptics;
340 haptics = devm_kzalloc(&client->dev, sizeof(*haptics), GFP_KERNEL);
341 if (!haptics)
344 haptics->regulator = devm_regulator_get(&client->dev, "vbat");
345 if (IS_ERR(haptics->regulator)) {
346 error = PTR_ERR(haptics->regulator);
352 haptics->input_dev = devm_input_allocate_device(&client->dev);
353 if (!haptics->input_dev) {
358 haptics->input_dev->name = "drv2667:haptics";
359 haptics->input_dev->dev.parent = client->dev.parent;
360 haptics->input_dev->close = drv2667_close;
361 input_set_drvdata(haptics->input_dev, haptics);
362 input_set_capability(haptics->input_dev, EV_FF, FF_RUMBLE);
364 error = input_ff_create_memless(haptics->input_dev, NULL,
372 INIT_WORK(&haptics->work, drv2667_worker);
374 haptics->client = client;
375 i2c_set_clientdata(client, haptics);
377 haptics->regmap = devm_regmap_init_i2c(client, &drv2667_regmap_config);
378 if (IS_ERR(haptics->regmap)) {
379 error = PTR_ERR(haptics->regmap);
385 error = drv2667_init(haptics);
391 error = input_register_device(haptics->input_dev);
403 struct drv2667_data *haptics = dev_get_drvdata(dev);
406 mutex_lock(&haptics->input_dev->mutex);
408 if (haptics->input_dev->users) {
409 ret = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
413 regulator_disable(haptics->regulator);
417 ret = regulator_disable(haptics->regulator);
420 regmap_update_bits(haptics->regmap,
426 mutex_unlock(&haptics->input_dev->mutex);
432 struct drv2667_data *haptics = dev_get_drvdata(dev);
435 mutex_lock(&haptics->input_dev->mutex);
437 if (haptics->input_dev->users) {
438 ret = regulator_enable(haptics->regulator);
444 ret = regmap_update_bits(haptics->regmap, DRV2667_CTRL_2,
448 regulator_disable(haptics->regulator);
455 mutex_unlock(&haptics->input_dev->mutex);
478 .name = "drv2667-haptics",
486 MODULE_DESCRIPTION("TI DRV2667 haptics driver");