diff options
author | Kevin | 2014-11-15 10:00:36 +0800 |
---|---|---|
committer | Kevin | 2014-11-15 10:00:36 +0800 |
commit | 9d40ac5867b9aefe0722bc1f110b965ff294d30d (patch) | |
tree | de942df665fac4bac0d9cb7ae86910fe937b0c1a /ANDROID_3.4.5/drivers/mfd/wm8994-core.c | |
parent | 392e8802486cb573b916e746010e141a75f507e6 (diff) | |
download | FOSSEE-netbook-kernel-source-9d40ac5867b9aefe0722bc1f110b965ff294d30d.tar.gz FOSSEE-netbook-kernel-source-9d40ac5867b9aefe0722bc1f110b965ff294d30d.tar.bz2 FOSSEE-netbook-kernel-source-9d40ac5867b9aefe0722bc1f110b965ff294d30d.zip |
add via modify part source code for wm8880 4.4 kitkat
Diffstat (limited to 'ANDROID_3.4.5/drivers/mfd/wm8994-core.c')
-rw-r--r-- | ANDROID_3.4.5/drivers/mfd/wm8994-core.c | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/ANDROID_3.4.5/drivers/mfd/wm8994-core.c b/ANDROID_3.4.5/drivers/mfd/wm8994-core.c index 9d7ca1e9..98ff03f5 100644 --- a/ANDROID_3.4.5/drivers/mfd/wm8994-core.c +++ b/ANDROID_3.4.5/drivers/mfd/wm8994-core.c @@ -203,7 +203,7 @@ static int wm8994_suspend(struct device *dev) 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"); + dev_warn(dev, "CODEC still active, ignoring suspend [%d]\n", __LINE__); return 0; } @@ -213,17 +213,16 @@ static int wm8994_suspend(struct device *dev) } else if (ret & (WM8994_AIF2ADCL_ENA | WM8994_AIF2ADCR_ENA | WM8994_AIF1ADC2L_ENA | WM8994_AIF1ADC2R_ENA | WM8994_AIF1ADC1L_ENA | WM8994_AIF1ADC1R_ENA)) { - dev_dbg(dev, "CODEC still active, ignoring suspend\n"); + dev_warn(dev, "CODEC still active, ignoring suspend [%d]\n", __LINE__); return 0; } ret = wm8994_reg_read(wm8994, WM8994_POWER_MANAGEMENT_5); if (ret < 0) { dev_err(dev, "Failed to read power status: %d\n", ret); - } else if (ret & (WM8994_AIF2DACL_ENA | WM8994_AIF2DACR_ENA | - WM8994_AIF1DAC2L_ENA | WM8994_AIF1DAC2R_ENA | + } else if (ret & (WM8994_AIF1DAC2L_ENA | WM8994_AIF1DAC2R_ENA | WM8994_AIF1DAC1L_ENA | WM8994_AIF1DAC1R_ENA)) { - dev_dbg(dev, "CODEC still active, ignoring suspend\n"); + dev_warn(dev, "CODEC still active, ignoring suspend [%d]\n", __LINE__); return 0; } @@ -234,7 +233,7 @@ static int wm8994_suspend(struct device *dev) if (ret < 0) { dev_err(dev, "Failed to read power status: %d\n", ret); } else if (ret & WM8958_MICD_ENA) { - dev_dbg(dev, "CODEC still active, ignoring suspend\n"); + dev_warn(dev, "CODEC still active, ignoring suspend\n"); return 0; } break; @@ -248,7 +247,7 @@ static int wm8994_suspend(struct device *dev) if (ret < 0) { dev_err(dev, "Failed to read jackdet: %d\n", ret); } else if (ret & WM1811_JACKDET_MODE_MASK) { - dev_dbg(dev, "CODEC still active, ignoring suspend\n"); + dev_warn(dev, "CODEC still active, ignoring suspend\n"); return 0; } break; @@ -262,7 +261,7 @@ static int wm8994_suspend(struct device *dev) if (ret < 0) { dev_err(dev, "Failed to read jackdet: %d\n", ret); } else if (ret & WM1811_JACKDET_MODE_MASK) { - dev_dbg(dev, "CODEC still active, ignoring suspend\n"); + dev_warn(dev, "CODEC still active, ignoring suspend\n"); return 0; } break; @@ -302,6 +301,7 @@ static int wm8994_resume(struct device *dev) { struct wm8994 *wm8994 = dev_get_drvdata(dev); int ret; + int retry = 0; /* We may have lied to the PM core about suspending */ if (!wm8994->suspended) @@ -315,9 +315,22 @@ static int wm8994_resume(struct device *dev) } regcache_cache_only(wm8994->regmap, false); - ret = regcache_sync(wm8994->regmap); - if (ret != 0) { - dev_err(dev, "Failed to restore register map: %d\n", ret); + //ret = regcache_sync(wm8994->regmap); + //if (ret != 0) { + // dev_err(dev, "Failed to restore register map: %d\n", ret); + // goto err_enable; + //} + + for (retry = 0; retry < 50; retry++) { + ret = regcache_sync(wm8994->regmap); + if (ret != 0) + dev_err(dev, "Failed to restore register map: %d, retry count: %d\n", ret, retry); + else + break; + msleep(50); + } + if (retry == 50) { + dev_err(dev, "Finally failed to restore register map: %d\n", ret); goto err_enable; } @@ -556,6 +569,9 @@ static __devinit int wm8994_device_init(struct wm8994 *wm8994, int irq) dev_info(wm8994->dev, "%s revision %c\n", devname, 'A' + wm8994->revision); + wm8994_reg_write(wm8994, WM8994_SOFTWARE_RESET, + wm8994_reg_read(wm8994, WM8994_SOFTWARE_RESET)); + switch (wm8994->type) { case WM1811: regmap_config = &wm1811_regmap_config; |