mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-18 18:43:59 +08:00
Merge remote-tracking branches 'asoc/topic/wm8804' and 'asoc/topic/wm9713' into asoc-next
This commit is contained in:
commit
a2fbbbf10d
@ -63,6 +63,7 @@ struct wm8804_priv {
|
|||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
struct regulator_bulk_data supplies[WM8804_NUM_SUPPLIES];
|
struct regulator_bulk_data supplies[WM8804_NUM_SUPPLIES];
|
||||||
struct notifier_block disable_nb[WM8804_NUM_SUPPLIES];
|
struct notifier_block disable_nb[WM8804_NUM_SUPPLIES];
|
||||||
|
int mclk_div;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int txsrc_get(struct snd_kcontrol *kcontrol,
|
static int txsrc_get(struct snd_kcontrol *kcontrol,
|
||||||
@ -318,7 +319,7 @@ static struct {
|
|||||||
|
|
||||||
#define FIXED_PLL_SIZE ((1ULL << 22) * 10)
|
#define FIXED_PLL_SIZE ((1ULL << 22) * 10)
|
||||||
static int pll_factors(struct pll_div *pll_div, unsigned int target,
|
static int pll_factors(struct pll_div *pll_div, unsigned int target,
|
||||||
unsigned int source)
|
unsigned int source, unsigned int mclk_div)
|
||||||
{
|
{
|
||||||
u64 Kpart;
|
u64 Kpart;
|
||||||
unsigned long int K, Ndiv, Nmod, tmp;
|
unsigned long int K, Ndiv, Nmod, tmp;
|
||||||
@ -330,7 +331,8 @@ static int pll_factors(struct pll_div *pll_div, unsigned int target,
|
|||||||
*/
|
*/
|
||||||
for (i = 0; i < ARRAY_SIZE(post_table); i++) {
|
for (i = 0; i < ARRAY_SIZE(post_table); i++) {
|
||||||
tmp = target * post_table[i].div;
|
tmp = target * post_table[i].div;
|
||||||
if (tmp >= 90000000 && tmp <= 100000000) {
|
if ((tmp >= 90000000 && tmp <= 100000000) &&
|
||||||
|
(mclk_div == post_table[i].mclkdiv)) {
|
||||||
pll_div->freqmode = post_table[i].freqmode;
|
pll_div->freqmode = post_table[i].freqmode;
|
||||||
pll_div->mclkdiv = post_table[i].mclkdiv;
|
pll_div->mclkdiv = post_table[i].mclkdiv;
|
||||||
target *= post_table[i].div;
|
target *= post_table[i].div;
|
||||||
@ -387,8 +389,12 @@ static int wm8804_set_pll(struct snd_soc_dai *dai, int pll_id,
|
|||||||
} else {
|
} else {
|
||||||
int ret;
|
int ret;
|
||||||
struct pll_div pll_div;
|
struct pll_div pll_div;
|
||||||
|
struct wm8804_priv *wm8804;
|
||||||
|
|
||||||
ret = pll_factors(&pll_div, freq_out, freq_in);
|
wm8804 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
|
||||||
|
ret = pll_factors(&pll_div, freq_out, freq_in,
|
||||||
|
wm8804->mclk_div);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -452,6 +458,7 @@ static int wm8804_set_clkdiv(struct snd_soc_dai *dai,
|
|||||||
int div_id, int div)
|
int div_id, int div)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec;
|
struct snd_soc_codec *codec;
|
||||||
|
struct wm8804_priv *wm8804;
|
||||||
|
|
||||||
codec = dai->codec;
|
codec = dai->codec;
|
||||||
switch (div_id) {
|
switch (div_id) {
|
||||||
@ -459,6 +466,10 @@ static int wm8804_set_clkdiv(struct snd_soc_dai *dai,
|
|||||||
snd_soc_update_bits(codec, WM8804_PLL5, 0x30,
|
snd_soc_update_bits(codec, WM8804_PLL5, 0x30,
|
||||||
(div & 0x3) << 4);
|
(div & 0x3) << 4);
|
||||||
break;
|
break;
|
||||||
|
case WM8804_MCLK_DIV:
|
||||||
|
wm8804 = snd_soc_codec_get_drvdata(codec);
|
||||||
|
wm8804->mclk_div = div;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(dai->dev, "Unknown clock divider: %d\n", div_id);
|
dev_err(dai->dev, "Unknown clock divider: %d\n", div_id);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -57,5 +57,9 @@
|
|||||||
#define WM8804_CLKOUT_SRC_OSCCLK 4
|
#define WM8804_CLKOUT_SRC_OSCCLK 4
|
||||||
|
|
||||||
#define WM8804_CLKOUT_DIV 1
|
#define WM8804_CLKOUT_DIV 1
|
||||||
|
#define WM8804_MCLK_DIV 2
|
||||||
|
|
||||||
|
#define WM8804_MCLKDIV_256FS 0
|
||||||
|
#define WM8804_MCLKDIV_128FS 1
|
||||||
|
|
||||||
#endif /* _WM8804_H */
|
#endif /* _WM8804_H */
|
||||||
|
@ -74,8 +74,7 @@ static const char *wm9713_rec_src[] =
|
|||||||
"Mono Out", "Zh"};
|
"Mono Out", "Zh"};
|
||||||
static const char *wm9713_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"};
|
static const char *wm9713_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"};
|
||||||
static const char *wm9713_alc_select[] = {"None", "Left", "Right", "Stereo"};
|
static const char *wm9713_alc_select[] = {"None", "Left", "Right", "Stereo"};
|
||||||
static const char *wm9713_mono_pga[] = {"Vmid", "Zh", "Mono", "Inv",
|
static const char *wm9713_mono_pga[] = {"Vmid", "Zh", "Mono", "Inv"};
|
||||||
"Mono Vmid", "Inv Vmid"};
|
|
||||||
static const char *wm9713_spk_pga[] =
|
static const char *wm9713_spk_pga[] =
|
||||||
{"Vmid", "Zh", "Headphone", "Speaker", "Inv", "Headphone Vmid",
|
{"Vmid", "Zh", "Headphone", "Speaker", "Inv", "Headphone Vmid",
|
||||||
"Speaker Vmid", "Inv Vmid"};
|
"Speaker Vmid", "Inv Vmid"};
|
||||||
|
Loading…
Reference in New Issue
Block a user