Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 233775
b: refs/heads/master
c: 77bd70e
h: refs/heads/master
i:
  233773: fcb63ed
  233771: af4b8f5
  233767: b982a1d
  233759: 1019768
v: v3
  • Loading branch information
Mark Brown authored and Samuel Ortiz committed Mar 2, 2011
1 parent 9f406f5 commit 9d92a84
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 73ee6524d55444dc80c691ff8602e08940df3d47
refs/heads/master: 77bd70e9009eab6dbdef3ee08afe87ab26df8dac
18 changes: 18 additions & 0 deletions trunk/drivers/mfd/wm8994-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,16 @@ static int wm8994_suspend(struct device *dev)
struct wm8994 *wm8994 = dev_get_drvdata(dev);
int ret;

/* Don't actually go through with the suspend if the CODEC is
* still active (eg, for audio passthrough from CP. */
ret = wm8994_reg_read(wm8994, WM8994_POWER_MANAGEMENT_1);
if (ret < 0) {
dev_err(dev, "Failed to read power status: %d\n", ret);
} else if (ret & WM8994_VMID_SEL_MASK) {
dev_dbg(dev, "CODEC still active, ignoring suspend\n");
return 0;
}

/* GPIO configuration state is saved here since we may be configuring
* the GPIO alternate functions even if we're not using the gpiolib
* driver for them.
Expand All @@ -261,6 +271,8 @@ static int wm8994_suspend(struct device *dev)
if (ret < 0)
dev_err(dev, "Failed to save LDO registers: %d\n", ret);

wm8994->suspended = true;

ret = regulator_bulk_disable(wm8994->num_supplies,
wm8994->supplies);
if (ret != 0) {
Expand All @@ -276,6 +288,10 @@ static int wm8994_resume(struct device *dev)
struct wm8994 *wm8994 = dev_get_drvdata(dev);
int ret;

/* We may have lied to the PM core about suspending */
if (!wm8994->suspended)
return 0;

ret = regulator_bulk_enable(wm8994->num_supplies,
wm8994->supplies);
if (ret != 0) {
Expand All @@ -298,6 +314,8 @@ static int wm8994_resume(struct device *dev)
if (ret < 0)
dev_err(dev, "Failed to restore GPIO registers: %d\n", ret);

wm8994->suspended = false;

return 0;
}
#endif
Expand Down
1 change: 1 addition & 0 deletions trunk/include/linux/mfd/wm8994/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ struct wm8994 {
u16 irq_masks_cache[WM8994_NUM_IRQ_REGS];

/* Used over suspend/resume */
bool suspended;
u16 ldo_regs[WM8994_NUM_LDO_REGS];
u16 gpio_regs[WM8994_NUM_GPIO_REGS];

Expand Down

0 comments on commit 9d92a84

Please sign in to comment.