diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/firewire/amdtp.c | 5 | ||||
-rw-r--r-- | sound/firewire/amdtp.h | 2 | ||||
-rw-r--r-- | sound/firewire/fireworks/fireworks.c | 10 | ||||
-rw-r--r-- | sound/firewire/fireworks/fireworks.h | 2 | ||||
-rw-r--r-- | sound/firewire/fireworks/fireworks_stream.c | 12 | ||||
-rw-r--r-- | sound/hda/ext/hdac_ext_controller.c | 6 | ||||
-rw-r--r-- | sound/hda/ext/hdac_ext_stream.c | 2 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 1 | ||||
-rw-r--r-- | sound/pci/oxygen/oxygen_mixer.c | 2 |
9 files changed, 26 insertions, 16 deletions
diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c index 7bb988fa6b6d..2a153d260836 100644 --- a/sound/firewire/amdtp.c +++ b/sound/firewire/amdtp.c | |||
@@ -740,8 +740,9 @@ static int handle_in_packet(struct amdtp_stream *s, | |||
740 | s->data_block_counter != UINT_MAX) | 740 | s->data_block_counter != UINT_MAX) |
741 | data_block_counter = s->data_block_counter; | 741 | data_block_counter = s->data_block_counter; |
742 | 742 | ||
743 | if (((s->flags & CIP_SKIP_DBC_ZERO_CHECK) && data_block_counter == 0) || | 743 | if (((s->flags & CIP_SKIP_DBC_ZERO_CHECK) && |
744 | (s->data_block_counter == UINT_MAX)) { | 744 | data_block_counter == s->tx_first_dbc) || |
745 | s->data_block_counter == UINT_MAX) { | ||
745 | lost = false; | 746 | lost = false; |
746 | } else if (!(s->flags & CIP_DBC_IS_END_EVENT)) { | 747 | } else if (!(s->flags & CIP_DBC_IS_END_EVENT)) { |
747 | lost = data_block_counter != s->data_block_counter; | 748 | lost = data_block_counter != s->data_block_counter; |
diff --git a/sound/firewire/amdtp.h b/sound/firewire/amdtp.h index 26b909329e54..b2cf9e75693b 100644 --- a/sound/firewire/amdtp.h +++ b/sound/firewire/amdtp.h | |||
@@ -157,6 +157,8 @@ struct amdtp_stream { | |||
157 | 157 | ||
158 | /* quirk: fixed interval of dbc between previos/current packets. */ | 158 | /* quirk: fixed interval of dbc between previos/current packets. */ |
159 | unsigned int tx_dbc_interval; | 159 | unsigned int tx_dbc_interval; |
160 | /* quirk: indicate the value of dbc field in a first packet. */ | ||
161 | unsigned int tx_first_dbc; | ||
160 | 162 | ||
161 | bool callbacked; | 163 | bool callbacked; |
162 | wait_queue_head_t callback_wait; | 164 | wait_queue_head_t callback_wait; |
diff --git a/sound/firewire/fireworks/fireworks.c b/sound/firewire/fireworks/fireworks.c index c670db4eee70..c94a432f7cc6 100644 --- a/sound/firewire/fireworks/fireworks.c +++ b/sound/firewire/fireworks/fireworks.c | |||
@@ -248,10 +248,16 @@ efw_probe(struct fw_unit *unit, | |||
248 | err = get_hardware_info(efw); | 248 | err = get_hardware_info(efw); |
249 | if (err < 0) | 249 | if (err < 0) |
250 | goto error; | 250 | goto error; |
251 | if (entry->model_id == MODEL_ECHO_AUDIOFIRE_2) | 251 | /* AudioFire8 (since 2009) and AudioFirePre8 */ |
252 | efw->is_af2 = true; | ||
253 | if (entry->model_id == MODEL_ECHO_AUDIOFIRE_9) | 252 | if (entry->model_id == MODEL_ECHO_AUDIOFIRE_9) |
254 | efw->is_af9 = true; | 253 | efw->is_af9 = true; |
254 | /* These models uses the same firmware. */ | ||
255 | if (entry->model_id == MODEL_ECHO_AUDIOFIRE_2 || | ||
256 | entry->model_id == MODEL_ECHO_AUDIOFIRE_4 || | ||
257 | entry->model_id == MODEL_ECHO_AUDIOFIRE_9 || | ||
258 | entry->model_id == MODEL_GIBSON_RIP || | ||
259 | entry->model_id == MODEL_GIBSON_GOLDTOP) | ||
260 | efw->is_fireworks3 = true; | ||
255 | 261 | ||
256 | snd_efw_proc_init(efw); | 262 | snd_efw_proc_init(efw); |
257 | 263 | ||
diff --git a/sound/firewire/fireworks/fireworks.h b/sound/firewire/fireworks/fireworks.h index c33252b7bc84..084d414b228c 100644 --- a/sound/firewire/fireworks/fireworks.h +++ b/sound/firewire/fireworks/fireworks.h | |||
@@ -70,8 +70,8 @@ struct snd_efw { | |||
70 | bool resp_addr_changable; | 70 | bool resp_addr_changable; |
71 | 71 | ||
72 | /* for quirks */ | 72 | /* for quirks */ |
73 | bool is_af2; | ||
74 | bool is_af9; | 73 | bool is_af9; |
74 | bool is_fireworks3; | ||
75 | u32 firmware_version; | 75 | u32 firmware_version; |
76 | 76 | ||
77 | unsigned int midi_in_ports; | 77 | unsigned int midi_in_ports; |
diff --git a/sound/firewire/fireworks/fireworks_stream.c b/sound/firewire/fireworks/fireworks_stream.c index a0762dd6231e..7e353f1f7bff 100644 --- a/sound/firewire/fireworks/fireworks_stream.c +++ b/sound/firewire/fireworks/fireworks_stream.c | |||
@@ -172,9 +172,15 @@ int snd_efw_stream_init_duplex(struct snd_efw *efw) | |||
172 | efw->tx_stream.flags |= CIP_DBC_IS_END_EVENT; | 172 | efw->tx_stream.flags |= CIP_DBC_IS_END_EVENT; |
173 | /* Fireworks reset dbc at bus reset. */ | 173 | /* Fireworks reset dbc at bus reset. */ |
174 | efw->tx_stream.flags |= CIP_SKIP_DBC_ZERO_CHECK; | 174 | efw->tx_stream.flags |= CIP_SKIP_DBC_ZERO_CHECK; |
175 | /* AudioFire2 starts packets with non-zero dbc. */ | 175 | /* |
176 | if (efw->is_af2) | 176 | * But Recent firmwares starts packets with non-zero dbc. |
177 | efw->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK; | 177 | * Driver version 5.7.6 installs firmware version 5.7.3. |
178 | */ | ||
179 | if (efw->is_fireworks3 && | ||
180 | (efw->firmware_version == 0x5070000 || | ||
181 | efw->firmware_version == 0x5070300 || | ||
182 | efw->firmware_version == 0x5080000)) | ||
183 | efw->tx_stream.tx_first_dbc = 0x02; | ||
178 | /* AudioFire9 always reports wrong dbs. */ | 184 | /* AudioFire9 always reports wrong dbs. */ |
179 | if (efw->is_af9) | 185 | if (efw->is_af9) |
180 | efw->tx_stream.flags |= CIP_WRONG_DBS; | 186 | efw->tx_stream.flags |= CIP_WRONG_DBS; |
diff --git a/sound/hda/ext/hdac_ext_controller.c b/sound/hda/ext/hdac_ext_controller.c index b2da19b60f4e..358f16195483 100644 --- a/sound/hda/ext/hdac_ext_controller.c +++ b/sound/hda/ext/hdac_ext_controller.c | |||
@@ -44,16 +44,10 @@ int snd_hdac_ext_bus_parse_capabilities(struct hdac_ext_bus *ebus) | |||
44 | 44 | ||
45 | offset = snd_hdac_chip_readl(bus, LLCH); | 45 | offset = snd_hdac_chip_readl(bus, LLCH); |
46 | 46 | ||
47 | if (offset < 0) | ||
48 | return -EIO; | ||
49 | |||
50 | /* Lets walk the linked capabilities list */ | 47 | /* Lets walk the linked capabilities list */ |
51 | do { | 48 | do { |
52 | cur_cap = _snd_hdac_chip_read(l, bus, offset); | 49 | cur_cap = _snd_hdac_chip_read(l, bus, offset); |
53 | 50 | ||
54 | if (cur_cap < 0) | ||
55 | return -EIO; | ||
56 | |||
57 | dev_dbg(bus->dev, "Capability version: 0x%x\n", | 51 | dev_dbg(bus->dev, "Capability version: 0x%x\n", |
58 | ((cur_cap & AZX_CAP_HDR_VER_MASK) >> AZX_CAP_HDR_VER_OFF)); | 52 | ((cur_cap & AZX_CAP_HDR_VER_MASK) >> AZX_CAP_HDR_VER_OFF)); |
59 | 53 | ||
diff --git a/sound/hda/ext/hdac_ext_stream.c b/sound/hda/ext/hdac_ext_stream.c index f8ffbdbb450d..3de47dd1a76d 100644 --- a/sound/hda/ext/hdac_ext_stream.c +++ b/sound/hda/ext/hdac_ext_stream.c | |||
@@ -299,7 +299,7 @@ hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus, | |||
299 | if (stream->direction != substream->stream) | 299 | if (stream->direction != substream->stream) |
300 | continue; | 300 | continue; |
301 | 301 | ||
302 | if (stream->opened) { | 302 | if (!stream->opened) { |
303 | if (!hstream->decoupled) | 303 | if (!hstream->decoupled) |
304 | snd_hdac_ext_stream_decouple(ebus, hstream, true); | 304 | snd_hdac_ext_stream_decouple(ebus, hstream, true); |
305 | res = hstream; | 305 | res = hstream; |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index c456c04e0928..0b9847affbec 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -5189,6 +5189,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
5189 | SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), | 5189 | SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), |
5190 | SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), | 5190 | SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
5191 | SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), | 5191 | SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
5192 | SND_PCI_QUIRK(0x1028, 0x06de, "Dell", ALC292_FIXUP_DISABLE_AAMIX), | ||
5192 | SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), | 5193 | SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
5193 | SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), | 5194 | SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
5194 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), | 5195 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |
diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c index 6492bca8c70f..4ca12665ff73 100644 --- a/sound/pci/oxygen/oxygen_mixer.c +++ b/sound/pci/oxygen/oxygen_mixer.c | |||
@@ -88,7 +88,7 @@ static int dac_mute_put(struct snd_kcontrol *ctl, | |||
88 | int changed; | 88 | int changed; |
89 | 89 | ||
90 | mutex_lock(&chip->mutex); | 90 | mutex_lock(&chip->mutex); |
91 | changed = !value->value.integer.value[0] != chip->dac_mute; | 91 | changed = (!value->value.integer.value[0]) != chip->dac_mute; |
92 | if (changed) { | 92 | if (changed) { |
93 | chip->dac_mute = !value->value.integer.value[0]; | 93 | chip->dac_mute = !value->value.integer.value[0]; |
94 | chip->model.update_dac_mute(chip); | 94 | chip->model.update_dac_mute(chip); |