https://bugs.dragonflybsd.org/https://bugs.dragonflybsd.org/favicon.ico?16293952082011-01-25T16:13:58ZDragonFlyBSD bugtrackerDragonFlyBSD - Bug #1968: ukbd patchhttps://bugs.dragonflybsd.org/issues/1968?journal_id=95152011-01-25T16:13:58Zalexh
<ul></ul><p>On 25/01/11 06:29, Magliano Andrea wrote:</p>
<blockquote>
<p>Without this patch uhci driver doesn't generate an interrupt when Fn key is pressed on Apple usb keyboard (it took me days to realize this...).</p>
</blockquote>
<p>With this patch that code is probably skipped unconditionally in the<br />normal case.</p>
<blockquote>
<p>I just want to map Fn key to 'insert' keycode. For that it's than enough to set ukbd_trtab<sup><a href="#fn1">1</a></sup>=102 in ukbd.c ,but i don't know if to hardcode this violates any standard. Does it?</p>
</blockquote>
<p>Why don't you just set the quirk NO_SET_PROTO for that device? That will<br />have the same effect.</p>
<blockquote>
<p>0001-set-usb-quirk-the-right-way.patch</p>
<p>From 639a855e36f1bf7b1d6120ba5c2bd1a871614ead Mon Sep 17 00:00:00 2001<br />From: Charlie <<a class="email" href="mailto:root@randy.andy.net">root@randy.andy.net</a>><br />Date: Tue, 25 Jan 2011 06:58:43 +0100<br />Subject: [PATCH] set usb quirk the right way</p>
<p>---<br />sys/dev/usbmisc/ukbd/ukbd.c | 2 <ins><del><br />1 files changed, 1 insertions(</ins>), 1 deletions(</del>)</p>
<p>diff --git a/sys/dev/usbmisc/ukbd/ukbd.c b/sys/dev/usbmisc/ukbd/ukbd.c<br />index 2099921..e3adf78 100644<br />--- a/sys/dev/usbmisc/ukbd/ukbd.c<br />+++ b/sys/dev/usbmisc/ukbd/ukbd.c<br /><code>@ -1460,7 +1460,7 </code>@ bLength=%d bDescriptorType=%d bEndpointAddress=%d-%s bmAttributes=%d wMaxPacketS<br />return EINVAL;<br />}</p>
<p>- if ((usbd_get_quirks(state->ks_uaa->device)->uq_flags & UQ_NO_SET_PROTO) == 0) {<br />+ if (usbd_get_quirks(state->ks_uaa->device)->uq_flags & UQ_NO_SET_PROTO) {</p>
</blockquote>
<p>This makes no sense. The original condition was: "If we are asked not to<br />set a proto skip this section, otherwise call usbd_set_protocol".</p>
<p>Now it is: "If we are asked not to set a proto, set a proto.".</p>
<blockquote>
<p>err = usbd_set_protocol(state->ks_iface, 0);<br /><abbr title="5, ("ukbd:init_keyboard: protocol set\n"">DPRINTFN</abbr>);<br />if (err) {<br />-- 1.7.3.2</p>
</blockquote> DragonFlyBSD - Bug #1968: ukbd patchhttps://bugs.dragonflybsd.org/issues/1968?journal_id=95162011-01-25T16:54:35Zmasterblaster
<ul></ul><p>Hallo Alex,</p>
<p>bin btw in chat als randy1 unterwegs.</p>
<p>On 1/25/2011, ""Alex Hornung \(via DragonFly issue tracker\)" <br /><a class="email" href="mailto:submit@crater.dragonflybsd.org">submit@crater.dragonflybsd.org</a>" <"Alex Hornung \(via DragonFly issue<br />tracker\)" <br /><a class="email" href="mailto:submit@crater.dragonflybsd.org">submit@crater.dragonflybsd.org</a>> wrote:</p>
<blockquote>
<p>Alex Hornung <<a class="email" href="mailto:ahornung@gmail.com">ahornung@gmail.com</a>> added the comment:</p>
<p>On 25/01/11 06:29, Magliano Andrea wrote:</p>
<blockquote>
<p>Without this patch uhci driver doesn't generate an interrupt when Fn key is pressed on Apple usb keyboard (it took me days to realize this...).</p>
</blockquote>
<p>With this patch that code is probably skipped unconditionally in the<br />normal case.</p>
<blockquote>
<p>I just want to map Fn key to 'insert' keycode. For that it's than enough to set ukbd_trtab<sup><a href="#fn1">1</a></sup>=102 in ukbd.c ,but i don't know if to hardcode this violates any standard. Does it?</p>
</blockquote>
<p>Why don't you just set the quirk NO_SET_PROTO for that device? That will<br />have the same effect.</p>
<blockquote>
<p>0001-set-usb-quirk-the-right-way.patch</p>
<p>From 639a855e36f1bf7b1d6120ba5c2bd1a871614ead Mon Sep 17 00:00:00 2001<br />From: Charlie <<a class="email" href="mailto:root@randy.andy.net">root@randy.andy.net</a>><br />Date: Tue, 25 Jan 2011 06:58:43 +0100<br />Subject: [PATCH] set usb quirk the right way</p>
<p>---<br />sys/dev/usbmisc/ukbd/ukbd.c | 2 <ins><del><br />1 files changed, 1 insertions(</ins>), 1 deletions(</del>)</p>
<p>diff --git a/sys/dev/usbmisc/ukbd/ukbd.c b/sys/dev/usbmisc/ukbd/ukbd.c<br />index 2099921..e3adf78 100644<br />--- a/sys/dev/usbmisc/ukbd/ukbd.c<br />+++ b/sys/dev/usbmisc/ukbd/ukbd.c<br /><code>@ -1460,7 +1460,7 </code>@ bLength=%d bDescriptorType=%d bEndpointAddress=%d-%s bmAttributes=%d wMaxPacketS<br />return EINVAL;<br />}</p>
<p>- if ((usbd_get_quirks(state->ks_uaa->device)->uq_flags & UQ_NO_SET_PROTO) == 0) {<br />+ if (usbd_get_quirks(state->ks_uaa->device)->uq_flags & UQ_NO_SET_PROTO) {</p>
</blockquote>
<p>This makes no sense. The original condition was: "If we are asked not to<br />set a proto skip this section, otherwise call usbd_set_protocol".</p>
</blockquote>
<p>Das verstehe ich nicht ganz; usbd_get_quirks() bedeutet: wenn es ein<br />quirk fuer den device gibt, dann...</p>
<p>In der Tat es gibt kein quirk fuer den keyboard, trotzdem setzt der<br />original code den protocol zu 0.</p>
<p>Aus usb_quirks.h:<br />#define UQ_NO_SET_PROTO 0x0001 /* cannot handle SET PROTOCOL. */</p>
<p>was bedeuten soll, dass der device den protocol nicht setzen kann, darum<br />usbd_set_protocol(state->ks_iface, 0) zwingen, was in dem Fall nicht<br />noetig ist (?)</p>
<blockquote>
<p>Now it is: "If we are asked not to set a proto, set a proto.".</p>
<blockquote>
<p>err = usbd_set_protocol(state->ks_iface, 0);<br /><abbr title="5, ("ukbd:init_keyboard: protocol set\n"">DPRINTFN</abbr>);<br />if (err) {<br />-- 1.7.3.2</p>
</blockquote>
<p>----------<br />status: unread -> chatting</p>
<p>_<em><i></em></i>__<em>_</em>_________________________________________<br />DragonFly issue tracker <<a class="email" href="mailto:bugs@lists.dragonflybsd.org">bugs@lists.dragonflybsd.org</a>><br /><<a class="external" href="http://bugs.dragonflybsd.org/issue1968">http://bugs.dragonflybsd.org/issue1968</a>><br />_<em><i></em></i>__<em>_</em>_________________________________________</p>
</blockquote> DragonFlyBSD - Bug #1968: ukbd patchhttps://bugs.dragonflybsd.org/issues/1968?journal_id=95182011-01-25T17:32:53Zy0n3t4n1
<ul></ul><p>Hi,</p>
<p>On Tue, Jan 25, 2011 at 07:29:10AM +0100, Magliano Andrea wrote:</p>
<blockquote>
<p>as i am new to kernel drivers, i suppose (just looking at usbd_get_quirks() prototype) that the quirk for usb keyboard was set the wrong way.</p>
</blockquote>
<p>The code as is looks correct to me: set the protocol unless the quirk is set.<br />Instead, try adding a quirk like below to usb_quirks[] (NOTE: the ids may be<br />different from yours) and rebuild the usb.ko if kldstat command shows it,<br />or the kernel if not.</p>
<p>diff --git a/sys/bus/usb/usb_quirks.c b/sys/bus/usb/usb_quirks.c<br />index 4ef50d3..20573f2 100644<br />--- a/sys/bus/usb/usb_quirks.c<br />+<ins>+ b/sys/bus/usb/usb_quirks.c<br /><code>@ -57,6 +57,9 </code>@ static const struct usbd_quirk_entry {<br /> u_int16_t bcdDevice;<br /> struct usbd_quirks quirks;<br /> } usb_quirks[] = {<br /></ins> /* Apple USB keyboard <strong>/<br />+ { .idVendor = 0x05ac, .idProduct = 0x021d, .bcdDevice = ANY,<br />+ .quirks = { UQ_NO_SET_PROTO}},<br /> /</strong> KYE Niche mouse */
{ .idVendor = 0x0458, .idProduct = 0x0001, .bcdDevice = 0x100,<br /> .quirks = { UQ_NO_SET_PROTO}},</p>
<p>Cheers.</p> DragonFlyBSD - Bug #1968: ukbd patchhttps://bugs.dragonflybsd.org/issues/1968?journal_id=95292011-01-28T01:57:23Zjosepht
<ul></ul><p>See Issue1970 for resolution.</p>