Module Name: src
Committed By: riastradh
Date: Mon Mar 28 12:45:04 UTC 2022
Modified Files:
src/sys/dev/usb: uatp.c
Log Message:
uatp(4): Use usbd_get/set_report for Geyser 3/4 reset.
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/usb/uatp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/uatp.c
diff -u src/sys/dev/usb/uatp.c:1.30 src/sys/dev/usb/uatp.c:1.31
--- src/sys/dev/usb/uatp.c:1.30 Mon Mar 28 12:44:54 2022
+++ src/sys/dev/usb/uatp.c Mon Mar 28 12:45:04 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: uatp.c,v 1.30 2022/03/28 12:44:54 riastradh Exp $ */
+/* $NetBSD: uatp.c,v 1.31 2022/03/28 12:45:04 riastradh Exp $ */
/*-
* Copyright (c) 2011-2014 The NetBSD Foundation, Inc.
@@ -146,7 +146,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uatp.c,v 1.30 2022/03/28 12:44:54 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uatp.c,v 1.31 2022/03/28 12:45:04 riastradh Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -489,6 +489,7 @@ struct uatp_softc {
device_t sc_dev;
struct uhidev *sc_hdev; /* uhidev(9) parent. */
struct usbd_device *sc_udev; /* USB device. */
+ struct usbd_interface *sc_iface0; /* Geyser 3/4 reset interface. */
device_t sc_wsmousedev; /* Attached wsmouse device. */
const struct uatp_parameters *sc_parameters;
struct uatp_knobs sc_knobs;
@@ -1295,19 +1296,12 @@ uatp_ioctl(void *v, unsigned long cmd, v
static void
geyser34_enable_raw_mode(struct uatp_softc *sc)
{
- struct usbd_device *udev = sc->sc_udev;
- usb_device_request_t req;
- usbd_status status;
uint8_t report[GEYSER34_MODE_PACKET_SIZE];
-
- req.bmRequestType = UT_READ_CLASS_INTERFACE;
- req.bRequest = UR_GET_REPORT;
- USETW2(req.wValue, UHID_FEATURE_REPORT, GEYSER34_MODE_REPORT_ID);
- USETW(req.wIndex, GEYSER34_MODE_INTERFACE);
- USETW(req.wLength, GEYSER34_MODE_PACKET_SIZE);
+ usbd_status status;
DPRINTF(sc, UATP_DEBUG_RESET, ("get feature report\n"));
- status = usbd_do_request(udev, &req, report);
+ status = usbd_get_report(sc->sc_iface0, UHID_FEATURE_REPORT,
+ GEYSER34_MODE_REPORT_ID, report, sizeof(report));
if (status != USBD_NORMAL_COMPLETION) {
aprint_error_dev(uatp_dev(sc),
"error reading feature report: %s\n", usbd_errstr(status));
@@ -1333,14 +1327,9 @@ geyser34_enable_raw_mode(struct uatp_sof
report[0] = GEYSER34_RAW_MODE;
- req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
- req.bRequest = UR_SET_REPORT;
- USETW2(req.wValue, UHID_FEATURE_REPORT, GEYSER34_MODE_REPORT_ID);
- USETW(req.wIndex, GEYSER34_MODE_INTERFACE);
- USETW(req.wLength, GEYSER34_MODE_PACKET_SIZE);
-
DPRINTF(sc, UATP_DEBUG_RESET, ("set feature report\n"));
- status = usbd_do_request(udev, &req, report);
+ status = usbd_set_report(sc->sc_iface0, UHID_FEATURE_REPORT,
+ GEYSER34_MODE_REPORT_ID, report, sizeof(report));
if (status != USBD_NORMAL_COMPLETION) {
aprint_error_dev(uatp_dev(sc),
"error writing feature report: %s\n", usbd_errstr(status));
@@ -1356,8 +1345,11 @@ geyser34_enable_raw_mode(struct uatp_sof
static void
geyser34_initialize(struct uatp_softc *sc)
{
+ usbd_status err __diagused;
DPRINTF(sc, UATP_DEBUG_MISC, ("initializing\n"));
+ err = usbd_device2interface_handle(sc->sc_udev, 0, &sc->sc_iface0);
+ KASSERT(err == 0); /* always an interface 0 if attached */
geyser34_enable_raw_mode(sc);
usb_init_task(&sc->sc_reset_task, &geyser34_reset_task, sc, 0);
}