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