[F/OEM-5.6] [PATCH] ALSA: usb-audio: Add support for Lenovo ThinkStation P620
Stefan Bader
stefan.bader at canonical.com
Wed Aug 5 06:47:24 UTC 2020
On 04.08.20 18:40, Kai-Heng Feng wrote:
> BugLink: https://bugs.launchpad.net/bugs/1890317
>
> Lenovo ThinkStation P620 is like other TRX40 boards, is equipped with
> two USB audio cards.
>
> USB device (17aa:104d) provides functionality for Internal Speaker and
> Front Headset. It's UAC v2, so it supports insertion control (jack
> detection). However, when trying to get the connector status of the
> speaker, an error occurs:
> [ 5.787405] usb 3-1: cannot get connectors status: req = 0x81, wValue = 0x200, wIndex = 0x1000, type = 0
>
> Since the insertion control works perfectly for the headset, the error
> for speaker is probably casued by connecting internally. So let's relax
> the error for a bit if it's a speaker, and always reports it's connected.
>
> USB device (17aa:1046) is for rear Line-in, Line-out and Microphone.
> The insertion control works for all three jacks. However, there's an
> Function Unit that doesn't work:
> [ 5.905415] usb 3-6: cannot get ctl value: req = 0x83, wValue = 0xc00, wIndex = 0x1300, type = 4
> [ 5.905418] usb 3-6: 19:0: cannot get min/max values for control 12 (id 19)
>
> So turn off the FU to avoid the error.
>
> Also, add specific card name for both devices, so userspace can easily
> indentify both cards.
>
> Signed-off-by: Kai-Heng Feng <kai.heng.feng at canonical.com>
> Link: https://lore.kernel.org/r/20200803142612.17156-1-kai.heng.feng@canonical.com
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> (backported from commit f8c11eb7da4a99f7777d5afd7ed80dec8a593064 linux-next)
> Signed-off-by: Kai-Heng Feng <kai.heng.feng at canonical.com>
> ---
This would be a case where the goal is to add support for new HW and in doing
that seems to modify (admittedly a very small portion) common code. For that
reason I would give it some time in oem-5.6 and unstable/groovy before
proceeding with focal.
Also regression Potential
(https://wiki.ubuntu.com/StableReleaseUpdates/#SRU_Bug_Template):
Most changes are limited to specific hardware and were successfully verified to
work in advance. There is a small change in common code which assumes speakers
are always connected. if connection state cannot be obtained. This assumption
might be incorrect for other hardware. The result would be a missing error
message only.
-Stefan
> sound/usb/mixer.c | 4 ++++
> sound/usb/mixer_maps.c | 9 +++++++++
> sound/usb/quirks-table.h | 21 +++++++++++++++++++++
> 3 files changed, 34 insertions(+)
>
> diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
> index 68fefe55e5c0..f29a134ec600 100644
> --- a/sound/usb/mixer.c
> +++ b/sound/usb/mixer.c
> @@ -1450,6 +1450,10 @@ static int mixer_ctl_connector_get(struct snd_kcontrol *kcontrol,
> snd_usb_unlock_shutdown(chip);
>
> if (ret < 0) {
> + if (strstr(kcontrol->id.name, "Speaker")) {
> + ucontrol->value.integer.value[0] = 1;
> + return 0;
> + }
> error:
> usb_audio_err(chip,
> "cannot get connectors status: req = %#x, wValue = %#x, wIndex = %#x, type = %d\n",
> diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
> index 9af7aa93f6fa..08eb230e2bff 100644
> --- a/sound/usb/mixer_maps.c
> +++ b/sound/usb/mixer_maps.c
> @@ -370,6 +370,11 @@ static const struct usbmix_name_map asus_rog_map[] = {
> {}
> };
>
> +static const struct usbmix_name_map lenovo_p620_rear_map[] = {
> + { 19, NULL, 12 }, /* FU, Input Gain Pad */
> + {}
> +};
> +
> /* TRX40 mobos with Realtek ALC1220-VB */
> static const struct usbmix_name_map trx40_mobo_map[] = {
> { 18, NULL }, /* OT, IEC958 - broken response, disabled */
> @@ -573,6 +578,10 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
> .map = trx40_mobo_map,
> .connector_map = trx40_mobo_connector_map,
> },
> + { /* Lenovo ThinkStation P620 Rear */
> + .id = USB_ID(0x17aa, 0x1046),
> + .map = lenovo_p620_rear_map,
> + },
> { 0 } /* terminator */
> };
>
> diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
> index 042a5e8eb79d..cb57b0bdafe8 100644
> --- a/sound/usb/quirks-table.h
> +++ b/sound/usb/quirks-table.h
> @@ -2899,6 +2899,27 @@ YAMAHA_DEVICE(0x7010, "UB99"),
> }
> },
>
> +/* Lenovo ThinkStation P620 Rear Line-in, Line-out and Microphone */
> +{
> + USB_DEVICE(0x17aa, 0x1046),
> + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
> + .vendor_name = "Lenovo",
> + .product_name = "ThinkStation P620 Rear",
> + .profile_name = "Lenovo-ThinkStation-P620-Rear",
> + .ifnum = QUIRK_NO_INTERFACE
> + }
> +},
> +/* Lenovo ThinkStation P620 Internal Speaker + Front Headset */
> +{
> + USB_DEVICE(0x17aa, 0x104d),
> + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
> + .vendor_name = "Lenovo",
> + .product_name = "ThinkStation P620 Main",
> + .profile_name = "Lenovo-ThinkStation-P620-Main",
> + .ifnum = QUIRK_NO_INTERFACE
> + }
> +},
> +
> /* Native Instruments MK2 series */
> {
> /* Komplete Audio 6 */
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20200805/2263a78b/attachment-0001.sig>
More information about the kernel-team
mailing list