2 * wm8994-core.c -- Device access for Wolfson WM8994
4 * Copyright 2009 Wolfson Microelectronics PLC.
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
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.
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>
25 #include <linux/mfd/wm8994/core.h>
26 #include <linux/mfd/wm8994/pdata.h>
27 #include <linux/mfd/wm8994/registers.h>
28 #include <mach/gpio.h>
29 #include <mach/iomux.h>
31 #ifdef CONFIG_PHONE_INCALL_IS_SUSPEND
32 #include <sound/soc.h>
36 #define DBG(x...) printk(KERN_DEBUG x)
38 #define DBG(x...) do { } while (0)
40 static int wm8994_read(struct wm8994 *wm8994, unsigned short reg,
41 int bytes, void *dest)
49 ret = wm8994->read_dev(wm8994, reg, bytes, dest);
53 for (i = 0; i < bytes / 2; i++) {
54 dev_vdbg(wm8994->dev, "Read %04x from R%d(0x%x)\n",
55 be16_to_cpu(buf[i]), reg + i, reg + i);
62 * wm8994_reg_read: Read a single WM8994 register.
64 * @wm8994: Device to read from.
65 * @reg: Register to read.
67 int wm8994_reg_read(struct wm8994 *wm8994, unsigned short reg)
72 mutex_lock(&wm8994->io_lock);
74 ret = wm8994_read(wm8994, reg, 2, &val);
76 mutex_unlock(&wm8994->io_lock);
77 DBG("%s:0x%04x = 0x%04x\n",__FUNCTION__,reg,be16_to_cpu(val));
81 return be16_to_cpu(val);
83 EXPORT_SYMBOL_GPL(wm8994_reg_read);
86 * wm8994_bulk_read: Read multiple WM8994 registers
88 * @wm8994: Device to read from
89 * @reg: First register
90 * @count: Number of registers
91 * @buf: Buffer to fill. The data will be returned big endian.
93 int wm8994_bulk_read(struct wm8994 *wm8994, unsigned short reg,
98 mutex_lock(&wm8994->io_lock);
100 ret = wm8994_read(wm8994, reg, count * 2, buf);
102 mutex_unlock(&wm8994->io_lock);
106 EXPORT_SYMBOL_GPL(wm8994_bulk_read);
108 static int wm8994_write(struct wm8994 *wm8994, unsigned short reg,
109 int bytes, const void *src)
111 const u16 *buf = src;
117 for (i = 0; i < bytes / 2; i++) {
118 dev_vdbg(wm8994->dev, "Write %04x to R%d(0x%x)\n",
119 be16_to_cpu(buf[i]), reg + i, reg + i);
122 return wm8994->write_dev(wm8994, reg, bytes, src);
126 * wm8994_reg_write: Write a single WM8994 register.
128 * @wm8994: Device to write to.
129 * @reg: Register to write to.
130 * @val: Value to write.
132 int wm8994_reg_write(struct wm8994 *wm8994, unsigned short reg,
137 val = cpu_to_be16(val);
138 DBG("%s:0x%04x = 0x%04x\n",__FUNCTION__,reg,val);
139 mutex_lock(&wm8994->io_lock);
141 ret = wm8994_write(wm8994, reg, 2, &val);
143 mutex_unlock(&wm8994->io_lock);
147 EXPORT_SYMBOL_GPL(wm8994_reg_write);
150 * wm8994_bulk_write: Write multiple WM8994 registers
152 * @wm8994: Device to write to
153 * @reg: First register
154 * @count: Number of registers
155 * @buf: Buffer to write from. Data must be big-endian formatted.
157 int wm8994_bulk_write(struct wm8994 *wm8994, unsigned short reg,
158 int count, const u16 *buf)
162 mutex_lock(&wm8994->io_lock);
164 ret = wm8994_write(wm8994, reg, count * 2, buf);
166 mutex_unlock(&wm8994->io_lock);
170 EXPORT_SYMBOL_GPL(wm8994_bulk_write);
173 * wm8994_set_bits: Set the value of a bitfield in a WM8994 register
175 * @wm8994: Device to write to.
176 * @reg: Register to write to.
177 * @mask: Mask of bits to set.
178 * @val: Value to set (unshifted)
180 int wm8994_set_bits(struct wm8994 *wm8994, unsigned short reg,
181 unsigned short mask, unsigned short val)
186 mutex_lock(&wm8994->io_lock);
188 ret = wm8994_read(wm8994, reg, 2, &r);
199 ret = wm8994_write(wm8994, reg, 2, &r);
202 mutex_unlock(&wm8994->io_lock);
206 EXPORT_SYMBOL_GPL(wm8994_set_bits);
208 static struct mfd_cell wm8994_regulator_devs[] = {
210 .name = "wm8994-ldo",
212 .pm_runtime_no_callbacks = true,
215 .name = "wm8994-ldo",
217 .pm_runtime_no_callbacks = true,
221 static struct resource wm8994_codec_resources[] = {
223 .start = WM8994_IRQ_TEMP_SHUT,
224 .end = WM8994_IRQ_TEMP_WARN,
225 .flags = IORESOURCE_IRQ,
229 static struct resource wm8994_gpio_resources[] = {
231 .start = WM8994_IRQ_GPIO(1),
232 .end = WM8994_IRQ_GPIO(11),
233 .flags = IORESOURCE_IRQ,
237 static struct mfd_cell wm8994_devs[] = {
239 .name = "wm8994-codec",
240 .num_resources = ARRAY_SIZE(wm8994_codec_resources),
241 .resources = wm8994_codec_resources,
245 .name = "wm8994-gpio",
246 .num_resources = ARRAY_SIZE(wm8994_gpio_resources),
247 .resources = wm8994_gpio_resources,
248 .pm_runtime_no_callbacks = true,
253 * Supplies for the main bulk of CODEC; the LDO supplies are ignored
254 * and should be handled via the standard regulator API supply
257 static const char *wm8994_main_supplies[] = {
267 static const char *wm8958_main_supplies[] = {
280 static int wm8994_suspend(struct device *dev)
282 struct wm8994 *wm8994 = dev_get_drvdata(dev);
284 #ifdef CONFIG_PHONE_INCALL_IS_SUSPEND
285 printk("on wm8994-core.c wm8994_suspend\n");
286 if(snd_soc_incall_status(0,0))
288 DBG("incalling cannot suspend\n");
292 /* Don't actually go through with the suspend if the CODEC is
293 * still active (eg, for audio passthrough from CP. */
294 ret = wm8994_reg_read(wm8994, WM8994_POWER_MANAGEMENT_1);
296 dev_err(dev, "Failed to read power status: %d\n", ret);
297 } else if (ret & WM8994_VMID_SEL_MASK) {
298 dev_dbg(dev, "CODEC still active, ignoring suspend\n");
302 /* GPIO configuration state is saved here since we may be configuring
303 * the GPIO alternate functions even if we're not using the gpiolib
306 ret = wm8994_read(wm8994, WM8994_GPIO_1, WM8994_NUM_GPIO_REGS * 2,
309 dev_err(dev, "Failed to save GPIO registers: %d\n", ret);
311 /* For similar reasons we also stash the regulator states */
312 ret = wm8994_read(wm8994, WM8994_LDO_1, WM8994_NUM_LDO_REGS * 2,
315 dev_err(dev, "Failed to save LDO registers: %d\n", ret);
317 /* Explicitly put the device into reset in case regulators
318 * don't get disabled in order to ensure consistent restart.
320 wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET, 0x8994);
322 wm8994->suspended = true;
324 ret = regulator_bulk_disable(wm8994->num_supplies,
327 dev_err(dev, "Failed to disable supplies: %d\n", ret);
334 static int wm8994_resume(struct device *dev)
336 struct wm8994 *wm8994 = dev_get_drvdata(dev);
338 #ifdef CONFIG_PHONE_INCALL_IS_SUSPEND
339 printk("on wm8994-core.c wm8994_resume\n");
340 if(snd_soc_incall_status(0,0))
342 DBG("incalling cannot resume\n");
346 /* We may have lied to the PM core about suspending */
347 if (!wm8994->suspended)
350 ret = regulator_bulk_enable(wm8994->num_supplies,
353 dev_err(dev, "Failed to enable supplies: %d\n", ret);
357 ret = wm8994_write(wm8994, WM8994_INTERRUPT_STATUS_1_MASK,
358 WM8994_NUM_IRQ_REGS * 2, &wm8994->irq_masks_cur);
360 dev_err(dev, "Failed to restore interrupt masks: %d\n", ret);
362 ret = wm8994_write(wm8994, WM8994_LDO_1, WM8994_NUM_LDO_REGS * 2,
365 dev_err(dev, "Failed to restore LDO registers: %d\n", ret);
367 ret = wm8994_write(wm8994, WM8994_GPIO_1, WM8994_NUM_GPIO_REGS * 2,
370 dev_err(dev, "Failed to restore GPIO registers: %d\n", ret);
372 wm8994->suspended = false;
378 #ifdef CONFIG_REGULATOR
379 static int wm8994_ldo_in_use(struct wm8994_pdata *pdata, int ldo)
381 struct wm8994_ldo_pdata *ldo_pdata;
386 ldo_pdata = &pdata->ldo[ldo];
388 if (!ldo_pdata->init_data)
391 return ldo_pdata->init_data->num_consumer_supplies != 0;
394 static int wm8994_ldo_in_use(struct wm8994_pdata *pdata, int ldo)
401 * Instantiate the generic non-control parts of the device.
403 static int wm8994_device_init(struct wm8994 *wm8994, int irq)
405 struct wm8994_pdata *pdata = wm8994->dev->platform_data;
409 mutex_init(&wm8994->io_lock);
410 dev_set_drvdata(wm8994->dev, wm8994);
412 /* Add the on-chip regulators first for bootstrapping */
413 ret = mfd_add_devices(wm8994->dev, -1,
414 wm8994_regulator_devs,
415 ARRAY_SIZE(wm8994_regulator_devs),
418 dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
422 switch (wm8994->type) {
424 wm8994->num_supplies = ARRAY_SIZE(wm8994_main_supplies);
427 wm8994->num_supplies = ARRAY_SIZE(wm8958_main_supplies);
434 wm8994->supplies = kzalloc(sizeof(struct regulator_bulk_data) *
435 wm8994->num_supplies,
437 if (!wm8994->supplies) {
442 switch (wm8994->type) {
444 for (i = 0; i < ARRAY_SIZE(wm8994_main_supplies); i++)
445 wm8994->supplies[i].supply = wm8994_main_supplies[i];
448 for (i = 0; i < ARRAY_SIZE(wm8958_main_supplies); i++)
449 wm8994->supplies[i].supply = wm8958_main_supplies[i];
456 ret = regulator_bulk_get(wm8994->dev, wm8994->num_supplies,
459 dev_err(wm8994->dev, "Failed to get supplies: %d\n", ret);
463 ret = regulator_bulk_enable(wm8994->num_supplies,
466 dev_err(wm8994->dev, "Failed to enable supplies: %d\n", ret);
470 ret = wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET);
472 dev_err(wm8994->dev, "Failed to read ID register\n");
478 if (wm8994->type != WM8994)
479 dev_warn(wm8994->dev, "Device registered as type %d\n",
481 wm8994->type = WM8994;
485 if (wm8994->type != WM8958)
486 dev_warn(wm8994->dev, "Device registered as type %d\n",
488 wm8994->type = WM8958;
491 dev_err(wm8994->dev, "Device is not a WM8994, ID is %x\n",
497 ret = wm8994_reg_read(wm8994, WM8994_CHIP_REVISION);
499 dev_err(wm8994->dev, "Failed to read revision register: %d\n",
507 if (wm8994->type == WM8994)
508 dev_warn(wm8994->dev,
509 "revision %c not fully supported\n",
516 dev_info(wm8994->dev, "%s revision %c\n", devname, 'A' + ret);
519 wm8994->irq_base = pdata->irq_base;
520 wm8994->gpio_base = pdata->gpio_base;
522 /* GPIO configuration is only applied if it's non-zero */
523 for (i = 0; i < ARRAY_SIZE(pdata->gpio_defaults); i++) {
524 if (pdata->gpio_defaults[i]) {
525 wm8994_set_bits(wm8994, WM8994_GPIO_1 + i,
527 pdata->gpio_defaults[i]);
532 /* In some system designs where the regulators are not in use,
533 * we can achieve a small reduction in leakage currents by
534 * floating LDO outputs. This bit makes no difference if the
535 * LDOs are enabled, it only affects cases where the LDOs were
536 * in operation and are then disabled.
538 for (i = 0; i < WM8994_NUM_LDO_REGS; i++) {
539 if (wm8994_ldo_in_use(pdata, i))
540 wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
541 WM8994_LDO1_DISCH, WM8994_LDO1_DISCH);
543 wm8994_set_bits(wm8994, WM8994_LDO_1 + i,
544 WM8994_LDO1_DISCH, 0);
547 wm8994_irq_init(wm8994);
549 ret = mfd_add_devices(wm8994->dev, -1,
550 wm8994_devs, ARRAY_SIZE(wm8994_devs),
553 dev_err(wm8994->dev, "Failed to add children: %d\n", ret);
557 pm_runtime_enable(wm8994->dev);
558 pm_runtime_resume(wm8994->dev);
563 wm8994_irq_exit(wm8994);
565 regulator_bulk_disable(wm8994->num_supplies,
568 regulator_bulk_free(wm8994->num_supplies, wm8994->supplies);
570 kfree(wm8994->supplies);
572 mfd_remove_devices(wm8994->dev);
577 static void wm8994_device_exit(struct wm8994 *wm8994)
579 pm_runtime_disable(wm8994->dev);
580 mfd_remove_devices(wm8994->dev);
581 wm8994_irq_exit(wm8994);
582 regulator_bulk_disable(wm8994->num_supplies,
584 regulator_bulk_free(wm8994->num_supplies, wm8994->supplies);
585 kfree(wm8994->supplies);
589 static int wm8994_i2c_read_device(struct wm8994 *wm8994, unsigned short reg,
590 int bytes, void *dest)
592 struct i2c_client *i2c = wm8994->control_data;
594 u16 r = cpu_to_be16(reg);
596 ret = i2c_master_send(i2c, (unsigned char *)&r, 2);
602 ret = i2c_master_recv(i2c, dest, bytes);
610 static int wm8994_i2c_write_device(struct wm8994 *wm8994, unsigned short reg,
611 int bytes, const void *src)
614 struct i2c_client *i2c = wm8994->control_data;
616 unsigned char msg[bytes + 2];
619 reg = cpu_to_be16(reg);
620 memcpy(&msg[0], ®, 2);
621 memcpy(&msg[2], src, bytes);
623 xfer.addr = i2c->addr;
624 xfer.flags = i2c->flags;
625 xfer.len = bytes + 2;
626 xfer.buf = (char *)msg;
627 xfer.scl_rate = 100 * 1000;
628 xfer.udelay = i2c->udelay;
631 ret = i2c_transfer(i2c->adapter, &xfer, 1);
640 static int wm8994_i2c_probe(struct i2c_client *i2c,
641 const struct i2c_device_id *id)
643 struct wm8994 *wm8994;
645 wm8994 = kzalloc(sizeof(struct wm8994), GFP_KERNEL);
649 i2c_set_clientdata(i2c, wm8994);
650 wm8994->dev = &i2c->dev;
651 wm8994->control_data = i2c;
652 wm8994->read_dev = wm8994_i2c_read_device;
653 wm8994->write_dev = wm8994_i2c_write_device;
654 wm8994->irq = i2c->irq;
655 wm8994->type = id->driver_data;
657 return wm8994_device_init(wm8994, i2c->irq);
660 static int wm8994_i2c_remove(struct i2c_client *i2c)
662 struct wm8994 *wm8994 = i2c_get_clientdata(i2c);
664 wm8994_device_exit(wm8994);
669 static void wm8994_i2c_shutdown(struct i2c_client *i2c)
671 struct wm8994 *wm8994 = i2c_get_clientdata(i2c);
672 struct wm8994_pdata *pdata = wm8994->dev->platform_data;
674 DBG("%s----%d\n",__FUNCTION__,__LINE__);
677 gpio_direction_output(pdata->PA_control_pin,GPIO_LOW);
678 if (gpio_is_valid(pdata->PA_control_pin))
679 gpio_free(pdata->PA_control_pin);
683 static const struct i2c_device_id wm8994_i2c_id[] = {
684 { "wm8994", WM8994 },
685 { "wm8958", WM8958 },
688 MODULE_DEVICE_TABLE(i2c, wm8994_i2c_id);
690 static UNIVERSAL_DEV_PM_OPS(wm8994_pm_ops, wm8994_suspend, wm8994_resume,
693 static struct i2c_driver wm8994_i2c_driver = {
696 .owner = THIS_MODULE,
697 .pm = &wm8994_pm_ops,
699 .probe = wm8994_i2c_probe,
700 .remove = wm8994_i2c_remove,
701 .shutdown = wm8994_i2c_shutdown,
702 .id_table = wm8994_i2c_id,
705 static int __init wm8994_i2c_init(void)
709 ret = i2c_add_driver(&wm8994_i2c_driver);
711 pr_err("Failed to register wm8994 I2C driver: %d\n", ret);
715 module_init(wm8994_i2c_init);
717 static void __exit wm8994_i2c_exit(void)
719 i2c_del_driver(&wm8994_i2c_driver);
721 module_exit(wm8994_i2c_exit);
723 MODULE_DESCRIPTION("Core support for the WM8994 audio CODEC");
724 MODULE_LICENSE("GPL");
725 MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");