forked from luck/tmp_suning_uos_patched
Merge remote-tracking branches 'asoc/fix/ac97', 'asoc/fix/atmel', 'asoc/fix/intel', 'asoc/fix/rt286', 'asoc/fix/rt5640', 'asoc/fix/sgtl5000', 'asoc/fix/sta32x', 'asoc/fix/tlv320aic3x' and 'asoc/fix/wm8731' into asoc-linus
This commit is contained in:
parent
e36f014edf
f8d71be555
20cf2603b1
97fa99a3b8
54d96a40e0
3463667aa1
58cc9c9a17
b0402717c9
0b65ba9981
8a6cf30bf9
commit
de784bed8f
10
MAINTAINERS
10
MAINTAINERS
|
@ -4953,6 +4953,16 @@ F: Documentation/input/multi-touch-protocol.txt
|
|||
F: drivers/input/input-mt.c
|
||||
K: \b(ABS|SYN)_MT_
|
||||
|
||||
INTEL ASoC BDW/HSW DRIVERS
|
||||
M: Jie Yang <yang.jie@linux.intel.com>
|
||||
L: alsa-devel@alsa-project.org
|
||||
S: Supported
|
||||
F: sound/soc/intel/sst-haswell*
|
||||
F: sound/soc/intel/sst-dsp*
|
||||
F: sound/soc/intel/sst-firmware.c
|
||||
F: sound/soc/intel/broadwell.c
|
||||
F: sound/soc/intel/haswell.c
|
||||
|
||||
INTEL C600 SERIES SAS CONTROLLER DRIVER
|
||||
M: Intel SCU Linux support <intel-linux-scu@intel.com>
|
||||
M: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
|
||||
|
|
|
@ -498,6 +498,7 @@ int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned int reg,
|
|||
unsigned int mask, unsigned int value);
|
||||
|
||||
#ifdef CONFIG_SND_SOC_AC97_BUS
|
||||
struct snd_ac97 *snd_soc_alloc_ac97_codec(struct snd_soc_codec *codec);
|
||||
struct snd_ac97 *snd_soc_new_ac97_codec(struct snd_soc_codec *codec);
|
||||
void snd_soc_free_ac97_codec(struct snd_ac97 *ac97);
|
||||
|
||||
|
|
|
@ -348,7 +348,6 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
|||
struct atmel_pcm_dma_params *dma_params;
|
||||
int dir, channels, bits;
|
||||
u32 tfmr, rfmr, tcmr, rcmr;
|
||||
int start_event;
|
||||
int ret;
|
||||
int fslen, fslen_ext;
|
||||
|
||||
|
@ -457,19 +456,10 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
|||
* The SSC transmit clock is obtained from the BCLK signal on
|
||||
* on the TK line, and the SSC receive clock is
|
||||
* generated from the transmit clock.
|
||||
*
|
||||
* For single channel data, one sample is transferred
|
||||
* on the falling edge of the LRC clock.
|
||||
* For two channel data, one sample is
|
||||
* transferred on both edges of the LRC clock.
|
||||
*/
|
||||
start_event = ((channels == 1)
|
||||
? SSC_START_FALLING_RF
|
||||
: SSC_START_EDGE_RF);
|
||||
|
||||
rcmr = SSC_BF(RCMR_PERIOD, 0)
|
||||
| SSC_BF(RCMR_STTDLY, START_DELAY)
|
||||
| SSC_BF(RCMR_START, start_event)
|
||||
| SSC_BF(RCMR_START, SSC_START_FALLING_RF)
|
||||
| SSC_BF(RCMR_CKI, SSC_CKI_RISING)
|
||||
| SSC_BF(RCMR_CKO, SSC_CKO_NONE)
|
||||
| SSC_BF(RCMR_CKS, ssc->clk_from_rk_pin ?
|
||||
|
@ -478,14 +468,14 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
|||
rfmr = SSC_BF(RFMR_FSEDGE, SSC_FSEDGE_POSITIVE)
|
||||
| SSC_BF(RFMR_FSOS, SSC_FSOS_NONE)
|
||||
| SSC_BF(RFMR_FSLEN, 0)
|
||||
| SSC_BF(RFMR_DATNB, 0)
|
||||
| SSC_BF(RFMR_DATNB, (channels - 1))
|
||||
| SSC_BIT(RFMR_MSBF)
|
||||
| SSC_BF(RFMR_LOOP, 0)
|
||||
| SSC_BF(RFMR_DATLEN, (bits - 1));
|
||||
|
||||
tcmr = SSC_BF(TCMR_PERIOD, 0)
|
||||
| SSC_BF(TCMR_STTDLY, START_DELAY)
|
||||
| SSC_BF(TCMR_START, start_event)
|
||||
| SSC_BF(TCMR_START, SSC_START_FALLING_RF)
|
||||
| SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
|
||||
| SSC_BF(TCMR_CKO, SSC_CKO_NONE)
|
||||
| SSC_BF(TCMR_CKS, ssc->clk_from_rk_pin ?
|
||||
|
@ -495,7 +485,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
|||
| SSC_BF(TFMR_FSDEN, 0)
|
||||
| SSC_BF(TFMR_FSOS, SSC_FSOS_NONE)
|
||||
| SSC_BF(TFMR_FSLEN, 0)
|
||||
| SSC_BF(TFMR_DATNB, 0)
|
||||
| SSC_BF(TFMR_DATNB, (channels - 1))
|
||||
| SSC_BIT(TFMR_MSBF)
|
||||
| SSC_BF(TFMR_DATDEF, 0)
|
||||
| SSC_BF(TFMR_DATLEN, (bits - 1));
|
||||
|
@ -512,7 +502,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
|||
rcmr = SSC_BF(RCMR_PERIOD, ssc_p->rcmr_period)
|
||||
| SSC_BF(RCMR_STTDLY, 1)
|
||||
| SSC_BF(RCMR_START, SSC_START_RISING_RF)
|
||||
| SSC_BF(RCMR_CKI, SSC_CKI_RISING)
|
||||
| SSC_BF(RCMR_CKI, SSC_CKI_FALLING)
|
||||
| SSC_BF(RCMR_CKO, SSC_CKO_NONE)
|
||||
| SSC_BF(RCMR_CKS, SSC_CKS_DIV);
|
||||
|
||||
|
@ -527,7 +517,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
|||
tcmr = SSC_BF(TCMR_PERIOD, ssc_p->tcmr_period)
|
||||
| SSC_BF(TCMR_STTDLY, 1)
|
||||
| SSC_BF(TCMR_START, SSC_START_RISING_RF)
|
||||
| SSC_BF(TCMR_CKI, SSC_CKI_RISING)
|
||||
| SSC_BF(TCMR_CKI, SSC_CKI_FALLING)
|
||||
| SSC_BF(TCMR_CKO, SSC_CKO_CONTINUOUS)
|
||||
| SSC_BF(TCMR_CKS, SSC_CKS_DIV);
|
||||
|
||||
|
@ -556,7 +546,7 @@ static int atmel_ssc_hw_params(struct snd_pcm_substream *substream,
|
|||
rcmr = SSC_BF(RCMR_PERIOD, 0)
|
||||
| SSC_BF(RCMR_STTDLY, START_DELAY)
|
||||
| SSC_BF(RCMR_START, SSC_START_RISING_RF)
|
||||
| SSC_BF(RCMR_CKI, SSC_CKI_RISING)
|
||||
| SSC_BF(RCMR_CKI, SSC_CKI_FALLING)
|
||||
| SSC_BF(RCMR_CKO, SSC_CKO_NONE)
|
||||
| SSC_BF(RCMR_CKS, ssc->clk_from_rk_pin ?
|
||||
SSC_CKS_PIN : SSC_CKS_CLOCK);
|
||||
|
|
|
@ -417,6 +417,8 @@ static const DECLARE_TLV_DB_SCALE(mic_vol_tlv, 0, 1000, 0);
|
|||
static const struct snd_kcontrol_new rt286_snd_controls[] = {
|
||||
SOC_DOUBLE_R_TLV("DAC0 Playback Volume", RT286_DACL_GAIN,
|
||||
RT286_DACR_GAIN, 0, 0x7f, 0, out_vol_tlv),
|
||||
SOC_DOUBLE_R("ADC0 Capture Switch", RT286_ADCL_GAIN,
|
||||
RT286_ADCR_GAIN, 7, 1, 1),
|
||||
SOC_DOUBLE_R_TLV("ADC0 Capture Volume", RT286_ADCL_GAIN,
|
||||
RT286_ADCR_GAIN, 0, 0x7f, 0, out_vol_tlv),
|
||||
SOC_SINGLE_TLV("AMIC Volume", RT286_MIC_GAIN,
|
||||
|
@ -538,32 +540,6 @@ static int rt286_set_dmic1_event(struct snd_soc_dapm_widget *w,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int rt286_adc_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
struct snd_soc_codec *codec = w->codec;
|
||||
unsigned int nid;
|
||||
|
||||
nid = (w->reg >> 20) & 0xff;
|
||||
|
||||
switch (event) {
|
||||
case SND_SOC_DAPM_POST_PMU:
|
||||
snd_soc_update_bits(codec,
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
|
||||
0x7080, 0x7000);
|
||||
break;
|
||||
case SND_SOC_DAPM_PRE_PMD:
|
||||
snd_soc_update_bits(codec,
|
||||
VERB_CMD(AC_VERB_SET_AMP_GAIN_MUTE, nid, 0),
|
||||
0x7080, 0x7080);
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rt286_vref_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
|
@ -667,12 +643,10 @@ static const struct snd_soc_dapm_widget rt286_dapm_widgets[] = {
|
|||
SND_SOC_DAPM_ADC("ADC 1", NULL, SND_SOC_NOPM, 0, 0),
|
||||
|
||||
/* ADC Mux */
|
||||
SND_SOC_DAPM_MUX_E("ADC 0 Mux", RT286_SET_POWER(RT286_ADC_IN1), 0, 1,
|
||||
&rt286_adc0_mux, rt286_adc_event, SND_SOC_DAPM_PRE_PMD |
|
||||
SND_SOC_DAPM_POST_PMU),
|
||||
SND_SOC_DAPM_MUX_E("ADC 1 Mux", RT286_SET_POWER(RT286_ADC_IN2), 0, 1,
|
||||
&rt286_adc1_mux, rt286_adc_event, SND_SOC_DAPM_PRE_PMD |
|
||||
SND_SOC_DAPM_POST_PMU),
|
||||
SND_SOC_DAPM_MUX("ADC 0 Mux", RT286_SET_POWER(RT286_ADC_IN1), 0, 1,
|
||||
&rt286_adc0_mux),
|
||||
SND_SOC_DAPM_MUX("ADC 1 Mux", RT286_SET_POWER(RT286_ADC_IN2), 0, 1,
|
||||
&rt286_adc1_mux),
|
||||
|
||||
/* Audio Interface */
|
||||
SND_SOC_DAPM_AIF_IN("AIF1RX", "AIF1 Playback", 0, SND_SOC_NOPM, 0, 0),
|
||||
|
|
|
@ -2124,6 +2124,7 @@ MODULE_DEVICE_TABLE(of, rt5640_of_match);
|
|||
static struct acpi_device_id rt5640_acpi_match[] = {
|
||||
{ "INT33CA", 0 },
|
||||
{ "10EC5640", 0 },
|
||||
{ "10EC5642", 0 },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, rt5640_acpi_match);
|
||||
|
|
|
@ -483,21 +483,21 @@ static int sgtl5000_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
|
|||
/* setting i2s data format */
|
||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
case SND_SOC_DAIFMT_DSP_A:
|
||||
i2sctl |= SGTL5000_I2S_MODE_PCM;
|
||||
i2sctl |= SGTL5000_I2S_MODE_PCM << SGTL5000_I2S_MODE_SHIFT;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_B:
|
||||
i2sctl |= SGTL5000_I2S_MODE_PCM;
|
||||
i2sctl |= SGTL5000_I2S_MODE_PCM << SGTL5000_I2S_MODE_SHIFT;
|
||||
i2sctl |= SGTL5000_I2S_LRALIGN;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_I2S:
|
||||
i2sctl |= SGTL5000_I2S_MODE_I2S_LJ;
|
||||
i2sctl |= SGTL5000_I2S_MODE_I2S_LJ << SGTL5000_I2S_MODE_SHIFT;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_RIGHT_J:
|
||||
i2sctl |= SGTL5000_I2S_MODE_RJ;
|
||||
i2sctl |= SGTL5000_I2S_MODE_RJ << SGTL5000_I2S_MODE_SHIFT;
|
||||
i2sctl |= SGTL5000_I2S_LRPOL;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_LEFT_J:
|
||||
i2sctl |= SGTL5000_I2S_MODE_I2S_LJ;
|
||||
i2sctl |= SGTL5000_I2S_MODE_I2S_LJ << SGTL5000_I2S_MODE_SHIFT;
|
||||
i2sctl |= SGTL5000_I2S_LRALIGN;
|
||||
break;
|
||||
default:
|
||||
|
@ -1462,6 +1462,9 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Need 8 clocks before I2C accesses */
|
||||
udelay(1);
|
||||
|
||||
/* read chip information */
|
||||
ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ID, ®);
|
||||
if (ret)
|
||||
|
|
|
@ -131,7 +131,7 @@
|
|||
#define STA32X_CONFF_OCFG_MASK 0x03
|
||||
#define STA32X_CONFF_OCFG_SHIFT 0
|
||||
#define STA32X_CONFF_IDE 0x04
|
||||
#define STA32X_CONFF_IDE_SHIFT 3
|
||||
#define STA32X_CONFF_IDE_SHIFT 2
|
||||
#define STA32X_CONFF_BCLE 0x08
|
||||
#define STA32X_CONFF_ECLE 0x20
|
||||
#define STA32X_CONFF_PWDN 0x40
|
||||
|
|
|
@ -1046,7 +1046,7 @@ static int aic3x_prepare(struct snd_pcm_substream *substream,
|
|||
delay += aic3x->tdm_delay;
|
||||
|
||||
/* Configure data delay */
|
||||
snd_soc_write(codec, AIC3X_ASD_INTF_CTRLC, aic3x->tdm_delay);
|
||||
snd_soc_write(codec, AIC3X_ASD_INTF_CTRLC, delay);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -717,6 +717,8 @@ static int wm8731_i2c_probe(struct i2c_client *i2c,
|
|||
if (wm8731 == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_init(&wm8731->lock);
|
||||
|
||||
wm8731->regmap = devm_regmap_init_i2c(i2c, &wm8731_regmap);
|
||||
if (IS_ERR(wm8731->regmap)) {
|
||||
ret = PTR_ERR(wm8731->regmap);
|
||||
|
|
|
@ -344,23 +344,27 @@ static int wm9705_soc_probe(struct snd_soc_codec *codec)
|
|||
struct snd_ac97 *ac97;
|
||||
int ret = 0;
|
||||
|
||||
ac97 = snd_soc_new_ac97_codec(codec);
|
||||
ac97 = snd_soc_alloc_ac97_codec(codec);
|
||||
if (IS_ERR(ac97)) {
|
||||
ret = PTR_ERR(ac97);
|
||||
dev_err(codec->dev, "Failed to register AC97 codec\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
snd_soc_codec_set_drvdata(codec, ac97);
|
||||
|
||||
ret = wm9705_reset(codec);
|
||||
if (ret)
|
||||
goto reset_err;
|
||||
goto err_put_device;
|
||||
|
||||
ret = device_add(&ac97->dev);
|
||||
if (ret)
|
||||
goto err_put_device;
|
||||
|
||||
snd_soc_codec_set_drvdata(codec, ac97);
|
||||
|
||||
return 0;
|
||||
|
||||
reset_err:
|
||||
snd_soc_free_ac97_codec(ac97);
|
||||
err_put_device:
|
||||
put_device(&ac97->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -666,7 +666,7 @@ static int wm9712_soc_probe(struct snd_soc_codec *codec)
|
|||
struct wm9712_priv *wm9712 = snd_soc_codec_get_drvdata(codec);
|
||||
int ret = 0;
|
||||
|
||||
wm9712->ac97 = snd_soc_new_ac97_codec(codec);
|
||||
wm9712->ac97 = snd_soc_alloc_ac97_codec(codec);
|
||||
if (IS_ERR(wm9712->ac97)) {
|
||||
ret = PTR_ERR(wm9712->ac97);
|
||||
dev_err(codec->dev, "Failed to register AC97 codec: %d\n", ret);
|
||||
|
@ -675,15 +675,19 @@ static int wm9712_soc_probe(struct snd_soc_codec *codec)
|
|||
|
||||
ret = wm9712_reset(codec, 0);
|
||||
if (ret < 0)
|
||||
goto reset_err;
|
||||
goto err_put_device;
|
||||
|
||||
ret = device_add(&wm9712->ac97->dev);
|
||||
if (ret)
|
||||
goto err_put_device;
|
||||
|
||||
/* set alc mux to none */
|
||||
ac97_write(codec, AC97_VIDEO, ac97_read(codec, AC97_VIDEO) | 0x3000);
|
||||
|
||||
return 0;
|
||||
|
||||
reset_err:
|
||||
snd_soc_free_ac97_codec(wm9712->ac97);
|
||||
err_put_device:
|
||||
put_device(&wm9712->ac97->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1225,7 +1225,7 @@ static int wm9713_soc_probe(struct snd_soc_codec *codec)
|
|||
struct wm9713_priv *wm9713 = snd_soc_codec_get_drvdata(codec);
|
||||
int ret = 0, reg;
|
||||
|
||||
wm9713->ac97 = snd_soc_new_ac97_codec(codec);
|
||||
wm9713->ac97 = snd_soc_alloc_ac97_codec(codec);
|
||||
if (IS_ERR(wm9713->ac97))
|
||||
return PTR_ERR(wm9713->ac97);
|
||||
|
||||
|
@ -1234,7 +1234,11 @@ static int wm9713_soc_probe(struct snd_soc_codec *codec)
|
|||
wm9713_reset(codec, 0);
|
||||
ret = wm9713_reset(codec, 1);
|
||||
if (ret < 0)
|
||||
goto reset_err;
|
||||
goto err_put_device;
|
||||
|
||||
ret = device_add(&wm9713->ac97->dev);
|
||||
if (ret)
|
||||
goto err_put_device;
|
||||
|
||||
/* unmute the adc - move to kcontrol */
|
||||
reg = ac97_read(codec, AC97_CD) & 0x7fff;
|
||||
|
@ -1242,8 +1246,8 @@ static int wm9713_soc_probe(struct snd_soc_codec *codec)
|
|||
|
||||
return 0;
|
||||
|
||||
reset_err:
|
||||
snd_soc_free_ac97_codec(wm9713->ac97);
|
||||
err_put_device:
|
||||
put_device(&wm9713->ac97->dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -651,11 +651,11 @@ static void hsw_notification_work(struct work_struct *work)
|
|||
}
|
||||
|
||||
/* tell DSP that notification has been handled */
|
||||
sst_dsp_shim_update_bits_unlocked(hsw->dsp, SST_IPCD,
|
||||
sst_dsp_shim_update_bits(hsw->dsp, SST_IPCD,
|
||||
SST_IPCD_BUSY | SST_IPCD_DONE, SST_IPCD_DONE);
|
||||
|
||||
/* unmask busy interrupt */
|
||||
sst_dsp_shim_update_bits_unlocked(hsw->dsp, SST_IMRX, SST_IMRX_BUSY, 0);
|
||||
sst_dsp_shim_update_bits(hsw->dsp, SST_IMRX, SST_IMRX_BUSY, 0);
|
||||
}
|
||||
|
||||
static struct ipc_message *reply_find_msg(struct sst_hsw *hsw, u32 header)
|
||||
|
|
|
@ -48,15 +48,18 @@ static void soc_ac97_device_release(struct device *dev)
|
|||
}
|
||||
|
||||
/**
|
||||
* snd_soc_new_ac97_codec - initailise AC97 device
|
||||
* @codec: audio codec
|
||||
* snd_soc_alloc_ac97_codec() - Allocate new a AC'97 device
|
||||
* @codec: The CODEC for which to create the AC'97 device
|
||||
*
|
||||
* Initialises AC97 codec resources for use by ad-hoc devices only.
|
||||
* Allocated a new snd_ac97 device and intializes it, but does not yet register
|
||||
* it. The caller is responsible to either call device_add(&ac97->dev) to
|
||||
* register the device, or to call put_device(&ac97->dev) to free the device.
|
||||
*
|
||||
* Returns: A snd_ac97 device or a PTR_ERR in case of an error.
|
||||
*/
|
||||
struct snd_ac97 *snd_soc_new_ac97_codec(struct snd_soc_codec *codec)
|
||||
struct snd_ac97 *snd_soc_alloc_ac97_codec(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct snd_ac97 *ac97;
|
||||
int ret;
|
||||
|
||||
ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
|
||||
if (ac97 == NULL)
|
||||
|
@ -73,7 +76,28 @@ struct snd_ac97 *snd_soc_new_ac97_codec(struct snd_soc_codec *codec)
|
|||
codec->component.card->snd_card->number, 0,
|
||||
codec->component.name);
|
||||
|
||||
ret = device_register(&ac97->dev);
|
||||
device_initialize(&ac97->dev);
|
||||
|
||||
return ac97;
|
||||
}
|
||||
EXPORT_SYMBOL(snd_soc_alloc_ac97_codec);
|
||||
|
||||
/**
|
||||
* snd_soc_new_ac97_codec - initailise AC97 device
|
||||
* @codec: audio codec
|
||||
*
|
||||
* Initialises AC97 codec resources for use by ad-hoc devices only.
|
||||
*/
|
||||
struct snd_ac97 *snd_soc_new_ac97_codec(struct snd_soc_codec *codec)
|
||||
{
|
||||
struct snd_ac97 *ac97;
|
||||
int ret;
|
||||
|
||||
ac97 = snd_soc_alloc_ac97_codec(codec);
|
||||
if (IS_ERR(ac97))
|
||||
return ac97;
|
||||
|
||||
ret = device_add(&ac97->dev);
|
||||
if (ret) {
|
||||
put_device(&ac97->dev);
|
||||
return ERR_PTR(ret);
|
||||
|
|
Loading…
Reference in New Issue
Block a user