+#ifdef CONFIG_USB_KEYBOARD_FN_KEYS
+ if (scancode < 0x3a || scancode > 0x52 ||
+ scancode == 0x46 || scancode == 0x47)
+ return 1;
+
+ usb_kbd_put_queue(data, 0x1b);
+ if (scancode < 0x3e) {
+ /* F1 - F4 */
+ usb_kbd_put_queue(data, 0x4f);
+ usb_kbd_put_queue(data, scancode - 0x3a + 'P');
+ return 0;
+ }
+ usb_kbd_put_queue(data, '[');
+ if (scancode < 0x42) {
+ /* F5 - F8 */
+ usb_kbd_put_queue(data, '1');
+ if (scancode == 0x3e)
+ --scancode;
+ keycode = scancode - 0x3f + '7';
+ } else if (scancode < 0x49) {
+ /* F9 - F12 */
+ usb_kbd_put_queue(data, '2');
+ if (scancode > 0x43)
+ ++scancode;
+ keycode = scancode - 0x42 + '0';
+ } else {
+ /*
+ * INSERT, HOME, PAGE UP, DELETE, END, PAGE DOWN,
+ * RIGHT, LEFT, DOWN, UP
+ */
+ keycode = usb_special_keys[scancode - 0x49];
+ }
+ usb_kbd_put_queue(data, keycode);
+ if (scancode < 0x4f && scancode != 0x4a && scancode != 0x4d)
+ usb_kbd_put_queue(data, '~');