summaryrefslogtreecommitdiff
path: root/ANDROID_3.4.5/drivers/mfd/wm8994-core.c
diff options
context:
space:
mode:
authorKevin2014-11-15 10:00:36 +0800
committerKevin2014-11-15 10:00:36 +0800
commit9d40ac5867b9aefe0722bc1f110b965ff294d30d (patch)
treede942df665fac4bac0d9cb7ae86910fe937b0c1a /ANDROID_3.4.5/drivers/mfd/wm8994-core.c
parent392e8802486cb573b916e746010e141a75f507e6 (diff)
downloadFOSSEE-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.c38
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;