Merge remote-tracking branches 'asoc/fix/rockchip', 'asoc/fix/rt5645', 'asoc/fix/rt5663', 'asoc/fix/rt5670' and 'asoc/fix/zte' into asoc-linus
This commit is contained in:
commit
10e5b9c291
|
@ -3897,6 +3897,7 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
|
||||||
|
|
||||||
cancel_delayed_work_sync(&rt5645->jack_detect_work);
|
cancel_delayed_work_sync(&rt5645->jack_detect_work);
|
||||||
cancel_delayed_work_sync(&rt5645->rcclock_work);
|
cancel_delayed_work_sync(&rt5645->rcclock_work);
|
||||||
|
del_timer_sync(&rt5645->btn_check_timer);
|
||||||
|
|
||||||
snd_soc_unregister_codec(&i2c->dev);
|
snd_soc_unregister_codec(&i2c->dev);
|
||||||
regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
|
regulator_bulk_disable(ARRAY_SIZE(rt5645->supplies), rt5645->supplies);
|
||||||
|
|
|
@ -2847,6 +2847,8 @@ static int rt5663_resume(struct snd_soc_codec *codec)
|
||||||
regcache_cache_only(rt5663->regmap, false);
|
regcache_cache_only(rt5663->regmap, false);
|
||||||
regcache_sync(rt5663->regmap);
|
regcache_sync(rt5663->regmap);
|
||||||
|
|
||||||
|
rt5663_irq(0, rt5663);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -3141,7 +3143,7 @@ static int rt5663_i2c_probe(struct i2c_client *i2c,
|
||||||
regmap_update_bits(rt5663->regmap, RT5663_DIG_MISC,
|
regmap_update_bits(rt5663->regmap, RT5663_DIG_MISC,
|
||||||
RT5663_DIG_GATE_CTRL_MASK, RT5663_DIG_GATE_CTRL_EN);
|
RT5663_DIG_GATE_CTRL_MASK, RT5663_DIG_GATE_CTRL_EN);
|
||||||
regmap_update_bits(rt5663->regmap, RT5663_AUTO_1MRC_CLK,
|
regmap_update_bits(rt5663->regmap, RT5663_AUTO_1MRC_CLK,
|
||||||
RT5663_IRQ_POW_SAV_MASK, RT5663_IRQ_POW_SAV_EN);
|
RT5663_IRQ_MANUAL_MASK, RT5663_IRQ_MANUAL_EN);
|
||||||
regmap_update_bits(rt5663->regmap, RT5663_IRQ_1,
|
regmap_update_bits(rt5663->regmap, RT5663_IRQ_1,
|
||||||
RT5663_EN_IRQ_JD1_MASK, RT5663_EN_IRQ_JD1_EN);
|
RT5663_EN_IRQ_JD1_MASK, RT5663_EN_IRQ_JD1_EN);
|
||||||
regmap_update_bits(rt5663->regmap, RT5663_GPIO_1,
|
regmap_update_bits(rt5663->regmap, RT5663_GPIO_1,
|
||||||
|
|
|
@ -590,6 +590,10 @@
|
||||||
#define RT5663_IRQ_POW_SAV_JD1_SHIFT 14
|
#define RT5663_IRQ_POW_SAV_JD1_SHIFT 14
|
||||||
#define RT5663_IRQ_POW_SAV_JD1_DIS (0x0 << 14)
|
#define RT5663_IRQ_POW_SAV_JD1_DIS (0x0 << 14)
|
||||||
#define RT5663_IRQ_POW_SAV_JD1_EN (0x1 << 14)
|
#define RT5663_IRQ_POW_SAV_JD1_EN (0x1 << 14)
|
||||||
|
#define RT5663_IRQ_MANUAL_MASK (0x1 << 8)
|
||||||
|
#define RT5663_IRQ_MANUAL_SHIFT 8
|
||||||
|
#define RT5663_IRQ_MANUAL_DIS (0x0 << 8)
|
||||||
|
#define RT5663_IRQ_MANUAL_EN (0x1 << 8)
|
||||||
|
|
||||||
/* IRQ Control 1 (0x00b6) */
|
/* IRQ Control 1 (0x00b6) */
|
||||||
#define RT5663_EN_CB_JD_MASK (0x1 << 3)
|
#define RT5663_EN_CB_JD_MASK (0x1 << 3)
|
||||||
|
|
|
@ -1717,7 +1717,6 @@ static const struct snd_soc_dapm_widget rt5670_dapm_widgets[] = {
|
||||||
SND_SOC_DAPM_PGA("IF1_ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
|
SND_SOC_DAPM_PGA("IF1_ADC1", SND_SOC_NOPM, 0, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_PGA("IF1_ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
|
SND_SOC_DAPM_PGA("IF1_ADC2", SND_SOC_NOPM, 0, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_PGA("IF1_ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
|
SND_SOC_DAPM_PGA("IF1_ADC3", SND_SOC_NOPM, 0, 0, NULL, 0),
|
||||||
SND_SOC_DAPM_PGA("IF1_ADC4", SND_SOC_NOPM, 0, 0, NULL, 0),
|
|
||||||
|
|
||||||
/* DSP */
|
/* DSP */
|
||||||
SND_SOC_DAPM_PGA("TxDP_ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
|
SND_SOC_DAPM_PGA("TxDP_ADC", SND_SOC_NOPM, 0, 0, NULL, 0),
|
||||||
|
@ -2086,13 +2085,13 @@ static const struct snd_soc_dapm_route rt5670_dapm_routes[] = {
|
||||||
{ "IF1 ADC1 IN1 Mux", "IF1_ADC3", "IF1_ADC3" },
|
{ "IF1 ADC1 IN1 Mux", "IF1_ADC3", "IF1_ADC3" },
|
||||||
|
|
||||||
{ "IF1 ADC1 IN2 Mux", "IF1_ADC1_IN1", "IF1 ADC1 IN1 Mux" },
|
{ "IF1 ADC1 IN2 Mux", "IF1_ADC1_IN1", "IF1 ADC1 IN1 Mux" },
|
||||||
{ "IF1 ADC1 IN2 Mux", "IF1_ADC4", "IF1_ADC4" },
|
{ "IF1 ADC1 IN2 Mux", "IF1_ADC4", "TxDP_ADC" },
|
||||||
|
|
||||||
{ "IF1 ADC2 IN Mux", "IF_ADC2", "IF_ADC2" },
|
{ "IF1 ADC2 IN Mux", "IF_ADC2", "IF_ADC2" },
|
||||||
{ "IF1 ADC2 IN Mux", "VAD_ADC", "VAD_ADC" },
|
{ "IF1 ADC2 IN Mux", "VAD_ADC", "VAD_ADC" },
|
||||||
|
|
||||||
{ "IF1 ADC2 IN1 Mux", "IF1_ADC2_IN", "IF1 ADC2 IN Mux" },
|
{ "IF1 ADC2 IN1 Mux", "IF1_ADC2_IN", "IF1 ADC2 IN Mux" },
|
||||||
{ "IF1 ADC2 IN1 Mux", "IF1_ADC4", "IF1_ADC4" },
|
{ "IF1 ADC2 IN1 Mux", "IF1_ADC4", "TxDP_ADC" },
|
||||||
|
|
||||||
{ "IF1_ADC1" , NULL, "IF1 ADC1 IN2 Mux" },
|
{ "IF1_ADC1" , NULL, "IF1 ADC1 IN2 Mux" },
|
||||||
{ "IF1_ADC2" , NULL, "IF1 ADC2 IN1 Mux" },
|
{ "IF1_ADC2" , NULL, "IF1 ADC2 IN1 Mux" },
|
||||||
|
|
|
@ -116,6 +116,7 @@ static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
|
||||||
I2S_XFER_TXS_STOP |
|
I2S_XFER_TXS_STOP |
|
||||||
I2S_XFER_RXS_STOP);
|
I2S_XFER_RXS_STOP);
|
||||||
|
|
||||||
|
udelay(150);
|
||||||
regmap_update_bits(i2s->regmap, I2S_CLR,
|
regmap_update_bits(i2s->regmap, I2S_CLR,
|
||||||
I2S_CLR_TXC | I2S_CLR_RXC,
|
I2S_CLR_TXC | I2S_CLR_RXC,
|
||||||
I2S_CLR_TXC | I2S_CLR_RXC);
|
I2S_CLR_TXC | I2S_CLR_RXC);
|
||||||
|
@ -162,6 +163,7 @@ static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
|
||||||
I2S_XFER_TXS_STOP |
|
I2S_XFER_TXS_STOP |
|
||||||
I2S_XFER_RXS_STOP);
|
I2S_XFER_RXS_STOP);
|
||||||
|
|
||||||
|
udelay(150);
|
||||||
regmap_update_bits(i2s->regmap, I2S_CLR,
|
regmap_update_bits(i2s->regmap, I2S_CLR,
|
||||||
I2S_CLR_TXC | I2S_CLR_RXC,
|
I2S_CLR_TXC | I2S_CLR_RXC,
|
||||||
I2S_CLR_TXC | I2S_CLR_RXC);
|
I2S_CLR_TXC | I2S_CLR_RXC);
|
||||||
|
|
|
@ -203,13 +203,15 @@ static int zx_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
|
||||||
|
|
||||||
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
|
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
|
||||||
case SND_SOC_DAIFMT_CBM_CFM:
|
case SND_SOC_DAIFMT_CBM_CFM:
|
||||||
i2s->master = 1;
|
/* Codec is master, and I2S is slave. */
|
||||||
val |= ZX_I2S_TIMING_MAST;
|
|
||||||
break;
|
|
||||||
case SND_SOC_DAIFMT_CBS_CFS:
|
|
||||||
i2s->master = 0;
|
i2s->master = 0;
|
||||||
val |= ZX_I2S_TIMING_SLAVE;
|
val |= ZX_I2S_TIMING_SLAVE;
|
||||||
break;
|
break;
|
||||||
|
case SND_SOC_DAIFMT_CBS_CFS:
|
||||||
|
/* Codec is slave, and I2S is master. */
|
||||||
|
i2s->master = 1;
|
||||||
|
val |= ZX_I2S_TIMING_MAST;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(cpu_dai->dev, "Unknown master/slave format\n");
|
dev_err(cpu_dai->dev, "Unknown master/slave format\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -226,11 +228,12 @@ static int zx_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||||
struct zx_i2s_info *i2s = snd_soc_dai_get_drvdata(socdai);
|
struct zx_i2s_info *i2s = snd_soc_dai_get_drvdata(socdai);
|
||||||
struct snd_dmaengine_dai_dma_data *dma_data;
|
struct snd_dmaengine_dai_dma_data *dma_data;
|
||||||
unsigned int lane, ch_num, len, ret = 0;
|
unsigned int lane, ch_num, len, ret = 0;
|
||||||
|
unsigned int ts_width = 32;
|
||||||
unsigned long val;
|
unsigned long val;
|
||||||
unsigned long chn_cfg;
|
unsigned long chn_cfg;
|
||||||
|
|
||||||
dma_data = snd_soc_dai_get_dma_data(socdai, substream);
|
dma_data = snd_soc_dai_get_dma_data(socdai, substream);
|
||||||
dma_data->addr_width = params_width(params) >> 3;
|
dma_data->addr_width = ts_width >> 3;
|
||||||
|
|
||||||
val = readl_relaxed(i2s->reg_base + ZX_I2S_TIMING_CTRL);
|
val = readl_relaxed(i2s->reg_base + ZX_I2S_TIMING_CTRL);
|
||||||
val &= ~(ZX_I2S_TIMING_TS_WIDTH_MASK | ZX_I2S_TIMING_DATA_SIZE_MASK |
|
val &= ~(ZX_I2S_TIMING_TS_WIDTH_MASK | ZX_I2S_TIMING_DATA_SIZE_MASK |
|
||||||
|
@ -251,7 +254,7 @@ static int zx_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||||
dev_err(socdai->dev, "Unknown data format\n");
|
dev_err(socdai->dev, "Unknown data format\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
val |= ZX_I2S_TIMING_TS_WIDTH(len) | ZX_I2S_TIMING_DATA_SIZE(len);
|
val |= ZX_I2S_TIMING_TS_WIDTH(ts_width) | ZX_I2S_TIMING_DATA_SIZE(len);
|
||||||
|
|
||||||
ch_num = params_channels(params);
|
ch_num = params_channels(params);
|
||||||
switch (ch_num) {
|
switch (ch_num) {
|
||||||
|
|
Loading…
Reference in New Issue