mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
sound fixes for 4.3-rc5
We see various small fixes, but nothing looks too scary, all are small gentle bug fixes: - Most of changes are for ASoC codecs: Realtek, SGTL5000, TAS2552, TLV320, WM8962 - A couple of dwc and imx-ssi fixes - Usual oneliner HD-audio quirks - An old emux synth code fix -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJWF3nMAAoJEGwxgFQ9KSmklqgP/A9ShFKf/m/Swwtvzhn01GP7 jBY5n4xvH7e9ThYmRpDQJ5XJX8TuKjWnyxeo/c1Ym3U8a8hgiEgJPp+eo98iEQ2s thK9Ie9p/AlEsThdvnPxHPSZoM5grx90fpG/m4CYlZJGfBcUYOSC9hnZnxKjdu7f mHto/T7Xj7um0rZLp0tqvp6vVktvefhMbRNC/LhCZhGbB5OFpNMwSbD3benGKIcj YIJiazEtfzTmqX4R5wNICX8mhEVQkBGTINKPIMTt5sMMClUuzAUNaGvZSXHSPlbB AkqHsT2GMagNv9uyz7dT2xTURHNrU3k3QBlPAE3Bufu1JEBHf4qYfwPvY3XM2+Jx 79estFRhb+WpExLSkQsuycsSbLmRhTKstSwGF3u2Bg047BpF4tV0UwNizFO3cUU+ sz18IfqxmWlbJCB6JdRFRzSD12mSaKPmrtcLHjQt3kvS8nD1qWLlBCy4lgx8oRPW tz0gEEp16gbVBhZQt9WsrL8Jbs995dJoR14t1Xjk81jK01kR01szfdCWR6mT9HH5 lzuzpCnW4mVrDec+Eyh7P1P/BOGlWHievv1McV4vYfql+E+WB2KxBRrd7cqLaIen CRCm6knMmk/6lf8LaVVA5c4N/RkP3UmfMgMOBQgU038vqGVwSDzogvG/H21zMc4W HBfw9/7EVVTzM0YsFLsI =gld/ -----END PGP SIGNATURE----- Merge tag 'sound-4.3-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "We see various small fixes, but nothing looks too scary, all are small gentle bug fixes: - Most of changes are for ASoC codecs: Realtek, SGTL5000, TAS2552, TLV320, WM8962 - A couple of dwc and imx-ssi fixes - Usual oneliner HD-audio quirks - An old emux synth code fix" * tag 'sound-4.3-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: MAINTAINERS: Remove wm97xx entry ASoC: tas2552: fix dBscale-min declaration ALSA: synth: Fix conflicting OSS device registration on AWE32 ALSA: hda - Disable power_save_node for IDT 92HD73xx chips ALSA: hda - Apply SPDIF pin ctl to MacBookPro 12,1 ALSA: hda: Add dock support for ThinkPad T550 ASoC: dwc: fix dma stop transferring issue ASoC: dwc: correct irq clear method ASoC: tlv320aic3x: Prevent writing reserved registers on tlv320aic3104 CODECs ASoC: rt5645: Correct the naming and setting of ADC Boost Volume Control ASoC: sgtl5000: fix wrong register MIC_BIAS_VOLTAGE setup on probe ASoC: wm8962: balance pm_runtime_enable ASoC: imx-ssi: Fix DAI hardware signal inversions ASoC: sgtl5000: fix error message output for MicBias voltage ASoC: db1200: Fix DAI link format for db1300 and db1550
This commit is contained in:
commit
f4ba1cf8a4
14 changed files with 67 additions and 49 deletions
|
@ -11378,15 +11378,6 @@ W: http://oops.ghostprotocols.net:81/blog
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/wireless/wl3501*
|
F: drivers/net/wireless/wl3501*
|
||||||
|
|
||||||
WM97XX TOUCHSCREEN DRIVERS
|
|
||||||
M: Mark Brown <broonie@kernel.org>
|
|
||||||
M: Liam Girdwood <lrg@slimlogic.co.uk>
|
|
||||||
L: linux-input@vger.kernel.org
|
|
||||||
W: https://github.com/CirrusLogic/linux-drivers/wiki
|
|
||||||
S: Supported
|
|
||||||
F: drivers/input/touchscreen/*wm97*
|
|
||||||
F: include/linux/wm97xx.h
|
|
||||||
|
|
||||||
WOLFSON MICROELECTRONICS DRIVERS
|
WOLFSON MICROELECTRONICS DRIVERS
|
||||||
L: patches@opensource.wolfsonmicro.com
|
L: patches@opensource.wolfsonmicro.com
|
||||||
T: git https://github.com/CirrusLogic/linux-drivers.git
|
T: git https://github.com/CirrusLogic/linux-drivers.git
|
||||||
|
|
|
@ -633,6 +633,7 @@ static const struct snd_pci_quirk cs4208_mac_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x106b, 0x5e00, "MacBookPro 11,2", CS4208_MBP11),
|
SND_PCI_QUIRK(0x106b, 0x5e00, "MacBookPro 11,2", CS4208_MBP11),
|
||||||
SND_PCI_QUIRK(0x106b, 0x7100, "MacBookAir 6,1", CS4208_MBA6),
|
SND_PCI_QUIRK(0x106b, 0x7100, "MacBookAir 6,1", CS4208_MBA6),
|
||||||
SND_PCI_QUIRK(0x106b, 0x7200, "MacBookAir 6,2", CS4208_MBA6),
|
SND_PCI_QUIRK(0x106b, 0x7200, "MacBookAir 6,2", CS4208_MBA6),
|
||||||
|
SND_PCI_QUIRK(0x106b, 0x7b00, "MacBookPro 12,1", CS4208_MBP11),
|
||||||
{} /* terminator */
|
{} /* terminator */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -5306,6 +5306,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK),
|
SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK),
|
SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
||||||
|
SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
|
SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
|
SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
|
SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
|
||||||
|
|
|
@ -4520,7 +4520,11 @@ static int patch_stac92hd73xx(struct hda_codec *codec)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
spec = codec->spec;
|
spec = codec->spec;
|
||||||
codec->power_save_node = 1;
|
/* enable power_save_node only for new 92HD89xx chips, as it causes
|
||||||
|
* click noises on old 92HD73xx chips.
|
||||||
|
*/
|
||||||
|
if ((codec->core.vendor_id & 0xfffffff0) != 0x111d7670)
|
||||||
|
codec->power_save_node = 1;
|
||||||
spec->linear_tone_beep = 0;
|
spec->linear_tone_beep = 0;
|
||||||
spec->gen.mixer_nid = 0x1d;
|
spec->gen.mixer_nid = 0x1d;
|
||||||
spec->have_spdif_mux = 1;
|
spec->have_spdif_mux = 1;
|
||||||
|
|
|
@ -129,6 +129,8 @@ static struct snd_soc_dai_link db1300_i2s_dai = {
|
||||||
.cpu_dai_name = "au1xpsc_i2s.2",
|
.cpu_dai_name = "au1xpsc_i2s.2",
|
||||||
.platform_name = "au1xpsc-pcm.2",
|
.platform_name = "au1xpsc-pcm.2",
|
||||||
.codec_name = "wm8731.0-001b",
|
.codec_name = "wm8731.0-001b",
|
||||||
|
.dai_fmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF |
|
||||||
|
SND_SOC_DAIFMT_CBM_CFM,
|
||||||
.ops = &db1200_i2s_wm8731_ops,
|
.ops = &db1200_i2s_wm8731_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -146,6 +148,8 @@ static struct snd_soc_dai_link db1550_i2s_dai = {
|
||||||
.cpu_dai_name = "au1xpsc_i2s.3",
|
.cpu_dai_name = "au1xpsc_i2s.3",
|
||||||
.platform_name = "au1xpsc-pcm.3",
|
.platform_name = "au1xpsc-pcm.3",
|
||||||
.codec_name = "wm8731.0-001b",
|
.codec_name = "wm8731.0-001b",
|
||||||
|
.dai_fmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF |
|
||||||
|
SND_SOC_DAIFMT_CBM_CFM,
|
||||||
.ops = &db1200_i2s_wm8731_ops,
|
.ops = &db1200_i2s_wm8731_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -519,11 +519,11 @@ static const struct snd_kcontrol_new rt5645_snd_controls[] = {
|
||||||
RT5645_L_VOL_SFT + 1, RT5645_R_VOL_SFT + 1, 63, 0, adc_vol_tlv),
|
RT5645_L_VOL_SFT + 1, RT5645_R_VOL_SFT + 1, 63, 0, adc_vol_tlv),
|
||||||
|
|
||||||
/* ADC Boost Volume Control */
|
/* ADC Boost Volume Control */
|
||||||
SOC_DOUBLE_TLV("STO1 ADC Boost Gain", RT5645_ADC_BST_VOL1,
|
SOC_DOUBLE_TLV("ADC Boost Capture Volume", RT5645_ADC_BST_VOL1,
|
||||||
RT5645_STO1_ADC_L_BST_SFT, RT5645_STO1_ADC_R_BST_SFT, 3, 0,
|
RT5645_STO1_ADC_L_BST_SFT, RT5645_STO1_ADC_R_BST_SFT, 3, 0,
|
||||||
adc_bst_tlv),
|
adc_bst_tlv),
|
||||||
SOC_DOUBLE_TLV("STO2 ADC Boost Gain", RT5645_ADC_BST_VOL1,
|
SOC_DOUBLE_TLV("Mono ADC Boost Capture Volume", RT5645_ADC_BST_VOL2,
|
||||||
RT5645_STO2_ADC_L_BST_SFT, RT5645_STO2_ADC_R_BST_SFT, 3, 0,
|
RT5645_MONO_ADC_L_BST_SFT, RT5645_MONO_ADC_R_BST_SFT, 3, 0,
|
||||||
adc_bst_tlv),
|
adc_bst_tlv),
|
||||||
|
|
||||||
/* I2S2 function select */
|
/* I2S2 function select */
|
||||||
|
|
|
@ -39,8 +39,8 @@
|
||||||
#define RT5645_STO1_ADC_DIG_VOL 0x1c
|
#define RT5645_STO1_ADC_DIG_VOL 0x1c
|
||||||
#define RT5645_MONO_ADC_DIG_VOL 0x1d
|
#define RT5645_MONO_ADC_DIG_VOL 0x1d
|
||||||
#define RT5645_ADC_BST_VOL1 0x1e
|
#define RT5645_ADC_BST_VOL1 0x1e
|
||||||
/* Mixer - D-D */
|
|
||||||
#define RT5645_ADC_BST_VOL2 0x20
|
#define RT5645_ADC_BST_VOL2 0x20
|
||||||
|
/* Mixer - D-D */
|
||||||
#define RT5645_STO1_ADC_MIXER 0x27
|
#define RT5645_STO1_ADC_MIXER 0x27
|
||||||
#define RT5645_MONO_ADC_MIXER 0x28
|
#define RT5645_MONO_ADC_MIXER 0x28
|
||||||
#define RT5645_AD_DA_MIXER 0x29
|
#define RT5645_AD_DA_MIXER 0x29
|
||||||
|
@ -315,12 +315,14 @@
|
||||||
#define RT5645_STO1_ADC_R_BST_SFT 12
|
#define RT5645_STO1_ADC_R_BST_SFT 12
|
||||||
#define RT5645_STO1_ADC_COMP_MASK (0x3 << 10)
|
#define RT5645_STO1_ADC_COMP_MASK (0x3 << 10)
|
||||||
#define RT5645_STO1_ADC_COMP_SFT 10
|
#define RT5645_STO1_ADC_COMP_SFT 10
|
||||||
#define RT5645_STO2_ADC_L_BST_MASK (0x3 << 8)
|
|
||||||
#define RT5645_STO2_ADC_L_BST_SFT 8
|
/* ADC Boost Volume Control (0x20) */
|
||||||
#define RT5645_STO2_ADC_R_BST_MASK (0x3 << 6)
|
#define RT5645_MONO_ADC_L_BST_MASK (0x3 << 14)
|
||||||
#define RT5645_STO2_ADC_R_BST_SFT 6
|
#define RT5645_MONO_ADC_L_BST_SFT 14
|
||||||
#define RT5645_STO2_ADC_COMP_MASK (0x3 << 4)
|
#define RT5645_MONO_ADC_R_BST_MASK (0x3 << 12)
|
||||||
#define RT5645_STO2_ADC_COMP_SFT 4
|
#define RT5645_MONO_ADC_R_BST_SFT 12
|
||||||
|
#define RT5645_MONO_ADC_COMP_MASK (0x3 << 10)
|
||||||
|
#define RT5645_MONO_ADC_COMP_SFT 10
|
||||||
|
|
||||||
/* Stereo2 ADC Mixer Control (0x26) */
|
/* Stereo2 ADC Mixer Control (0x26) */
|
||||||
#define RT5645_STO2_ADC_SRC_MASK (0x1 << 15)
|
#define RT5645_STO2_ADC_SRC_MASK (0x1 << 15)
|
||||||
|
|
|
@ -1376,8 +1376,8 @@ static int sgtl5000_probe(struct snd_soc_codec *codec)
|
||||||
sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT);
|
sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT);
|
||||||
|
|
||||||
snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL,
|
snd_soc_update_bits(codec, SGTL5000_CHIP_MIC_CTRL,
|
||||||
SGTL5000_BIAS_R_MASK,
|
SGTL5000_BIAS_VOLT_MASK,
|
||||||
sgtl5000->micbias_voltage << SGTL5000_BIAS_R_SHIFT);
|
sgtl5000->micbias_voltage << SGTL5000_BIAS_VOLT_SHIFT);
|
||||||
/*
|
/*
|
||||||
* disable DAP
|
* disable DAP
|
||||||
* TODO:
|
* TODO:
|
||||||
|
@ -1549,7 +1549,7 @@ static int sgtl5000_i2c_probe(struct i2c_client *client,
|
||||||
else {
|
else {
|
||||||
sgtl5000->micbias_voltage = 0;
|
sgtl5000->micbias_voltage = 0;
|
||||||
dev_err(&client->dev,
|
dev_err(&client->dev,
|
||||||
"Unsuitable MicBias resistor\n");
|
"Unsuitable MicBias voltage\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sgtl5000->micbias_voltage = 0;
|
sgtl5000->micbias_voltage = 0;
|
||||||
|
|
|
@ -549,7 +549,7 @@ static struct snd_soc_dai_driver tas2552_dai[] = {
|
||||||
/*
|
/*
|
||||||
* DAC digital volumes. From -7 to 24 dB in 1 dB steps
|
* DAC digital volumes. From -7 to 24 dB in 1 dB steps
|
||||||
*/
|
*/
|
||||||
static DECLARE_TLV_DB_SCALE(dac_tlv, -7, 100, 0);
|
static DECLARE_TLV_DB_SCALE(dac_tlv, -700, 100, 0);
|
||||||
|
|
||||||
static const char * const tas2552_din_source_select[] = {
|
static const char * const tas2552_din_source_select[] = {
|
||||||
"Muted",
|
"Muted",
|
||||||
|
|
|
@ -1509,14 +1509,17 @@ static int aic3x_init(struct snd_soc_codec *codec)
|
||||||
snd_soc_write(codec, PGAL_2_LLOPM_VOL, DEFAULT_VOL);
|
snd_soc_write(codec, PGAL_2_LLOPM_VOL, DEFAULT_VOL);
|
||||||
snd_soc_write(codec, PGAR_2_RLOPM_VOL, DEFAULT_VOL);
|
snd_soc_write(codec, PGAR_2_RLOPM_VOL, DEFAULT_VOL);
|
||||||
|
|
||||||
/* Line2 to HP Bypass default volume, disconnect from Output Mixer */
|
/* On tlv320aic3104, these registers are reserved and must not be written */
|
||||||
snd_soc_write(codec, LINE2L_2_HPLOUT_VOL, DEFAULT_VOL);
|
if (aic3x->model != AIC3X_MODEL_3104) {
|
||||||
snd_soc_write(codec, LINE2R_2_HPROUT_VOL, DEFAULT_VOL);
|
/* Line2 to HP Bypass default volume, disconnect from Output Mixer */
|
||||||
snd_soc_write(codec, LINE2L_2_HPLCOM_VOL, DEFAULT_VOL);
|
snd_soc_write(codec, LINE2L_2_HPLOUT_VOL, DEFAULT_VOL);
|
||||||
snd_soc_write(codec, LINE2R_2_HPRCOM_VOL, DEFAULT_VOL);
|
snd_soc_write(codec, LINE2R_2_HPROUT_VOL, DEFAULT_VOL);
|
||||||
/* Line2 Line Out default volume, disconnect from Output Mixer */
|
snd_soc_write(codec, LINE2L_2_HPLCOM_VOL, DEFAULT_VOL);
|
||||||
snd_soc_write(codec, LINE2L_2_LLOPM_VOL, DEFAULT_VOL);
|
snd_soc_write(codec, LINE2R_2_HPRCOM_VOL, DEFAULT_VOL);
|
||||||
snd_soc_write(codec, LINE2R_2_RLOPM_VOL, DEFAULT_VOL);
|
/* Line2 Line Out default volume, disconnect from Output Mixer */
|
||||||
|
snd_soc_write(codec, LINE2L_2_LLOPM_VOL, DEFAULT_VOL);
|
||||||
|
snd_soc_write(codec, LINE2R_2_RLOPM_VOL, DEFAULT_VOL);
|
||||||
|
}
|
||||||
|
|
||||||
switch (aic3x->model) {
|
switch (aic3x->model) {
|
||||||
case AIC3X_MODEL_3X:
|
case AIC3X_MODEL_3X:
|
||||||
|
|
|
@ -3760,7 +3760,7 @@ static int wm8962_i2c_probe(struct i2c_client *i2c,
|
||||||
ret = snd_soc_register_codec(&i2c->dev,
|
ret = snd_soc_register_codec(&i2c->dev,
|
||||||
&soc_codec_dev_wm8962, &wm8962_dai, 1);
|
&soc_codec_dev_wm8962, &wm8962_dai, 1);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err_enable;
|
goto err_pm_runtime;
|
||||||
|
|
||||||
regcache_cache_only(wm8962->regmap, true);
|
regcache_cache_only(wm8962->regmap, true);
|
||||||
|
|
||||||
|
@ -3769,6 +3769,8 @@ static int wm8962_i2c_probe(struct i2c_client *i2c,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_pm_runtime:
|
||||||
|
pm_runtime_disable(&i2c->dev);
|
||||||
err_enable:
|
err_enable:
|
||||||
regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies), wm8962->supplies);
|
regulator_bulk_disable(ARRAY_SIZE(wm8962->supplies), wm8962->supplies);
|
||||||
err:
|
err:
|
||||||
|
@ -3778,6 +3780,7 @@ err:
|
||||||
static int wm8962_i2c_remove(struct i2c_client *client)
|
static int wm8962_i2c_remove(struct i2c_client *client)
|
||||||
{
|
{
|
||||||
snd_soc_unregister_codec(&client->dev);
|
snd_soc_unregister_codec(&client->dev);
|
||||||
|
pm_runtime_disable(&client->dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -131,23 +131,32 @@ static inline void i2s_clear_irqs(struct dw_i2s_dev *dev, u32 stream)
|
||||||
|
|
||||||
if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
i2s_write_reg(dev->i2s_base, TOR(i), 0);
|
i2s_read_reg(dev->i2s_base, TOR(i));
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
i2s_write_reg(dev->i2s_base, ROR(i), 0);
|
i2s_read_reg(dev->i2s_base, ROR(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void i2s_start(struct dw_i2s_dev *dev,
|
static void i2s_start(struct dw_i2s_dev *dev,
|
||||||
struct snd_pcm_substream *substream)
|
struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
|
u32 i, irq;
|
||||||
i2s_write_reg(dev->i2s_base, IER, 1);
|
i2s_write_reg(dev->i2s_base, IER, 1);
|
||||||
|
|
||||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
irq = i2s_read_reg(dev->i2s_base, IMR(i));
|
||||||
|
i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x30);
|
||||||
|
}
|
||||||
i2s_write_reg(dev->i2s_base, ITER, 1);
|
i2s_write_reg(dev->i2s_base, ITER, 1);
|
||||||
else
|
} else {
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
irq = i2s_read_reg(dev->i2s_base, IMR(i));
|
||||||
|
i2s_write_reg(dev->i2s_base, IMR(i), irq & ~0x03);
|
||||||
|
}
|
||||||
i2s_write_reg(dev->i2s_base, IRER, 1);
|
i2s_write_reg(dev->i2s_base, IRER, 1);
|
||||||
|
}
|
||||||
|
|
||||||
i2s_write_reg(dev->i2s_base, CER, 1);
|
i2s_write_reg(dev->i2s_base, CER, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,8 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
|
||||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||||
case SND_SOC_DAIFMT_I2S:
|
case SND_SOC_DAIFMT_I2S:
|
||||||
/* data on rising edge of bclk, frame low 1clk before data */
|
/* data on rising edge of bclk, frame low 1clk before data */
|
||||||
strcr |= SSI_STCR_TFSI | SSI_STCR_TEFS | SSI_STCR_TXBIT0;
|
strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSI |
|
||||||
|
SSI_STCR_TEFS;
|
||||||
scr |= SSI_SCR_NET;
|
scr |= SSI_SCR_NET;
|
||||||
if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) {
|
if (ssi->flags & IMX_SSI_USE_I2S_SLAVE) {
|
||||||
scr &= ~SSI_I2S_MODE_MASK;
|
scr &= ~SSI_I2S_MODE_MASK;
|
||||||
|
@ -104,33 +105,31 @@ static int imx_ssi_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_LEFT_J:
|
case SND_SOC_DAIFMT_LEFT_J:
|
||||||
/* data on rising edge of bclk, frame high with data */
|
/* data on rising edge of bclk, frame high with data */
|
||||||
strcr |= SSI_STCR_TXBIT0;
|
strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_DSP_B:
|
case SND_SOC_DAIFMT_DSP_B:
|
||||||
/* data on rising edge of bclk, frame high with data */
|
/* data on rising edge of bclk, frame high with data */
|
||||||
strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0;
|
strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_DSP_A:
|
case SND_SOC_DAIFMT_DSP_A:
|
||||||
/* data on rising edge of bclk, frame high 1clk before data */
|
/* data on rising edge of bclk, frame high 1clk before data */
|
||||||
strcr |= SSI_STCR_TFSL | SSI_STCR_TXBIT0 | SSI_STCR_TEFS;
|
strcr |= SSI_STCR_TXBIT0 | SSI_STCR_TSCKP | SSI_STCR_TFSL |
|
||||||
|
SSI_STCR_TEFS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DAI clock inversion */
|
/* DAI clock inversion */
|
||||||
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
|
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
|
||||||
case SND_SOC_DAIFMT_IB_IF:
|
case SND_SOC_DAIFMT_IB_IF:
|
||||||
strcr |= SSI_STCR_TFSI;
|
strcr ^= SSI_STCR_TSCKP | SSI_STCR_TFSI;
|
||||||
strcr &= ~SSI_STCR_TSCKP;
|
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_IB_NF:
|
case SND_SOC_DAIFMT_IB_NF:
|
||||||
strcr &= ~(SSI_STCR_TSCKP | SSI_STCR_TFSI);
|
strcr ^= SSI_STCR_TSCKP;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_NB_IF:
|
case SND_SOC_DAIFMT_NB_IF:
|
||||||
strcr |= SSI_STCR_TFSI | SSI_STCR_TSCKP;
|
strcr ^= SSI_STCR_TFSI;
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_NB_NF:
|
case SND_SOC_DAIFMT_NB_NF:
|
||||||
strcr &= ~SSI_STCR_TFSI;
|
|
||||||
strcr |= SSI_STCR_TSCKP;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,8 @@ snd_emux_init_seq_oss(struct snd_emux *emu)
|
||||||
struct snd_seq_oss_reg *arg;
|
struct snd_seq_oss_reg *arg;
|
||||||
struct snd_seq_device *dev;
|
struct snd_seq_device *dev;
|
||||||
|
|
||||||
if (snd_seq_device_new(emu->card, 0, SNDRV_SEQ_DEV_ID_OSS,
|
/* using device#1 here for avoiding conflicts with OPL3 */
|
||||||
|
if (snd_seq_device_new(emu->card, 1, SNDRV_SEQ_DEV_ID_OSS,
|
||||||
sizeof(struct snd_seq_oss_reg), &dev) < 0)
|
sizeof(struct snd_seq_oss_reg), &dev) < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue