aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sound/pcm.h2
-rw-r--r--include/uapi/sound/compress_offload.h2
-rw-r--r--sound/core/seq/seq_clientmgr.c36
-rw-r--r--sound/core/seq/seq_fifo.c2
-rw-r--r--sound/core/timer.c4
-rw-r--r--sound/firewire/bebob/bebob.h2
-rw-r--r--sound/firewire/bebob/bebob_stream.c4
-rw-r--r--sound/firewire/fireworks/fireworks.c1
-rw-r--r--sound/firewire/fireworks/fireworks.h1
-rw-r--r--sound/firewire/fireworks/fireworks_hwdep.c2
-rw-r--r--sound/firewire/fireworks/fireworks_stream.c4
-rw-r--r--sound/firewire/fireworks/fireworks_transaction.c18
-rw-r--r--sound/pci/hda/hda_intel.c14
-rw-r--r--sound/pci/hda/patch_hdmi.c10
-rw-r--r--sound/pci/hda/patch_realtek.c91
-rw-r--r--sound/pci/intel8x0.c10
16 files changed, 147 insertions, 56 deletions
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index b4d6697085fe..d854fb31c000 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -932,7 +932,7 @@ static inline void snd_pcm_gettime(struct snd_pcm_runtime *runtime,
932 struct timespec *tv) 932 struct timespec *tv)
933{ 933{
934 if (runtime->tstamp_type == SNDRV_PCM_TSTAMP_TYPE_MONOTONIC) 934 if (runtime->tstamp_type == SNDRV_PCM_TSTAMP_TYPE_MONOTONIC)
935 do_posix_clock_monotonic_gettime(tv); 935 ktime_get_ts(tv);
936 else 936 else
937 getnstimeofday(tv); 937 getnstimeofday(tv);
938} 938}
diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h
index 5759810e1c1b..21eed488783f 100644
--- a/include/uapi/sound/compress_offload.h
+++ b/include/uapi/sound/compress_offload.h
@@ -80,7 +80,7 @@ struct snd_compr_tstamp {
80struct snd_compr_avail { 80struct snd_compr_avail {
81 __u64 avail; 81 __u64 avail;
82 struct snd_compr_tstamp tstamp; 82 struct snd_compr_tstamp tstamp;
83}; 83} __attribute__((packed));
84 84
85enum snd_compr_direction { 85enum snd_compr_direction {
86 SND_COMPRESS_PLAYBACK = 0, 86 SND_COMPRESS_PLAYBACK = 0,
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index 9ca5e647e54b..225c73152ee9 100644
--- a/sound/core/seq/seq_clientmgr.c
+++ b/sound/core/seq/seq_clientmgr.c
@@ -660,7 +660,7 @@ static int deliver_to_subscribers(struct snd_seq_client *client,
660 int atomic, int hop) 660 int atomic, int hop)
661{ 661{
662 struct snd_seq_subscribers *subs; 662 struct snd_seq_subscribers *subs;
663 int err = 0, num_ev = 0; 663 int err, result = 0, num_ev = 0;
664 struct snd_seq_event event_saved; 664 struct snd_seq_event event_saved;
665 struct snd_seq_client_port *src_port; 665 struct snd_seq_client_port *src_port;
666 struct snd_seq_port_subs_info *grp; 666 struct snd_seq_port_subs_info *grp;
@@ -685,8 +685,12 @@ static int deliver_to_subscribers(struct snd_seq_client *client,
685 subs->info.flags & SNDRV_SEQ_PORT_SUBS_TIME_REAL); 685 subs->info.flags & SNDRV_SEQ_PORT_SUBS_TIME_REAL);
686 err = snd_seq_deliver_single_event(client, event, 686 err = snd_seq_deliver_single_event(client, event,
687 0, atomic, hop); 687 0, atomic, hop);
688 if (err < 0) 688 if (err < 0) {
689 break; 689 /* save first error that occurs and continue */
690 if (!result)
691 result = err;
692 continue;
693 }
690 num_ev++; 694 num_ev++;
691 /* restore original event record */ 695 /* restore original event record */
692 *event = event_saved; 696 *event = event_saved;
@@ -697,7 +701,7 @@ static int deliver_to_subscribers(struct snd_seq_client *client,
697 up_read(&grp->list_mutex); 701 up_read(&grp->list_mutex);
698 *event = event_saved; /* restore */ 702 *event = event_saved; /* restore */
699 snd_seq_port_unlock(src_port); 703 snd_seq_port_unlock(src_port);
700 return (err < 0) ? err : num_ev; 704 return (result < 0) ? result : num_ev;
701} 705}
702 706
703 707
@@ -709,7 +713,7 @@ static int port_broadcast_event(struct snd_seq_client *client,
709 struct snd_seq_event *event, 713 struct snd_seq_event *event,
710 int atomic, int hop) 714 int atomic, int hop)
711{ 715{
712 int num_ev = 0, err = 0; 716 int num_ev = 0, err, result = 0;
713 struct snd_seq_client *dest_client; 717 struct snd_seq_client *dest_client;
714 struct snd_seq_client_port *port; 718 struct snd_seq_client_port *port;
715 719
@@ -724,14 +728,18 @@ static int port_broadcast_event(struct snd_seq_client *client,
724 err = snd_seq_deliver_single_event(NULL, event, 728 err = snd_seq_deliver_single_event(NULL, event,
725 SNDRV_SEQ_FILTER_BROADCAST, 729 SNDRV_SEQ_FILTER_BROADCAST,
726 atomic, hop); 730 atomic, hop);
727 if (err < 0) 731 if (err < 0) {
728 break; 732 /* save first error that occurs and continue */
733 if (!result)
734 result = err;
735 continue;
736 }
729 num_ev++; 737 num_ev++;
730 } 738 }
731 read_unlock(&dest_client->ports_lock); 739 read_unlock(&dest_client->ports_lock);
732 snd_seq_client_unlock(dest_client); 740 snd_seq_client_unlock(dest_client);
733 event->dest.port = SNDRV_SEQ_ADDRESS_BROADCAST; /* restore */ 741 event->dest.port = SNDRV_SEQ_ADDRESS_BROADCAST; /* restore */
734 return (err < 0) ? err : num_ev; 742 return (result < 0) ? result : num_ev;
735} 743}
736 744
737/* 745/*
@@ -741,7 +749,7 @@ static int port_broadcast_event(struct snd_seq_client *client,
741static int broadcast_event(struct snd_seq_client *client, 749static int broadcast_event(struct snd_seq_client *client,
742 struct snd_seq_event *event, int atomic, int hop) 750 struct snd_seq_event *event, int atomic, int hop)
743{ 751{
744 int err = 0, num_ev = 0; 752 int err, result = 0, num_ev = 0;
745 int dest; 753 int dest;
746 struct snd_seq_addr addr; 754 struct snd_seq_addr addr;
747 755
@@ -760,12 +768,16 @@ static int broadcast_event(struct snd_seq_client *client,
760 err = snd_seq_deliver_single_event(NULL, event, 768 err = snd_seq_deliver_single_event(NULL, event,
761 SNDRV_SEQ_FILTER_BROADCAST, 769 SNDRV_SEQ_FILTER_BROADCAST,
762 atomic, hop); 770 atomic, hop);
763 if (err < 0) 771 if (err < 0) {
764 break; 772 /* save first error that occurs and continue */
773 if (!result)
774 result = err;
775 continue;
776 }
765 num_ev += err; 777 num_ev += err;
766 } 778 }
767 event->dest = addr; /* restore */ 779 event->dest = addr; /* restore */
768 return (err < 0) ? err : num_ev; 780 return (result < 0) ? result : num_ev;
769} 781}
770 782
771 783
diff --git a/sound/core/seq/seq_fifo.c b/sound/core/seq/seq_fifo.c
index 559989992bef..53a403e17c5b 100644
--- a/sound/core/seq/seq_fifo.c
+++ b/sound/core/seq/seq_fifo.c
@@ -124,7 +124,7 @@ int snd_seq_fifo_event_in(struct snd_seq_fifo *f,
124 snd_use_lock_use(&f->use_lock); 124 snd_use_lock_use(&f->use_lock);
125 err = snd_seq_event_dup(f->pool, event, &cell, 1, NULL); /* always non-blocking */ 125 err = snd_seq_event_dup(f->pool, event, &cell, 1, NULL); /* always non-blocking */
126 if (err < 0) { 126 if (err < 0) {
127 if (err == -ENOMEM) 127 if ((err == -ENOMEM) || (err == -EAGAIN))
128 atomic_inc(&f->overflow); 128 atomic_inc(&f->overflow);
129 snd_use_lock_free(&f->use_lock); 129 snd_use_lock_free(&f->use_lock);
130 return err; 130 return err;
diff --git a/sound/core/timer.c b/sound/core/timer.c
index cfd455a8ac1a..777a45e08e53 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -390,7 +390,7 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event)
390 struct timespec tstamp; 390 struct timespec tstamp;
391 391
392 if (timer_tstamp_monotonic) 392 if (timer_tstamp_monotonic)
393 do_posix_clock_monotonic_gettime(&tstamp); 393 ktime_get_ts(&tstamp);
394 else 394 else
395 getnstimeofday(&tstamp); 395 getnstimeofday(&tstamp);
396 if (snd_BUG_ON(event < SNDRV_TIMER_EVENT_START || 396 if (snd_BUG_ON(event < SNDRV_TIMER_EVENT_START ||
@@ -1203,7 +1203,7 @@ static void snd_timer_user_tinterrupt(struct snd_timer_instance *timeri,
1203 } 1203 }
1204 if (tu->last_resolution != resolution || ticks > 0) { 1204 if (tu->last_resolution != resolution || ticks > 0) {
1205 if (timer_tstamp_monotonic) 1205 if (timer_tstamp_monotonic)
1206 do_posix_clock_monotonic_gettime(&tstamp); 1206 ktime_get_ts(&tstamp);
1207 else 1207 else
1208 getnstimeofday(&tstamp); 1208 getnstimeofday(&tstamp);
1209 } 1209 }
diff --git a/sound/firewire/bebob/bebob.h b/sound/firewire/bebob/bebob.h
index d1c93a1e0978..e13eef99c27a 100644
--- a/sound/firewire/bebob/bebob.h
+++ b/sound/firewire/bebob/bebob.h
@@ -208,8 +208,6 @@ int snd_bebob_stream_set_rate(struct snd_bebob *bebob, unsigned int rate);
208int snd_bebob_stream_check_internal_clock(struct snd_bebob *bebob, 208int snd_bebob_stream_check_internal_clock(struct snd_bebob *bebob,
209 bool *internal); 209 bool *internal);
210int snd_bebob_stream_discover(struct snd_bebob *bebob); 210int snd_bebob_stream_discover(struct snd_bebob *bebob);
211int snd_bebob_stream_map(struct snd_bebob *bebob,
212 struct amdtp_stream *stream);
213int snd_bebob_stream_init_duplex(struct snd_bebob *bebob); 211int snd_bebob_stream_init_duplex(struct snd_bebob *bebob);
214int snd_bebob_stream_start_duplex(struct snd_bebob *bebob, unsigned int rate); 212int snd_bebob_stream_start_duplex(struct snd_bebob *bebob, unsigned int rate);
215void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob); 213void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob);
diff --git a/sound/firewire/bebob/bebob_stream.c b/sound/firewire/bebob/bebob_stream.c
index bc4f82776fda..ef4d0c9f6578 100644
--- a/sound/firewire/bebob/bebob_stream.c
+++ b/sound/firewire/bebob/bebob_stream.c
@@ -655,8 +655,6 @@ void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob)
655 struct amdtp_stream *master, *slave; 655 struct amdtp_stream *master, *slave;
656 atomic_t *master_substreams, *slave_substreams; 656 atomic_t *master_substreams, *slave_substreams;
657 657
658 mutex_lock(&bebob->mutex);
659
660 if (bebob->master == &bebob->rx_stream) { 658 if (bebob->master == &bebob->rx_stream) {
661 slave = &bebob->tx_stream; 659 slave = &bebob->tx_stream;
662 master = &bebob->rx_stream; 660 master = &bebob->rx_stream;
@@ -669,6 +667,8 @@ void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob)
669 master_substreams = &bebob->capture_substreams; 667 master_substreams = &bebob->capture_substreams;
670 } 668 }
671 669
670 mutex_lock(&bebob->mutex);
671
672 if (atomic_read(slave_substreams) == 0) { 672 if (atomic_read(slave_substreams) == 0) {
673 amdtp_stream_pcm_abort(slave); 673 amdtp_stream_pcm_abort(slave);
674 amdtp_stream_stop(slave); 674 amdtp_stream_stop(slave);
diff --git a/sound/firewire/fireworks/fireworks.c b/sound/firewire/fireworks/fireworks.c
index 996fdc44c83c..3e2ed8e82cbc 100644
--- a/sound/firewire/fireworks/fireworks.c
+++ b/sound/firewire/fireworks/fireworks.c
@@ -346,7 +346,6 @@ static void __exit snd_efw_exit(void)
346{ 346{
347 snd_efw_transaction_unregister(); 347 snd_efw_transaction_unregister();
348 driver_unregister(&efw_driver.driver); 348 driver_unregister(&efw_driver.driver);
349 mutex_destroy(&devices_mutex);
350} 349}
351 350
352module_init(snd_efw_init); 351module_init(snd_efw_init);
diff --git a/sound/firewire/fireworks/fireworks.h b/sound/firewire/fireworks/fireworks.h
index d2b36be4d2f8..4f0201a95222 100644
--- a/sound/firewire/fireworks/fireworks.h
+++ b/sound/firewire/fireworks/fireworks.h
@@ -162,7 +162,6 @@ enum snd_efw_grp_type {
162 SND_EFW_CH_TYPE_GUITAR = 7, 162 SND_EFW_CH_TYPE_GUITAR = 7,
163 SND_EFW_CH_TYPE_PIEZO_GUITAR = 8, 163 SND_EFW_CH_TYPE_PIEZO_GUITAR = 8,
164 SND_EFW_CH_TYPE_GUITAR_STRING = 9, 164 SND_EFW_CH_TYPE_GUITAR_STRING = 9,
165 SND_EFW_CH_TYPE_VIRTUAL = 0x10000,
166 SND_EFW_CH_TYPE_DUMMY 165 SND_EFW_CH_TYPE_DUMMY
167}; 166};
168struct snd_efw_phys_meters { 167struct snd_efw_phys_meters {
diff --git a/sound/firewire/fireworks/fireworks_hwdep.c b/sound/firewire/fireworks/fireworks_hwdep.c
index 4f8216fb6b62..33df8655fe81 100644
--- a/sound/firewire/fireworks/fireworks_hwdep.c
+++ b/sound/firewire/fireworks/fireworks_hwdep.c
@@ -58,7 +58,7 @@ hwdep_read_resp_buf(struct snd_efw *efw, char __user *buf, long remained,
58 efw->pull_ptr += till_end; 58 efw->pull_ptr += till_end;
59 if (efw->pull_ptr >= efw->resp_buf + 59 if (efw->pull_ptr >= efw->resp_buf +
60 snd_efw_resp_buf_size) 60 snd_efw_resp_buf_size)
61 efw->pull_ptr = efw->resp_buf; 61 efw->pull_ptr -= snd_efw_resp_buf_size;
62 62
63 length -= till_end; 63 length -= till_end;
64 buf += till_end; 64 buf += till_end;
diff --git a/sound/firewire/fireworks/fireworks_stream.c b/sound/firewire/fireworks/fireworks_stream.c
index 541569022a7c..b985fc5ebdc6 100644
--- a/sound/firewire/fireworks/fireworks_stream.c
+++ b/sound/firewire/fireworks/fireworks_stream.c
@@ -284,8 +284,6 @@ void snd_efw_stream_stop_duplex(struct snd_efw *efw)
284 struct amdtp_stream *master, *slave; 284 struct amdtp_stream *master, *slave;
285 atomic_t *master_substreams, *slave_substreams; 285 atomic_t *master_substreams, *slave_substreams;
286 286
287 mutex_lock(&efw->mutex);
288
289 if (efw->master == &efw->rx_stream) { 287 if (efw->master == &efw->rx_stream) {
290 slave = &efw->tx_stream; 288 slave = &efw->tx_stream;
291 master = &efw->rx_stream; 289 master = &efw->rx_stream;
@@ -298,6 +296,8 @@ void snd_efw_stream_stop_duplex(struct snd_efw *efw)
298 master_substreams = &efw->capture_substreams; 296 master_substreams = &efw->capture_substreams;
299 } 297 }
300 298
299 mutex_lock(&efw->mutex);
300
301 if (atomic_read(slave_substreams) == 0) { 301 if (atomic_read(slave_substreams) == 0) {
302 stop_stream(efw, slave); 302 stop_stream(efw, slave);
303 303
diff --git a/sound/firewire/fireworks/fireworks_transaction.c b/sound/firewire/fireworks/fireworks_transaction.c
index aa56b8ac537c..255dabc6fc33 100644
--- a/sound/firewire/fireworks/fireworks_transaction.c
+++ b/sound/firewire/fireworks/fireworks_transaction.c
@@ -8,19 +8,19 @@
8 8
9/* 9/*
10 * Fireworks have its own transaction. The transaction can be delivered by AV/C 10 * Fireworks have its own transaction. The transaction can be delivered by AV/C
11 * Vendor Specific command. But at least Windows driver and firmware version 5.5 11 * Vendor Specific command frame or usual asynchronous transaction. At least,
12 * or later don't use it. 12 * Windows driver and firmware version 5.5 or later don't use AV/C command.
13 * 13 *
14 * Transaction substance: 14 * Transaction substance:
15 * At first, 6 data exist. Following to the 6 data, parameters for each 15 * At first, 6 data exist. Following to the data, parameters for each command
16 * commands exists. All of parameters are 32 bit alighed to big endian. 16 * exist. All of the parameters are 32 bit alighed to big endian.
17 * data[0]: Length of transaction substance 17 * data[0]: Length of transaction substance
18 * data[1]: Transaction version 18 * data[1]: Transaction version
19 * data[2]: Sequence number. This is incremented by the device 19 * data[2]: Sequence number. This is incremented by the device
20 * data[3]: transaction category 20 * data[3]: Transaction category
21 * data[4]: transaction command 21 * data[4]: Transaction command
22 * data[5]: return value in response. 22 * data[5]: Return value in response.
23 * data[6-]: parameters 23 * data[6-]: Parameters
24 * 24 *
25 * Transaction address: 25 * Transaction address:
26 * command: 0xecc000000000 26 * command: 0xecc000000000
@@ -148,7 +148,7 @@ copy_resp_to_buf(struct snd_efw *efw, void *data, size_t length, int *rcode)
148 148
149 efw->push_ptr += till_end; 149 efw->push_ptr += till_end;
150 if (efw->push_ptr >= efw->resp_buf + snd_efw_resp_buf_size) 150 if (efw->push_ptr >= efw->resp_buf + snd_efw_resp_buf_size)
151 efw->push_ptr = efw->resp_buf; 151 efw->push_ptr -= snd_efw_resp_buf_size;
152 152
153 length -= till_end; 153 length -= till_end;
154 data += till_end; 154 data += till_end;
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index cd77b9b19b73..bb65a124e006 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -237,6 +237,12 @@ enum {
237 AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME | \ 237 AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME | \
238 AZX_DCAPS_I915_POWERWELL) 238 AZX_DCAPS_I915_POWERWELL)
239 239
240/* Broadwell HDMI can't use position buffer reliably, force to use LPIB */
241#define AZX_DCAPS_INTEL_BROADWELL \
242 (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_ALIGN_BUFSIZE | \
243 AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_PM_RUNTIME | \
244 AZX_DCAPS_I915_POWERWELL)
245
240/* quirks for ATI SB / AMD Hudson */ 246/* quirks for ATI SB / AMD Hudson */
241#define AZX_DCAPS_PRESET_ATI_SB \ 247#define AZX_DCAPS_PRESET_ATI_SB \
242 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \ 248 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
@@ -1367,12 +1373,6 @@ static int azx_first_init(struct azx *chip)
1367 /* initialize streams */ 1373 /* initialize streams */
1368 azx_init_stream(chip); 1374 azx_init_stream(chip);
1369 1375
1370 /* workaround for Broadwell HDMI: the first stream is broken,
1371 * so mask it by keeping it as if opened
1372 */
1373 if (pci->vendor == 0x8086 && pci->device == 0x160c)
1374 chip->azx_dev[0].opened = 1;
1375
1376 /* initialize chip */ 1376 /* initialize chip */
1377 azx_init_pci(chip); 1377 azx_init_pci(chip);
1378 azx_init_chip(chip, (probe_only[dev] & 2) == 0); 1378 azx_init_chip(chip, (probe_only[dev] & 2) == 0);
@@ -1769,7 +1769,7 @@ static const struct pci_device_id azx_ids[] = {
1769 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, 1769 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
1770 /* Broadwell */ 1770 /* Broadwell */
1771 { PCI_DEVICE(0x8086, 0x160c), 1771 { PCI_DEVICE(0x8086, 0x160c),
1772 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, 1772 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_BROADWELL },
1773 /* 5 Series/3400 */ 1773 /* 5 Series/3400 */
1774 { PCI_DEVICE(0x8086, 0x3b56), 1774 { PCI_DEVICE(0x8086, 0x3b56),
1775 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, 1775 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index be0a9ee0b804..3e4417b0ddbe 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -1594,10 +1594,18 @@ static bool hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
1594 * Re-setup pin and infoframe. This is needed e.g. when 1594 * Re-setup pin and infoframe. This is needed e.g. when
1595 * - sink is first plugged-in (infoframe is not set up if !monitor_present) 1595 * - sink is first plugged-in (infoframe is not set up if !monitor_present)
1596 * - transcoder can change during stream playback on Haswell 1596 * - transcoder can change during stream playback on Haswell
1597 * and this can make HW reset converter selection on a pin.
1597 */ 1598 */
1598 if (eld->eld_valid && !old_eld_valid && per_pin->setup) 1599 if (eld->eld_valid && !old_eld_valid && per_pin->setup) {
1600 if (is_haswell_plus(codec) || is_valleyview(codec)) {
1601 intel_verify_pin_cvt_connect(codec, per_pin);
1602 intel_not_share_assigned_cvt(codec, pin_nid,
1603 per_pin->mux_idx);
1604 }
1605
1599 hdmi_setup_audio_infoframe(codec, per_pin, 1606 hdmi_setup_audio_infoframe(codec, per_pin,
1600 per_pin->non_pcm); 1607 per_pin->non_pcm);
1608 }
1601 } 1609 }
1602 1610
1603 if (eld_changed) 1611 if (eld_changed)
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 12fb411adf77..af76995fa966 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -929,6 +929,7 @@ struct alc_codec_rename_pci_table {
929}; 929};
930 930
931static struct alc_codec_rename_table rename_tbl[] = { 931static struct alc_codec_rename_table rename_tbl[] = {
932 { 0x10ec0221, 0xf00f, 0x1003, "ALC231" },
932 { 0x10ec0269, 0xfff0, 0x3010, "ALC277" }, 933 { 0x10ec0269, 0xfff0, 0x3010, "ALC277" },
933 { 0x10ec0269, 0xf0f0, 0x2010, "ALC259" }, 934 { 0x10ec0269, 0xf0f0, 0x2010, "ALC259" },
934 { 0x10ec0269, 0xf0f0, 0x3010, "ALC258" }, 935 { 0x10ec0269, 0xf0f0, 0x3010, "ALC258" },
@@ -937,6 +938,7 @@ static struct alc_codec_rename_table rename_tbl[] = {
937 { 0x10ec0269, 0xffff, 0x6023, "ALC281X" }, 938 { 0x10ec0269, 0xffff, 0x6023, "ALC281X" },
938 { 0x10ec0269, 0x00f0, 0x0020, "ALC269VC" }, 939 { 0x10ec0269, 0x00f0, 0x0020, "ALC269VC" },
939 { 0x10ec0269, 0x00f0, 0x0030, "ALC269VD" }, 940 { 0x10ec0269, 0x00f0, 0x0030, "ALC269VD" },
941 { 0x10ec0662, 0xffff, 0x4020, "ALC656" },
940 { 0x10ec0887, 0x00f0, 0x0030, "ALC887-VD" }, 942 { 0x10ec0887, 0x00f0, 0x0030, "ALC887-VD" },
941 { 0x10ec0888, 0x00f0, 0x0030, "ALC888-VD" }, 943 { 0x10ec0888, 0x00f0, 0x0030, "ALC888-VD" },
942 { 0x10ec0888, 0xf0f0, 0x3020, "ALC886" }, 944 { 0x10ec0888, 0xf0f0, 0x3020, "ALC886" },
@@ -956,6 +958,19 @@ static struct alc_codec_rename_pci_table rename_pci_tbl[] = {
956 { 0x10ec0293, 0x1028, 0, "ALC3235" }, 958 { 0x10ec0293, 0x1028, 0, "ALC3235" },
957 { 0x10ec0255, 0x1028, 0, "ALC3234" }, 959 { 0x10ec0255, 0x1028, 0, "ALC3234" },
958 { 0x10ec0668, 0x1028, 0, "ALC3661" }, 960 { 0x10ec0668, 0x1028, 0, "ALC3661" },
961 { 0x10ec0275, 0x1028, 0, "ALC3260" },
962 { 0x10ec0899, 0x1028, 0, "ALC3861" },
963 { 0x10ec0670, 0x1025, 0, "ALC669X" },
964 { 0x10ec0676, 0x1025, 0, "ALC679X" },
965 { 0x10ec0282, 0x1043, 0, "ALC3229" },
966 { 0x10ec0233, 0x1043, 0, "ALC3236" },
967 { 0x10ec0280, 0x103c, 0, "ALC3228" },
968 { 0x10ec0282, 0x103c, 0, "ALC3227" },
969 { 0x10ec0286, 0x103c, 0, "ALC3242" },
970 { 0x10ec0290, 0x103c, 0, "ALC3241" },
971 { 0x10ec0668, 0x103c, 0, "ALC3662" },
972 { 0x10ec0283, 0x17aa, 0, "ALC3239" },
973 { 0x10ec0292, 0x17aa, 0, "ALC3232" },
959 { } /* terminator */ 974 { } /* terminator */
960}; 975};
961 976
@@ -1412,6 +1427,7 @@ static const struct snd_pci_quirk alc880_fixup_tbl[] = {
1412 SND_PCI_QUIRK(0x1043, 0x10c3, "ASUS W5A", ALC880_FIXUP_ASUS_W5A), 1427 SND_PCI_QUIRK(0x1043, 0x10c3, "ASUS W5A", ALC880_FIXUP_ASUS_W5A),
1413 SND_PCI_QUIRK(0x1043, 0x1964, "ASUS Z71V", ALC880_FIXUP_Z71V), 1428 SND_PCI_QUIRK(0x1043, 0x1964, "ASUS Z71V", ALC880_FIXUP_Z71V),
1414 SND_PCI_QUIRK_VENDOR(0x1043, "ASUS", ALC880_FIXUP_GPIO1), 1429 SND_PCI_QUIRK_VENDOR(0x1043, "ASUS", ALC880_FIXUP_GPIO1),
1430 SND_PCI_QUIRK(0x147b, 0x1045, "ABit AA8XE", ALC880_FIXUP_6ST_AUTOMUTE),
1415 SND_PCI_QUIRK(0x1558, 0x5401, "Clevo GPIO2", ALC880_FIXUP_GPIO2), 1431 SND_PCI_QUIRK(0x1558, 0x5401, "Clevo GPIO2", ALC880_FIXUP_GPIO2),
1416 SND_PCI_QUIRK_VENDOR(0x1558, "Clevo", ALC880_FIXUP_EAPD_COEF), 1432 SND_PCI_QUIRK_VENDOR(0x1558, "Clevo", ALC880_FIXUP_EAPD_COEF),
1417 SND_PCI_QUIRK(0x1584, 0x9050, "Uniwill", ALC880_FIXUP_UNIWILL_DIG), 1433 SND_PCI_QUIRK(0x1584, 0x9050, "Uniwill", ALC880_FIXUP_UNIWILL_DIG),
@@ -4230,6 +4246,7 @@ enum {
4230 ALC269_FIXUP_HEADSET_MIC, 4246 ALC269_FIXUP_HEADSET_MIC,
4231 ALC269_FIXUP_QUANTA_MUTE, 4247 ALC269_FIXUP_QUANTA_MUTE,
4232 ALC269_FIXUP_LIFEBOOK, 4248 ALC269_FIXUP_LIFEBOOK,
4249 ALC269_FIXUP_LIFEBOOK_EXTMIC,
4233 ALC269_FIXUP_AMIC, 4250 ALC269_FIXUP_AMIC,
4234 ALC269_FIXUP_DMIC, 4251 ALC269_FIXUP_DMIC,
4235 ALC269VB_FIXUP_AMIC, 4252 ALC269VB_FIXUP_AMIC,
@@ -4367,6 +4384,13 @@ static const struct hda_fixup alc269_fixups[] = {
4367 .chained = true, 4384 .chained = true,
4368 .chain_id = ALC269_FIXUP_QUANTA_MUTE 4385 .chain_id = ALC269_FIXUP_QUANTA_MUTE
4369 }, 4386 },
4387 [ALC269_FIXUP_LIFEBOOK_EXTMIC] = {
4388 .type = HDA_FIXUP_PINS,
4389 .v.pins = (const struct hda_pintbl[]) {
4390 { 0x19, 0x01a1903c }, /* headset mic, with jack detect */
4391 { }
4392 },
4393 },
4370 [ALC269_FIXUP_AMIC] = { 4394 [ALC269_FIXUP_AMIC] = {
4371 .type = HDA_FIXUP_PINS, 4395 .type = HDA_FIXUP_PINS,
4372 .v.pins = (const struct hda_pintbl[]) { 4396 .v.pins = (const struct hda_pintbl[]) {
@@ -4741,18 +4765,12 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4741 SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 4765 SND_PCI_QUIRK(0x1028, 0x0614, "Dell Inspiron 3135", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4742 SND_PCI_QUIRK(0x1028, 0x0615, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK), 4766 SND_PCI_QUIRK(0x1028, 0x0615, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
4743 SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK), 4767 SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
4744 SND_PCI_QUIRK(0x1028, 0x062c, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
4745 SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK), 4768 SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
4746 SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE), 4769 SND_PCI_QUIRK(0x1028, 0x063f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4747 SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 4770 SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4748 SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 4771 SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
4749 SND_PCI_QUIRK(0x1028, 0x064d, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4750 SND_PCI_QUIRK(0x1028, 0x0668, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE), 4772 SND_PCI_QUIRK(0x1028, 0x0668, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE),
4751 SND_PCI_QUIRK(0x1028, 0x0669, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE), 4773 SND_PCI_QUIRK(0x1028, 0x0669, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE),
4752 SND_PCI_QUIRK(0x1028, 0x0674, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4753 SND_PCI_QUIRK(0x1028, 0x067e, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4754 SND_PCI_QUIRK(0x1028, 0x067f, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4755 SND_PCI_QUIRK(0x1028, 0x0680, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
4756 SND_PCI_QUIRK(0x1028, 0x0684, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4774 SND_PCI_QUIRK(0x1028, 0x0684, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
4757 SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4775 SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
4758 SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 4776 SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE),
@@ -4764,14 +4782,24 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4764 SND_PCI_QUIRK(0x103c, 0x1983, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4782 SND_PCI_QUIRK(0x103c, 0x1983, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4765 SND_PCI_QUIRK(0x103c, 0x218b, "HP", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED), 4783 SND_PCI_QUIRK(0x103c, 0x218b, "HP", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
4766 /* ALC282 */ 4784 /* ALC282 */
4785 SND_PCI_QUIRK(0x103c, 0x220d, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4786 SND_PCI_QUIRK(0x103c, 0x220e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4767 SND_PCI_QUIRK(0x103c, 0x220f, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4787 SND_PCI_QUIRK(0x103c, 0x220f, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4788 SND_PCI_QUIRK(0x103c, 0x2210, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4789 SND_PCI_QUIRK(0x103c, 0x2211, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4790 SND_PCI_QUIRK(0x103c, 0x2212, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4768 SND_PCI_QUIRK(0x103c, 0x2213, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4791 SND_PCI_QUIRK(0x103c, 0x2213, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4792 SND_PCI_QUIRK(0x103c, 0x2214, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4769 SND_PCI_QUIRK(0x103c, 0x2266, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4793 SND_PCI_QUIRK(0x103c, 0x2266, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4770 SND_PCI_QUIRK(0x103c, 0x2267, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4794 SND_PCI_QUIRK(0x103c, 0x2267, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4771 SND_PCI_QUIRK(0x103c, 0x2268, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4795 SND_PCI_QUIRK(0x103c, 0x2268, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4772 SND_PCI_QUIRK(0x103c, 0x2269, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4796 SND_PCI_QUIRK(0x103c, 0x2269, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4773 SND_PCI_QUIRK(0x103c, 0x226a, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4797 SND_PCI_QUIRK(0x103c, 0x226a, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4774 SND_PCI_QUIRK(0x103c, 0x226b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4798 SND_PCI_QUIRK(0x103c, 0x226b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4799 SND_PCI_QUIRK(0x103c, 0x226c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4800 SND_PCI_QUIRK(0x103c, 0x226d, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4801 SND_PCI_QUIRK(0x103c, 0x226e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4802 SND_PCI_QUIRK(0x103c, 0x226f, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4775 SND_PCI_QUIRK(0x103c, 0x227a, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4803 SND_PCI_QUIRK(0x103c, 0x227a, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4776 SND_PCI_QUIRK(0x103c, 0x227b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4804 SND_PCI_QUIRK(0x103c, 0x227b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4777 SND_PCI_QUIRK(0x103c, 0x229e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4805 SND_PCI_QUIRK(0x103c, 0x229e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
@@ -4811,6 +4839,10 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4811 SND_PCI_QUIRK(0x103c, 0x22c8, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4839 SND_PCI_QUIRK(0x103c, 0x22c8, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4812 SND_PCI_QUIRK(0x103c, 0x22c3, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4840 SND_PCI_QUIRK(0x103c, 0x22c3, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4813 SND_PCI_QUIRK(0x103c, 0x22c4, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1), 4841 SND_PCI_QUIRK(0x103c, 0x22c4, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4842 SND_PCI_QUIRK(0x103c, 0x2334, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4843 SND_PCI_QUIRK(0x103c, 0x2335, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4844 SND_PCI_QUIRK(0x103c, 0x2336, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4845 SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4814 SND_PCI_QUIRK_VENDOR(0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED), 4846 SND_PCI_QUIRK_VENDOR(0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED),
4815 SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300), 4847 SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
4816 SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), 4848 SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
@@ -4834,6 +4866,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4834 SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX), 4866 SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
4835 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), 4867 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
4836 SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK), 4868 SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
4869 SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
4837 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), 4870 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
4838 SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE), 4871 SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
4839 SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), 4872 SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
@@ -4977,6 +5010,26 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
4977#endif 5010#endif
4978 .pins = (const struct hda_pintbl[]) { 5011 .pins = (const struct hda_pintbl[]) {
4979 {0x12, 0x90a60160}, 5012 {0x12, 0x90a60160},
5013 {0x14, 0x90170120},
5014 {0x17, 0x90170140},
5015 {0x18, 0x40000000},
5016 {0x19, 0x411111f0},
5017 {0x1a, 0x411111f0},
5018 {0x1b, 0x411111f0},
5019 {0x1d, 0x41163b05},
5020 {0x1e, 0x411111f0},
5021 {0x21, 0x0321102f},
5022 },
5023 .value = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
5024 },
5025 {
5026 .codec = 0x10ec0255,
5027 .subvendor = 0x1028,
5028#ifdef CONFIG_SND_DEBUG_VERBOSE
5029 .name = "Dell",
5030#endif
5031 .pins = (const struct hda_pintbl[]) {
5032 {0x12, 0x90a60160},
4980 {0x14, 0x90170130}, 5033 {0x14, 0x90170130},
4981 {0x17, 0x40000000}, 5034 {0x17, 0x40000000},
4982 {0x18, 0x411111f0}, 5035 {0x18, 0x411111f0},
@@ -5129,7 +5182,7 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
5129 {0x1d, 0x40700001}, 5182 {0x1d, 0x40700001},
5130 {0x1e, 0x411111f0}, 5183 {0x1e, 0x411111f0},
5131 }, 5184 },
5132 .value = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, 5185 .value = ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
5133 }, 5186 },
5134 {} 5187 {}
5135}; 5188};
@@ -6014,6 +6067,27 @@ static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
6014 .name = "Dell", 6067 .name = "Dell",
6015#endif 6068#endif
6016 .pins = (const struct hda_pintbl[]) { 6069 .pins = (const struct hda_pintbl[]) {
6070 {0x12, 0x99a30140},
6071 {0x14, 0x90170110},
6072 {0x15, 0x0321101f},
6073 {0x16, 0x03011020},
6074 {0x18, 0x40000008},
6075 {0x19, 0x411111f0},
6076 {0x1a, 0x411111f0},
6077 {0x1b, 0x411111f0},
6078 {0x1d, 0x41000001},
6079 {0x1e, 0x411111f0},
6080 {0x1f, 0x411111f0},
6081 },
6082 .value = ALC668_FIXUP_AUTO_MUTE,
6083 },
6084 {
6085 .codec = 0x10ec0668,
6086 .subvendor = 0x1028,
6087#ifdef CONFIG_SND_DEBUG_VERBOSE
6088 .name = "Dell",
6089#endif
6090 .pins = (const struct hda_pintbl[]) {
6017 {0x12, 0x99a30150}, 6091 {0x12, 0x99a30150},
6018 {0x14, 0x90170110}, 6092 {0x14, 0x90170110},
6019 {0x15, 0x0321101f}, 6093 {0x15, 0x0321101f},
@@ -6190,6 +6264,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
6190 { .id = 0x10ec0221, .name = "ALC221", .patch = patch_alc269 }, 6264 { .id = 0x10ec0221, .name = "ALC221", .patch = patch_alc269 },
6191 { .id = 0x10ec0231, .name = "ALC231", .patch = patch_alc269 }, 6265 { .id = 0x10ec0231, .name = "ALC231", .patch = patch_alc269 },
6192 { .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 }, 6266 { .id = 0x10ec0233, .name = "ALC233", .patch = patch_alc269 },
6267 { .id = 0x10ec0235, .name = "ALC233", .patch = patch_alc269 },
6193 { .id = 0x10ec0255, .name = "ALC255", .patch = patch_alc269 }, 6268 { .id = 0x10ec0255, .name = "ALC255", .patch = patch_alc269 },
6194 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 }, 6269 { .id = 0x10ec0260, .name = "ALC260", .patch = patch_alc260 },
6195 { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 }, 6270 { .id = 0x10ec0262, .name = "ALC262", .patch = patch_alc262 },
@@ -6223,10 +6298,12 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = {
6223 .patch = patch_alc662 }, 6298 .patch = patch_alc662 },
6224 { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 }, 6299 { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },
6225 { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, 6300 { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 },
6301 { .id = 0x10ec0667, .name = "ALC667", .patch = patch_alc662 },
6226 { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 }, 6302 { .id = 0x10ec0668, .name = "ALC668", .patch = patch_alc662 },
6227 { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 }, 6303 { .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 },
6228 { .id = 0x10ec0671, .name = "ALC671", .patch = patch_alc662 }, 6304 { .id = 0x10ec0671, .name = "ALC671", .patch = patch_alc662 },
6229 { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 }, 6305 { .id = 0x10ec0680, .name = "ALC680", .patch = patch_alc680 },
6306 { .id = 0x10ec0867, .name = "ALC891", .patch = patch_alc882 },
6230 { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, 6307 { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
6231 { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, 6308 { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 },
6232 { .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 }, 6309 { .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 },
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
index 68340d7df76d..c91860e0a28d 100644
--- a/sound/pci/intel8x0.c
+++ b/sound/pci/intel8x0.c
@@ -2779,7 +2779,7 @@ static void intel8x0_measure_ac97_clock(struct intel8x0 *chip)
2779 unsigned long port; 2779 unsigned long port;
2780 unsigned long pos, pos1, t; 2780 unsigned long pos, pos1, t;
2781 int civ, timeout = 1000, attempt = 1; 2781 int civ, timeout = 1000, attempt = 1;
2782 struct timespec start_time, stop_time; 2782 ktime_t start_time, stop_time;
2783 2783
2784 if (chip->ac97_bus->clock != 48000) 2784 if (chip->ac97_bus->clock != 48000)
2785 return; /* specified in module option */ 2785 return; /* specified in module option */
@@ -2813,7 +2813,7 @@ static void intel8x0_measure_ac97_clock(struct intel8x0 *chip)
2813 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_IOCE); 2813 iputbyte(chip, port + ICH_REG_OFF_CR, ICH_IOCE);
2814 iputdword(chip, ICHREG(ALI_DMACR), 1 << ichdev->ali_slot); 2814 iputdword(chip, ICHREG(ALI_DMACR), 1 << ichdev->ali_slot);
2815 } 2815 }
2816 do_posix_clock_monotonic_gettime(&start_time); 2816 start_time = ktime_get();
2817 spin_unlock_irq(&chip->reg_lock); 2817 spin_unlock_irq(&chip->reg_lock);
2818 msleep(50); 2818 msleep(50);
2819 spin_lock_irq(&chip->reg_lock); 2819 spin_lock_irq(&chip->reg_lock);
@@ -2837,7 +2837,7 @@ static void intel8x0_measure_ac97_clock(struct intel8x0 *chip)
2837 pos += ichdev->position; 2837 pos += ichdev->position;
2838 } 2838 }
2839 chip->in_measurement = 0; 2839 chip->in_measurement = 0;
2840 do_posix_clock_monotonic_gettime(&stop_time); 2840 stop_time = ktime_get();
2841 /* stop */ 2841 /* stop */
2842 if (chip->device_type == DEVICE_ALI) { 2842 if (chip->device_type == DEVICE_ALI) {
2843 iputdword(chip, ICHREG(ALI_DMACR), 1 << (ichdev->ali_slot + 16)); 2843 iputdword(chip, ICHREG(ALI_DMACR), 1 << (ichdev->ali_slot + 16));
@@ -2865,9 +2865,7 @@ static void intel8x0_measure_ac97_clock(struct intel8x0 *chip)
2865 } 2865 }
2866 2866
2867 pos /= 4; 2867 pos /= 4;
2868 t = stop_time.tv_sec - start_time.tv_sec; 2868 t = ktime_us_delta(stop_time, start_time);
2869 t *= 1000000;
2870 t += (stop_time.tv_nsec - start_time.tv_nsec) / 1000;
2871 dev_info(chip->card->dev, 2869 dev_info(chip->card->dev,
2872 "%s: measured %lu usecs (%lu samples)\n", __func__, t, pos); 2870 "%s: measured %lu usecs (%lu samples)\n", __func__, t, pos);
2873 if (t == 0) { 2871 if (t == 0) {