Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "All are boring small fixes in various parts: - A few possible NULL-dereference or zero-division Oops fixes - Fix vmaster slave volume notification - Add codec ID for ALC233 - Various fixes in several ASoC WM codecs - ASoC tegra i2c fix Sorry if you wanted a thrilling adventure with huge sharks :)" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: ice1712: Initialize card->private_data properly ALSA: hda - Add support of new codec ALC233 ALSA: hda/ca0132 - Avoid division by zero in dspxfr_one_seg() ALSA: hda - check NULL pointer when creating SPDIF PCM switch ALSA: hda - check NULL pointer when creating SPDIF controls ASoC: wm5102: Apply a SYSCLK patch for later revs ALSA: vmaster: Fix slave change notification ASoC: tegra: fix I2S bit count mask ALSA: seq: seq_oss_event: missing range checks ASoC: wm8350: Use jiffies rather than msecs in schedule_delayed_work() ASoC: wm5110: Correct OUT2/3 volume and switch names ASoC: wm5102: Correct OUT2 volume and switch names ASoC: wm8960: Fix ADC power bits ASoC: wm8960: Correct register 0 and 1 defaults
This commit is contained in:
commit
eca968305c
12 changed files with 64 additions and 25 deletions
|
@ -285,7 +285,12 @@ local_event(struct seq_oss_devinfo *dp, union evrec *q, struct snd_seq_event *ev
|
|||
static int
|
||||
note_on_event(struct seq_oss_devinfo *dp, int dev, int ch, int note, int vel, struct snd_seq_event *ev)
|
||||
{
|
||||
struct seq_oss_synthinfo *info = &dp->synths[dev];
|
||||
struct seq_oss_synthinfo *info;
|
||||
|
||||
if (!snd_seq_oss_synth_is_valid(dp, dev))
|
||||
return -ENXIO;
|
||||
|
||||
info = &dp->synths[dev];
|
||||
switch (info->arg.event_passing) {
|
||||
case SNDRV_SEQ_OSS_PROCESS_EVENTS:
|
||||
if (! info->ch || ch < 0 || ch >= info->nr_voices) {
|
||||
|
@ -340,7 +345,12 @@ note_on_event(struct seq_oss_devinfo *dp, int dev, int ch, int note, int vel, st
|
|||
static int
|
||||
note_off_event(struct seq_oss_devinfo *dp, int dev, int ch, int note, int vel, struct snd_seq_event *ev)
|
||||
{
|
||||
struct seq_oss_synthinfo *info = &dp->synths[dev];
|
||||
struct seq_oss_synthinfo *info;
|
||||
|
||||
if (!snd_seq_oss_synth_is_valid(dp, dev))
|
||||
return -ENXIO;
|
||||
|
||||
info = &dp->synths[dev];
|
||||
switch (info->arg.event_passing) {
|
||||
case SNDRV_SEQ_OSS_PROCESS_EVENTS:
|
||||
if (! info->ch || ch < 0 || ch >= info->nr_voices) {
|
||||
|
|
|
@ -213,7 +213,10 @@ static int slave_put(struct snd_kcontrol *kcontrol,
|
|||
}
|
||||
if (!changed)
|
||||
return 0;
|
||||
return slave_put_val(slave, ucontrol);
|
||||
err = slave_put_val(slave, ucontrol);
|
||||
if (err < 0)
|
||||
return err;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int slave_tlv_cmd(struct snd_kcontrol *kcontrol,
|
||||
|
|
|
@ -3334,6 +3334,8 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
|
|||
return -EBUSY;
|
||||
}
|
||||
spdif = snd_array_new(&codec->spdif_out);
|
||||
if (!spdif)
|
||||
return -ENOMEM;
|
||||
for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
|
||||
kctl = snd_ctl_new1(dig_mix, codec);
|
||||
if (!kctl)
|
||||
|
@ -3431,11 +3433,16 @@ static struct snd_kcontrol_new spdif_share_sw = {
|
|||
int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
|
||||
struct hda_multi_out *mout)
|
||||
{
|
||||
struct snd_kcontrol *kctl;
|
||||
|
||||
if (!mout->dig_out_nid)
|
||||
return 0;
|
||||
|
||||
kctl = snd_ctl_new1(&spdif_share_sw, mout);
|
||||
if (!kctl)
|
||||
return -ENOMEM;
|
||||
/* ATTENTION: here mout is passed as private_data, instead of codec */
|
||||
return snd_hda_ctl_add(codec, mout->dig_out_nid,
|
||||
snd_ctl_new1(&spdif_share_sw, mout));
|
||||
return snd_hda_ctl_add(codec, mout->dig_out_nid, kctl);
|
||||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
|
||||
|
||||
|
|
|
@ -2298,6 +2298,11 @@ static int dspxfr_one_seg(struct hda_codec *codec,
|
|||
hda_frame_size_words = ((sample_rate_div == 0) ? 0 :
|
||||
(num_chans * sample_rate_mul / sample_rate_div));
|
||||
|
||||
if (hda_frame_size_words == 0) {
|
||||
snd_printdd(KERN_ERR "frmsz zero\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
buffer_size_words = min(buffer_size_words,
|
||||
(unsigned int)(UC_RANGE(chip_addx, 1) ?
|
||||
65536 : 32768));
|
||||
|
@ -2308,8 +2313,7 @@ static int dspxfr_one_seg(struct hda_codec *codec,
|
|||
chip_addx, hda_frame_size_words, num_chans,
|
||||
sample_rate_mul, sample_rate_div, buffer_size_words);
|
||||
|
||||
if ((buffer_addx == NULL) || (hda_frame_size_words == 0) ||
|
||||
(buffer_size_words < hda_frame_size_words)) {
|
||||
if (buffer_size_words < hda_frame_size_words) {
|
||||
snd_printdd(KERN_ERR "dspxfr_one_seg:failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
@ -3163,6 +3163,7 @@ static int patch_alc269(struct hda_codec *codec)
|
|||
case 0x10ec0290:
|
||||
spec->codec_variant = ALC269_TYPE_ALC280;
|
||||
break;
|
||||
case 0x10ec0233:
|
||||
case 0x10ec0282:
|
||||
case 0x10ec0283:
|
||||
spec->codec_variant = ALC269_TYPE_ALC282;
|
||||
|
@ -3862,6 +3863,7 @@ static int patch_alc680(struct hda_codec *codec)
|
|||
*/
|
||||
static const struct hda_codec_preset snd_hda_preset_realtek[] = {
|
||||
{ .id = 0x10ec0221, .name = "ALC221", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 },
|
||||
{ .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 },
|
||||
{ .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 },
|
||||
{ .id = 0x10ec0267, .name = "ALC267", .patch = patch_alc268 },
|
||||
|
|
|
@ -2594,6 +2594,8 @@ static int snd_ice1712_create(struct snd_card *card,
|
|||
snd_ice1712_proc_init(ice);
|
||||
synchronize_irq(pci->irq);
|
||||
|
||||
card->private_data = ice;
|
||||
|
||||
err = pci_request_regions(pci, "ICE1712");
|
||||
if (err < 0) {
|
||||
kfree(ice);
|
||||
|
|
|
@ -573,6 +573,13 @@ static const struct reg_default wm5102_sysclk_reva_patch[] = {
|
|||
{ 0x025e, 0x0112 },
|
||||
};
|
||||
|
||||
static const struct reg_default wm5102_sysclk_revb_patch[] = {
|
||||
{ 0x3081, 0x08FE },
|
||||
{ 0x3083, 0x00ED },
|
||||
{ 0x30C1, 0x08FE },
|
||||
{ 0x30C3, 0x00ED },
|
||||
};
|
||||
|
||||
static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
|
@ -587,6 +594,10 @@ static int wm5102_sysclk_ev(struct snd_soc_dapm_widget *w,
|
|||
patch = wm5102_sysclk_reva_patch;
|
||||
patch_size = ARRAY_SIZE(wm5102_sysclk_reva_patch);
|
||||
break;
|
||||
default:
|
||||
patch = wm5102_sysclk_revb_patch;
|
||||
patch_size = ARRAY_SIZE(wm5102_sysclk_revb_patch);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (event) {
|
||||
|
@ -755,7 +766,7 @@ SOC_SINGLE("SPKDAT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_5L,
|
|||
|
||||
SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1),
|
||||
SOC_DOUBLE_R("OUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_MUTE_SHIFT, 1, 1),
|
||||
SOC_SINGLE("EPOUT Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_3L,
|
||||
ARIZONA_OUT3L_MUTE_SHIFT, 1, 1),
|
||||
|
@ -767,7 +778,7 @@ SOC_DOUBLE_R("SPKDAT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_5L,
|
|||
SOC_DOUBLE_R_TLV("HPOUT1 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_1L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_VOL_SHIFT,
|
||||
0xbf, 0, digital_tlv),
|
||||
SOC_DOUBLE_R_TLV("OUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
SOC_DOUBLE_R_TLV("HPOUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_VOL_SHIFT,
|
||||
0xbf, 0, digital_tlv),
|
||||
SOC_SINGLE_TLV("EPOUT Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_3L,
|
||||
|
|
|
@ -213,9 +213,9 @@ ARIZONA_MIXER_CONTROLS("SPKDAT2R", ARIZONA_OUT6RMIX_INPUT_1_SOURCE),
|
|||
|
||||
SOC_SINGLE("HPOUT1 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_1L,
|
||||
ARIZONA_OUT1_OSR_SHIFT, 1, 0),
|
||||
SOC_SINGLE("OUT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_2L,
|
||||
SOC_SINGLE("HPOUT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_2L,
|
||||
ARIZONA_OUT2_OSR_SHIFT, 1, 0),
|
||||
SOC_SINGLE("OUT3 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_3L,
|
||||
SOC_SINGLE("HPOUT3 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_3L,
|
||||
ARIZONA_OUT3_OSR_SHIFT, 1, 0),
|
||||
SOC_SINGLE("Speaker High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_4L,
|
||||
ARIZONA_OUT4_OSR_SHIFT, 1, 0),
|
||||
|
@ -226,9 +226,9 @@ SOC_SINGLE("SPKDAT2 High Performance Switch", ARIZONA_OUTPUT_PATH_CONFIG_6L,
|
|||
|
||||
SOC_DOUBLE_R("HPOUT1 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_1L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_MUTE_SHIFT, 1, 1),
|
||||
SOC_DOUBLE_R("OUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
SOC_DOUBLE_R("HPOUT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_MUTE_SHIFT, 1, 1),
|
||||
SOC_DOUBLE_R("OUT3 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_3L,
|
||||
SOC_DOUBLE_R("HPOUT3 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_3L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_3R, ARIZONA_OUT3L_MUTE_SHIFT, 1, 1),
|
||||
SOC_DOUBLE_R("Speaker Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_4L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_4R, ARIZONA_OUT4L_MUTE_SHIFT, 1, 1),
|
||||
|
@ -240,10 +240,10 @@ SOC_DOUBLE_R("SPKDAT2 Digital Switch", ARIZONA_DAC_DIGITAL_VOLUME_6L,
|
|||
SOC_DOUBLE_R_TLV("HPOUT1 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_1L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_1R, ARIZONA_OUT1L_VOL_SHIFT,
|
||||
0xbf, 0, digital_tlv),
|
||||
SOC_DOUBLE_R_TLV("OUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
SOC_DOUBLE_R_TLV("HPOUT2 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_2L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_2R, ARIZONA_OUT2L_VOL_SHIFT,
|
||||
0xbf, 0, digital_tlv),
|
||||
SOC_DOUBLE_R_TLV("OUT3 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_3L,
|
||||
SOC_DOUBLE_R_TLV("HPOUT3 Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_3L,
|
||||
ARIZONA_DAC_DIGITAL_VOLUME_3R, ARIZONA_OUT3L_VOL_SHIFT,
|
||||
0xbf, 0, digital_tlv),
|
||||
SOC_DOUBLE_R_TLV("Speaker Digital Volume", ARIZONA_DAC_DIGITAL_VOLUME_4L,
|
||||
|
@ -260,11 +260,11 @@ SOC_DOUBLE_R_RANGE_TLV("HPOUT1 Volume", ARIZONA_OUTPUT_PATH_CONFIG_1L,
|
|||
ARIZONA_OUTPUT_PATH_CONFIG_1R,
|
||||
ARIZONA_OUT1L_PGA_VOL_SHIFT,
|
||||
0x34, 0x40, 0, ana_tlv),
|
||||
SOC_DOUBLE_R_RANGE_TLV("OUT2 Volume", ARIZONA_OUTPUT_PATH_CONFIG_2L,
|
||||
SOC_DOUBLE_R_RANGE_TLV("HPOUT2 Volume", ARIZONA_OUTPUT_PATH_CONFIG_2L,
|
||||
ARIZONA_OUTPUT_PATH_CONFIG_2R,
|
||||
ARIZONA_OUT2L_PGA_VOL_SHIFT,
|
||||
0x34, 0x40, 0, ana_tlv),
|
||||
SOC_DOUBLE_R_RANGE_TLV("OUT3 Volume", ARIZONA_OUTPUT_PATH_CONFIG_3L,
|
||||
SOC_DOUBLE_R_RANGE_TLV("HPOUT3 Volume", ARIZONA_OUTPUT_PATH_CONFIG_3L,
|
||||
ARIZONA_OUTPUT_PATH_CONFIG_3R,
|
||||
ARIZONA_OUT3L_PGA_VOL_SHIFT, 0x34, 0x40, 0, ana_tlv),
|
||||
|
||||
|
|
|
@ -1301,7 +1301,7 @@ static irqreturn_t wm8350_hpl_jack_handler(int irq, void *data)
|
|||
if (device_may_wakeup(wm8350->dev))
|
||||
pm_wakeup_event(wm8350->dev, 250);
|
||||
|
||||
schedule_delayed_work(&priv->hpl.work, 200);
|
||||
schedule_delayed_work(&priv->hpl.work, msecs_to_jiffies(200));
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -1318,7 +1318,7 @@ static irqreturn_t wm8350_hpr_jack_handler(int irq, void *data)
|
|||
if (device_may_wakeup(wm8350->dev))
|
||||
pm_wakeup_event(wm8350->dev, 250);
|
||||
|
||||
schedule_delayed_work(&priv->hpr.work, 200);
|
||||
schedule_delayed_work(&priv->hpr.work, msecs_to_jiffies(200));
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
|
@ -53,8 +53,8 @@
|
|||
* using 2 wire for device control, so we cache them instead.
|
||||
*/
|
||||
static const struct reg_default wm8960_reg_defaults[] = {
|
||||
{ 0x0, 0x0097 },
|
||||
{ 0x1, 0x0097 },
|
||||
{ 0x0, 0x00a7 },
|
||||
{ 0x1, 0x00a7 },
|
||||
{ 0x2, 0x0000 },
|
||||
{ 0x3, 0x0000 },
|
||||
{ 0x4, 0x0000 },
|
||||
|
@ -323,8 +323,8 @@ SND_SOC_DAPM_MIXER("Left Input Mixer", WM8960_POWER3, 5, 0,
|
|||
SND_SOC_DAPM_MIXER("Right Input Mixer", WM8960_POWER3, 4, 0,
|
||||
wm8960_rin, ARRAY_SIZE(wm8960_rin)),
|
||||
|
||||
SND_SOC_DAPM_ADC("Left ADC", "Capture", WM8960_POWER2, 3, 0),
|
||||
SND_SOC_DAPM_ADC("Right ADC", "Capture", WM8960_POWER2, 2, 0),
|
||||
SND_SOC_DAPM_ADC("Left ADC", "Capture", WM8960_POWER1, 3, 0),
|
||||
SND_SOC_DAPM_ADC("Right ADC", "Capture", WM8960_POWER1, 2, 0),
|
||||
|
||||
SND_SOC_DAPM_DAC("Left DAC", "Playback", WM8960_POWER2, 8, 0),
|
||||
SND_SOC_DAPM_DAC("Right DAC", "Playback", WM8960_POWER2, 7, 0),
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
|
||||
#define TEGRA20_I2S_TIMING_NON_SYM_ENABLE (1 << 12)
|
||||
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT 0
|
||||
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7fff
|
||||
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff
|
||||
#define TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK (TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US << TEGRA20_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT)
|
||||
|
||||
/* Fields in TEGRA20_I2S_FIFO_SCR */
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
|
||||
#define TEGRA30_I2S_TIMING_NON_SYM_ENABLE (1 << 12)
|
||||
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT 0
|
||||
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7fff
|
||||
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US 0x7ff
|
||||
#define TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK (TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_MASK_US << TEGRA30_I2S_TIMING_CHANNEL_BIT_COUNT_SHIFT)
|
||||
|
||||
/* Fields in TEGRA30_I2S_OFFSET */
|
||||
|
|
Loading…
Add table
Reference in a new issue