Subject: Re: bug#35574: bcm5974 touchpad is not recognized as touchpad

From: "pelzflorian (Florian Pelz)" <[email-masked]>
Date: Mon, 20 Apr 2020 16:47:18 +0200

On Fri, Jan 17, 2020 at 12:35:39AM +0100, pelzflorian (Florian Pelz) wrote:
> Indeed for me on good boots, the command `lsusb -t` prints
>     |__ Port 3: Dev 2, If 2, Class=Human Interface Device, Driver=bcm5974, 12M
> while on bad boots it says Driver=usbmouse.

The issue with Macbook bcm5974 touchpads is a race between the bcm5974
kernel module and the usbmouse kernel module, especially on cold
boots.  Indeed a remedy is to run as root

rmmod usbmouse
rmmod bcm5974
modprobe bcm5974

Then the touchpad works again in all directions and not just for
scrolling up-down.  The converse is also true;

rmmod bcm5974
rmmod usbmouse
modprobe usbmouse

breaks the touchpad again.

However I also cannot find the reason why this usbmouse loadable
kernel module gets loaded at all.  How can I debug what loads this
kernel module?  Debian does not show usbmouse in lsmod, and I think
usbmouse should not get loaded in Guix either.  usbmouse is not
required for my external USB mouse to work.

To quote the linux-4.19.95 source file drivers/hid/usbhid/Kconfig

config USB_MOUSE
        tristate "USB HIDBP Mouse (simple Boot) support"
        depends on USB && INPUT
        ---help---
          Say Y here only if you are absolutely sure that you don't want
          to use the generic HID driver for your USB mouse and prefer
          to use the mouse in its limited Boot Protocol mode instead.

          This is almost certainly not what you want.  This is mostly
          useful for embedded applications or simple mice.

Other workarounds I tried were using Wayland instead of X11, but sway
does not run for me, weston does not build and sddm set to Wayland or
a GNOME Wayland session exhibit the same mouse issue.  Building a
kernel with these modules built-in instead of loadable (=y instead of
=m in the kernel config) helped, but I suppose the modules should be
loadable.

Regards,
Florian