As usual, a global that's only ever read during match and attach. The device type pointer gets stored in the softc, so that member must be const as well.
Builds on amd64 but I don't have Apple notebooks to run-test: ffffffff820dd550 l O .rodata 0000000000000410 ubcmtp_devices Tests? OK? Index: ubcmtp.c =================================================================== RCS file: /cvs/src/sys/dev/usb/ubcmtp.c,v retrieving revision 1.23 diff -u -p -r1.23 ubcmtp.c --- ubcmtp.c 22 Nov 2021 22:12:37 -0000 1.23 +++ ubcmtp.c 21 Oct 2022 18:26:19 -0000 @@ -135,7 +135,7 @@ struct ubcmtp_dev { struct ubcmtp_limit l_orientation; }; -static struct ubcmtp_dev ubcmtp_devices[] = { +static const struct ubcmtp_dev ubcmtp_devices[] = { /* type 1 devices with separate buttons */ { USB_VENDOR_APPLE, @@ -312,7 +312,7 @@ static struct ubcmtp_dev ubcmtp_devices[ struct ubcmtp_softc { struct device sc_dev; /* base device */ - struct ubcmtp_dev *dev_type; + const struct ubcmtp_dev *dev_type; struct usbd_device *sc_udev; struct device *sc_wsmousedev;