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