sound fixes for 4.0-rc3
In this pull request, there are a few more ASoC changes that have been gathered since rc1, but it's still fairly calm over all. The only largish LOC is found in atmel driver, and it's just a removal of broken non-DT stuff. The rest are all small driver-specific fixes, nothing to worry much. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABCAAGBQJU+ayYAAoJEGwxgFQ9KSmkoN0QALYBlaGtCZVOHuNozArW41RB 9QdM0HQDXKFpMahsCWfY/0zOaEFZ4LROj/kkBeVwxgyMzEgom4gHT0U5UMdKI1Jt 351SAOAaB1s1UKWir2q56DxSaNdMyjHxFMMc1LlIXFJ2U3fsGbsgAGosGCAPpIdD 2SB+6wRwXPHl7HPGy7Pu/cqBitf4wMpkrWS4K2dXzEOxakEOmsPpS3oBVbxmo8BC izn8L9iZ7FARQCRmLf0Sk3KECDwmgXcwnkBSfcRXjSYBj4eTMeMzc/FGiTSlIx2V yMhq/et21ktYues4etaPXGvygjAIiODS4xjGrYYeQm6cvCTCUOOGWTUGfH4sA7i5 uJRWT3xyiAeDVF/s1FxkhqW3tYRYI1DpisNqPekoDkQkHp3GJBvzIBLqTUO0cnTO TqhoqjXzji2gqf9IPV9d2fdtxuHlH/M+0dfivZ/4SXnZHWXU7pJE+OvslRGFCTP4 eIBz3J29Aqpa98VUnfLbAp0C+dBBuAI1J11bgi/b2shHjCMq+kDTrTfH3f04Jo94 xYcHyK9E5LqTpmzKak4hxc8ZajjU9YD/me1MyKcm+A1AAWONWcec6TVVDX9oxmUu 79nJQTFiXUauezJumDVyqv3QVCsDNDaxRJgIhyVx1MpRq68Iap+LQnYN9PDguY8/ a0/LsjVIzvOOr5Z1Z6BB =f2XS -----END PGP SIGNATURE----- Merge tag 'sound-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound fixes from Takashi Iwai: "Here are a few more ASoC changes that have been gathered since rc1, but it's still fairly calm over all. The only largish LOC is found in atmel driver, and it's just a removal of broken non-DT stuff. The rest are all small driver-specific fixes, nothing to worry much" * tag 'sound-4.0-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (26 commits) ALSA: hda - One more Dell macine needs DELL1_MIC_NO_PRESENCE quirk ALSA: opl3: small array underflow ALSA: line6: Clamp values correctly ALSA: msnd: add some missing curly braces ASoC: omap-pcm: Correct dma mask ASoC: simple-card: Add a NULL pointer check in asoc_simple_card_dai_link_of ASoC: sam9g20_wm8731: drop machine_is_xxx ALSA: dice: fix wrong offsets for Dice interface ALSA: oxfw: fix a condition and return code in start_stream() ASoC: OMAP: mcbsp: Fix CLKX and CLKR pinmux when used as inputs ASoC: rt5677: Correct the routing paths of that after IF1/2 DACx Mux ASoC: sta32x: fix register range in regmap. ASoC: rt5670: Set RT5670_IRQ_CTRL1 non volatile ASoC: Intel: reset the DSP while suspending ASoC: Intel: save and restore the CSR register ASoC: Intel: update MMX ID to 3 ASoC: max98357a: Add missing header files ASoC: cirrus: tlv320aic23 needs I2C ASoC: Samsung: add missing I2C/SPI dependencies ASoC: rt5670: Fix the speaker mono output issue ...
This commit is contained in:
commit
5f237425f3
|
@ -105,6 +105,8 @@ static void snd_opl3_calc_pitch(unsigned char *fnum, unsigned char *blocknum,
|
|||
int pitchbend = chan->midi_pitchbend;
|
||||
int segment;
|
||||
|
||||
if (pitchbend < -0x2000)
|
||||
pitchbend = -0x2000;
|
||||
if (pitchbend > 0x1FFF)
|
||||
pitchbend = 0x1FFF;
|
||||
|
||||
|
|
|
@ -298,24 +298,24 @@
|
|||
*/
|
||||
#define RX_ISOCHRONOUS 0x008
|
||||
|
||||
/*
|
||||
* Index of first quadlet to be interpreted; read/write. If > 0, that many
|
||||
* quadlets at the beginning of each data block will be ignored, and all the
|
||||
* audio and MIDI quadlets will follow.
|
||||
*/
|
||||
#define RX_SEQ_START 0x00c
|
||||
|
||||
/*
|
||||
* The number of audio channels; read-only. There will be one quadlet per
|
||||
* channel.
|
||||
*/
|
||||
#define RX_NUMBER_AUDIO 0x010
|
||||
#define RX_NUMBER_AUDIO 0x00c
|
||||
|
||||
/*
|
||||
* The number of MIDI ports, 0-8; read-only. If > 0, there will be one
|
||||
* additional quadlet in each data block, following the audio quadlets.
|
||||
*/
|
||||
#define RX_NUMBER_MIDI 0x014
|
||||
#define RX_NUMBER_MIDI 0x010
|
||||
|
||||
/*
|
||||
* Index of first quadlet to be interpreted; read/write. If > 0, that many
|
||||
* quadlets at the beginning of each data block will be ignored, and all the
|
||||
* audio and MIDI quadlets will follow.
|
||||
*/
|
||||
#define RX_SEQ_START 0x014
|
||||
|
||||
/*
|
||||
* Names of all audio channels; read-only. Quadlets are byte-swapped. Names
|
||||
|
|
|
@ -99,9 +99,9 @@ static void dice_proc_read(struct snd_info_entry *entry,
|
|||
} tx;
|
||||
struct {
|
||||
u32 iso;
|
||||
u32 seq_start;
|
||||
u32 number_audio;
|
||||
u32 number_midi;
|
||||
u32 seq_start;
|
||||
char names[RX_NAMES_SIZE];
|
||||
u32 ac3_caps;
|
||||
u32 ac3_enable;
|
||||
|
@ -204,10 +204,10 @@ static void dice_proc_read(struct snd_info_entry *entry,
|
|||
break;
|
||||
snd_iprintf(buffer, "rx %u:\n", stream);
|
||||
snd_iprintf(buffer, " iso channel: %d\n", (int)buf.rx.iso);
|
||||
snd_iprintf(buffer, " sequence start: %u\n", buf.rx.seq_start);
|
||||
snd_iprintf(buffer, " audio channels: %u\n",
|
||||
buf.rx.number_audio);
|
||||
snd_iprintf(buffer, " midi ports: %u\n", buf.rx.number_midi);
|
||||
snd_iprintf(buffer, " sequence start: %u\n", buf.rx.seq_start);
|
||||
if (quadlets >= 68) {
|
||||
dice_proc_fixup_string(buf.rx.names, RX_NAMES_SIZE);
|
||||
snd_iprintf(buffer, " names: %s\n", buf.rx.names);
|
||||
|
|
|
@ -171,9 +171,10 @@ static int start_stream(struct snd_oxfw *oxfw, struct amdtp_stream *stream,
|
|||
}
|
||||
|
||||
/* Wait first packet */
|
||||
err = amdtp_stream_wait_callback(stream, CALLBACK_TIMEOUT);
|
||||
if (err < 0)
|
||||
if (!amdtp_stream_wait_callback(stream, CALLBACK_TIMEOUT)) {
|
||||
stop_stream(oxfw, stream);
|
||||
err = -ETIMEDOUT;
|
||||
}
|
||||
end:
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -306,11 +306,12 @@ int snd_msndmix_new(struct snd_card *card)
|
|||
spin_lock_init(&chip->mixer_lock);
|
||||
strcpy(card->mixername, "MSND Pinnacle Mixer");
|
||||
|
||||
for (idx = 0; idx < ARRAY_SIZE(snd_msnd_controls); idx++)
|
||||
for (idx = 0; idx < ARRAY_SIZE(snd_msnd_controls); idx++) {
|
||||
err = snd_ctl_add(card,
|
||||
snd_ctl_new1(snd_msnd_controls + idx, chip));
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -5209,6 +5209,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
|||
{0x17, 0x40000000},
|
||||
{0x1d, 0x40700001},
|
||||
{0x21, 0x02211040}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
|
||||
ALC255_STANDARD_PINS,
|
||||
{0x12, 0x90a60170},
|
||||
{0x14, 0x90170140},
|
||||
{0x17, 0x40000000},
|
||||
{0x1d, 0x40700001},
|
||||
{0x21, 0x02211050}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
|
||||
{0x12, 0x90a60130},
|
||||
{0x13, 0x40000000},
|
||||
|
|
|
@ -46,8 +46,6 @@
|
|||
#include <sound/pcm_params.h>
|
||||
#include <sound/soc.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include "../codecs/wm8731.h"
|
||||
#include "atmel-pcm.h"
|
||||
#include "atmel_ssc_dai.h"
|
||||
|
@ -171,9 +169,7 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev)
|
|||
int ret;
|
||||
|
||||
if (!np) {
|
||||
if (!(machine_is_at91sam9g20ek() ||
|
||||
machine_is_at91sam9g20ek_2mmc()))
|
||||
return -ENODEV;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ret = atmel_ssc_set_audio(0);
|
||||
|
@ -210,39 +206,37 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev)
|
|||
card->dev = &pdev->dev;
|
||||
|
||||
/* Parse device node info */
|
||||
if (np) {
|
||||
ret = snd_soc_of_parse_card_name(card, "atmel,model");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = snd_soc_of_parse_card_name(card, "atmel,model");
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
ret = snd_soc_of_parse_audio_routing(card,
|
||||
"atmel,audio-routing");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = snd_soc_of_parse_audio_routing(card,
|
||||
"atmel,audio-routing");
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
/* Parse codec info */
|
||||
at91sam9g20ek_dai.codec_name = NULL;
|
||||
codec_np = of_parse_phandle(np, "atmel,audio-codec", 0);
|
||||
if (!codec_np) {
|
||||
dev_err(&pdev->dev, "codec info missing\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
at91sam9g20ek_dai.codec_of_node = codec_np;
|
||||
|
||||
/* Parse dai and platform info */
|
||||
at91sam9g20ek_dai.cpu_dai_name = NULL;
|
||||
at91sam9g20ek_dai.platform_name = NULL;
|
||||
cpu_np = of_parse_phandle(np, "atmel,ssc-controller", 0);
|
||||
if (!cpu_np) {
|
||||
dev_err(&pdev->dev, "dai and pcm info missing\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
at91sam9g20ek_dai.cpu_of_node = cpu_np;
|
||||
at91sam9g20ek_dai.platform_of_node = cpu_np;
|
||||
|
||||
of_node_put(codec_np);
|
||||
of_node_put(cpu_np);
|
||||
/* Parse codec info */
|
||||
at91sam9g20ek_dai.codec_name = NULL;
|
||||
codec_np = of_parse_phandle(np, "atmel,audio-codec", 0);
|
||||
if (!codec_np) {
|
||||
dev_err(&pdev->dev, "codec info missing\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
at91sam9g20ek_dai.codec_of_node = codec_np;
|
||||
|
||||
/* Parse dai and platform info */
|
||||
at91sam9g20ek_dai.cpu_dai_name = NULL;
|
||||
at91sam9g20ek_dai.platform_name = NULL;
|
||||
cpu_np = of_parse_phandle(np, "atmel,ssc-controller", 0);
|
||||
if (!cpu_np) {
|
||||
dev_err(&pdev->dev, "dai and pcm info missing\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
at91sam9g20ek_dai.cpu_of_node = cpu_np;
|
||||
at91sam9g20ek_dai.platform_of_node = cpu_np;
|
||||
|
||||
of_node_put(codec_np);
|
||||
of_node_put(cpu_np);
|
||||
|
||||
ret = snd_soc_register_card(card);
|
||||
if (ret) {
|
||||
|
|
|
@ -16,7 +16,7 @@ config SND_EP93XX_SOC_AC97
|
|||
|
||||
config SND_EP93XX_SOC_SNAPPERCL15
|
||||
tristate "SoC Audio support for Bluewater Systems Snapper CL15 module"
|
||||
depends on SND_EP93XX_SOC && MACH_SNAPPER_CL15
|
||||
depends on SND_EP93XX_SOC && MACH_SNAPPER_CL15 && I2C
|
||||
select SND_EP93XX_SOC_I2S
|
||||
select SND_SOC_TLV320AIC23_I2C
|
||||
help
|
||||
|
|
|
@ -69,7 +69,7 @@ config SND_SOC_ALL_CODECS
|
|||
select SND_SOC_MAX98088 if I2C
|
||||
select SND_SOC_MAX98090 if I2C
|
||||
select SND_SOC_MAX98095 if I2C
|
||||
select SND_SOC_MAX98357A
|
||||
select SND_SOC_MAX98357A if GPIOLIB
|
||||
select SND_SOC_MAX9850 if I2C
|
||||
select SND_SOC_MAX9768 if I2C
|
||||
select SND_SOC_MAX9877 if I2C
|
||||
|
|
|
@ -12,9 +12,19 @@
|
|||
* max98357a.c -- MAX98357A ALSA SoC Codec driver
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/soc.h>
|
||||
#include <sound/soc-dai.h>
|
||||
#include <sound/soc-dapm.h>
|
||||
|
||||
#define DRV_NAME "max98357a"
|
||||
|
||||
|
|
|
@ -225,7 +225,6 @@ static bool rt5670_volatile_register(struct device *dev, unsigned int reg)
|
|||
case RT5670_ADC_EQ_CTRL1:
|
||||
case RT5670_EQ_CTRL1:
|
||||
case RT5670_ALC_CTRL_1:
|
||||
case RT5670_IRQ_CTRL1:
|
||||
case RT5670_IRQ_CTRL2:
|
||||
case RT5670_INT_IRQ_ST:
|
||||
case RT5670_IL_CMD:
|
||||
|
@ -2703,6 +2702,12 @@ static int rt5670_i2c_probe(struct i2c_client *i2c,
|
|||
|
||||
regmap_write(rt5670->regmap, RT5670_RESET, 0);
|
||||
|
||||
regmap_read(rt5670->regmap, RT5670_VENDOR_ID, &val);
|
||||
if (val >= 4)
|
||||
regmap_write(rt5670->regmap, RT5670_GPIO_CTRL3, 0x0980);
|
||||
else
|
||||
regmap_write(rt5670->regmap, RT5670_GPIO_CTRL3, 0x0d00);
|
||||
|
||||
ret = regmap_register_patch(rt5670->regmap, init_list,
|
||||
ARRAY_SIZE(init_list));
|
||||
if (ret != 0)
|
||||
|
|
|
@ -3284,8 +3284,8 @@ static const struct snd_soc_dapm_route rt5677_dapm_routes[] = {
|
|||
{ "IB45 Bypass Mux", "Bypass", "IB45 Mux" },
|
||||
{ "IB45 Bypass Mux", "Pass SRC", "IB45 Mux" },
|
||||
|
||||
{ "IB6 Mux", "IF1 DAC 6", "IF1 DAC6" },
|
||||
{ "IB6 Mux", "IF2 DAC 6", "IF2 DAC6" },
|
||||
{ "IB6 Mux", "IF1 DAC 6", "IF1 DAC6 Mux" },
|
||||
{ "IB6 Mux", "IF2 DAC 6", "IF2 DAC6 Mux" },
|
||||
{ "IB6 Mux", "SLB DAC 6", "SLB DAC6" },
|
||||
{ "IB6 Mux", "STO4 ADC MIX L", "Stereo4 ADC MIXL" },
|
||||
{ "IB6 Mux", "IF4 DAC L", "IF4 DAC L" },
|
||||
|
@ -3293,8 +3293,8 @@ static const struct snd_soc_dapm_route rt5677_dapm_routes[] = {
|
|||
{ "IB6 Mux", "STO2 ADC MIX L", "Stereo2 ADC MIXL" },
|
||||
{ "IB6 Mux", "STO3 ADC MIX L", "Stereo3 ADC MIXL" },
|
||||
|
||||
{ "IB7 Mux", "IF1 DAC 7", "IF1 DAC7" },
|
||||
{ "IB7 Mux", "IF2 DAC 7", "IF2 DAC7" },
|
||||
{ "IB7 Mux", "IF1 DAC 7", "IF1 DAC7 Mux" },
|
||||
{ "IB7 Mux", "IF2 DAC 7", "IF2 DAC7 Mux" },
|
||||
{ "IB7 Mux", "SLB DAC 7", "SLB DAC7" },
|
||||
{ "IB7 Mux", "STO4 ADC MIX R", "Stereo4 ADC MIXR" },
|
||||
{ "IB7 Mux", "IF4 DAC R", "IF4 DAC R" },
|
||||
|
@ -3635,15 +3635,15 @@ static const struct snd_soc_dapm_route rt5677_dapm_routes[] = {
|
|||
{ "DAC1 FS", NULL, "DAC1 MIXL" },
|
||||
{ "DAC1 FS", NULL, "DAC1 MIXR" },
|
||||
|
||||
{ "DAC2 L Mux", "IF1 DAC 2", "IF1 DAC2" },
|
||||
{ "DAC2 L Mux", "IF2 DAC 2", "IF2 DAC2" },
|
||||
{ "DAC2 L Mux", "IF1 DAC 2", "IF1 DAC2 Mux" },
|
||||
{ "DAC2 L Mux", "IF2 DAC 2", "IF2 DAC2 Mux" },
|
||||
{ "DAC2 L Mux", "IF3 DAC L", "IF3 DAC L" },
|
||||
{ "DAC2 L Mux", "IF4 DAC L", "IF4 DAC L" },
|
||||
{ "DAC2 L Mux", "SLB DAC 2", "SLB DAC2" },
|
||||
{ "DAC2 L Mux", "OB 2", "OutBound2" },
|
||||
|
||||
{ "DAC2 R Mux", "IF1 DAC 3", "IF1 DAC3" },
|
||||
{ "DAC2 R Mux", "IF2 DAC 3", "IF2 DAC3" },
|
||||
{ "DAC2 R Mux", "IF1 DAC 3", "IF1 DAC3 Mux" },
|
||||
{ "DAC2 R Mux", "IF2 DAC 3", "IF2 DAC3 Mux" },
|
||||
{ "DAC2 R Mux", "IF3 DAC R", "IF3 DAC R" },
|
||||
{ "DAC2 R Mux", "IF4 DAC R", "IF4 DAC R" },
|
||||
{ "DAC2 R Mux", "SLB DAC 3", "SLB DAC3" },
|
||||
|
@ -3651,29 +3651,29 @@ static const struct snd_soc_dapm_route rt5677_dapm_routes[] = {
|
|||
{ "DAC2 R Mux", "Haptic Generator", "Haptic Generator" },
|
||||
{ "DAC2 R Mux", "VAD ADC", "VAD ADC Mux" },
|
||||
|
||||
{ "DAC3 L Mux", "IF1 DAC 4", "IF1 DAC4" },
|
||||
{ "DAC3 L Mux", "IF2 DAC 4", "IF2 DAC4" },
|
||||
{ "DAC3 L Mux", "IF1 DAC 4", "IF1 DAC4 Mux" },
|
||||
{ "DAC3 L Mux", "IF2 DAC 4", "IF2 DAC4 Mux" },
|
||||
{ "DAC3 L Mux", "IF3 DAC L", "IF3 DAC L" },
|
||||
{ "DAC3 L Mux", "IF4 DAC L", "IF4 DAC L" },
|
||||
{ "DAC3 L Mux", "SLB DAC 4", "SLB DAC4" },
|
||||
{ "DAC3 L Mux", "OB 4", "OutBound4" },
|
||||
|
||||
{ "DAC3 R Mux", "IF1 DAC 5", "IF1 DAC4" },
|
||||
{ "DAC3 R Mux", "IF2 DAC 5", "IF2 DAC4" },
|
||||
{ "DAC3 R Mux", "IF1 DAC 5", "IF1 DAC5 Mux" },
|
||||
{ "DAC3 R Mux", "IF2 DAC 5", "IF2 DAC5 Mux" },
|
||||
{ "DAC3 R Mux", "IF3 DAC R", "IF3 DAC R" },
|
||||
{ "DAC3 R Mux", "IF4 DAC R", "IF4 DAC R" },
|
||||
{ "DAC3 R Mux", "SLB DAC 5", "SLB DAC5" },
|
||||
{ "DAC3 R Mux", "OB 5", "OutBound5" },
|
||||
|
||||
{ "DAC4 L Mux", "IF1 DAC 6", "IF1 DAC6" },
|
||||
{ "DAC4 L Mux", "IF2 DAC 6", "IF2 DAC6" },
|
||||
{ "DAC4 L Mux", "IF1 DAC 6", "IF1 DAC6 Mux" },
|
||||
{ "DAC4 L Mux", "IF2 DAC 6", "IF2 DAC6 Mux" },
|
||||
{ "DAC4 L Mux", "IF3 DAC L", "IF3 DAC L" },
|
||||
{ "DAC4 L Mux", "IF4 DAC L", "IF4 DAC L" },
|
||||
{ "DAC4 L Mux", "SLB DAC 6", "SLB DAC6" },
|
||||
{ "DAC4 L Mux", "OB 6", "OutBound6" },
|
||||
|
||||
{ "DAC4 R Mux", "IF1 DAC 7", "IF1 DAC7" },
|
||||
{ "DAC4 R Mux", "IF2 DAC 7", "IF2 DAC7" },
|
||||
{ "DAC4 R Mux", "IF1 DAC 7", "IF1 DAC7 Mux" },
|
||||
{ "DAC4 R Mux", "IF2 DAC 7", "IF2 DAC7 Mux" },
|
||||
{ "DAC4 R Mux", "IF3 DAC R", "IF3 DAC R" },
|
||||
{ "DAC4 R Mux", "IF4 DAC R", "IF4 DAC R" },
|
||||
{ "DAC4 R Mux", "SLB DAC 7", "SLB DAC7" },
|
||||
|
|
|
@ -106,13 +106,11 @@ static const struct reg_default sta32x_regs[] = {
|
|||
};
|
||||
|
||||
static const struct regmap_range sta32x_write_regs_range[] = {
|
||||
regmap_reg_range(STA32X_CONFA, STA32X_AUTO2),
|
||||
regmap_reg_range(STA32X_C1CFG, STA32X_FDRC2),
|
||||
regmap_reg_range(STA32X_CONFA, STA32X_FDRC2),
|
||||
};
|
||||
|
||||
static const struct regmap_range sta32x_read_regs_range[] = {
|
||||
regmap_reg_range(STA32X_CONFA, STA32X_AUTO2),
|
||||
regmap_reg_range(STA32X_C1CFG, STA32X_FDRC2),
|
||||
regmap_reg_range(STA32X_CONFA, STA32X_FDRC2),
|
||||
};
|
||||
|
||||
static const struct regmap_range sta32x_volatile_regs_range[] = {
|
||||
|
|
|
@ -603,10 +603,6 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
|
|||
factor = (div2 + 1) * (7 * psr + 1) * 2;
|
||||
|
||||
for (i = 0; i < 255; i++) {
|
||||
/* The bclk rate must be smaller than 1/5 sysclk rate */
|
||||
if (factor * (i + 1) < 5)
|
||||
continue;
|
||||
|
||||
tmprate = freq * factor * (i + 2);
|
||||
|
||||
if (baudclk_is_used)
|
||||
|
@ -614,6 +610,13 @@ static int fsl_ssi_set_bclk(struct snd_pcm_substream *substream,
|
|||
else
|
||||
clkrate = clk_round_rate(ssi_private->baudclk, tmprate);
|
||||
|
||||
/*
|
||||
* Hardware limitation: The bclk rate must be
|
||||
* never greater than 1/5 IPG clock rate
|
||||
*/
|
||||
if (clkrate * 5 > clk_get_rate(ssi_private->clk))
|
||||
continue;
|
||||
|
||||
clkrate /= factor;
|
||||
afreq = clkrate / (i + 1);
|
||||
|
||||
|
|
|
@ -372,6 +372,11 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
|
|||
strlen(dai_link->cpu_dai_name) +
|
||||
strlen(dai_link->codec_dai_name) + 2,
|
||||
GFP_KERNEL);
|
||||
if (!name) {
|
||||
ret = -ENOMEM;
|
||||
goto dai_link_of_err;
|
||||
}
|
||||
|
||||
sprintf(name, "%s-%s", dai_link->cpu_dai_name,
|
||||
dai_link->codec_dai_name);
|
||||
dai_link->name = dai_link->stream_name = name;
|
||||
|
|
|
@ -150,7 +150,7 @@ enum sst_cmd_type {
|
|||
|
||||
enum sst_task {
|
||||
SST_TASK_SBA = 1,
|
||||
SST_TASK_MMX,
|
||||
SST_TASK_MMX = 3,
|
||||
};
|
||||
|
||||
enum sst_type {
|
||||
|
|
|
@ -350,7 +350,9 @@ static inline void sst_save_shim64(struct intel_sst_drv *ctx,
|
|||
|
||||
spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags);
|
||||
|
||||
shim_regs->imrx = sst_shim_read64(shim, SST_IMRX),
|
||||
shim_regs->imrx = sst_shim_read64(shim, SST_IMRX);
|
||||
shim_regs->csr = sst_shim_read64(shim, SST_CSR);
|
||||
|
||||
|
||||
spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags);
|
||||
}
|
||||
|
@ -367,6 +369,7 @@ static inline void sst_restore_shim64(struct intel_sst_drv *ctx,
|
|||
*/
|
||||
spin_lock_irqsave(&ctx->ipc_spin_lock, irq_flags);
|
||||
sst_shim_write64(shim, SST_IMRX, shim_regs->imrx),
|
||||
sst_shim_write64(shim, SST_CSR, shim_regs->csr),
|
||||
spin_unlock_irqrestore(&ctx->ipc_spin_lock, irq_flags);
|
||||
}
|
||||
|
||||
|
@ -379,6 +382,10 @@ void sst_configure_runtime_pm(struct intel_sst_drv *ctx)
|
|||
* initially active. So change the state to active before
|
||||
* enabling the pm
|
||||
*/
|
||||
|
||||
if (!acpi_disabled)
|
||||
pm_runtime_set_active(ctx->dev);
|
||||
|
||||
pm_runtime_enable(ctx->dev);
|
||||
|
||||
if (acpi_disabled)
|
||||
|
@ -409,6 +416,7 @@ static int intel_sst_runtime_suspend(struct device *dev)
|
|||
synchronize_irq(ctx->irq_num);
|
||||
flush_workqueue(ctx->post_msg_wq);
|
||||
|
||||
ctx->ops->reset(ctx);
|
||||
/* save the shim registers because PMC doesn't save state */
|
||||
sst_save_shim64(ctx, ctx->shim, ctx->shim_regs64);
|
||||
|
||||
|
|
|
@ -352,6 +352,9 @@ static int omap_hdmi_audio_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
|
||||
card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
|
||||
if (!card)
|
||||
return -ENOMEM;
|
||||
|
||||
card->name = devm_kasprintf(dev, GFP_KERNEL,
|
||||
"HDMI %s", dev_name(ad->dssdev));
|
||||
card->owner = THIS_MODULE;
|
||||
|
|
|
@ -530,8 +530,19 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
|
|||
|
||||
case OMAP_MCBSP_SYSCLK_CLKX_EXT:
|
||||
regs->srgr2 |= CLKSM;
|
||||
regs->pcr0 |= SCLKME;
|
||||
/*
|
||||
* If McBSP is master but yet the CLKX/CLKR pin drives the SRG,
|
||||
* disable output on those pins. This enables to inject the
|
||||
* reference clock through CLKX/CLKR. For this to work
|
||||
* set_dai_sysclk() _needs_ to be called after set_dai_fmt().
|
||||
*/
|
||||
regs->pcr0 &= ~CLKXM;
|
||||
break;
|
||||
case OMAP_MCBSP_SYSCLK_CLKR_EXT:
|
||||
regs->pcr0 |= SCLKME;
|
||||
/* Disable ouput on CLKR pin in master mode */
|
||||
regs->pcr0 &= ~CLKRM;
|
||||
break;
|
||||
default:
|
||||
err = -ENODEV;
|
||||
|
|
|
@ -201,7 +201,7 @@ static int omap_pcm_new(struct snd_soc_pcm_runtime *rtd)
|
|||
struct snd_pcm *pcm = rtd->pcm;
|
||||
int ret;
|
||||
|
||||
ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(64));
|
||||
ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32));
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -174,7 +174,7 @@ config SND_SOC_SMDK_WM8994_PCM
|
|||
|
||||
config SND_SOC_SPEYSIDE
|
||||
tristate "Audio support for Wolfson Speyside"
|
||||
depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410
|
||||
depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410 && I2C && SPI_MASTER
|
||||
select SND_SAMSUNG_I2S
|
||||
select SND_SOC_WM8996
|
||||
select SND_SOC_WM9081
|
||||
|
@ -189,7 +189,7 @@ config SND_SOC_TOBERMORY
|
|||
|
||||
config SND_SOC_BELLS
|
||||
tristate "Audio support for Wolfson Bells"
|
||||
depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410 && MFD_ARIZONA
|
||||
depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410 && MFD_ARIZONA && I2C && SPI_MASTER
|
||||
select SND_SAMSUNG_I2S
|
||||
select SND_SOC_WM5102
|
||||
select SND_SOC_WM5110
|
||||
|
@ -206,7 +206,7 @@ config SND_SOC_LOWLAND
|
|||
|
||||
config SND_SOC_LITTLEMILL
|
||||
tristate "Audio support for Wolfson Littlemill"
|
||||
depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410
|
||||
depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410 && I2C
|
||||
select SND_SAMSUNG_I2S
|
||||
select MFD_WM8994
|
||||
select SND_SOC_WM8994
|
||||
|
@ -223,7 +223,7 @@ config SND_SOC_SNOW
|
|||
|
||||
config SND_SOC_ODROIDX2
|
||||
tristate "Audio support for Odroid-X2 and Odroid-U3"
|
||||
depends on SND_SOC_SAMSUNG
|
||||
depends on SND_SOC_SAMSUNG && I2C
|
||||
select SND_SOC_MAX98090
|
||||
select SND_SAMSUNG_I2S
|
||||
help
|
||||
|
@ -231,6 +231,6 @@ config SND_SOC_ODROIDX2
|
|||
|
||||
config SND_SOC_ARNDALE_RT5631_ALC5631
|
||||
tristate "Audio support for RT5631(ALC5631) on Arndale Board"
|
||||
depends on SND_SOC_SAMSUNG
|
||||
depends on SND_SOC_SAMSUNG && I2C
|
||||
select SND_SAMSUNG_I2S
|
||||
select SND_SOC_RT5631
|
||||
|
|
|
@ -1252,6 +1252,8 @@ static int rsnd_probe(struct platform_device *pdev)
|
|||
goto exit_snd_probe;
|
||||
}
|
||||
|
||||
dev_set_drvdata(dev, priv);
|
||||
|
||||
/*
|
||||
* asoc register
|
||||
*/
|
||||
|
@ -1268,8 +1270,6 @@ static int rsnd_probe(struct platform_device *pdev)
|
|||
goto exit_snd_soc;
|
||||
}
|
||||
|
||||
dev_set_drvdata(dev, priv);
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
dev_info(dev, "probed\n");
|
||||
|
|
|
@ -39,7 +39,7 @@ static void change_volume(struct urb *urb_out, int volume[],
|
|||
for (; p < buf_end; ++p) {
|
||||
short pv = le16_to_cpu(*p);
|
||||
int val = (pv * volume[chn & 1]) >> 8;
|
||||
pv = clamp(val, 0x7fff, -0x8000);
|
||||
pv = clamp(val, -0x8000, 0x7fff);
|
||||
*p = cpu_to_le16(pv);
|
||||
++chn;
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ static void change_volume(struct urb *urb_out, int volume[],
|
|||
|
||||
val = p[0] + (p[1] << 8) + ((signed char)p[2] << 16);
|
||||
val = (val * volume[chn & 1]) >> 8;
|
||||
val = clamp(val, 0x7fffff, -0x800000);
|
||||
val = clamp(val, -0x800000, 0x7fffff);
|
||||
p[0] = val;
|
||||
p[1] = val >> 8;
|
||||
p[2] = val >> 16;
|
||||
|
@ -126,7 +126,7 @@ static void add_monitor_signal(struct urb *urb_out, unsigned char *signal,
|
|||
short pov = le16_to_cpu(*po);
|
||||
short piv = le16_to_cpu(*pi);
|
||||
int val = pov + ((piv * volume) >> 8);
|
||||
pov = clamp(val, 0x7fff, -0x8000);
|
||||
pov = clamp(val, -0x8000, 0x7fff);
|
||||
*po = cpu_to_le16(pov);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue