diff options
| -rw-r--r-- | include/sound/pcm.h | 2 | ||||
| -rw-r--r-- | include/uapi/sound/compress_offload.h | 2 | ||||
| -rw-r--r-- | sound/core/seq/seq_clientmgr.c | 36 | ||||
| -rw-r--r-- | sound/core/seq/seq_fifo.c | 2 | ||||
| -rw-r--r-- | sound/core/timer.c | 4 | ||||
| -rw-r--r-- | sound/firewire/bebob/bebob.h | 2 | ||||
| -rw-r--r-- | sound/firewire/bebob/bebob_stream.c | 4 | ||||
| -rw-r--r-- | sound/firewire/fireworks/fireworks.c | 1 | ||||
| -rw-r--r-- | sound/firewire/fireworks/fireworks.h | 1 | ||||
| -rw-r--r-- | sound/firewire/fireworks/fireworks_hwdep.c | 2 | ||||
| -rw-r--r-- | sound/firewire/fireworks/fireworks_stream.c | 4 | ||||
| -rw-r--r-- | sound/firewire/fireworks/fireworks_transaction.c | 18 | ||||
| -rw-r--r-- | sound/pci/hda/hda_intel.c | 14 | ||||
| -rw-r--r-- | sound/pci/hda/patch_hdmi.c | 10 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 91 | ||||
| -rw-r--r-- | sound/pci/intel8x0.c | 10 |
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 { | |||
| 80 | struct snd_compr_avail { | 80 | struct 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 | ||
| 85 | enum snd_compr_direction { | 85 | enum 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, | |||
| 741 | static int broadcast_event(struct snd_seq_client *client, | 749 | static 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); | |||
| 208 | int snd_bebob_stream_check_internal_clock(struct snd_bebob *bebob, | 208 | int snd_bebob_stream_check_internal_clock(struct snd_bebob *bebob, |
| 209 | bool *internal); | 209 | bool *internal); |
| 210 | int snd_bebob_stream_discover(struct snd_bebob *bebob); | 210 | int snd_bebob_stream_discover(struct snd_bebob *bebob); |
| 211 | int snd_bebob_stream_map(struct snd_bebob *bebob, | ||
| 212 | struct amdtp_stream *stream); | ||
| 213 | int snd_bebob_stream_init_duplex(struct snd_bebob *bebob); | 211 | int snd_bebob_stream_init_duplex(struct snd_bebob *bebob); |
| 214 | int snd_bebob_stream_start_duplex(struct snd_bebob *bebob, unsigned int rate); | 212 | int snd_bebob_stream_start_duplex(struct snd_bebob *bebob, unsigned int rate); |
| 215 | void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob); | 213 | void 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 | ||
| 352 | module_init(snd_efw_init); | 351 | module_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 | }; |
| 168 | struct snd_efw_phys_meters { | 167 | struct 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 | ||
| 931 | static struct alc_codec_rename_table rename_tbl[] = { | 931 | static 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) { |
