From bb33ba6b9af392e39d6e4f49814384cb825cc90f Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Fri, 31 Oct 2014 20:40:13 +0100 Subject: nusb/kb: dont set boot protocol on HidCSP interface when we failed to read report descriptor (thanks aap_) this fixes wireless keyboard/mouse on raspi. --- sys/src/cmd/nusb/kb/kb.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'sys/src') diff --git a/sys/src/cmd/nusb/kb/kb.c b/sys/src/cmd/nusb/kb/kb.c index 36d2793d0..f0f4eb5cd 100644 --- a/sys/src/cmd/nusb/kb/kb.c +++ b/sys/src/cmd/nusb/kb/kb.c @@ -304,7 +304,6 @@ setproto(Hiddev *f, int eid) int id, proto; Iface *iface; - proto = Bootproto; iface = f->dev->usb->ep[eid]->iface; id = iface->id; f->nrep = usbcmd(f->dev, Rd2h|Rstd|Riface, Rgetdesc, Dreport<<8, id, @@ -323,13 +322,20 @@ setproto(Hiddev *f, int eid) } proto = Reportproto; } else { - if(iface->csp == KbdCSP){ + switch(iface->csp){ + case KbdCSP: f->nrep = sizeof(kbdbootrep); memmove(f->rep, kbdbootrep, f->nrep); - } else { + break; + case PtrCSP: f->nrep = sizeof(ptrbootrep); memmove(f->rep, ptrbootrep, f->nrep); + break; + default: + werrstr("no report descriptor"); + return -1; } + proto = Bootproto; } return usbcmd(f->dev, Rh2d|Rclass|Riface, Setproto, proto, id, nil, 0); } -- cgit v1.2.3