Merge remote-tracking branches 'asoc/topic/tlv320aic3x', 'asoc/topic/width', 'asoc/topic/wm0010', 'asoc/topic/wm8904' and 'asoc/topic/wm8962' into asoc-next
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/gcd.h>
|
||||
@@ -2586,16 +2587,16 @@ static int wm8962_hw_params(struct snd_pcm_substream *substream,
|
||||
if (wm8962->lrclk % 8000 == 0)
|
||||
adctl3 |= WM8962_SAMPLE_RATE_INT_MODE;
|
||||
|
||||
switch (params_format(params)) {
|
||||
case SNDRV_PCM_FORMAT_S16_LE:
|
||||
switch (params_width(params)) {
|
||||
case 16:
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S20_3LE:
|
||||
case 20:
|
||||
aif0 |= 0x4;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
case 24:
|
||||
aif0 |= 0x8;
|
||||
break;
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
case 32:
|
||||
aif0 |= 0xc;
|
||||
break;
|
||||
default:
|
||||
@@ -3541,6 +3542,8 @@ static int wm8962_set_pdata_from_of(struct i2c_client *i2c,
|
||||
pdata->gpio_init[i] = 0x0;
|
||||
}
|
||||
|
||||
pdata->mclk = devm_clk_get(&i2c->dev, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3572,6 +3575,14 @@ static int wm8962_i2c_probe(struct i2c_client *i2c,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Mark the mclk pointer to NULL if no mclk assigned */
|
||||
if (IS_ERR(wm8962->pdata.mclk)) {
|
||||
/* But do not ignore the request for probe defer */
|
||||
if (PTR_ERR(wm8962->pdata.mclk) == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
wm8962->pdata.mclk = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(wm8962->supplies); i++)
|
||||
wm8962->supplies[i].supply = wm8962_supply_names[i];
|
||||
|
||||
@@ -3780,6 +3791,12 @@ static int wm8962_runtime_resume(struct device *dev)
|
||||
struct wm8962_priv *wm8962 = dev_get_drvdata(dev);
|
||||
int ret;
|
||||
|
||||
ret = clk_prepare_enable(wm8962->pdata.mclk);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to enable MCLK: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = regulator_bulk_enable(ARRAY_SIZE(wm8962->supplies),
|
||||
wm8962->supplies);
|
||||
if (ret != 0) {
|
||||
@@ -3839,6 +3856,8 @@ static int wm8962_runtime_suspend(struct device *dev)
|
||||
regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies),
|
||||
wm8962->supplies);
|
||||
|
||||
clk_disable_unprepare(wm8962->pdata.mclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user