aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/serial/keyspan_pda.c51
-rw-r--r--drivers/usb/serial/keyspan_pda_fw.h99
-rw-r--r--drivers/usb/serial/xircom_pgs_fw.h103
-rw-r--r--firmware/Makefile2
-rw-r--r--firmware/WHENCE14
-rw-r--r--firmware/keyspan_pda/keyspan_pda.HEX83
-rw-r--r--firmware/keyspan_pda/keyspan_pda.S (renamed from drivers/usb/serial/keyspan_pda.S)0
-rw-r--r--firmware/keyspan_pda/xircom_pgs.HEX87
-rw-r--r--firmware/keyspan_pda/xircom_pgs.S (renamed from drivers/usb/serial/xircom_pgs.S)0
9 files changed, 210 insertions, 229 deletions
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index ff54203944ca..644a1eaaa376 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -76,18 +76,14 @@
76#include <linux/module.h> 76#include <linux/module.h>
77#include <linux/spinlock.h> 77#include <linux/spinlock.h>
78#include <linux/workqueue.h> 78#include <linux/workqueue.h>
79#include <linux/firmware.h>
80#include <linux/ihex.h>
79#include <asm/uaccess.h> 81#include <asm/uaccess.h>
80#include <linux/usb.h> 82#include <linux/usb.h>
81#include <linux/usb/serial.h> 83#include <linux/usb/serial.h>
82 84
83static int debug; 85static int debug;
84 86
85struct ezusb_hex_record {
86 __u16 address;
87 __u8 data_size;
88 __u8 data[16];
89};
90
91/* make a simple define to handle if we are compiling keyspan_pda or xircom support */ 87/* make a simple define to handle if we are compiling keyspan_pda or xircom support */
92#if defined(CONFIG_USB_SERIAL_KEYSPAN_PDA) || defined(CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE) 88#if defined(CONFIG_USB_SERIAL_KEYSPAN_PDA) || defined(CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE)
93 #define KEYSPAN 89 #define KEYSPAN
@@ -100,14 +96,6 @@ struct ezusb_hex_record {
100 #undef XIRCOM 96 #undef XIRCOM
101#endif 97#endif
102 98
103#ifdef KEYSPAN
104#include "keyspan_pda_fw.h"
105#endif
106
107#ifdef XIRCOM
108#include "xircom_pgs_fw.h"
109#endif
110
111/* 99/*
112 * Version Information 100 * Version Information
113 */ 101 */
@@ -722,38 +710,47 @@ static void keyspan_pda_close(struct usb_serial_port *port, struct file *filp)
722static int keyspan_pda_fake_startup (struct usb_serial *serial) 710static int keyspan_pda_fake_startup (struct usb_serial *serial)
723{ 711{
724 int response; 712 int response;
725 const struct ezusb_hex_record *record = NULL; 713 const char *fw_name;
714 const struct ihex_binrec *record;
715 const struct firmware *fw;
726 716
727 /* download the firmware here ... */ 717 /* download the firmware here ... */
728 response = ezusb_set_reset(serial, 1); 718 response = ezusb_set_reset(serial, 1);
729 719
720 if (0) { ; }
730#ifdef KEYSPAN 721#ifdef KEYSPAN
731 if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID) 722 else if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
732 record = &keyspan_pda_firmware[0]; 723 fw_name = "keyspan_pda/keyspan_pda.fw";
733#endif 724#endif
734#ifdef XIRCOM 725#ifdef XIRCOM
735 if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) || 726 else if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
736 (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID)) 727 (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
737 record = &xircom_pgs_firmware[0]; 728 fw_name = "keyspan_pda/xircom_pgs.fw";
738#endif 729#endif
739 if (record == NULL) { 730 else {
740 err("%s: unknown vendor, aborting.", __func__); 731 err("%s: unknown vendor, aborting.", __func__);
741 return -ENODEV; 732 return -ENODEV;
742 } 733 }
734 if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev)) {
735 err("failed to load firmware \"%s\"\n", fw_name);
736 return -ENOENT;
737 }
738 record = (const struct ihex_binrec *)fw->data;
743 739
744 while(record->address != 0xffff) { 740 while (record) {
745 response = ezusb_writememory(serial, record->address, 741 response = ezusb_writememory(serial, be32_to_cpu(record->addr),
746 (unsigned char *)record->data, 742 (unsigned char *)record->data,
747 record->data_size, 0xa0); 743 be16_to_cpu(record->len), 0xa0);
748 if (response < 0) { 744 if (response < 0) {
749 err("ezusb_writememory failed for Keyspan PDA " 745 err("ezusb_writememory failed for Keyspan PDA "
750 "firmware (%d %04X %p %d)", 746 "firmware (%d %04X %p %d)",
751 response, 747 response, be32_to_cpu(record->addr),
752 record->address, record->data, record->data_size); 748 record->data, be16_to_cpu(record->len));
753 break; 749 break;
754 } 750 }
755 record++; 751 record = ihex_next_binrec(record);
756 } 752 }
753 release_firmware(fw);
757 /* bring device out of reset. Renumeration will occur in a moment 754 /* bring device out of reset. Renumeration will occur in a moment
758 and the new device will bind to the real driver */ 755 and the new device will bind to the real driver */
759 response = ezusb_set_reset(serial, 0); 756 response = ezusb_set_reset(serial, 0);
diff --git a/drivers/usb/serial/keyspan_pda_fw.h b/drivers/usb/serial/keyspan_pda_fw.h
deleted file mode 100644
index f253accd231c..000000000000
--- a/drivers/usb/serial/keyspan_pda_fw.h
+++ /dev/null
@@ -1,99 +0,0 @@
1/*
2 * USB Keyspan PDA Firmware
3 *
4 * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * Generated from keyspan_pda.s by ezusb_convert.pl
12 *
13 */
14
15static const struct ezusb_hex_record keyspan_pda_firmware[] = {
16{ 0x0000, 3, {0x02, 0x02, 0x00} },
17{ 0x0023, 4, {0x02, 0x05, 0x5f, 0x00} },
18{ 0x0043, 4, {0x02, 0x01, 0x00, 0x00} },
19{ 0x0030, 5, {0x00, 0x00, 0x00, 0x00, 0x00} },
20{ 0x0100, 16, {0x02, 0x02, 0x96, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
21{ 0x0110, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
22{ 0x0120, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x61, 0x00, 0x02, 0x04, 0x89, 0x00} },
23{ 0x0200, 16, {0x75, 0x81, 0x5e, 0xe4, 0xf5, 0x32, 0xf5, 0x33, 0xf5, 0x30, 0xf5, 0x31, 0xf5, 0x34, 0xc2, 0x00} },
24{ 0x0210, 16, {0xc2, 0x01, 0xa9, 0x00, 0x74, 0xfe, 0x90, 0x10, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0xfd, 0x90} },
25{ 0x0220, 16, {0x11, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0x02, 0x90, 0x7f, 0x9d, 0xf0, 0x74, 0x00, 0x90, 0x7f} },
26{ 0x0230, 16, {0x97, 0xf0, 0x74, 0x86, 0x90, 0x7f, 0x9e, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0x03, 0xf0, 0x90, 0x7f} },
27{ 0x0240, 16, {0xaf, 0xe0, 0xd2, 0xe0, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xab, 0xf0, 0x90, 0x7f, 0xae, 0xf0, 0x90} },
28{ 0x0250, 16, {0x7f, 0xac, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xad, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x74} },
29{ 0x0260, 16, {0x84, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x00, 0xf5, 0x98, 0x75, 0xc8, 0x30, 0x7b, 0x05, 0x91, 0x20} },
30{ 0x0270, 16, {0xd2, 0xca, 0x75, 0x98, 0x50, 0xd2, 0xe8, 0xd2, 0xaf, 0xd2, 0xac, 0x74, 0x00, 0xf5, 0x86, 0x90} },
31{ 0x0280, 16, {0x7f, 0xd6, 0x74, 0x02, 0xf0, 0x79, 0x2e, 0x7a, 0x00, 0x7b, 0x00, 0xdb, 0xfe, 0xda, 0xfa, 0xd9} },
32{ 0x0290, 16, {0xf6, 0x74, 0x06, 0xf0, 0x80, 0xfe, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85} },
33{ 0x02a0, 16, {0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xab, 0x74, 0x01, 0xf0, 0x90, 0x7f} },
34{ 0x02b0, 16, {0xe8, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3, 0xe0, 0xfc, 0xe9, 0x54, 0x60, 0xb4} },
35{ 0x02c0, 16, {0x00, 0x03, 0x02, 0x03, 0x39, 0xb4, 0x40, 0x6e, 0xba, 0x00, 0x0b, 0x12, 0x04, 0x20, 0x40, 0x03} },
36{ 0x02d0, 16, {0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x01, 0x03, 0x02, 0x04, 0x0a, 0xba, 0x02, 0x03, 0x02} },
37{ 0x02e0, 16, {0x04, 0x0a, 0xba, 0x03, 0x03, 0x02, 0x04, 0x44, 0xba, 0x04, 0x1e, 0xbb, 0x00, 0x0a, 0x90, 0x7f} },
38{ 0x02f0, 16, {0x95, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x04, 0x02, 0x90, 0x7f, 0x98, 0xe0, 0x54, 0xfd, 0xf0, 0x90} },
39{ 0x0300, 16, {0x7f, 0x95, 0xe0, 0x54, 0xfd, 0xf0, 0x02, 0x04, 0x02, 0xba, 0x05, 0x03, 0x02, 0x04, 0x0a, 0xba} },
40{ 0x0310, 16, {0x06, 0x19, 0xbb, 0x00, 0x08, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0x02, 0x03, 0xde, 0xbb, 0x01, 0x08} },
41{ 0x0320, 16, {0xe5, 0x32, 0xc3, 0x95, 0x33, 0x02, 0x03, 0xde, 0x02, 0x04, 0x0a, 0xba, 0x07, 0x05, 0x8b, 0x34} },
42{ 0x0330, 16, {0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0x02, 0x04, 0x0a, 0xba, 0x00, 0x20, 0xb9, 0x80, 0x10, 0x90} },
43{ 0x0340, 16, {0x7f, 0x00, 0xe4, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x04, 0x02, 0xb9} },
44{ 0x0350, 16, {0x82, 0x02, 0x80, 0xeb, 0xb9, 0x81, 0x02, 0x80, 0xe6, 0x02, 0x04, 0x0a, 0xba, 0x01, 0x0f, 0xbb} },
45{ 0x0360, 16, {0x00, 0x03, 0x02, 0x04, 0x0a, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x03} },
46{ 0x0370, 16, {0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x0a, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a} },
47{ 0x0380, 16, {0xba, 0x06, 0x56, 0xbc, 0x01, 0x0f, 0x90, 0x7f, 0xd4, 0x74, 0x06, 0xf0, 0x90, 0x7f, 0xd5, 0x74} },
48{ 0x0390, 16, {0x12, 0xf0, 0x02, 0x04, 0x02, 0xbc, 0x02, 0x12, 0xbb, 0x00, 0x6f, 0x90, 0x7f, 0xd4, 0x74, 0x06} },
49{ 0x03a0, 16, {0xf0, 0x90, 0x7f, 0xd5, 0x74, 0x24, 0xf0, 0x02, 0x04, 0x02, 0xbc, 0x03, 0x29, 0x74, 0x04, 0xc3} },
50{ 0x03b0, 16, {0x9b, 0x40, 0x57, 0x60, 0x55, 0xeb, 0x2b, 0x90, 0x06, 0x44, 0x25, 0x82, 0xf5, 0x82, 0x74, 0x00} },
51{ 0x03c0, 16, {0x35, 0x83, 0xf5, 0x83, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0x90, 0x7f, 0xd4, 0xe9, 0xf0, 0x90, 0x7f} },
52{ 0x03d0, 16, {0xd5, 0xea, 0xf0, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x08, 0x0f, 0x74, 0x01, 0x90, 0x7f} },
53{ 0x03e0, 16, {0x00, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xb5, 0xf0, 0x02, 0x04, 0x02, 0xba, 0x09, 0x03, 0x02, 0x04} },
54{ 0x03f0, 16, {0x02, 0xba, 0x0a, 0x05, 0x74, 0x00, 0x02, 0x03, 0xde, 0xba, 0x0b, 0x03, 0x02, 0x04, 0x02, 0x02} },
55{ 0x0400, 16, {0x04, 0x0a, 0x90, 0x7f, 0xb4, 0x74, 0x02, 0xf0, 0x80, 0x09, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01} },
56{ 0x0410, 16, {0xf0, 0x80, 0x00, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32} },
57{ 0x0420, 16, {0xeb, 0x20, 0xe7, 0x1e, 0xc3, 0x94, 0x0a, 0x50, 0x19, 0xeb, 0x23, 0x24, 0xfe, 0xf5, 0x82, 0x74} },
58{ 0x0430, 16, {0x05, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xf5, 0xcb, 0xf5, 0xcd, 0xa3, 0xe0, 0xf5, 0xca, 0xf5, 0xcc} },
59{ 0x0440, 16, {0xc3, 0x22, 0xd3, 0x22, 0xb9, 0x41, 0x11, 0xeb, 0x64, 0xff, 0x54, 0x84, 0xfb, 0x90, 0x7f, 0x98} },
60{ 0x0450, 16, {0xe0, 0x54, 0x7b, 0x4b, 0xf0, 0x02, 0x04, 0x02, 0x90, 0x7f, 0x9b, 0xe0, 0x64, 0xff, 0x02, 0x03} },
61{ 0x0460, 16, {0xde, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2} },
62{ 0x0470, 16, {0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x12, 0x05, 0xa0, 0xd0, 0xe0, 0xd0, 0x85} },
63{ 0x0480, 16, {0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0} },
64{ 0x0490, 16, {0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xaa, 0x74, 0x04} },
65{ 0x04a0, 16, {0xf0, 0x90, 0x7f, 0xc9, 0xe0, 0xf9, 0xe4, 0xf5, 0x86, 0x90, 0x7d, 0xc0, 0x75, 0x85, 0x10, 0x85} },
66{ 0x04b0, 16, {0x32, 0x84, 0xe0, 0x05, 0x86, 0x05, 0x84, 0xf0, 0xe5, 0x84, 0xb5, 0x33, 0x02, 0x80, 0x09, 0x05} },
67{ 0x04c0, 16, {0x32, 0x05, 0x86, 0xa3, 0xd9, 0xec, 0x80, 0x00, 0x90, 0x7f, 0xc9, 0xf0, 0xb1, 0x31, 0xd0, 0xe0} },
68{ 0x04d0, 16, {0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xe4, 0xf5, 0x86, 0x90, 0x7f} },
69{ 0x04e0, 16, {0xbc, 0xe0, 0x20, 0xe1, 0x4b, 0x90, 0x7d, 0x00, 0xe5, 0x32, 0xf0, 0xa3, 0xe5, 0x33, 0xf0, 0xa3} },
70{ 0x04f0, 16, {0xe5, 0x30, 0xf0, 0xa3, 0xe5, 0x31, 0xf0, 0xa3, 0xe4, 0x30, 0x00, 0x01, 0x04, 0xf0, 0xa3, 0x05} },
71{ 0x0500, 16, {0x86, 0x90, 0x10, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6} },
72{ 0x0510, 16, {0x05, 0x86, 0x74, 0xfc, 0xf0, 0xa3, 0x05, 0x86, 0x90, 0x11, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05} },
73{ 0x0520, 16, {0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbd, 0x74, 0x26, 0xf0} },
74{ 0x0530, 16, {0x22, 0x20, 0x00, 0x13, 0xe5, 0x32, 0xb5, 0x33, 0x01, 0x22, 0x05, 0x33, 0x75, 0x83, 0x10, 0x85} },
75{ 0x0540, 16, {0x33, 0x82, 0xe0, 0xf5, 0x99, 0xd2, 0x00, 0x74, 0x00, 0xb5, 0x34, 0x01, 0x22, 0xe5, 0x33, 0xd3} },
76{ 0x0550, 16, {0x95, 0x32, 0xc3, 0x95, 0x34, 0x40, 0xf5, 0x75, 0x34, 0x00, 0xd2, 0x01, 0x02, 0x05, 0xa0, 0xc0} },
77{ 0x0560, 16, {0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x30, 0x99, 0x07, 0xc2, 0x99} },
78{ 0x0570, 16, {0xc2, 0x00, 0x12, 0x05, 0x34, 0x30, 0x98, 0x05, 0x12, 0x05, 0x8a, 0xc2, 0x98, 0xd0, 0xe0, 0xd0} },
79{ 0x0580, 16, {0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0x75, 0x83, 0x11, 0x85, 0x30, 0x82} },
80{ 0x0590, 16, {0x05, 0x82, 0xe5, 0x99, 0xf0, 0xe5, 0x82, 0xb5, 0x31, 0x01, 0x22, 0x05, 0x30, 0xb1, 0xa0, 0x22} },
81{ 0x05a0, 16, {0x90, 0x7f, 0xb8, 0xe0, 0x20, 0xe1, 0x38, 0x20, 0x01, 0x36, 0xe5, 0x30, 0xb5, 0x31, 0x01, 0x22} },
82{ 0x05b0, 16, {0xe4, 0xf5, 0x86, 0x75, 0x83, 0x11, 0x05, 0x86, 0x90, 0x7e, 0x00, 0xf0, 0xa3, 0x05, 0x86, 0x79} },
83{ 0x05c0, 16, {0x01, 0xe5, 0x30, 0xb5, 0x31, 0x02, 0x80, 0x10, 0x05, 0x31, 0x85, 0x31, 0x82, 0xe0, 0x05, 0x86} },
84{ 0x05d0, 16, {0xf0, 0xa3, 0x05, 0x86, 0x09, 0xb9, 0x40, 0xe9, 0x90, 0x7f, 0xb9, 0xe9, 0x60, 0x01, 0xf0, 0x22} },
85{ 0x05e0, 16, {0xc2, 0x01, 0xe4, 0xf5, 0x86, 0x90, 0x7e, 0x00, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x02, 0xf0, 0x90} },
86{ 0x05f0, 16, {0x7f, 0xb9, 0xf0, 0x22, 0xc2, 0x99, 0xf5, 0x99, 0x30, 0x99, 0xfd, 0xc2, 0x99, 0x22, 0xe5, 0x5e} },
87{ 0x0600, 16, {0xf6, 0x3c, 0xfd, 0x8f, 0xfe, 0xc8, 0xff, 0x64, 0xff, 0xb2, 0xff, 0xd9, 0xff, 0xed, 0xff, 0xf3} },
88{ 0x0610, 16, {0xff, 0xfa, 0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40, 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab} },
89{ 0x0620, 16, {0x01, 0x02, 0x03, 0x01, 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00} },
90{ 0x0630, 16, {0x00, 0x02, 0xff, 0xff, 0xff, 0x00, 0x07, 0x05, 0x82, 0x03, 0x40, 0x00, 0x01, 0x07, 0x05, 0x02} },
91{ 0x0640, 16, {0x02, 0x40, 0x00, 0x00, 0x06, 0x4c, 0x06, 0x50, 0x06, 0x72, 0x06, 0xa0, 0x04, 0x03, 0x00, 0x00} },
92{ 0x0650, 16, {0x22, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00} },
93{ 0x0660, 16, {0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00} },
94{ 0x0670, 16, {0x73, 0x00, 0x2e, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00} },
95{ 0x0680, 16, {0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00} },
96{ 0x0690, 16, {0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00} },
97{ 0x06a0, 6, {0x06, 0x03, 0x34, 0x00, 0x37, 0x00} },
98{ 0xffff, 0, {0x00} }
99};
diff --git a/drivers/usb/serial/xircom_pgs_fw.h b/drivers/usb/serial/xircom_pgs_fw.h
deleted file mode 100644
index 3ff74a6d71a9..000000000000
--- a/drivers/usb/serial/xircom_pgs_fw.h
+++ /dev/null
@@ -1,103 +0,0 @@
1/*
2 * USB Xircom PGS Firmware
3 *
4 * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
5 * Copyright (C) 2001 Cristian M. Craciunescu <cristi@dnt.ro>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * Generated from xircom_pgs.S by ezusb_convert_x.pl
13 */
14
15static const struct ezusb_hex_record xircom_pgs_firmware[] = {
16{ 0x0000, 3, {0x02, 0x02, 0x00} },
17{ 0x0023, 4, {0x02, 0x05, 0x9b, 0x00} },
18{ 0x0030, 5, {0x00, 0x00, 0x00, 0x00, 0x00} },
19{ 0x0043, 4, {0x02, 0x01, 0x00, 0x00} },
20{ 0x0100, 16, {0x02, 0x02, 0xba, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
21{ 0x0110, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
22{ 0x0120, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x85, 0x00, 0x02, 0x04, 0xb9, 0x00} },
23{ 0x0200, 16, {0x75, 0x81, 0x5e, 0xe4, 0xf5, 0x32, 0xf5, 0x33, 0xf5, 0x30, 0xf5, 0x31, 0xf5, 0x34, 0xc2, 0x00} },
24{ 0x0210, 16, {0xc2, 0x01, 0xa9, 0x00, 0x74, 0xfe, 0x90, 0x10, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0xfd, 0x90} },
25{ 0x0220, 16, {0x11, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x90, 0x7f, 0x94, 0x74, 0xbf, 0xf0, 0x90, 0x7f, 0x95, 0x74} },
26{ 0x0230, 16, {0xef, 0xf0, 0x74, 0x10, 0x90, 0x7f, 0x9e, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x40} },
27{ 0x0240, 16, {0x90, 0x7f, 0x9d, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x97, 0xf0, 0x74, 0x82, 0x90, 0x7f, 0x9e, 0xf0} },
28{ 0x0250, 16, {0x90, 0x7f, 0x95, 0x74, 0x03, 0xf0, 0x90, 0x7f, 0xaf, 0xe0, 0xd2, 0xe0, 0xf0, 0x74, 0x01, 0x90} },
29{ 0x0260, 16, {0x7f, 0xab, 0xf0, 0x90, 0x7f, 0xae, 0xf0, 0x90, 0x7f, 0xac, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xad} },
30{ 0x0270, 16, {0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x74, 0x07, 0x90, 0x7f, 0xaf, 0xf0, 0x74, 0x20, 0x90} },
31{ 0x0280, 16, {0x7f, 0x9c, 0xf0, 0x74, 0x80, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x53, 0xf5, 0x98, 0x75, 0xc8, 0x30} },
32{ 0x0290, 16, {0x7b, 0x05, 0x91, 0x44, 0xd2, 0xca, 0x75, 0x98, 0x50, 0xd2, 0xe8, 0xd2, 0xaf, 0xd2, 0xac, 0x74} },
33{ 0x02a0, 16, {0x00, 0xf5, 0x86, 0x90, 0x7f, 0xd6, 0x74, 0x02, 0xf0, 0x79, 0x2e, 0x7a, 0x00, 0x7b, 0x00, 0xdb} },
34{ 0x02b0, 16, {0xfe, 0xda, 0xfa, 0xd9, 0xf6, 0x74, 0x06, 0xf0, 0x80, 0xfe, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83} },
35{ 0x02c0, 16, {0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xab, 0x74} },
36{ 0x02d0, 16, {0x01, 0xf0, 0x90, 0x7f, 0xe8, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3, 0xe0, 0xfc} },
37{ 0x02e0, 16, {0xe9, 0x54, 0x60, 0xb4, 0x00, 0x03, 0x02, 0x03, 0x5d, 0xb4, 0x40, 0x6e, 0xba, 0x00, 0x0b, 0x12} },
38{ 0x02f0, 16, {0x04, 0x44, 0x40, 0x03, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0xba, 0x01, 0x03, 0x02, 0x04, 0x2e} },
39{ 0x0300, 16, {0xba, 0x02, 0x03, 0x02, 0x04, 0x2e, 0xba, 0x03, 0x03, 0x02, 0x04, 0x68, 0xba, 0x04, 0x1e, 0xbb} },
40{ 0x0310, 16, {0x00, 0x0a, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x04, 0x26, 0x90, 0x7f, 0x98, 0xe0} },
41{ 0x0320, 16, {0x54, 0xfd, 0xf0, 0x90, 0x7f, 0x95, 0xe0, 0x54, 0xfd, 0xf0, 0x02, 0x04, 0x26, 0xba, 0x05, 0x03} },
42{ 0x0330, 16, {0x02, 0x04, 0x2e, 0xba, 0x06, 0x19, 0xbb, 0x00, 0x08, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0x02, 0x04} },
43{ 0x0340, 16, {0x02, 0xbb, 0x01, 0x08, 0xe5, 0x32, 0xc3, 0x95, 0x33, 0x02, 0x04, 0x02, 0x02, 0x04, 0x2e, 0xba} },
44{ 0x0350, 16, {0x07, 0x05, 0x8b, 0x34, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0x02, 0x04, 0x2e, 0xba, 0x00, 0x20} },
45{ 0x0360, 16, {0xb9, 0x80, 0x10, 0x90, 0x7f, 0x00, 0xe4, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0} },
46{ 0x0370, 16, {0x02, 0x04, 0x26, 0xb9, 0x82, 0x02, 0x80, 0xeb, 0xb9, 0x81, 0x02, 0x80, 0xe6, 0x02, 0x04, 0x2e} },
47{ 0x0380, 16, {0xba, 0x01, 0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x2e, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x26, 0x02} },
48{ 0x0390, 16, {0x04, 0x2e, 0xba, 0x03, 0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x2e, 0xbb, 0x01, 0x03, 0x02, 0x04} },
49{ 0x03a0, 16, {0x26, 0x02, 0x04, 0x2e, 0xba, 0x06, 0x56, 0xbc, 0x01, 0x0f, 0x90, 0x7f, 0xd4, 0x74, 0x06, 0xf0} },
50{ 0x03b0, 16, {0x90, 0x7f, 0xd5, 0x74, 0x5a, 0xf0, 0x02, 0x04, 0x26, 0xbc, 0x02, 0x12, 0xbb, 0x00, 0x6f, 0x90} },
51{ 0x03c0, 16, {0x7f, 0xd4, 0x74, 0x06, 0xf0, 0x90, 0x7f, 0xd5, 0x74, 0x6c, 0xf0, 0x02, 0x04, 0x26, 0xbc, 0x03} },
52{ 0x03d0, 16, {0x29, 0x74, 0x04, 0xc3, 0x9b, 0x40, 0x57, 0x60, 0x55, 0xeb, 0x2b, 0x90, 0x06, 0x8c, 0x25, 0x82} },
53{ 0x03e0, 16, {0xf5, 0x82, 0x74, 0x00, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0x90, 0x7f, 0xd4} },
54{ 0x03f0, 16, {0xe9, 0xf0, 0x90, 0x7f, 0xd5, 0xea, 0xf0, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0xba, 0x08, 0x0f} },
55{ 0x0400, 16, {0x74, 0x01, 0x90, 0x7f, 0x00, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xb5, 0xf0, 0x02, 0x04, 0x26, 0xba} },
56{ 0x0410, 16, {0x09, 0x03, 0x02, 0x04, 0x26, 0xba, 0x0a, 0x05, 0x74, 0x00, 0x02, 0x04, 0x02, 0xba, 0x0b, 0x03} },
57{ 0x0420, 16, {0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0x90, 0x7f, 0xb4, 0x74, 0x02, 0xf0, 0x80, 0x09, 0x90, 0x7f} },
58{ 0x0430, 16, {0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x00, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0} },
59{ 0x0440, 16, {0x82, 0xd0, 0x86, 0x32, 0xeb, 0x20, 0xe7, 0x1e, 0xc3, 0x94, 0x0a, 0x50, 0x19, 0xeb, 0x23, 0x24} },
60{ 0x0450, 16, {0x46, 0xf5, 0x82, 0x74, 0x06, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xf5, 0xcb, 0xf5, 0xcd, 0xa3, 0xe0} },
61{ 0x0460, 16, {0xf5, 0xca, 0xf5, 0xcc, 0xc3, 0x22, 0xd3, 0x22, 0xb9, 0x41, 0x11, 0xeb, 0x64, 0xff, 0x54, 0x80} },
62{ 0x0470, 16, {0xfb, 0x90, 0x7f, 0x98, 0xe0, 0x54, 0x7f, 0x4b, 0xf0, 0x02, 0x04, 0x26, 0x90, 0x7f, 0x9b, 0xe0} },
63{ 0x0480, 16, {0x64, 0xff, 0x02, 0x04, 0x02, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0} },
64{ 0x0490, 16, {0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x74, 0x20, 0x90} },
65{ 0x04a0, 16, {0x7f, 0x9c, 0xf0, 0x12, 0x05, 0xdc, 0x74, 0x20, 0x90, 0x7f, 0x9c, 0xf0, 0xd0, 0xe0, 0xd0, 0x85} },
66{ 0x04b0, 16, {0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0} },
67{ 0x04c0, 16, {0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x74, 0x10, 0x90, 0x7f, 0x9c, 0xf0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5} },
68{ 0x04d0, 16, {0x91, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xe0, 0xf9, 0xe4, 0xf5, 0x86, 0x90} },
69{ 0x04e0, 16, {0x7d, 0xc0, 0x75, 0x85, 0x10, 0x85, 0x32, 0x84, 0xe0, 0x05, 0x86, 0x05, 0x84, 0xf0, 0xe5, 0x84} },
70{ 0x04f0, 16, {0xb5, 0x33, 0x02, 0x80, 0x09, 0x05, 0x32, 0x05, 0x86, 0xa3, 0xd9, 0xec, 0x80, 0x00, 0x90, 0x7f} },
71{ 0x0500, 16, {0xc9, 0xf0, 0xb1, 0x6d, 0x74, 0x20, 0x90, 0x7f, 0x9c, 0xf0, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84} },
72{ 0x0510, 16, {0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbc, 0xe0, 0x20, 0xe1} },
73{ 0x0520, 16, {0x4b, 0x90, 0x7d, 0x00, 0xe5, 0x32, 0xf0, 0xa3, 0xe5, 0x33, 0xf0, 0xa3, 0xe5, 0x30, 0xf0, 0xa3} },
74{ 0x0530, 16, {0xe5, 0x31, 0xf0, 0xa3, 0xe4, 0x30, 0x00, 0x01, 0x04, 0xf0, 0xa3, 0x05, 0x86, 0x90, 0x10, 0x00} },
75{ 0x0540, 16, {0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6, 0x05, 0x86, 0x74, 0xfc} },
76{ 0x0550, 16, {0xf0, 0xa3, 0x05, 0x86, 0x90, 0x11, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05} },
77{ 0x0560, 16, {0x86, 0xd9, 0xf6, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbd, 0x74, 0x26, 0xf0, 0x22, 0x20, 0x00, 0x13} },
78{ 0x0570, 16, {0xe5, 0x32, 0xb5, 0x33, 0x01, 0x22, 0x05, 0x33, 0x75, 0x83, 0x10, 0x85, 0x33, 0x82, 0xe0, 0xf5} },
79{ 0x0580, 16, {0x99, 0xd2, 0x00, 0x74, 0x00, 0xb5, 0x34, 0x01, 0x22, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0xc3, 0x95} },
80{ 0x0590, 16, {0x34, 0x40, 0xf5, 0x75, 0x34, 0x00, 0xd2, 0x01, 0x02, 0x05, 0xdc, 0xc0, 0x86, 0xc0, 0x82, 0xc0} },
81{ 0x05a0, 16, {0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x30, 0x99, 0x07, 0xc2, 0x99, 0xc2, 0x00, 0x12, 0x05} },
82{ 0x05b0, 16, {0x70, 0x30, 0x98, 0x05, 0x12, 0x05, 0xc6, 0xc2, 0x98, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0} },
83{ 0x05c0, 16, {0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0x75, 0x83, 0x11, 0x85, 0x30, 0x82, 0x05, 0x82, 0xe5, 0x99} },
84{ 0x05d0, 16, {0xf0, 0xe5, 0x82, 0xb5, 0x31, 0x01, 0x22, 0x05, 0x30, 0xb1, 0xdc, 0x22, 0x74, 0x10, 0x90, 0x7f} },
85{ 0x05e0, 16, {0x9c, 0xf0, 0x90, 0x7f, 0xb8, 0xe0, 0x20, 0xe1, 0x3e, 0x20, 0x01, 0x3c, 0xe5, 0x30, 0xb5, 0x31} },
86{ 0x05f0, 16, {0x01, 0x22, 0xe4, 0xf5, 0x86, 0x75, 0x83, 0x11, 0x05, 0x86, 0x90, 0x7e, 0x00, 0xf0, 0xa3, 0x05} },
87{ 0x0600, 16, {0x86, 0x79, 0x01, 0xe5, 0x30, 0xb5, 0x31, 0x02, 0x80, 0x10, 0x05, 0x31, 0x85, 0x31, 0x82, 0xe0} },
88{ 0x0610, 16, {0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0x09, 0xb9, 0x40, 0xe9, 0x74, 0x10, 0x90, 0x7f, 0x9c, 0xf0} },
89{ 0x0620, 16, {0x90, 0x7f, 0xb9, 0xe9, 0x60, 0x01, 0xf0, 0x22, 0xc2, 0x01, 0xe4, 0xf5, 0x86, 0x90, 0x7e, 0x00} },
90{ 0x0630, 16, {0x74, 0x01, 0xf0, 0xa3, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xb9, 0xf0, 0x22, 0xc2, 0x99, 0xf5, 0x99} },
91{ 0x0640, 16, {0x30, 0x99, 0xfd, 0xc2, 0x99, 0x22, 0xe5, 0x5e, 0xf6, 0x3c, 0xfd, 0x8f, 0xfe, 0xc8, 0xff, 0x64} },
92{ 0x0650, 16, {0xff, 0xb2, 0xff, 0xd9, 0xff, 0xed, 0xff, 0xf3, 0xff, 0xfa, 0x12, 0x01, 0x00, 0x01, 0xff, 0xff} },
93{ 0x0660, 16, {0xff, 0x40, 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab, 0x01, 0x02, 0x03, 0x01, 0x09, 0x02, 0x20, 0x00} },
94{ 0x0670, 16, {0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0x00, 0x07, 0x05} },
95{ 0x0680, 16, {0x82, 0x03, 0x40, 0x00, 0x01, 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00, 0x06, 0x94, 0x06, 0x98} },
96{ 0x0690, 16, {0x06, 0xba, 0x06, 0xe8, 0x04, 0x03, 0x00, 0x00, 0x22, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00} },
97{ 0x06a0, 16, {0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00, 0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00} },
98{ 0x06b0, 16, {0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x73, 0x00, 0x2e, 0x03, 0x41, 0x00, 0x43, 0x00} },
99{ 0x06c0, 16, {0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00, 0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00} },
100{ 0x06d0, 16, {0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00} },
101{ 0x06e0, 14, {0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x06, 0x03, 0x34, 0x00, 0x37, 0x00} },
102{ 0xffff, 0, {0x00} }
103};
diff --git a/firmware/Makefile b/firmware/Makefile
index db1b01a7a668..dd76fa5ab3fc 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -49,6 +49,8 @@ fw-shipped- := keyspan/mpr.fw keyspan/usa18x.fw keyspan/usa19.fw \
49 keyspan/usa28.fw keyspan/usa28xa.fw keyspan/usa28xb.fw \ 49 keyspan/usa28.fw keyspan/usa28xa.fw keyspan/usa28xb.fw \
50 keyspan/usa28x.fw keyspan/usa49w.fw keyspan/usa49wlc.fw 50 keyspan/usa28x.fw keyspan/usa49w.fw keyspan/usa49wlc.fw
51endif 51endif
52fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda/keyspan_pda.fw
53fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw
52 54
53fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-) 55fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
54 56
diff --git a/firmware/WHENCE b/firmware/WHENCE
index d66291a78f07..b5be4bc88007 100644
--- a/firmware/WHENCE
+++ b/firmware/WHENCE
@@ -119,3 +119,17 @@ Original licence information:
119 part, requires the inclusion of this statement." 119 part, requires the inclusion of this statement."
120 120
121-------------------------------------------------------------------------- 121--------------------------------------------------------------------------
122
123Driver: keyspan_pda -- USB Keyspan PDA single-port serial device
124
125File: keyspan_pda/keyspan_pda.fw
126Source: keyspan_pda/keyspan_pda.S
127
128File: keyspan_pda/xircom_pgs.fw
129Source: keyspan_pda/xircom_pgs.S
130
131Licence: GPLv2+
132
133Compiled from original 8051 source into Intel HEX, used in our binary ihex form.
134
135--------------------------------------------------------------------------
diff --git a/firmware/keyspan_pda/keyspan_pda.HEX b/firmware/keyspan_pda/keyspan_pda.HEX
new file mode 100644
index 000000000000..6fcf02bb4b2d
--- /dev/null
+++ b/firmware/keyspan_pda/keyspan_pda.HEX
@@ -0,0 +1,83 @@
1:03000000020200F9
2:0400230002055F0073
3:0400430002010000B6
4:050030000000000000CB
5:10010000020296000200000002000000020000004F
6:1001100002000000020000000200000002000000D7
7:1001200002000000020000000204610002048900D5
8:1002000075815EE4F532F533F530F531F534C20031
9:10021000C201A90074FE901000F0A3D9FC74FD90F7
10:100220001100F0A3D9FC7402907F9DF07400907FC0
11:1002300097F07486907F9EF0907F957403F0907F86
12:10024000AFE0D2E0F07401907FABF0907FAEF09021
13:100250007FAC7404F0907FAD7404F0907FC9F074AB
14:1002600084907F98F07400F59875C8307B059120D4
15:10027000D2CA759850D2E8D2AFD2AC7400F586904D
16:100280007FD67402F0792E7A007B00DBFEDAFAD991
17:10029000F67406F080FEC086C082C083C084C0852C
18:1002A000C0E0E591C2E4F591907FAB7401F0907FDE
19:1002B000E8E0F9A3E0FAA3E0FBA3E0FCE95460B4B2
20:1002C0000003020339B4406EBA000B12042040034D
21:1002D00002040202040ABA010302040ABA02030277
22:1002E000040ABA0303020444BA041EBB000A907F46
23:1002F00095E04402F0020402907F98E054FDF090F3
24:100300007F95E054FDF0020402BA050302040ABA24
25:100310000619BB0008E533D395320203DEBB0108A2
26:10032000E532C395330203DE02040ABA07058B34B3
27:1003300002040202040A02040ABA0020B9801090E2
28:100340007F00E4F0A3F0907FB57402F0020402B9DC
29:10035000820280EBB9810280E602040ABA010FBB77
30:10036000000302040ABB010302040202040ABA03E6
31:100370000FBB000302040ABB010302040202040AC9
32:10038000BA0656BC010F907FD47406F0907FD574E6
33:1003900012F0020402BC0212BB006F907FD47406FC
34:1003A000F0907FD57424F0020402BC03297404C3C6
35:1003B0009B40576055EB2B9006442582F5827400D4
36:1003C0003583F583E0F9A3E0FA907FD4E9F0907FDC
37:1003D000D5EAF002040202040ABA080F7401907F01
38:1003E00000F07401907FB5F0020402BA0903020420
39:1003F00002BA0A0574000203DEBA0B030204020209
40:10040000040A907FB47402F08009907FB4E0440144
41:10041000F08000D0E0D085D084D083D082D08632E6
42:10042000EB20E71EC3940A5019EB2324FEF58274D7
43:10043000053400F583E0F5CBF5CDA3E0F5CAF5CCA6
44:10044000C322D322B94111EB64FF5484FB907F98FF
45:10045000E0547B4BF0020402907F9BE064FF0203B8
46:10046000DEC086C082C083C084C085C0E0E591C282
47:10047000E4F591907FA97404F01205A0D0E0D08536
48:10048000D084D083D082D08632C086C082C083C060
49:1004900084C085C0E0E591C2E4F591907FAA740420
50:1004A000F0907FC9E0F9E4F586907DC075851085F0
51:1004B0003284E005860584F0E584B53302800905C1
52:1004C000320586A3D9EC8000907FC9F0B131D0E02D
53:1004D000D085D084D083D082D08632E4F586907FD8
54:1004E000BCE020E14B907D00E532F0A3E533F0A3C2
55:1004F000E530F0A3E531F0A3E430000104F0A305FA
56:10050000869010007910E0A30586F0A30586D9F641
57:10051000058674FCF0A305869011007910E0A30510
58:1005200086F0A30586D9F6E4F586907FBD7426F0A3
59:1005300022200013E532B53301220533758310857F
60:100540003382E0F599D2007400B5340122E533D34B
61:100550009532C3953440F5753400D2010205A0C030
62:1005600086C082C083C084C085C0E0309907C2992C
63:10057000C20012053430980512058AC298D0E0D026
64:1005800085D084D083D082D0863275831185308225
65:100590000582E599F0E582B53101220530B1A0224E
66:1005A000907FB8E020E138200136E530B5310122F6
67:1005B000E4F5867583110586907E00F0A3058679A3
68:1005C00001E530B5310280100531853182E00586C4
69:1005D000F0A3058609B940E9907FB9E96001F022EE
70:1005E000C201E4F586907E007401F0A37402F090DD
71:1005F0007FB9F022C299F5993099FDC29922E55E42
72:10060000F63CFD8FFEC8FF64FFB2FFD9FFEDFFF39C
73:10061000FFFA12010001FFFFFF40CD06040189AB84
74:1006200001020301090220000101008032090400D7
75:100630000002FFFFFF0007058203400001070502DB
76:1006400002400000064C0650067206A0040300009B
77:100650002203410043004D00450020007500730057
78:100660006200200077006900640067006500740084
79:1006700073002E03410043004D004500200055004B
80:1006800053004200200073006500720069006100A1
81:100690006C0020007700690064006700650074004A
82:0606A000060334003700E0
83:00000001FF
diff --git a/drivers/usb/serial/keyspan_pda.S b/firmware/keyspan_pda/keyspan_pda.S
index 418fe69aa5e0..418fe69aa5e0 100644
--- a/drivers/usb/serial/keyspan_pda.S
+++ b/firmware/keyspan_pda/keyspan_pda.S
diff --git a/firmware/keyspan_pda/xircom_pgs.HEX b/firmware/keyspan_pda/xircom_pgs.HEX
new file mode 100644
index 000000000000..e9b00d70282f
--- /dev/null
+++ b/firmware/keyspan_pda/xircom_pgs.HEX
@@ -0,0 +1,87 @@
1:03000000020200F9
2:0400230002059B0037
3:050030000000000000CB
4:0400430002010000B6
5:100100000202BA000200000002000000020000002B
6:1001100002000000020000000200000002000000D7
7:100120000200000002000000020485000204B90081
8:1002000075815EE4F532F533F530F531F534C20031
9:10021000C201A90074FE901000F0A3D9FC74FD90F7
10:100220001100F0A3D9FC907F9474BFF0907F957477
11:10023000EFF07410907F9EF07400907F98F07440FF
12:10024000907F9DF07400907F97F07482907F9EF075
13:10025000907F957403F0907FAFE0D2E0F07401904E
14:100260007FABF0907FAEF0907FAC7404F0907FADE8
15:100270007404F0907FC9F07407907FAFF074209001
16:100280007F9CF07480907F98F07453F59875C83017
17:100290007B059144D2CA759850D2E8D2AFD2AC74E3
18:1002A00000F586907FD67402F0792E7A007B00DB11
19:1002B000FEDAFAD9F67406F080FEC086C082C083EA
20:1002C000C084C085C0E0E591C2E4F591907FAB7435
21:1002D00001F0907FE8E0F9A3E0FAA3E0FBA3E0FCE3
22:1002E000E95460B4000302035DB4406EBA000B121F
23:1002F0000444400302042602042EBA010302042E21
24:10030000BA020302042EBA0303020468BA041EBB35
25:10031000000A907F95E04402F0020426907F98E066
26:1003200054FDF0907F95E054FDF0020426BA0503D9
27:1003300002042EBA0619BB0008E533D39532020435
28:1003400002BB0108E532C3953302040202042EBA4F
29:1003500007058B3402042602042E02042EBA002064
30:10036000B98010907F00E4F0A3F0907FB57402F0A4
31:10037000020426B9820280EBB9810280E602042ED3
32:10038000BA010FBB000302042EBB010302042602C4
33:10039000042EBA030FBB000302042EBB01030204A8
34:1003A0002602042EBA0656BC010F907FD47406F0C4
35:1003B000907FD5745AF0020426BC0212BB006F90E5
36:1003C0007FD47406F0907FD5746CF0020426BC03D1
37:1003D000297404C39B40576055EB2B90068C2582F3
38:1003E000F58274003583F583E0F9A3E0FA907FD4B9
39:1003F000E9F0907FD5EAF002042602042EBA080F35
40:100400007401907F00F07401907FB5F0020426BA69
41:100410000903020426BA0A057400020402BA0B0397
42:1004200002042602042E907FB47402F08009907FAB
43:10043000B4E04401F08000D0E0D085D084D083D0F7
44:1004400082D08632EB20E71EC3940A5019EB232496
45:1004500046F58274063400F583E0F5CBF5CDA3E0D4
46:10046000F5CAF5CCC322D322B94111EB64FF548005
47:10047000FB907F98E0547F4BF0020426907F9BE036
48:1004800064FF020402C086C082C083C084C085C0ED
49:10049000E0E591C2E4F591907FA97404F074209096
50:1004A0007F9CF01205DC7420907F9CF0D0E0D0851A
51:1004B000D084D083D082D08632C086C082C083C030
52:1004C00084C085C0E07410907F9CF0E591C2E4F593
53:1004D00091907FAA7404F0907FC9E0F9E4F58690CA
54:1004E0007DC0758510853284E005860584F0E5843D
55:1004F000B53302800905320586A3D9EC8000907FD0
56:10050000C9F0B16D7420907F9CF0D0E0D085D0848C
57:10051000D083D082D08632E4F586907FBCE020E1A3
58:100520004B907D00E532F0A3E533F0A3E530F0A376
59:10053000E531F0A3E430000104F0A305869010003B
60:100540007910E0A30586F0A30586D9F6058674FC2C
61:10055000F0A305869011007910E0A30586F0A305AD
62:1005600086D9F6E4F586907FBD7426F0222000132C
63:10057000E532B53301220533758310853382E0F50A
64:1005800099D2007400B5340122E533D39532C39576
65:100590003440F5753400D2010205DCC086C082C04B
66:1005A00083C084C085C0E0309907C299C20012059B
67:1005B000703098051205C6C298D0E0D085D084D09E
68:1005C00083D082D086327583118530820582E59989
69:1005D000F0E582B53101220530B1DC227410907F44
70:1005E0009CF0907FB8E020E13E20013CE530B53141
71:1005F0000122E4F5867583110586907E00F0A3053F
72:10060000867901E530B5310280100531853182E00F
73:100610000586F0A3058609B940E97410907F9CF027
74:10062000907FB9E96001F022C201E4F586907E0076
75:100630007401F0A37402F0907FB9F022C299F59989
76:100640003099FDC29922E55EF63CFD8FFEC8FF643D
77:10065000FFB2FFD9FFEDFFF3FFFA12010001FFFF28
78:10066000FF40CD06040189AB01020301090220000D
79:1006700001010080320904000002FFFFFF000705AE
80:10068000820340000107050202400000069406981C
81:1006900006BA06E8040300002203410043004D00AF
82:1006A000450020007500730062002000770069009B
83:1006B000640067006500740073002E03410043006E
84:1006C0004D004500200055005300420020007300FB
85:1006D00065007200690061006C002000770069000D
86:0E06E0006400670065007400060334003700F4
87:00000001FF
diff --git a/drivers/usb/serial/xircom_pgs.S b/firmware/keyspan_pda/xircom_pgs.S
index 05d99dd63776..05d99dd63776 100644
--- a/drivers/usb/serial/xircom_pgs.S
+++ b/firmware/keyspan_pda/xircom_pgs.S