Merge tag 'sound-4.4-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[sfrench/cifs-2.6.git] / drivers / pwm / pwm-pca9685.c
1 /*
2  * Driver for PCA9685 16-channel 12-bit PWM LED controller
3  *
4  * Copyright (C) 2013 Steffen Trumtrar <s.trumtrar@pengutronix.de>
5  * Copyright (C) 2015 Clemens Gruber <clemens.gruber@pqgruber.com>
6  *
7  * based on the pwm-twl-led.c driver
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License version 2 as published by
11  * the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
16  * more details.
17  *
18  * You should have received a copy of the GNU General Public License along with
19  * this program.  If not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #include <linux/acpi.h>
23 #include <linux/i2c.h>
24 #include <linux/module.h>
25 #include <linux/platform_device.h>
26 #include <linux/property.h>
27 #include <linux/pwm.h>
28 #include <linux/regmap.h>
29 #include <linux/slab.h>
30 #include <linux/delay.h>
31
32 /*
33  * Because the PCA9685 has only one prescaler per chip, changing the period of
34  * one channel affects the period of all 16 PWM outputs!
35  * However, the ratio between each configured duty cycle and the chip-wide
36  * period remains constant, because the OFF time is set in proportion to the
37  * counter range.
38  */
39
40 #define PCA9685_MODE1           0x00
41 #define PCA9685_MODE2           0x01
42 #define PCA9685_SUBADDR1        0x02
43 #define PCA9685_SUBADDR2        0x03
44 #define PCA9685_SUBADDR3        0x04
45 #define PCA9685_ALLCALLADDR     0x05
46 #define PCA9685_LEDX_ON_L       0x06
47 #define PCA9685_LEDX_ON_H       0x07
48 #define PCA9685_LEDX_OFF_L      0x08
49 #define PCA9685_LEDX_OFF_H      0x09
50
51 #define PCA9685_ALL_LED_ON_L    0xFA
52 #define PCA9685_ALL_LED_ON_H    0xFB
53 #define PCA9685_ALL_LED_OFF_L   0xFC
54 #define PCA9685_ALL_LED_OFF_H   0xFD
55 #define PCA9685_PRESCALE        0xFE
56
57 #define PCA9685_PRESCALE_MIN    0x03    /* => max. frequency of 1526 Hz */
58 #define PCA9685_PRESCALE_MAX    0xFF    /* => min. frequency of 24 Hz */
59
60 #define PCA9685_COUNTER_RANGE   4096
61 #define PCA9685_DEFAULT_PERIOD  5000000 /* Default period_ns = 1/200 Hz */
62 #define PCA9685_OSC_CLOCK_MHZ   25      /* Internal oscillator with 25 MHz */
63
64 #define PCA9685_NUMREGS         0xFF
65 #define PCA9685_MAXCHAN         0x10
66
67 #define LED_FULL                (1 << 4)
68 #define MODE1_RESTART           (1 << 7)
69 #define MODE1_SLEEP             (1 << 4)
70 #define MODE2_INVRT             (1 << 4)
71 #define MODE2_OUTDRV            (1 << 2)
72
73 #define LED_N_ON_H(N)   (PCA9685_LEDX_ON_H + (4 * (N)))
74 #define LED_N_ON_L(N)   (PCA9685_LEDX_ON_L + (4 * (N)))
75 #define LED_N_OFF_H(N)  (PCA9685_LEDX_OFF_H + (4 * (N)))
76 #define LED_N_OFF_L(N)  (PCA9685_LEDX_OFF_L + (4 * (N)))
77
78 struct pca9685 {
79         struct pwm_chip chip;
80         struct regmap *regmap;
81         int active_cnt;
82         int duty_ns;
83         int period_ns;
84 };
85
86 static inline struct pca9685 *to_pca(struct pwm_chip *chip)
87 {
88         return container_of(chip, struct pca9685, chip);
89 }
90
91 static int pca9685_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
92                               int duty_ns, int period_ns)
93 {
94         struct pca9685 *pca = to_pca(chip);
95         unsigned long long duty;
96         unsigned int reg;
97         int prescale;
98
99         if (period_ns != pca->period_ns) {
100                 prescale = DIV_ROUND_CLOSEST(PCA9685_OSC_CLOCK_MHZ * period_ns,
101                                              PCA9685_COUNTER_RANGE * 1000) - 1;
102
103                 if (prescale >= PCA9685_PRESCALE_MIN &&
104                         prescale <= PCA9685_PRESCALE_MAX) {
105                         /* Put chip into sleep mode */
106                         regmap_update_bits(pca->regmap, PCA9685_MODE1,
107                                            MODE1_SLEEP, MODE1_SLEEP);
108
109                         /* Change the chip-wide output frequency */
110                         regmap_write(pca->regmap, PCA9685_PRESCALE, prescale);
111
112                         /* Wake the chip up */
113                         regmap_update_bits(pca->regmap, PCA9685_MODE1,
114                                            MODE1_SLEEP, 0x0);
115
116                         /* Wait 500us for the oscillator to be back up */
117                         udelay(500);
118
119                         pca->period_ns = period_ns;
120
121                         /*
122                          * If the duty cycle did not change, restart PWM with
123                          * the same duty cycle to period ratio and return.
124                          */
125                         if (duty_ns == pca->duty_ns) {
126                                 regmap_update_bits(pca->regmap, PCA9685_MODE1,
127                                                    MODE1_RESTART, 0x1);
128                                 return 0;
129                         }
130                 } else {
131                         dev_err(chip->dev,
132                                 "prescaler not set: period out of bounds!\n");
133                         return -EINVAL;
134                 }
135         }
136
137         pca->duty_ns = duty_ns;
138
139         if (duty_ns < 1) {
140                 if (pwm->hwpwm >= PCA9685_MAXCHAN)
141                         reg = PCA9685_ALL_LED_OFF_H;
142                 else
143                         reg = LED_N_OFF_H(pwm->hwpwm);
144
145                 regmap_write(pca->regmap, reg, LED_FULL);
146
147                 return 0;
148         }
149
150         if (duty_ns == period_ns) {
151                 /* Clear both OFF registers */
152                 if (pwm->hwpwm >= PCA9685_MAXCHAN)
153                         reg = PCA9685_ALL_LED_OFF_L;
154                 else
155                         reg = LED_N_OFF_L(pwm->hwpwm);
156
157                 regmap_write(pca->regmap, reg, 0x0);
158
159                 if (pwm->hwpwm >= PCA9685_MAXCHAN)
160                         reg = PCA9685_ALL_LED_OFF_H;
161                 else
162                         reg = LED_N_OFF_H(pwm->hwpwm);
163
164                 regmap_write(pca->regmap, reg, 0x0);
165
166                 /* Set the full ON bit */
167                 if (pwm->hwpwm >= PCA9685_MAXCHAN)
168                         reg = PCA9685_ALL_LED_ON_H;
169                 else
170                         reg = LED_N_ON_H(pwm->hwpwm);
171
172                 regmap_write(pca->regmap, reg, LED_FULL);
173
174                 return 0;
175         }
176
177         duty = PCA9685_COUNTER_RANGE * (unsigned long long)duty_ns;
178         duty = DIV_ROUND_UP_ULL(duty, period_ns);
179
180         if (pwm->hwpwm >= PCA9685_MAXCHAN)
181                 reg = PCA9685_ALL_LED_OFF_L;
182         else
183                 reg = LED_N_OFF_L(pwm->hwpwm);
184
185         regmap_write(pca->regmap, reg, (int)duty & 0xff);
186
187         if (pwm->hwpwm >= PCA9685_MAXCHAN)
188                 reg = PCA9685_ALL_LED_OFF_H;
189         else
190                 reg = LED_N_OFF_H(pwm->hwpwm);
191
192         regmap_write(pca->regmap, reg, ((int)duty >> 8) & 0xf);
193
194         /* Clear the full ON bit, otherwise the set OFF time has no effect */
195         if (pwm->hwpwm >= PCA9685_MAXCHAN)
196                 reg = PCA9685_ALL_LED_ON_H;
197         else
198                 reg = LED_N_ON_H(pwm->hwpwm);
199
200         regmap_write(pca->regmap, reg, 0);
201
202         return 0;
203 }
204
205 static int pca9685_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
206 {
207         struct pca9685 *pca = to_pca(chip);
208         unsigned int reg;
209
210         /*
211          * The PWM subsystem does not support a pre-delay.
212          * So, set the ON-timeout to 0
213          */
214         if (pwm->hwpwm >= PCA9685_MAXCHAN)
215                 reg = PCA9685_ALL_LED_ON_L;
216         else
217                 reg = LED_N_ON_L(pwm->hwpwm);
218
219         regmap_write(pca->regmap, reg, 0);
220
221         if (pwm->hwpwm >= PCA9685_MAXCHAN)
222                 reg = PCA9685_ALL_LED_ON_H;
223         else
224                 reg = LED_N_ON_H(pwm->hwpwm);
225
226         regmap_write(pca->regmap, reg, 0);
227
228         /*
229          * Clear the full-off bit.
230          * It has precedence over the others and must be off.
231          */
232         if (pwm->hwpwm >= PCA9685_MAXCHAN)
233                 reg = PCA9685_ALL_LED_OFF_H;
234         else
235                 reg = LED_N_OFF_H(pwm->hwpwm);
236
237         regmap_update_bits(pca->regmap, reg, LED_FULL, 0x0);
238
239         return 0;
240 }
241
242 static void pca9685_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
243 {
244         struct pca9685 *pca = to_pca(chip);
245         unsigned int reg;
246
247         if (pwm->hwpwm >= PCA9685_MAXCHAN)
248                 reg = PCA9685_ALL_LED_OFF_H;
249         else
250                 reg = LED_N_OFF_H(pwm->hwpwm);
251
252         regmap_write(pca->regmap, reg, LED_FULL);
253
254         /* Clear the LED_OFF counter. */
255         if (pwm->hwpwm >= PCA9685_MAXCHAN)
256                 reg = PCA9685_ALL_LED_OFF_L;
257         else
258                 reg = LED_N_OFF_L(pwm->hwpwm);
259
260         regmap_write(pca->regmap, reg, 0x0);
261 }
262
263 static int pca9685_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
264 {
265         struct pca9685 *pca = to_pca(chip);
266
267         if (pca->active_cnt++ == 0)
268                 return regmap_update_bits(pca->regmap, PCA9685_MODE1,
269                                           MODE1_SLEEP, 0x0);
270
271         return 0;
272 }
273
274 static void pca9685_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
275 {
276         struct pca9685 *pca = to_pca(chip);
277
278         if (--pca->active_cnt == 0)
279                 regmap_update_bits(pca->regmap, PCA9685_MODE1, MODE1_SLEEP,
280                                    MODE1_SLEEP);
281 }
282
283 static const struct pwm_ops pca9685_pwm_ops = {
284         .enable = pca9685_pwm_enable,
285         .disable = pca9685_pwm_disable,
286         .config = pca9685_pwm_config,
287         .request = pca9685_pwm_request,
288         .free = pca9685_pwm_free,
289         .owner = THIS_MODULE,
290 };
291
292 static const struct regmap_config pca9685_regmap_i2c_config = {
293         .reg_bits = 8,
294         .val_bits = 8,
295         .max_register = PCA9685_NUMREGS,
296         .cache_type = REGCACHE_NONE,
297 };
298
299 static int pca9685_pwm_probe(struct i2c_client *client,
300                                 const struct i2c_device_id *id)
301 {
302         struct pca9685 *pca;
303         int ret;
304         int mode2;
305
306         pca = devm_kzalloc(&client->dev, sizeof(*pca), GFP_KERNEL);
307         if (!pca)
308                 return -ENOMEM;
309
310         pca->regmap = devm_regmap_init_i2c(client, &pca9685_regmap_i2c_config);
311         if (IS_ERR(pca->regmap)) {
312                 ret = PTR_ERR(pca->regmap);
313                 dev_err(&client->dev, "Failed to initialize register map: %d\n",
314                         ret);
315                 return ret;
316         }
317         pca->duty_ns = 0;
318         pca->period_ns = PCA9685_DEFAULT_PERIOD;
319
320         i2c_set_clientdata(client, pca);
321
322         regmap_read(pca->regmap, PCA9685_MODE2, &mode2);
323
324         if (device_property_read_bool(&client->dev, "invert"))
325                 mode2 |= MODE2_INVRT;
326         else
327                 mode2 &= ~MODE2_INVRT;
328
329         if (device_property_read_bool(&client->dev, "open-drain"))
330                 mode2 &= ~MODE2_OUTDRV;
331         else
332                 mode2 |= MODE2_OUTDRV;
333
334         regmap_write(pca->regmap, PCA9685_MODE2, mode2);
335
336         /* clear all "full off" bits */
337         regmap_write(pca->regmap, PCA9685_ALL_LED_OFF_L, 0);
338         regmap_write(pca->regmap, PCA9685_ALL_LED_OFF_H, 0);
339
340         pca->chip.ops = &pca9685_pwm_ops;
341         /* add an extra channel for ALL_LED */
342         pca->chip.npwm = PCA9685_MAXCHAN + 1;
343
344         pca->chip.dev = &client->dev;
345         pca->chip.base = -1;
346         pca->chip.can_sleep = true;
347
348         return pwmchip_add(&pca->chip);
349 }
350
351 static int pca9685_pwm_remove(struct i2c_client *client)
352 {
353         struct pca9685 *pca = i2c_get_clientdata(client);
354
355         regmap_update_bits(pca->regmap, PCA9685_MODE1, MODE1_SLEEP,
356                            MODE1_SLEEP);
357
358         return pwmchip_remove(&pca->chip);
359 }
360
361 static const struct i2c_device_id pca9685_id[] = {
362         { "pca9685", 0 },
363         { /* sentinel */ },
364 };
365 MODULE_DEVICE_TABLE(i2c, pca9685_id);
366
367 #ifdef CONFIG_ACPI
368 static const struct acpi_device_id pca9685_acpi_ids[] = {
369         { "INT3492", 0 },
370         { /* sentinel */ },
371 };
372 MODULE_DEVICE_TABLE(acpi, pca9685_acpi_ids);
373 #endif
374
375 #ifdef CONFIG_OF
376 static const struct of_device_id pca9685_dt_ids[] = {
377         { .compatible = "nxp,pca9685-pwm", },
378         { /* sentinel */ }
379 };
380 MODULE_DEVICE_TABLE(of, pca9685_dt_ids);
381 #endif
382
383 static struct i2c_driver pca9685_i2c_driver = {
384         .driver = {
385                 .name = "pca9685-pwm",
386                 .acpi_match_table = ACPI_PTR(pca9685_acpi_ids),
387                 .of_match_table = of_match_ptr(pca9685_dt_ids),
388         },
389         .probe = pca9685_pwm_probe,
390         .remove = pca9685_pwm_remove,
391         .id_table = pca9685_id,
392 };
393
394 module_i2c_driver(pca9685_i2c_driver);
395
396 MODULE_AUTHOR("Steffen Trumtrar <s.trumtrar@pengutronix.de>");
397 MODULE_DESCRIPTION("PWM driver for PCA9685");
398 MODULE_LICENSE("GPL");