]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/mfd/wm8994-core.c
Merge remote-tracking branches 'regmap/topic/patch' and 'regmap/topic/sync' into...
[karo-tx-linux.git] / drivers / mfd / wm8994-core.c
1 /*
2  * wm8994-core.c  --  Device access for Wolfson WM8994
3  *
4  * Copyright 2009 Wolfson Microelectronics PLC.
5  *
6  * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7  *
8  *  This program is free software; you can redistribute  it and/or modify it
9  *  under  the terms of  the GNU General  Public License as published by the
10  *  Free Software Foundation;  either version 2 of the  License, or (at your
11  *  option) any later version.
12  *
13  */
14
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/slab.h>
18 #include <linux/i2c.h>
19 #include <linux/err.h>
20 #include <linux/delay.h>
21 #include <linux/mfd/core.h>
22 #include <linux/pm_runtime.h>
23 #include <linux/regmap.h>
24 #include <linux/regulator/consumer.h>
25 #include <linux/regulator/machine.h>
26
27 #include <linux/mfd/wm8994/core.h>
28 #include <linux/mfd/wm8994/pdata.h>
29 #include <linux/mfd/wm8994/registers.h>
30
31 #include "wm8994.h"
32
33 /**
34  * wm8994_reg_read: Read a single WM8994 register.
35  *
36  * @wm8994: Device to read from.
37  * @reg: Register to read.
38  */
39 int wm8994_reg_read(struct wm8994 *wm8994, unsigned short reg)
40 {
41         unsigned int val;
42         int ret;
43
44         ret = regmap_read(wm8994->regmap, reg, &val);
45
46         if (ret < 0)
47                 return ret;
48         else
49                 return val;
50 }
51 EXPORT_SYMBOL_GPL(wm8994_reg_read);
52
53 /**
54  * wm8994_bulk_read: Read multiple WM8994 registers
55  *
56  * @wm8994: Device to read from
57  * @reg: First register
58  * @count: Number of registers
59  * @buf: Buffer to fill.  The data will be returned big endian.
60  */
61 int wm8994_bulk_read(struct wm8994 *wm8994, unsigned short reg,
62                      int count, u16 *buf)
63 {
64         return regmap_bulk_read(wm8994->regmap, reg, buf, count);
65 }
66
67 /**
68  * wm8994_reg_write: Write a single WM8994 register.
69  *
70  * @wm8994: Device to write to.
71  * @reg: Register to write to.
72  * @val: Value to write.
73  */
74 int wm8994_reg_write(struct wm8994 *wm8994, unsigned short reg,
75                      unsigned short val)
76 {
77         return regmap_write(wm8994->regmap, reg, val);
78 }
79 EXPORT_SYMBOL_GPL(wm8994_reg_write);
80
81 /**
82  * wm8994_bulk_write: Write multiple WM8994 registers
83  *
84  * @wm8994: Device to write to
85  * @reg: First register
86  * @count: Number of registers
87  * @buf: Buffer to write from.  Data must be big-endian formatted.
88  */
89 int wm8994_bulk_write(struct wm8994 *wm8994, unsigned short reg,
90                       int count, const u16 *buf)
91 {
92         return regmap_raw_write(wm8994->regmap, reg, buf, count * sizeof(u16));
93 }
94 EXPORT_SYMBOL_GPL(wm8994_bulk_write);
95
96 /**
97  * wm8994_set_bits: Set the value of a bitfield in a WM8994 register
98  *
99  * @wm8994: Device to write to.
100  * @reg: Register to write to.
101  * @mask: Mask of bits to set.
102  * @val: Value to set (unshifted)
103  */
104 int wm8994_set_bits(struct wm8994 *wm8994, unsigned short reg,
105                     unsigned short mask, unsigned short val)
106 {
107         return regmap_update_bits(wm8994->regmap, reg, mask, val);
108 }
109 EXPORT_SYMBOL_GPL(wm8994_set_bits);
110
111 static struct mfd_cell wm8994_regulator_devs[] = {
112         {
113                 .name = "wm8994-ldo",
114                 .id = 1,
115                 .pm_runtime_no_callbacks = true,
116         },
117         {
118                 .name = "wm8994-ldo",
119                 .id = 2,
120                 .pm_runtime_no_callbacks = true,
121         },
122 };
123
124 static struct resource wm8994_codec_resources[] = {
125         {
126                 .start = WM8994_IRQ_TEMP_SHUT,
127                 .end   = WM8994_IRQ_TEMP_WARN,
128                 .flags = IORESOURCE_IRQ,
129         },
130 };
131
132 static struct resource wm8994_gpio_resources[] = {
133         {
134                 .start = WM8994_IRQ_GPIO(1),
135                 .end   = WM8994_IRQ_GPIO(11),
136                 .flags = IORESOURCE_IRQ,
137         },
138 };
139
140 static struct mfd_cell wm8994_devs[] = {
141         {
142                 .name = "wm8994-codec",
143                 .num_resources = ARRAY_SIZE(wm8994_codec_resources),
144                 .resources = wm8994_codec_resources,
145         },
146
147         {
148                 .name = "wm8994-gpio",
149                 .num_resources = ARRAY_SIZE(wm8994_gpio_resources),
150                 .resources = wm8994_gpio_resources,
151                 .pm_runtime_no_callbacks = true,
152         },
153 };
154
155 /*
156  * Supplies for the main bulk of CODEC; the LDO supplies are ignored
157  * and should be handled via the standard regulator API supply
158  * management.
159  */
160 static const char *wm1811_main_supplies[] = {
161         "DBVDD1",
162         "DBVDD2",
163         "DBVDD3",
164         "DCVDD",
165         "AVDD1",
166         "AVDD2",
167         "CPVDD",
168         "SPKVDD1",
169         "SPKVDD2",
170 };
171
172 static const char *wm8994_main_supplies[] = {
173         "DBVDD",
174         "DCVDD",
175         "AVDD1",
176         "AVDD2",
177         "CPVDD",
178         "SPKVDD1",
179         "SPKVDD2",
180 };
181
182 static const char *wm8958_main_supplies[] = {
183         "DBVDD1",
184         "DBVDD2",
185         "DBVDD3",
186         "DCVDD",
187         "AVDD1",
188         "AVDD2",
189         "CPVDD",
190         "SPKVDD1",
191         "SPKVDD2",
192 };
193
194 #ifdef CONFIG_PM
195 static int wm8994_suspend(struct device *dev)
196 {
197         struct wm8994 *wm8994 = dev_get_drvdata(dev);
198         int ret;
199
200         /* Don't actually go through with the suspend if the CODEC is
201          * still active (eg, for audio passthrough from CP. */
202         ret = wm8994_reg_read(wm8994, WM8994_POWER_MANAGEMENT_1);
203         if (ret < 0) {
204                 dev_err(dev, "Failed to read power status: %d\n", ret);
205         } else if (ret & WM8994_VMID_SEL_MASK) {
206                 dev_dbg(dev, "CODEC still active, ignoring suspend\n");
207                 return 0;
208         }
209
210         ret = wm8994_reg_read(wm8994, WM8994_POWER_MANAGEMENT_4);
211         if (ret < 0) {
212                 dev_err(dev, "Failed to read power status: %d\n", ret);
213         } else if (ret & (WM8994_AIF2ADCL_ENA | WM8994_AIF2ADCR_ENA |
214                           WM8994_AIF1ADC2L_ENA | WM8994_AIF1ADC2R_ENA |
215                           WM8994_AIF1ADC1L_ENA | WM8994_AIF1ADC1R_ENA)) {
216                 dev_dbg(dev, "CODEC still active, ignoring suspend\n");
217                 return 0;
218         }
219
220         ret = wm8994_reg_read(wm8994, WM8994_POWER_MANAGEMENT_5);
221         if (ret < 0) {
222                 dev_err(dev, "Failed to read power status: %d\n", ret);
223         } else if (ret & (WM8994_AIF2DACL_ENA | WM8994_AIF2DACR_ENA |
224                           WM8994_AIF1DAC2L_ENA | WM8994_AIF1DAC2R_ENA |
225                           WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA)) {
226                 dev_dbg(dev, "CODEC still active, ignoring suspend\n");
227                 return 0;
228         }
229
230         switch (wm8994->type) {
231         case WM8958:
232         case WM1811:
233                 ret = wm8994_reg_read(wm8994, WM8958_MIC_DETECT_1);
234                 if (ret < 0) {
235                         dev_err(dev, "Failed to read power status: %d\n", ret);
236                 } else if (ret & WM8958_MICD_ENA) {
237                         dev_dbg(dev, "CODEC still active, ignoring suspend\n");
238                         return 0;
239                 }
240                 break;
241         default:
242                 break;
243         }
244
245         switch (wm8994->type) {
246         case WM1811:
247                 ret = wm8994_reg_read(wm8994, WM8994_ANTIPOP_2);
248                 if (ret < 0) {
249                         dev_err(dev, "Failed to read jackdet: %d\n", ret);
250                 } else if (ret & WM1811_JACKDET_MODE_MASK) {
251                         dev_dbg(dev, "CODEC still active, ignoring suspend\n");
252                         return 0;
253                 }
254                 break;
255         default:
256                 break;
257         }
258
259         /* Disable LDO pulldowns while the device is suspended if we
260          * don't know that something will be driving them. */
261         if (!wm8994->ldo_ena_always_driven)
262                 wm8994_set_bits(wm8994, WM8994_PULL_CONTROL_2,
263                                 WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD,
264                                 WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD);
265
266         /* Explicitly put the device into reset in case regulators
267          * don't get disabled in order to ensure consistent restart.
268          */
269         wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET,
270                          wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET));
271
272         regcache_cache_only(wm8994->regmap, true);
273         regcache_mark_dirty(wm8994->regmap);
274
275         wm8994->suspended = true;
276
277         ret = regulator_bulk_disable(wm8994->num_supplies,
278                                      wm8994->supplies);
279         if (ret != 0) {
280                 dev_err(dev, "Failed to disable supplies: %d\n", ret);
281                 return ret;
282         }
283
284         return 0;
285 }
286
287 static int wm8994_resume(struct device *dev)
288 {
289         struct wm8994 *wm8994 = dev_get_drvdata(dev);
290         int ret;
291
292         /* We may have lied to the PM core about suspending */
293         if (!wm8994->suspended)
294                 return 0;
295
296         ret = regulator_bulk_enable(wm8994->num_supplies,
297                                     wm8994->supplies);
298         if (ret != 0) {
299                 dev_err(dev, "Failed to enable supplies: %d\n", ret);
300                 return ret;
301         }
302
303         regcache_cache_only(wm8994->regmap, false);
304         ret = regcache_sync(wm8994->regmap);
305         if (ret != 0) {
306                 dev_err(dev, "Failed to restore register map: %d\n", ret);
307                 goto err_enable;
308         }
309
310         /* Disable LDO pulldowns while the device is active */
311         wm8994_set_bits(wm8994, WM8994_PULL_CONTROL_2,
312                         WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD,
313                         0);
314
315         wm8994->suspended = false;
316
317         return 0;
318
319 err_enable:
320         regulator_bulk_disable(wm8994->num_supplies, wm8994->supplies);
321
322         return ret;
323 }
324 #endif
325
326 #ifdef CONFIG_REGULATOR
327 static int wm8994_ldo_in_use(struct wm8994_pdata *pdata, int ldo)
328 {
329         struct wm8994_ldo_pdata *ldo_pdata;
330
331         if (!pdata)
332                 return 0;
333
334         ldo_pdata = &pdata->ldo[ldo];
335
336         if (!ldo_pdata->init_data)
337                 return 0;
338
339         return ldo_pdata->init_data->num_consumer_supplies != 0;
340 }
341 #else
342 static int wm8994_ldo_in_use(struct wm8994_pdata *pdata, int ldo)
343 {
344         return 0;
345 }
346 #endif
347
348 static const __devinitdata struct reg_default wm8994_revc_patch[] = {
349         { 0x102, 0x3 },
350         { 0x56, 0x3 },
351         { 0x817, 0x0 },
352         { 0x102, 0x0 },
353 };
354
355 static const __devinitdata struct reg_default wm8958_reva_patch[] = {
356         { 0x102, 0x3 },
357         { 0xcb, 0x81 },
358         { 0x817, 0x0 },
359         { 0x102, 0x0 },
360 };
361
362 static const __devinitdata struct reg_default wm1811_reva_patch[] = {
363         { 0x102, 0x3 },
364         { 0x56, 0x7 },
365         { 0x5d, 0x7e },
366         { 0x5e, 0x0 },
367         { 0x102, 0x0 },
368 };
369
370 /*
371  * Instantiate the generic non-control parts of the device.
372  */
373 static __devinit int wm8994_device_init(struct wm8994 *wm8994, int irq)
374 {
375         struct wm8994_pdata *pdata = wm8994->dev->platform_data;
376         struct regmap_config *regmap_config;
377         const struct reg_default *regmap_patch = NULL;
378         const char *devname;
379         int ret, i, patch_regs;
380         int pulls = 0;
381
382         dev_set_drvdata(wm8994->dev, wm8994);
383
384         /* Add the on-chip regulators first for bootstrapping */
385         ret = mfd_add_devices(wm8994->dev, -1,
386                               wm8994_regulator_devs,
387                               ARRAY_SIZE(wm8994_regulator_devs),
388                               NULL, 0);
389         if (ret != 0) {
390                 dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
391                 goto err;
392         }
393
394         switch (wm8994->type) {
395         case WM1811:
396                 wm8994->num_supplies = ARRAY_SIZE(wm1811_main_supplies);
397                 break;
398         case WM8994:
399                 wm8994->num_supplies = ARRAY_SIZE(wm8994_main_supplies);
400                 break;
401         case WM8958:
402                 wm8994->num_supplies = ARRAY_SIZE(wm8958_main_supplies);
403                 break;
404         default:
405                 BUG();
406                 goto err;
407         }
408
409         wm8994->supplies = devm_kzalloc(wm8994->dev,
410                                         sizeof(struct regulator_bulk_data) *
411                                         wm8994->num_supplies, GFP_KERNEL);
412         if (!wm8994->supplies) {
413                 ret = -ENOMEM;
414                 goto err;
415         }
416
417         switch (wm8994->type) {
418         case WM1811:
419                 for (i = 0; i < ARRAY_SIZE(wm1811_main_supplies); i++)
420                         wm8994->supplies[i].supply = wm1811_main_supplies[i];
421                 break;
422         case WM8994:
423                 for (i = 0; i < ARRAY_SIZE(wm8994_main_supplies); i++)
424                         wm8994->supplies[i].supply = wm8994_main_supplies[i];
425                 break;
426         case WM8958:
427                 for (i = 0; i < ARRAY_SIZE(wm8958_main_supplies); i++)
428                         wm8994->supplies[i].supply = wm8958_main_supplies[i];
429                 break;
430         default:
431                 BUG();
432                 goto err;
433         }
434                 
435         ret = regulator_bulk_get(wm8994->dev, wm8994->num_supplies,
436                                  wm8994->supplies);
437         if (ret != 0) {
438                 dev_err(wm8994->dev, "Failed to get supplies: %d\n", ret);
439                 goto err;
440         }
441
442         ret = regulator_bulk_enable(wm8994->num_supplies,
443                                     wm8994->supplies);
444         if (ret != 0) {
445                 dev_err(wm8994->dev, "Failed to enable supplies: %d\n", ret);
446                 goto err_get;
447         }
448
449         ret = wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET);
450         if (ret < 0) {
451                 dev_err(wm8994->dev, "Failed to read ID register\n");
452                 goto err_enable;
453         }
454         switch (ret) {
455         case 0x1811:
456                 devname = "WM1811";
457                 if (wm8994->type != WM1811)
458                         dev_warn(wm8994->dev, "Device registered as type %d\n",
459                                  wm8994->type);
460                 wm8994->type = WM1811;
461                 break;
462         case 0x8994:
463                 devname = "WM8994";
464                 if (wm8994->type != WM8994)
465                         dev_warn(wm8994->dev, "Device registered as type %d\n",
466                                  wm8994->type);
467                 wm8994->type = WM8994;
468                 break;
469         case 0x8958:
470                 devname = "WM8958";
471                 if (wm8994->type != WM8958)
472                         dev_warn(wm8994->dev, "Device registered as type %d\n",
473                                  wm8994->type);
474                 wm8994->type = WM8958;
475                 break;
476         default:
477                 dev_err(wm8994->dev, "Device is not a WM8994, ID is %x\n",
478                         ret);
479                 ret = -EINVAL;
480                 goto err_enable;
481         }
482
483         ret = wm8994_reg_read(wm8994, WM8994_CHIP_REVISION);
484         if (ret < 0) {
485                 dev_err(wm8994->dev, "Failed to read revision register: %d\n",
486                         ret);
487                 goto err_enable;
488         }
489         wm8994->revision = ret;
490
491         switch (wm8994->type) {
492         case WM8994:
493                 switch (wm8994->revision) {
494                 case 0:
495                 case 1:
496                         dev_warn(wm8994->dev,
497                                  "revision %c not fully supported\n",
498                                  'A' + wm8994->revision);
499                         break;
500                 case 2:
501                 case 3:
502                         regmap_patch = wm8994_revc_patch;
503                         patch_regs = ARRAY_SIZE(wm8994_revc_patch);
504                         break;
505                 default:
506                         break;
507                 }
508                 break;
509
510         case WM8958:
511                 switch (wm8994->revision) {
512                 case 0:
513                         regmap_patch = wm8958_reva_patch;
514                         patch_regs = ARRAY_SIZE(wm8958_reva_patch);
515                         break;
516                 default:
517                         break;
518                 }
519                 break;
520
521         case WM1811:
522                 /* Revision C did not change the relevant layer */
523                 if (wm8994->revision > 1)
524                         wm8994->revision++;
525                 switch (wm8994->revision) {
526                 case 0:
527                 case 1:
528                 case 2:
529                 case 3:
530                         regmap_patch = wm1811_reva_patch;
531                         patch_regs = ARRAY_SIZE(wm1811_reva_patch);
532                         break;
533                 default:
534                         break;
535                 }
536                 break;
537
538         default:
539                 break;
540         }
541
542         dev_info(wm8994->dev, "%s revision %c\n", devname,
543                  'A' + wm8994->revision);
544
545         switch (wm8994->type) {
546         case WM1811:
547                 regmap_config = &wm1811_regmap_config;
548                 break;
549         case WM8994:
550                 regmap_config = &wm8994_regmap_config;
551                 break;
552         case WM8958:
553                 regmap_config = &wm8958_regmap_config;
554                 break;
555         default:
556                 dev_err(wm8994->dev, "Unknown device type %d\n", wm8994->type);
557                 return -EINVAL;
558         }
559
560         ret = regmap_reinit_cache(wm8994->regmap, regmap_config);
561         if (ret != 0) {
562                 dev_err(wm8994->dev, "Failed to reinit register cache: %d\n",
563                         ret);
564                 return ret;
565         }
566
567         if (regmap_patch) {
568                 ret = regmap_register_patch(wm8994->regmap, regmap_patch,
569                                             patch_regs);
570                 if (ret != 0) {
571                         dev_err(wm8994->dev, "Failed to register patch: %d\n",
572                                 ret);
573                         goto err;
574                 }
575         }
576
577         if (pdata) {
578                 wm8994->irq_base = pdata->irq_base;
579                 wm8994->gpio_base = pdata->gpio_base;
580
581                 /* GPIO configuration is only applied if it's non-zero */
582                 for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) {
583                         if (pdata->gpio_defaults[i]) {
584                                 wm8994_set_bits(wm8994, WM8994_GPIO_1 + i,
585                                                 0xffff,
586                                                 pdata->gpio_defaults[i]);
587                         }
588                 }
589
590                 wm8994->ldo_ena_always_driven = pdata->ldo_ena_always_driven;
591
592                 if (pdata->spkmode_pu)
593                         pulls |= WM8994_SPKMODE_PU;
594         }
595
596         /* Disable unneeded pulls */
597         wm8994_set_bits(wm8994, WM8994_PULL_CONTROL_2,
598                         WM8994_LDO1ENA_PD | WM8994_LDO2ENA_PD |
599                         WM8994_SPKMODE_PU | WM8994_CSNADDR_PD,
600                         pulls);
601
602         /* In some system designs where the regulators are not in use,
603          * we can achieve a small reduction in leakage currents by
604          * floating LDO outputs.  This bit makes no difference if the
605          * LDOs are enabled, it only affects cases where the LDOs were
606          * in operation and are then disabled.
607          */
608         for (i = 0; i < WM8994_NUM_LDO_REGS; i++) {
609                 if (wm8994_ldo_in_use(pdata, i))
610                         wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
611                                         WM8994_LDO1_DISCH, WM8994_LDO1_DISCH);
612                 else
613                         wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
614                                         WM8994_LDO1_DISCH, 0);
615         }
616
617         wm8994_irq_init(wm8994);
618
619         ret = mfd_add_devices(wm8994->dev, -1,
620                               wm8994_devs, ARRAY_SIZE(wm8994_devs),
621                               NULL, 0);
622         if (ret != 0) {
623                 dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
624                 goto err_irq;
625         }
626
627         pm_runtime_enable(wm8994->dev);
628         pm_runtime_resume(wm8994->dev);
629
630         return 0;
631
632 err_irq:
633         wm8994_irq_exit(wm8994);
634 err_enable:
635         regulator_bulk_disable(wm8994->num_supplies,
636                                wm8994->supplies);
637 err_get:
638         regulator_bulk_free(wm8994->num_supplies, wm8994->supplies);
639 err:
640         mfd_remove_devices(wm8994->dev);
641         return ret;
642 }
643
644 static __devexit void wm8994_device_exit(struct wm8994 *wm8994)
645 {
646         pm_runtime_disable(wm8994->dev);
647         mfd_remove_devices(wm8994->dev);
648         wm8994_irq_exit(wm8994);
649         regulator_bulk_disable(wm8994->num_supplies,
650                                wm8994->supplies);
651         regulator_bulk_free(wm8994->num_supplies, wm8994->supplies);
652 }
653
654 static const struct of_device_id wm8994_of_match[] = {
655         { .compatible = "wlf,wm1811", },
656         { .compatible = "wlf,wm8994", },
657         { .compatible = "wlf,wm8958", },
658         { }
659 };
660 MODULE_DEVICE_TABLE(of, wm8994_of_match);
661
662 static __devinit int wm8994_i2c_probe(struct i2c_client *i2c,
663                                       const struct i2c_device_id *id)
664 {
665         struct wm8994 *wm8994;
666         int ret;
667
668         wm8994 = devm_kzalloc(&i2c->dev, sizeof(struct wm8994), GFP_KERNEL);
669         if (wm8994 == NULL)
670                 return -ENOMEM;
671
672         i2c_set_clientdata(i2c, wm8994);
673         wm8994->dev = &i2c->dev;
674         wm8994->irq = i2c->irq;
675         wm8994->type = id->driver_data;
676
677         wm8994->regmap = devm_regmap_init_i2c(i2c, &wm8994_base_regmap_config);
678         if (IS_ERR(wm8994->regmap)) {
679                 ret = PTR_ERR(wm8994->regmap);
680                 dev_err(wm8994->dev, "Failed to allocate register map: %d\n",
681                         ret);
682                 return ret;
683         }
684
685         return wm8994_device_init(wm8994, i2c->irq);
686 }
687
688 static __devexit int wm8994_i2c_remove(struct i2c_client *i2c)
689 {
690         struct wm8994 *wm8994 = i2c_get_clientdata(i2c);
691
692         wm8994_device_exit(wm8994);
693
694         return 0;
695 }
696
697 static const struct i2c_device_id wm8994_i2c_id[] = {
698         { "wm1811", WM1811 },
699         { "wm1811a", WM1811 },
700         { "wm8994", WM8994 },
701         { "wm8958", WM8958 },
702         { }
703 };
704 MODULE_DEVICE_TABLE(i2c, wm8994_i2c_id);
705
706 static UNIVERSAL_DEV_PM_OPS(wm8994_pm_ops, wm8994_suspend, wm8994_resume,
707                             NULL);
708
709 static struct i2c_driver wm8994_i2c_driver = {
710         .driver = {
711                 .name = "wm8994",
712                 .owner = THIS_MODULE,
713                 .pm = &wm8994_pm_ops,
714                 .of_match_table = wm8994_of_match,
715         },
716         .probe = wm8994_i2c_probe,
717         .remove = __devexit_p(wm8994_i2c_remove),
718         .id_table = wm8994_i2c_id,
719 };
720
721 static int __init wm8994_i2c_init(void)
722 {
723         int ret;
724
725         ret = i2c_add_driver(&wm8994_i2c_driver);
726         if (ret != 0)
727                 pr_err("Failed to register wm8994 I2C driver: %d\n", ret);
728
729         return ret;
730 }
731 module_init(wm8994_i2c_init);
732
733 static void __exit wm8994_i2c_exit(void)
734 {
735         i2c_del_driver(&wm8994_i2c_driver);
736 }
737 module_exit(wm8994_i2c_exit);
738
739 MODULE_DESCRIPTION("Core support for the WM8994 audio CODEC");
740 MODULE_LICENSE("GPL");
741 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");