2 * DRV2667 haptics driver family
4 * Author: Dan Murphy <dmurphy@ti.com>
6 * Copyright: (C) 2014 Texas Instruments, Inc.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
18 #include <linux/i2c.h>
19 #include <linux/input.h>
20 #include <linux/module.h>
21 #include <linux/platform_device.h>
22 #include <linux/regmap.h>
23 #include <linux/slab.h>
24 #include <linux/delay.h>
25 #include <linux/regulator/consumer.h>
27 /* Contol registers */
28 #define DRV2667_STATUS 0x00
29 #define DRV2667_CTRL_1 0x01
30 #define DRV2667_CTRL_2 0x02
31 /* Waveform sequencer */
32 #define DRV2667_WV_SEQ_0 0x03
33 #define DRV2667_WV_SEQ_1 0x04
34 #define DRV2667_WV_SEQ_2 0x05
35 #define DRV2667_WV_SEQ_3 0x06
36 #define DRV2667_WV_SEQ_4 0x07
37 #define DRV2667_WV_SEQ_5 0x08
38 #define DRV2667_WV_SEQ_6 0x09
39 #define DRV2667_WV_SEQ_7 0x0A
40 #define DRV2667_FIFO 0x0B
41 #define DRV2667_PAGE 0xFF
42 #define DRV2667_MAX_REG DRV2667_PAGE
44 #define DRV2667_PAGE_0 0x00
45 #define DRV2667_PAGE_1 0x01
46 #define DRV2667_PAGE_2 0x02
47 #define DRV2667_PAGE_3 0x03
48 #define DRV2667_PAGE_4 0x04
49 #define DRV2667_PAGE_5 0x05
50 #define DRV2667_PAGE_6 0x06
51 #define DRV2667_PAGE_7 0x07
52 #define DRV2667_PAGE_8 0x08
55 #define DRV2667_RAM_HDR_SZ 0x0
56 /* RAM Header addresses */
57 #define DRV2667_RAM_START_HI 0x01
58 #define DRV2667_RAM_START_LO 0x02
59 #define DRV2667_RAM_STOP_HI 0x03
60 #define DRV2667_RAM_STOP_LO 0x04
61 #define DRV2667_RAM_REPEAT_CT 0x05
62 /* RAM data addresses */
63 #define DRV2667_RAM_AMP 0x06
64 #define DRV2667_RAM_FREQ 0x07
65 #define DRV2667_RAM_DURATION 0x08
66 #define DRV2667_RAM_ENVELOPE 0x09
68 /* Control 1 Register */
69 #define DRV2667_25_VPP_GAIN 0x00
70 #define DRV2667_50_VPP_GAIN 0x01
71 #define DRV2667_75_VPP_GAIN 0x02
72 #define DRV2667_100_VPP_GAIN 0x03
73 #define DRV2667_DIGITAL_IN 0xfc
74 #define DRV2667_ANALOG_IN (1 << 2)
76 /* Control 2 Register */
77 #define DRV2667_GO (1 << 0)
78 #define DRV2667_STANDBY (1 << 6)
79 #define DRV2667_DEV_RST (1 << 7)
81 /* RAM Envelope settings */
82 #define DRV2667_NO_ENV 0x00
83 #define DRV2667_32_MS_ENV 0x01
84 #define DRV2667_64_MS_ENV 0x02
85 #define DRV2667_96_MS_ENV 0x03
86 #define DRV2667_128_MS_ENV 0x04
87 #define DRV2667_160_MS_ENV 0x05
88 #define DRV2667_192_MS_ENV 0x06
89 #define DRV2667_224_MS_ENV 0x07
90 #define DRV2667_256_MS_ENV 0x08
91 #define DRV2667_512_MS_ENV 0x09
92 #define DRV2667_768_MS_ENV 0x0a
93 #define DRV2667_1024_MS_ENV 0x0b
94 #define DRV2667_1280_MS_ENV 0x0c
95 #define DRV2667_1536_MS_ENV 0x0d
96 #define DRV2667_1792_MS_ENV 0x0e
97 #define DRV2667_2048_MS_ENV 0x0f
100 * struct drv2667_data -
101 * @input_dev - Pointer to the input device
102 * @client - Pointer to the I2C client
103 * @regmap - Register map of the device
104 * @work - Work item used to off load the enable/disable of the vibration
105 * @regulator - Pointer to the regulator for the IC
106 * @magnitude - Magnitude of the vibration event
108 struct drv2667_data
{
109 struct input_dev
*input_dev
;
110 struct i2c_client
*client
;
111 struct regmap
*regmap
;
112 struct work_struct work
;
113 struct regulator
*regulator
;
119 static const struct reg_default drv2667_reg_defs
[] = {
120 { DRV2667_STATUS
, 0x02 },
121 { DRV2667_CTRL_1
, 0x28 },
122 { DRV2667_CTRL_2
, 0x40 },
123 { DRV2667_WV_SEQ_0
, 0x00 },
124 { DRV2667_WV_SEQ_1
, 0x00 },
125 { DRV2667_WV_SEQ_2
, 0x00 },
126 { DRV2667_WV_SEQ_3
, 0x00 },
127 { DRV2667_WV_SEQ_4
, 0x00 },
128 { DRV2667_WV_SEQ_5
, 0x00 },
129 { DRV2667_WV_SEQ_6
, 0x00 },
130 { DRV2667_WV_SEQ_7
, 0x00 },
131 { DRV2667_FIFO
, 0x00 },
132 { DRV2667_PAGE
, 0x00 },
135 static int drv2667_set_waveform_freq(struct drv2667_data
*haptics
)
137 unsigned int read_buf
;
141 /* Per the data sheet:
142 * Sinusoid Frequency (Hz) = 7.8125 x Frequency
144 freq
= (haptics
->frequency
* 1000) / 78125;
146 dev_err(&haptics
->client
->dev
,
147 "ERROR: Frequency calculated to %i\n", freq
);
151 error
= regmap_read(haptics
->regmap
, DRV2667_PAGE
, &read_buf
);
153 dev_err(&haptics
->client
->dev
,
154 "Failed to read the page number: %d\n", error
);
158 if (read_buf
== DRV2667_PAGE_0
||
159 haptics
->page
!= read_buf
) {
160 error
= regmap_write(haptics
->regmap
,
161 DRV2667_PAGE
, haptics
->page
);
163 dev_err(&haptics
->client
->dev
,
164 "Failed to set the page: %d\n", error
);
169 error
= regmap_write(haptics
->regmap
, DRV2667_RAM_FREQ
, freq
);
171 dev_err(&haptics
->client
->dev
,
172 "Failed to set the frequency: %d\n", error
);
174 /* Reset back to original page */
175 if (read_buf
== DRV2667_PAGE_0
||
176 haptics
->page
!= read_buf
) {
177 error
= regmap_write(haptics
->regmap
, DRV2667_PAGE
, read_buf
);
179 dev_err(&haptics
->client
->dev
,
180 "Failed to set the page: %d\n", error
);
188 static void drv2667_worker(struct work_struct
*work
)
190 struct drv2667_data
*haptics
= container_of(work
, struct drv2667_data
, work
);
193 if (haptics
->magnitude
) {
194 error
= regmap_write(haptics
->regmap
,
195 DRV2667_PAGE
, haptics
->page
);
197 dev_err(&haptics
->client
->dev
,
198 "Failed to set the page: %d\n", error
);
202 error
= regmap_write(haptics
->regmap
, DRV2667_RAM_AMP
,
205 dev_err(&haptics
->client
->dev
,
206 "Failed to set the amplitude: %d\n", error
);
210 error
= regmap_write(haptics
->regmap
,
211 DRV2667_PAGE
, DRV2667_PAGE_0
);
213 dev_err(&haptics
->client
->dev
,
214 "Failed to set the page: %d\n", error
);
218 error
= regmap_write(haptics
->regmap
,
219 DRV2667_CTRL_2
, DRV2667_GO
);
221 dev_err(&haptics
->client
->dev
,
222 "Failed to set the GO bit: %d\n", error
);
225 error
= regmap_update_bits(haptics
->regmap
, DRV2667_CTRL_2
,
228 dev_err(&haptics
->client
->dev
,
229 "Failed to unset the GO bit: %d\n", error
);
234 static int drv2667_haptics_play(struct input_dev
*input
, void *data
,
235 struct ff_effect
*effect
)
237 struct drv2667_data
*haptics
= input_get_drvdata(input
);
239 if (effect
->u
.rumble
.strong_magnitude
> 0)
240 haptics
->magnitude
= effect
->u
.rumble
.strong_magnitude
;
241 else if (effect
->u
.rumble
.weak_magnitude
> 0)
242 haptics
->magnitude
= effect
->u
.rumble
.weak_magnitude
;
244 haptics
->magnitude
= 0;
246 schedule_work(&haptics
->work
);
251 static void drv2667_close(struct input_dev
*input
)
253 struct drv2667_data
*haptics
= input_get_drvdata(input
);
256 cancel_work_sync(&haptics
->work
);
258 error
= regmap_update_bits(haptics
->regmap
, DRV2667_CTRL_2
,
261 dev_err(&haptics
->client
->dev
,
262 "Failed to enter standby mode: %d\n", error
);
265 static const struct reg_sequence drv2667_init_regs
[] = {
266 { DRV2667_CTRL_2
, 0 },
267 { DRV2667_CTRL_1
, DRV2667_25_VPP_GAIN
},
268 { DRV2667_WV_SEQ_0
, 1 },
269 { DRV2667_WV_SEQ_1
, 0 }
272 static const struct reg_sequence drv2667_page1_init
[] = {
273 { DRV2667_RAM_HDR_SZ
, 0x05 },
274 { DRV2667_RAM_START_HI
, 0x80 },
275 { DRV2667_RAM_START_LO
, 0x06 },
276 { DRV2667_RAM_STOP_HI
, 0x00 },
277 { DRV2667_RAM_STOP_LO
, 0x09 },
278 { DRV2667_RAM_REPEAT_CT
, 0 },
279 { DRV2667_RAM_DURATION
, 0x05 },
280 { DRV2667_RAM_ENVELOPE
, DRV2667_NO_ENV
},
281 { DRV2667_RAM_AMP
, 0x60 },
284 static int drv2667_init(struct drv2667_data
*haptics
)
288 /* Set default haptic frequency to 195Hz on Page 1*/
289 haptics
->frequency
= 195;
290 haptics
->page
= DRV2667_PAGE_1
;
292 error
= regmap_register_patch(haptics
->regmap
,
294 ARRAY_SIZE(drv2667_init_regs
));
296 dev_err(&haptics
->client
->dev
,
297 "Failed to write init registers: %d\n",
302 error
= regmap_write(haptics
->regmap
, DRV2667_PAGE
, haptics
->page
);
304 dev_err(&haptics
->client
->dev
, "Failed to set page: %d\n",
309 error
= drv2667_set_waveform_freq(haptics
);
313 error
= regmap_register_patch(haptics
->regmap
,
315 ARRAY_SIZE(drv2667_page1_init
));
317 dev_err(&haptics
->client
->dev
,
318 "Failed to write page registers: %d\n",
323 error
= regmap_write(haptics
->regmap
, DRV2667_PAGE
, DRV2667_PAGE_0
);
327 regmap_write(haptics
->regmap
, DRV2667_PAGE
, DRV2667_PAGE_0
);
332 static const struct regmap_config drv2667_regmap_config
= {
336 .max_register
= DRV2667_MAX_REG
,
337 .reg_defaults
= drv2667_reg_defs
,
338 .num_reg_defaults
= ARRAY_SIZE(drv2667_reg_defs
),
339 .cache_type
= REGCACHE_NONE
,
342 static int drv2667_probe(struct i2c_client
*client
,
343 const struct i2c_device_id
*id
)
345 struct drv2667_data
*haptics
;
348 haptics
= devm_kzalloc(&client
->dev
, sizeof(*haptics
), GFP_KERNEL
);
352 haptics
->regulator
= devm_regulator_get(&client
->dev
, "vbat");
353 if (IS_ERR(haptics
->regulator
)) {
354 error
= PTR_ERR(haptics
->regulator
);
355 dev_err(&client
->dev
,
356 "unable to get regulator, error: %d\n", error
);
360 haptics
->input_dev
= devm_input_allocate_device(&client
->dev
);
361 if (!haptics
->input_dev
) {
362 dev_err(&client
->dev
, "Failed to allocate input device\n");
366 haptics
->input_dev
->name
= "drv2667:haptics";
367 haptics
->input_dev
->dev
.parent
= client
->dev
.parent
;
368 haptics
->input_dev
->close
= drv2667_close
;
369 input_set_drvdata(haptics
->input_dev
, haptics
);
370 input_set_capability(haptics
->input_dev
, EV_FF
, FF_RUMBLE
);
372 error
= input_ff_create_memless(haptics
->input_dev
, NULL
,
373 drv2667_haptics_play
);
375 dev_err(&client
->dev
, "input_ff_create() failed: %d\n",
380 INIT_WORK(&haptics
->work
, drv2667_worker
);
382 haptics
->client
= client
;
383 i2c_set_clientdata(client
, haptics
);
385 haptics
->regmap
= devm_regmap_init_i2c(client
, &drv2667_regmap_config
);
386 if (IS_ERR(haptics
->regmap
)) {
387 error
= PTR_ERR(haptics
->regmap
);
388 dev_err(&client
->dev
, "Failed to allocate register map: %d\n",
393 error
= drv2667_init(haptics
);
395 dev_err(&client
->dev
, "Device init failed: %d\n", error
);
399 error
= input_register_device(haptics
->input_dev
);
401 dev_err(&client
->dev
, "couldn't register input device: %d\n",
409 static int __maybe_unused
drv2667_suspend(struct device
*dev
)
411 struct drv2667_data
*haptics
= dev_get_drvdata(dev
);
414 mutex_lock(&haptics
->input_dev
->mutex
);
416 if (haptics
->input_dev
->users
) {
417 ret
= regmap_update_bits(haptics
->regmap
, DRV2667_CTRL_2
,
420 dev_err(dev
, "Failed to set standby mode\n");
421 regulator_disable(haptics
->regulator
);
425 ret
= regulator_disable(haptics
->regulator
);
427 dev_err(dev
, "Failed to disable regulator\n");
428 regmap_update_bits(haptics
->regmap
,
434 mutex_unlock(&haptics
->input_dev
->mutex
);
438 static int __maybe_unused
drv2667_resume(struct device
*dev
)
440 struct drv2667_data
*haptics
= dev_get_drvdata(dev
);
443 mutex_lock(&haptics
->input_dev
->mutex
);
445 if (haptics
->input_dev
->users
) {
446 ret
= regulator_enable(haptics
->regulator
);
448 dev_err(dev
, "Failed to enable regulator\n");
452 ret
= regmap_update_bits(haptics
->regmap
, DRV2667_CTRL_2
,
455 dev_err(dev
, "Failed to unset standby mode\n");
456 regulator_disable(haptics
->regulator
);
463 mutex_unlock(&haptics
->input_dev
->mutex
);
467 static SIMPLE_DEV_PM_OPS(drv2667_pm_ops
, drv2667_suspend
, drv2667_resume
);
469 static const struct i2c_device_id drv2667_id
[] = {
473 MODULE_DEVICE_TABLE(i2c
, drv2667_id
);
476 static const struct of_device_id drv2667_of_match
[] = {
477 { .compatible
= "ti,drv2667", },
480 MODULE_DEVICE_TABLE(of
, drv2667_of_match
);
483 static struct i2c_driver drv2667_driver
= {
484 .probe
= drv2667_probe
,
486 .name
= "drv2667-haptics",
487 .of_match_table
= of_match_ptr(drv2667_of_match
),
488 .pm
= &drv2667_pm_ops
,
490 .id_table
= drv2667_id
,
492 module_i2c_driver(drv2667_driver
);
494 MODULE_DESCRIPTION("TI DRV2667 haptics driver");
495 MODULE_LICENSE("GPL");
496 MODULE_AUTHOR("Dan Murphy <dmurphy@ti.com>");