diff options
| -rw-r--r-- | Documentation/sound/alsa/HD-Audio-Models.txt | 1 | ||||
| -rw-r--r-- | sound/pci/hda/patch_hdmi.c | 18 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 54 | ||||
| -rw-r--r-- | sound/usb/usx2y/usbusx2yaudio.c | 22 | ||||
| -rw-r--r-- | sound/usb/usx2y/usx2yhwdeppcm.c | 7 |
5 files changed, 67 insertions, 35 deletions
diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt index f911e3656209..85c362d8ea34 100644 --- a/Documentation/sound/alsa/HD-Audio-Models.txt +++ b/Documentation/sound/alsa/HD-Audio-Models.txt | |||
| @@ -28,6 +28,7 @@ ALC269/270/275/276/28x/29x | |||
| 28 | alc269-dmic Enable ALC269(VA) digital mic workaround | 28 | alc269-dmic Enable ALC269(VA) digital mic workaround |
| 29 | alc271-dmic Enable ALC271X digital mic workaround | 29 | alc271-dmic Enable ALC271X digital mic workaround |
| 30 | inv-dmic Inverted internal mic workaround | 30 | inv-dmic Inverted internal mic workaround |
| 31 | headset-mic Indicates a combined headset (headphone+mic) jack | ||
| 31 | lenovo-dock Enables docking station I/O for some Lenovos | 32 | lenovo-dock Enables docking station I/O for some Lenovos |
| 32 | dell-headset-multi Headset jack, which can also be used as mic-in | 33 | dell-headset-multi Headset jack, which can also be used as mic-in |
| 33 | dell-headset-dock Headset jack (without mic-in), and also dock I/O | 34 | dell-headset-dock Headset jack (without mic-in), and also dock I/O |
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 7ea0245fc6bd..50173d412ac5 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c | |||
| @@ -937,6 +937,14 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, | |||
| 937 | } | 937 | } |
| 938 | 938 | ||
| 939 | /* | 939 | /* |
| 940 | * always configure channel mapping, it may have been changed by the | ||
| 941 | * user in the meantime | ||
| 942 | */ | ||
| 943 | hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, | ||
| 944 | channels, per_pin->chmap, | ||
| 945 | per_pin->chmap_set); | ||
| 946 | |||
| 947 | /* | ||
| 940 | * sizeof(ai) is used instead of sizeof(*hdmi_ai) or | 948 | * sizeof(ai) is used instead of sizeof(*hdmi_ai) or |
| 941 | * sizeof(*dp_ai) to avoid partial match/update problems when | 949 | * sizeof(*dp_ai) to avoid partial match/update problems when |
| 942 | * the user switches between HDMI/DP monitors. | 950 | * the user switches between HDMI/DP monitors. |
| @@ -947,20 +955,10 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, | |||
| 947 | "pin=%d channels=%d\n", | 955 | "pin=%d channels=%d\n", |
| 948 | pin_nid, | 956 | pin_nid, |
| 949 | channels); | 957 | channels); |
| 950 | hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, | ||
| 951 | channels, per_pin->chmap, | ||
| 952 | per_pin->chmap_set); | ||
| 953 | hdmi_stop_infoframe_trans(codec, pin_nid); | 958 | hdmi_stop_infoframe_trans(codec, pin_nid); |
| 954 | hdmi_fill_audio_infoframe(codec, pin_nid, | 959 | hdmi_fill_audio_infoframe(codec, pin_nid, |
| 955 | ai.bytes, sizeof(ai)); | 960 | ai.bytes, sizeof(ai)); |
| 956 | hdmi_start_infoframe_trans(codec, pin_nid); | 961 | hdmi_start_infoframe_trans(codec, pin_nid); |
| 957 | } else { | ||
| 958 | /* For non-pcm audio switch, setup new channel mapping | ||
| 959 | * accordingly */ | ||
| 960 | if (per_pin->non_pcm != non_pcm) | ||
| 961 | hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, | ||
| 962 | channels, per_pin->chmap, | ||
| 963 | per_pin->chmap_set); | ||
| 964 | } | 962 | } |
| 965 | 963 | ||
| 966 | per_pin->non_pcm = non_pcm; | 964 | per_pin->non_pcm = non_pcm; |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 0e303b99a47c..bf313bea7085 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -2819,6 +2819,15 @@ static void alc269_fixup_hweq(struct hda_codec *codec, | |||
| 2819 | alc_write_coef_idx(codec, 0x1e, coef | 0x80); | 2819 | alc_write_coef_idx(codec, 0x1e, coef | 0x80); |
| 2820 | } | 2820 | } |
| 2821 | 2821 | ||
| 2822 | static void alc269_fixup_headset_mic(struct hda_codec *codec, | ||
| 2823 | const struct hda_fixup *fix, int action) | ||
| 2824 | { | ||
| 2825 | struct alc_spec *spec = codec->spec; | ||
| 2826 | |||
| 2827 | if (action == HDA_FIXUP_ACT_PRE_PROBE) | ||
| 2828 | spec->parse_flags |= HDA_PINCFG_HEADSET_MIC; | ||
| 2829 | } | ||
| 2830 | |||
| 2822 | static void alc271_fixup_dmic(struct hda_codec *codec, | 2831 | static void alc271_fixup_dmic(struct hda_codec *codec, |
| 2823 | const struct hda_fixup *fix, int action) | 2832 | const struct hda_fixup *fix, int action) |
| 2824 | { | 2833 | { |
| @@ -3496,6 +3505,15 @@ static void alc282_fixup_asus_tx300(struct hda_codec *codec, | |||
| 3496 | } | 3505 | } |
| 3497 | } | 3506 | } |
| 3498 | 3507 | ||
| 3508 | static void alc290_fixup_mono_speakers(struct hda_codec *codec, | ||
| 3509 | const struct hda_fixup *fix, int action) | ||
| 3510 | { | ||
| 3511 | if (action == HDA_FIXUP_ACT_PRE_PROBE) | ||
| 3512 | /* Remove DAC node 0x03, as it seems to be | ||
| 3513 | giving mono output */ | ||
| 3514 | snd_hda_override_wcaps(codec, 0x03, 0); | ||
| 3515 | } | ||
| 3516 | |||
| 3499 | enum { | 3517 | enum { |
| 3500 | ALC269_FIXUP_SONY_VAIO, | 3518 | ALC269_FIXUP_SONY_VAIO, |
| 3501 | ALC275_FIXUP_SONY_VAIO_GPIO2, | 3519 | ALC275_FIXUP_SONY_VAIO_GPIO2, |
| @@ -3507,6 +3525,7 @@ enum { | |||
| 3507 | ALC271_FIXUP_DMIC, | 3525 | ALC271_FIXUP_DMIC, |
| 3508 | ALC269_FIXUP_PCM_44K, | 3526 | ALC269_FIXUP_PCM_44K, |
| 3509 | ALC269_FIXUP_STEREO_DMIC, | 3527 | ALC269_FIXUP_STEREO_DMIC, |
| 3528 | ALC269_FIXUP_HEADSET_MIC, | ||
| 3510 | ALC269_FIXUP_QUANTA_MUTE, | 3529 | ALC269_FIXUP_QUANTA_MUTE, |
| 3511 | ALC269_FIXUP_LIFEBOOK, | 3530 | ALC269_FIXUP_LIFEBOOK, |
| 3512 | ALC269_FIXUP_AMIC, | 3531 | ALC269_FIXUP_AMIC, |
| @@ -3519,9 +3538,11 @@ enum { | |||
| 3519 | ALC269_FIXUP_HP_GPIO_LED, | 3538 | ALC269_FIXUP_HP_GPIO_LED, |
| 3520 | ALC269_FIXUP_INV_DMIC, | 3539 | ALC269_FIXUP_INV_DMIC, |
| 3521 | ALC269_FIXUP_LENOVO_DOCK, | 3540 | ALC269_FIXUP_LENOVO_DOCK, |
| 3541 | ALC286_FIXUP_SONY_MIC_NO_PRESENCE, | ||
| 3522 | ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT, | 3542 | ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT, |
| 3523 | ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, | 3543 | ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, |
| 3524 | ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, | 3544 | ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, |
| 3545 | ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, | ||
| 3525 | ALC269_FIXUP_HEADSET_MODE, | 3546 | ALC269_FIXUP_HEADSET_MODE, |
| 3526 | ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, | 3547 | ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, |
| 3527 | ALC269_FIXUP_ASUS_X101_FUNC, | 3548 | ALC269_FIXUP_ASUS_X101_FUNC, |
| @@ -3535,6 +3556,7 @@ enum { | |||
| 3535 | ALC283_FIXUP_CHROME_BOOK, | 3556 | ALC283_FIXUP_CHROME_BOOK, |
| 3536 | ALC282_FIXUP_ASUS_TX300, | 3557 | ALC282_FIXUP_ASUS_TX300, |
| 3537 | ALC283_FIXUP_INT_MIC, | 3558 | ALC283_FIXUP_INT_MIC, |
| 3559 | ALC290_FIXUP_MONO_SPEAKERS, | ||
| 3538 | }; | 3560 | }; |
| 3539 | 3561 | ||
| 3540 | static const struct hda_fixup alc269_fixups[] = { | 3562 | static const struct hda_fixup alc269_fixups[] = { |
| @@ -3603,6 +3625,10 @@ static const struct hda_fixup alc269_fixups[] = { | |||
| 3603 | .type = HDA_FIXUP_FUNC, | 3625 | .type = HDA_FIXUP_FUNC, |
| 3604 | .v.func = alc269_fixup_stereo_dmic, | 3626 | .v.func = alc269_fixup_stereo_dmic, |
| 3605 | }, | 3627 | }, |
| 3628 | [ALC269_FIXUP_HEADSET_MIC] = { | ||
| 3629 | .type = HDA_FIXUP_FUNC, | ||
| 3630 | .v.func = alc269_fixup_headset_mic, | ||
| 3631 | }, | ||
| 3606 | [ALC269_FIXUP_QUANTA_MUTE] = { | 3632 | [ALC269_FIXUP_QUANTA_MUTE] = { |
| 3607 | .type = HDA_FIXUP_FUNC, | 3633 | .type = HDA_FIXUP_FUNC, |
| 3608 | .v.func = alc269_fixup_quanta_mute, | 3634 | .v.func = alc269_fixup_quanta_mute, |
| @@ -3712,6 +3738,15 @@ static const struct hda_fixup alc269_fixups[] = { | |||
| 3712 | .chained = true, | 3738 | .chained = true, |
| 3713 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC | 3739 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC |
| 3714 | }, | 3740 | }, |
| 3741 | [ALC269_FIXUP_DELL3_MIC_NO_PRESENCE] = { | ||
| 3742 | .type = HDA_FIXUP_PINS, | ||
| 3743 | .v.pins = (const struct hda_pintbl[]) { | ||
| 3744 | { 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */ | ||
| 3745 | { } | ||
| 3746 | }, | ||
| 3747 | .chained = true, | ||
| 3748 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC | ||
| 3749 | }, | ||
| 3715 | [ALC269_FIXUP_HEADSET_MODE] = { | 3750 | [ALC269_FIXUP_HEADSET_MODE] = { |
| 3716 | .type = HDA_FIXUP_FUNC, | 3751 | .type = HDA_FIXUP_FUNC, |
| 3717 | .v.func = alc_fixup_headset_mode, | 3752 | .v.func = alc_fixup_headset_mode, |
| @@ -3720,6 +3755,15 @@ static const struct hda_fixup alc269_fixups[] = { | |||
| 3720 | .type = HDA_FIXUP_FUNC, | 3755 | .type = HDA_FIXUP_FUNC, |
| 3721 | .v.func = alc_fixup_headset_mode_no_hp_mic, | 3756 | .v.func = alc_fixup_headset_mode_no_hp_mic, |
| 3722 | }, | 3757 | }, |
| 3758 | [ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = { | ||
| 3759 | .type = HDA_FIXUP_PINS, | ||
| 3760 | .v.pins = (const struct hda_pintbl[]) { | ||
| 3761 | { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */ | ||
| 3762 | { } | ||
| 3763 | }, | ||
| 3764 | .chained = true, | ||
| 3765 | .chain_id = ALC269_FIXUP_HEADSET_MIC | ||
| 3766 | }, | ||
| 3723 | [ALC269_FIXUP_ASUS_X101_FUNC] = { | 3767 | [ALC269_FIXUP_ASUS_X101_FUNC] = { |
| 3724 | .type = HDA_FIXUP_FUNC, | 3768 | .type = HDA_FIXUP_FUNC, |
| 3725 | .v.func = alc269_fixup_x101_headset_mic, | 3769 | .v.func = alc269_fixup_x101_headset_mic, |
| @@ -3804,6 +3848,12 @@ static const struct hda_fixup alc269_fixups[] = { | |||
| 3804 | .chained = true, | 3848 | .chained = true, |
| 3805 | .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST | 3849 | .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST |
| 3806 | }, | 3850 | }, |
| 3851 | [ALC290_FIXUP_MONO_SPEAKERS] = { | ||
| 3852 | .type = HDA_FIXUP_FUNC, | ||
| 3853 | .v.func = alc290_fixup_mono_speakers, | ||
| 3854 | .chained = true, | ||
| 3855 | .chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, | ||
| 3856 | }, | ||
| 3807 | }; | 3857 | }; |
| 3808 | 3858 | ||
| 3809 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { | 3859 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { |
| @@ -3845,6 +3895,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
| 3845 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3895 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
| 3846 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3896 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
| 3847 | SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3897 | SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
| 3898 | SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS), | ||
| 3848 | SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3899 | SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
| 3849 | SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3900 | SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
| 3850 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), | 3901 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |
| @@ -3867,6 +3918,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
| 3867 | SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), | 3918 | SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), |
| 3868 | SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), | 3919 | SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), |
| 3869 | SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101), | 3920 | SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101), |
| 3921 | SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE), | ||
| 3870 | SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2), | 3922 | SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2), |
| 3871 | SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), | 3923 | SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
| 3872 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), | 3924 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
| @@ -3952,6 +4004,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { | |||
| 3952 | {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"}, | 4004 | {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"}, |
| 3953 | {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"}, | 4005 | {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"}, |
| 3954 | {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"}, | 4006 | {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"}, |
| 4007 | {.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"}, | ||
| 3955 | {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"}, | 4008 | {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"}, |
| 3956 | {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"}, | 4009 | {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"}, |
| 3957 | {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"}, | 4010 | {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"}, |
| @@ -4569,6 +4622,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { | |||
| 4569 | SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), | 4622 | SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), |
| 4570 | SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), | 4623 | SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), |
| 4571 | SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), | 4624 | SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), |
| 4625 | SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4), | ||
| 4572 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), | 4626 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), |
| 4573 | SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2), | 4627 | SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2), |
| 4574 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), | 4628 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), |
diff --git a/sound/usb/usx2y/usbusx2yaudio.c b/sound/usb/usx2y/usbusx2yaudio.c index 63fb5219f0f8..6234a51625b1 100644 --- a/sound/usb/usx2y/usbusx2yaudio.c +++ b/sound/usb/usx2y/usbusx2yaudio.c | |||
| @@ -299,19 +299,6 @@ static void usX2Y_error_urb_status(struct usX2Ydev *usX2Y, | |||
| 299 | usX2Y_clients_stop(usX2Y); | 299 | usX2Y_clients_stop(usX2Y); |
| 300 | } | 300 | } |
| 301 | 301 | ||
| 302 | static void usX2Y_error_sequence(struct usX2Ydev *usX2Y, | ||
| 303 | struct snd_usX2Y_substream *subs, struct urb *urb) | ||
| 304 | { | ||
| 305 | snd_printk(KERN_ERR | ||
| 306 | "Sequence Error!(hcd_frame=%i ep=%i%s;wait=%i,frame=%i).\n" | ||
| 307 | "Most probably some urb of usb-frame %i is still missing.\n" | ||
| 308 | "Cause could be too long delays in usb-hcd interrupt handling.\n", | ||
| 309 | usb_get_current_frame_number(usX2Y->dev), | ||
| 310 | subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out", | ||
| 311 | usX2Y->wait_iso_frame, urb->start_frame, usX2Y->wait_iso_frame); | ||
| 312 | usX2Y_clients_stop(usX2Y); | ||
| 313 | } | ||
| 314 | |||
| 315 | static void i_usX2Y_urb_complete(struct urb *urb) | 302 | static void i_usX2Y_urb_complete(struct urb *urb) |
| 316 | { | 303 | { |
| 317 | struct snd_usX2Y_substream *subs = urb->context; | 304 | struct snd_usX2Y_substream *subs = urb->context; |
| @@ -328,12 +315,9 @@ static void i_usX2Y_urb_complete(struct urb *urb) | |||
| 328 | usX2Y_error_urb_status(usX2Y, subs, urb); | 315 | usX2Y_error_urb_status(usX2Y, subs, urb); |
| 329 | return; | 316 | return; |
| 330 | } | 317 | } |
| 331 | if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF))) | 318 | |
| 332 | subs->completed_urb = urb; | 319 | subs->completed_urb = urb; |
| 333 | else { | 320 | |
| 334 | usX2Y_error_sequence(usX2Y, subs, urb); | ||
| 335 | return; | ||
| 336 | } | ||
| 337 | { | 321 | { |
| 338 | struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE], | 322 | struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE], |
| 339 | *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; | 323 | *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; |
diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c index f2a1acdc4d83..814d0e887c62 100644 --- a/sound/usb/usx2y/usx2yhwdeppcm.c +++ b/sound/usb/usx2y/usx2yhwdeppcm.c | |||
| @@ -244,13 +244,8 @@ static void i_usX2Y_usbpcm_urb_complete(struct urb *urb) | |||
| 244 | usX2Y_error_urb_status(usX2Y, subs, urb); | 244 | usX2Y_error_urb_status(usX2Y, subs, urb); |
| 245 | return; | 245 | return; |
| 246 | } | 246 | } |
| 247 | if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF))) | ||
| 248 | subs->completed_urb = urb; | ||
| 249 | else { | ||
| 250 | usX2Y_error_sequence(usX2Y, subs, urb); | ||
| 251 | return; | ||
| 252 | } | ||
| 253 | 247 | ||
| 248 | subs->completed_urb = urb; | ||
| 254 | capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; | 249 | capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; |
| 255 | capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; | 250 | capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; |
| 256 | playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; | 251 | playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; |
