You have been subscribed to a public bug:

Hello,

I occasionally use an USB FM transmitter to send audio from my laptop to hi-fi 
systems that don't have the ability to receive a bluetooth stream but have a FM 
tuner. I use that kind of cheap module which works great, in stereo mode (see 
picture in the JPG attachment):
https://fr.aliexpress.com/item/32921292502.html?spm=a2g0o.store_pc_allItems_or_groupList.0.0.677dd1cb71GfSm&pdp_npi=4%40dis%21EUR%21%E2%82%AC%205%2C74%21%E2%82%AC%205%2C69%21%21%215.84%215.79%21%40211b6c1917410185656756898ea2ae%2166245292113%21sh%21FR%210%21X&_gl=1*xvmald*_gcl_au*NDk2OTk1ODI3LjE3NDEwMTgyMzE.*_ga*NjA0NjU3MDUyLjE3NDEwMTgyMzE.*_ga_VED1YSGNC7*MTc0MTAxODIzMS4xLjEuMTc0MTAxODU2My4xLjAuMA..&gatewayAdapt=glo2fra

It is recognized on Ubuntu Desktop as an external sound card with the
HID driver. It worked well until kernel 5.4.0-167 on Ubuntu 20.04 and it
fails since 5.4.0-169. Bug occurs also on an updated Ubuntu desktop
22.04 with kernel 5.15.0-133.

The USB device is working in USB 1.1 (see attached lsusb.txt file) and
plugged into an USB 2.0 port. You will find in attachment the kernel
logs (dmesg.txt) when device is recognized in 5.4.0-167 and when it is
not recognized in 5.15.0-133 (dmesg_fail.txt). This bug exists since
November 2023 but I may not have used my USB device since then, as I
weekly update my software packages.

When we look at the changelog of the identified patch, it fixes only bug
#2043197. This bug was fixed by commit
https://github.com/torvalds/linux/commit/59cf445754566984fd55af19ba7146c76e6627bc

So, not sure about that but I assume the bug I encounter deals with the
following code in drivers/usb/core/hub.c, as seen now on master branch:

        /*
         * Check the ep0 maxpacket guess and correct it if necessary.
         * maxp0 is the value stored in the device descriptor;
         * i is the value it encodes (logarithmic for SuperSpeed or greater).
         */
        i = maxp0;
        if (udev->speed >= USB_SPEED_SUPER) {
                if (maxp0 <= 16)
                        i = 1 << maxp0;
                else
                        i = 0;          /* Invalid */
        }
        if (usb_endpoint_maxp(&udev->ep0.desc) == i) {
                ;       /* Initial ep0 maxpacket guess is right */
        } else if (((udev->speed == USB_SPEED_FULL ||
                                udev->speed == USB_SPEED_HIGH) &&
                        (i == 8 || i == 16 || i == 32 || i == 64)) ||
                        (udev->speed >= USB_SPEED_SUPER && i > 0)) {
                /* Initial guess is wrong; use the descriptor's value */
                if (udev->speed == USB_SPEED_FULL)
                        dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
                else
                        dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i);
                udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
                usb_ep0_reinit(udev);
        } else {
                /* Initial guess is wrong and descriptor's value is invalid */
                dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", maxp0);
                retval = -EMSGSIZE;
                goto fail;
        }

I am not a kernel source code specialist but as far as I understand, is
there a missing part in the code not taking the "USB_SPEED_LOW" devices
into account?

Kind regards.

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: card sound usb
-- 
USB FM transmitter not recognized after kernel update
https://bugs.launchpad.net/bugs/2100787
You received this bug notification because you are a member of Kernel Packages, 
which is subscribed to linux in Ubuntu.

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to