lkml.org 
[lkml]   [2008]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH] keyspan_pda: use request_firmware()
    From
    Date

    Signed-off-by: David Woodhouse <dwmw2@infradead.org>
    ---
    drivers/usb/serial/Kconfig | 17 ++++
    drivers/usb/serial/keyspan_pda.c | 51 ++++++------
    drivers/usb/serial/keyspan_pda_fw.h | 99 -----------------------
    drivers/usb/serial/xircom_pgs_fw.h | 103 ------------------------
    firmware/Makefile | 2 +
    firmware/keyspan_pda/keyspan_pda.fw.ihex | 121 ++++++++++++++++++++++++++++
    firmware/keyspan_pda/xircom_pgs.fw.ihex | 127 ++++++++++++++++++++++++++++++
    7 files changed, 291 insertions(+), 229 deletions(-)
    delete mode 100644 drivers/usb/serial/keyspan_pda_fw.h
    delete mode 100644 drivers/usb/serial/xircom_pgs_fw.h
    create mode 100644 firmware/keyspan_pda/keyspan_pda.fw.ihex
    create mode 100644 firmware/keyspan_pda/xircom_pgs.fw.ihex

    diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
    index 31f9cc3..c354203 100644
    --- a/drivers/usb/serial/Kconfig
    +++ b/drivers/usb/serial/Kconfig
    @@ -279,6 +279,7 @@ config USB_SERIAL_IUU

    config USB_SERIAL_KEYSPAN_PDA
    tristate "USB Keyspan PDA Single Port Serial Driver"
    + select FW_LOADER
    select USB_EZUSB
    help
    Say Y here if you want to use a Keyspan PDA single port USB to
    @@ -288,6 +289,13 @@ config USB_SERIAL_KEYSPAN_PDA
    To compile this driver as a module, choose M here: the
    module will be called keyspan_pda.

    +config USB_SERIAL_KEYSPAN_PDA_FIRMWARE
    + bool "Include Keyspan PDA firmware in kernel"
    + help
    + This option allows you to build the required firmware for the
    + Keyspan PDA serial port into the kernel. Say 'N' and let it
    + get loaded by udev instead.
    +
    config USB_SERIAL_KEYSPAN
    tristate "USB Keyspan USA-xxx Serial Driver"
    select FW_LOADER
    @@ -538,6 +546,7 @@ config USB_SERIAL_CYBERJACK

    config USB_SERIAL_XIRCOM
    tristate "USB Xircom / Entregra Single Port Serial Driver"
    + select FW_LOADER
    select USB_EZUSB
    help
    Say Y here if you want to use a Xircom or Entregra single port USB to
    @@ -547,6 +556,14 @@ config USB_SERIAL_XIRCOM
    To compile this driver as a module, choose M here: the
    module will be called keyspan_pda.

    +config USB_SERIAL_XIRCOM_FIRMWARE
    + bool "Include Xircom / Entregra firmware in kernel"
    + help
    + This option allows you to build the required firmware for the
    + Xircom / Entregra serial port into the kernel. Say 'N' and let
    + it get loaded by udev instead.
    +
    +
    config USB_SERIAL_OPTION
    tristate "USB driver for GSM and CDMA modems"
    help
    diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
    index ff54203..99303a5 100644
    --- a/drivers/usb/serial/keyspan_pda.c
    +++ b/drivers/usb/serial/keyspan_pda.c
    @@ -76,18 +76,14 @@
    #include <linux/module.h>
    #include <linux/spinlock.h>
    #include <linux/workqueue.h>
    +#include <linux/firmware.h>
    +#include <linux/ihex.h>
    #include <asm/uaccess.h>
    #include <linux/usb.h>
    #include <linux/usb/serial.h>

    static int debug;

    -struct ezusb_hex_record {
    - __u16 address;
    - __u8 data_size;
    - __u8 data[16];
    -};
    -
    /* make a simple define to handle if we are compiling keyspan_pda or xircom support */
    #if defined(CONFIG_USB_SERIAL_KEYSPAN_PDA) || defined(CONFIG_USB_SERIAL_KEYSPAN_PDA_MODULE)
    #define KEYSPAN
    @@ -100,14 +96,6 @@ struct ezusb_hex_record {
    #undef XIRCOM
    #endif

    -#ifdef KEYSPAN
    -#include "keyspan_pda_fw.h"
    -#endif
    -
    -#ifdef XIRCOM
    -#include "xircom_pgs_fw.h"
    -#endif
    -
    /*
    * Version Information
    */
    @@ -722,38 +710,47 @@ static void keyspan_pda_close(struct usb_serial_port *port, struct file *filp)
    static int keyspan_pda_fake_startup (struct usb_serial *serial)
    {
    int response;
    - const struct ezusb_hex_record *record = NULL;
    + const char *fw_name;
    + const struct ihex_binrec *record;
    + const struct firmware *fw;

    /* download the firmware here ... */
    response = ezusb_set_reset(serial, 1);

    + if (0) { ; }
    #ifdef KEYSPAN
    - if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
    - record = &keyspan_pda_firmware[0];
    + else if (le16_to_cpu(serial->dev->descriptor.idVendor) == KEYSPAN_VENDOR_ID)
    + fw_name = "keyspan_pda/keyspan_pda.fw";
    #endif
    #ifdef XIRCOM
    - if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
    - (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
    - record = &xircom_pgs_firmware[0];
    + else if ((le16_to_cpu(serial->dev->descriptor.idVendor) == XIRCOM_VENDOR_ID) ||
    + (le16_to_cpu(serial->dev->descriptor.idVendor) == ENTREGRA_VENDOR_ID))
    + fw_name = "keyspan_pda/xircom_pgs.fw";
    #endif
    - if (record == NULL) {
    + else {
    err("%s: unknown vendor, aborting.", __func__);
    return -ENODEV;
    }
    + if (request_firmware(&fw, fw_name, &serial->dev->dev)) {
    + err("failed to load firmware \"%s\"\n", fw_name);
    + return -ENOENT;
    + }
    + record = (const struct ihex_binrec *)fw->data;

    - while(record->address != 0xffff) {
    - response = ezusb_writememory(serial, record->address,
    + while (record) {
    + response = ezusb_writememory(serial, be32_to_cpu(record->addr),
    (unsigned char *)record->data,
    - record->data_size, 0xa0);
    + record->len, 0xa0);
    if (response < 0) {
    err("ezusb_writememory failed for Keyspan PDA "
    "firmware (%d %04X %p %d)",
    - response,
    - record->address, record->data, record->data_size);
    + response, be32_to_cpu(record->addr),
    + record->data, record->len);
    break;
    }
    - record++;
    + record = ihex_next_binrec(record);
    }
    + release_firmware(fw);
    /* bring device out of reset. Renumeration will occur in a moment
    and the new device will bind to the real driver */
    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 f253acc..0000000
    --- a/drivers/usb/serial/keyspan_pda_fw.h
    +++ /dev/null
    @@ -1,99 +0,0 @@
    -/*
    - * USB Keyspan PDA Firmware
    - *
    - * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
    - *
    - * This program is free software; you can redistribute it and/or modify
    - * it under the terms of the GNU General Public License as published by
    - * the Free Software Foundation; either version 2 of the License, or
    - * (at your option) any later version.
    - *
    - * Generated from keyspan_pda.s by ezusb_convert.pl
    - *
    - */
    -
    -static const struct ezusb_hex_record keyspan_pda_firmware[] = {
    -{ 0x0000, 3, {0x02, 0x02, 0x00} },
    -{ 0x0023, 4, {0x02, 0x05, 0x5f, 0x00} },
    -{ 0x0043, 4, {0x02, 0x01, 0x00, 0x00} },
    -{ 0x0030, 5, {0x00, 0x00, 0x00, 0x00, 0x00} },
    -{ 0x0100, 16, {0x02, 0x02, 0x96, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
    -{ 0x0110, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
    -{ 0x0120, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x61, 0x00, 0x02, 0x04, 0x89, 0x00} },
    -{ 0x0200, 16, {0x75, 0x81, 0x5e, 0xe4, 0xf5, 0x32, 0xf5, 0x33, 0xf5, 0x30, 0xf5, 0x31, 0xf5, 0x34, 0xc2, 0x00} },
    -{ 0x0210, 16, {0xc2, 0x01, 0xa9, 0x00, 0x74, 0xfe, 0x90, 0x10, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0xfd, 0x90} },
    -{ 0x0220, 16, {0x11, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0x02, 0x90, 0x7f, 0x9d, 0xf0, 0x74, 0x00, 0x90, 0x7f} },
    -{ 0x0230, 16, {0x97, 0xf0, 0x74, 0x86, 0x90, 0x7f, 0x9e, 0xf0, 0x90, 0x7f, 0x95, 0x74, 0x03, 0xf0, 0x90, 0x7f} },
    -{ 0x0240, 16, {0xaf, 0xe0, 0xd2, 0xe0, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xab, 0xf0, 0x90, 0x7f, 0xae, 0xf0, 0x90} },
    -{ 0x0250, 16, {0x7f, 0xac, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xad, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x74} },
    -{ 0x0260, 16, {0x84, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x00, 0xf5, 0x98, 0x75, 0xc8, 0x30, 0x7b, 0x05, 0x91, 0x20} },
    -{ 0x0270, 16, {0xd2, 0xca, 0x75, 0x98, 0x50, 0xd2, 0xe8, 0xd2, 0xaf, 0xd2, 0xac, 0x74, 0x00, 0xf5, 0x86, 0x90} },
    -{ 0x0280, 16, {0x7f, 0xd6, 0x74, 0x02, 0xf0, 0x79, 0x2e, 0x7a, 0x00, 0x7b, 0x00, 0xdb, 0xfe, 0xda, 0xfa, 0xd9} },
    -{ 0x0290, 16, {0xf6, 0x74, 0x06, 0xf0, 0x80, 0xfe, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85} },
    -{ 0x02a0, 16, {0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xab, 0x74, 0x01, 0xf0, 0x90, 0x7f} },
    -{ 0x02b0, 16, {0xe8, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3, 0xe0, 0xfc, 0xe9, 0x54, 0x60, 0xb4} },
    -{ 0x02c0, 16, {0x00, 0x03, 0x02, 0x03, 0x39, 0xb4, 0x40, 0x6e, 0xba, 0x00, 0x0b, 0x12, 0x04, 0x20, 0x40, 0x03} },
    -{ 0x02d0, 16, {0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x01, 0x03, 0x02, 0x04, 0x0a, 0xba, 0x02, 0x03, 0x02} },
    -{ 0x02e0, 16, {0x04, 0x0a, 0xba, 0x03, 0x03, 0x02, 0x04, 0x44, 0xba, 0x04, 0x1e, 0xbb, 0x00, 0x0a, 0x90, 0x7f} },
    -{ 0x02f0, 16, {0x95, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x04, 0x02, 0x90, 0x7f, 0x98, 0xe0, 0x54, 0xfd, 0xf0, 0x90} },
    -{ 0x0300, 16, {0x7f, 0x95, 0xe0, 0x54, 0xfd, 0xf0, 0x02, 0x04, 0x02, 0xba, 0x05, 0x03, 0x02, 0x04, 0x0a, 0xba} },
    -{ 0x0310, 16, {0x06, 0x19, 0xbb, 0x00, 0x08, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0x02, 0x03, 0xde, 0xbb, 0x01, 0x08} },
    -{ 0x0320, 16, {0xe5, 0x32, 0xc3, 0x95, 0x33, 0x02, 0x03, 0xde, 0x02, 0x04, 0x0a, 0xba, 0x07, 0x05, 0x8b, 0x34} },
    -{ 0x0330, 16, {0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0x02, 0x04, 0x0a, 0xba, 0x00, 0x20, 0xb9, 0x80, 0x10, 0x90} },
    -{ 0x0340, 16, {0x7f, 0x00, 0xe4, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0, 0x02, 0x04, 0x02, 0xb9} },
    -{ 0x0350, 16, {0x82, 0x02, 0x80, 0xeb, 0xb9, 0x81, 0x02, 0x80, 0xe6, 0x02, 0x04, 0x0a, 0xba, 0x01, 0x0f, 0xbb} },
    -{ 0x0360, 16, {0x00, 0x03, 0x02, 0x04, 0x0a, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x03} },
    -{ 0x0370, 16, {0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x0a, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a} },
    -{ 0x0380, 16, {0xba, 0x06, 0x56, 0xbc, 0x01, 0x0f, 0x90, 0x7f, 0xd4, 0x74, 0x06, 0xf0, 0x90, 0x7f, 0xd5, 0x74} },
    -{ 0x0390, 16, {0x12, 0xf0, 0x02, 0x04, 0x02, 0xbc, 0x02, 0x12, 0xbb, 0x00, 0x6f, 0x90, 0x7f, 0xd4, 0x74, 0x06} },
    -{ 0x03a0, 16, {0xf0, 0x90, 0x7f, 0xd5, 0x74, 0x24, 0xf0, 0x02, 0x04, 0x02, 0xbc, 0x03, 0x29, 0x74, 0x04, 0xc3} },
    -{ 0x03b0, 16, {0x9b, 0x40, 0x57, 0x60, 0x55, 0xeb, 0x2b, 0x90, 0x06, 0x44, 0x25, 0x82, 0xf5, 0x82, 0x74, 0x00} },
    -{ 0x03c0, 16, {0x35, 0x83, 0xf5, 0x83, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0x90, 0x7f, 0xd4, 0xe9, 0xf0, 0x90, 0x7f} },
    -{ 0x03d0, 16, {0xd5, 0xea, 0xf0, 0x02, 0x04, 0x02, 0x02, 0x04, 0x0a, 0xba, 0x08, 0x0f, 0x74, 0x01, 0x90, 0x7f} },
    -{ 0x03e0, 16, {0x00, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xb5, 0xf0, 0x02, 0x04, 0x02, 0xba, 0x09, 0x03, 0x02, 0x04} },
    -{ 0x03f0, 16, {0x02, 0xba, 0x0a, 0x05, 0x74, 0x00, 0x02, 0x03, 0xde, 0xba, 0x0b, 0x03, 0x02, 0x04, 0x02, 0x02} },
    -{ 0x0400, 16, {0x04, 0x0a, 0x90, 0x7f, 0xb4, 0x74, 0x02, 0xf0, 0x80, 0x09, 0x90, 0x7f, 0xb4, 0xe0, 0x44, 0x01} },
    -{ 0x0410, 16, {0xf0, 0x80, 0x00, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32} },
    -{ 0x0420, 16, {0xeb, 0x20, 0xe7, 0x1e, 0xc3, 0x94, 0x0a, 0x50, 0x19, 0xeb, 0x23, 0x24, 0xfe, 0xf5, 0x82, 0x74} },
    -{ 0x0430, 16, {0x05, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xf5, 0xcb, 0xf5, 0xcd, 0xa3, 0xe0, 0xf5, 0xca, 0xf5, 0xcc} },
    -{ 0x0440, 16, {0xc3, 0x22, 0xd3, 0x22, 0xb9, 0x41, 0x11, 0xeb, 0x64, 0xff, 0x54, 0x84, 0xfb, 0x90, 0x7f, 0x98} },
    -{ 0x0450, 16, {0xe0, 0x54, 0x7b, 0x4b, 0xf0, 0x02, 0x04, 0x02, 0x90, 0x7f, 0x9b, 0xe0, 0x64, 0xff, 0x02, 0x03} },
    -{ 0x0460, 16, {0xde, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2} },
    -{ 0x0470, 16, {0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x12, 0x05, 0xa0, 0xd0, 0xe0, 0xd0, 0x85} },
    -{ 0x0480, 16, {0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0} },
    -{ 0x0490, 16, {0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xaa, 0x74, 0x04} },
    -{ 0x04a0, 16, {0xf0, 0x90, 0x7f, 0xc9, 0xe0, 0xf9, 0xe4, 0xf5, 0x86, 0x90, 0x7d, 0xc0, 0x75, 0x85, 0x10, 0x85} },
    -{ 0x04b0, 16, {0x32, 0x84, 0xe0, 0x05, 0x86, 0x05, 0x84, 0xf0, 0xe5, 0x84, 0xb5, 0x33, 0x02, 0x80, 0x09, 0x05} },
    -{ 0x04c0, 16, {0x32, 0x05, 0x86, 0xa3, 0xd9, 0xec, 0x80, 0x00, 0x90, 0x7f, 0xc9, 0xf0, 0xb1, 0x31, 0xd0, 0xe0} },
    -{ 0x04d0, 16, {0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xe4, 0xf5, 0x86, 0x90, 0x7f} },
    -{ 0x04e0, 16, {0xbc, 0xe0, 0x20, 0xe1, 0x4b, 0x90, 0x7d, 0x00, 0xe5, 0x32, 0xf0, 0xa3, 0xe5, 0x33, 0xf0, 0xa3} },
    -{ 0x04f0, 16, {0xe5, 0x30, 0xf0, 0xa3, 0xe5, 0x31, 0xf0, 0xa3, 0xe4, 0x30, 0x00, 0x01, 0x04, 0xf0, 0xa3, 0x05} },
    -{ 0x0500, 16, {0x86, 0x90, 0x10, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6} },
    -{ 0x0510, 16, {0x05, 0x86, 0x74, 0xfc, 0xf0, 0xa3, 0x05, 0x86, 0x90, 0x11, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05} },
    -{ 0x0520, 16, {0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbd, 0x74, 0x26, 0xf0} },
    -{ 0x0530, 16, {0x22, 0x20, 0x00, 0x13, 0xe5, 0x32, 0xb5, 0x33, 0x01, 0x22, 0x05, 0x33, 0x75, 0x83, 0x10, 0x85} },
    -{ 0x0540, 16, {0x33, 0x82, 0xe0, 0xf5, 0x99, 0xd2, 0x00, 0x74, 0x00, 0xb5, 0x34, 0x01, 0x22, 0xe5, 0x33, 0xd3} },
    -{ 0x0550, 16, {0x95, 0x32, 0xc3, 0x95, 0x34, 0x40, 0xf5, 0x75, 0x34, 0x00, 0xd2, 0x01, 0x02, 0x05, 0xa0, 0xc0} },
    -{ 0x0560, 16, {0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x30, 0x99, 0x07, 0xc2, 0x99} },
    -{ 0x0570, 16, {0xc2, 0x00, 0x12, 0x05, 0x34, 0x30, 0x98, 0x05, 0x12, 0x05, 0x8a, 0xc2, 0x98, 0xd0, 0xe0, 0xd0} },
    -{ 0x0580, 16, {0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0x75, 0x83, 0x11, 0x85, 0x30, 0x82} },
    -{ 0x0590, 16, {0x05, 0x82, 0xe5, 0x99, 0xf0, 0xe5, 0x82, 0xb5, 0x31, 0x01, 0x22, 0x05, 0x30, 0xb1, 0xa0, 0x22} },
    -{ 0x05a0, 16, {0x90, 0x7f, 0xb8, 0xe0, 0x20, 0xe1, 0x38, 0x20, 0x01, 0x36, 0xe5, 0x30, 0xb5, 0x31, 0x01, 0x22} },
    -{ 0x05b0, 16, {0xe4, 0xf5, 0x86, 0x75, 0x83, 0x11, 0x05, 0x86, 0x90, 0x7e, 0x00, 0xf0, 0xa3, 0x05, 0x86, 0x79} },
    -{ 0x05c0, 16, {0x01, 0xe5, 0x30, 0xb5, 0x31, 0x02, 0x80, 0x10, 0x05, 0x31, 0x85, 0x31, 0x82, 0xe0, 0x05, 0x86} },
    -{ 0x05d0, 16, {0xf0, 0xa3, 0x05, 0x86, 0x09, 0xb9, 0x40, 0xe9, 0x90, 0x7f, 0xb9, 0xe9, 0x60, 0x01, 0xf0, 0x22} },
    -{ 0x05e0, 16, {0xc2, 0x01, 0xe4, 0xf5, 0x86, 0x90, 0x7e, 0x00, 0x74, 0x01, 0xf0, 0xa3, 0x74, 0x02, 0xf0, 0x90} },
    -{ 0x05f0, 16, {0x7f, 0xb9, 0xf0, 0x22, 0xc2, 0x99, 0xf5, 0x99, 0x30, 0x99, 0xfd, 0xc2, 0x99, 0x22, 0xe5, 0x5e} },
    -{ 0x0600, 16, {0xf6, 0x3c, 0xfd, 0x8f, 0xfe, 0xc8, 0xff, 0x64, 0xff, 0xb2, 0xff, 0xd9, 0xff, 0xed, 0xff, 0xf3} },
    -{ 0x0610, 16, {0xff, 0xfa, 0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40, 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab} },
    -{ 0x0620, 16, {0x01, 0x02, 0x03, 0x01, 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00} },
    -{ 0x0630, 16, {0x00, 0x02, 0xff, 0xff, 0xff, 0x00, 0x07, 0x05, 0x82, 0x03, 0x40, 0x00, 0x01, 0x07, 0x05, 0x02} },
    -{ 0x0640, 16, {0x02, 0x40, 0x00, 0x00, 0x06, 0x4c, 0x06, 0x50, 0x06, 0x72, 0x06, 0xa0, 0x04, 0x03, 0x00, 0x00} },
    -{ 0x0650, 16, {0x22, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00} },
    -{ 0x0660, 16, {0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00} },
    -{ 0x0670, 16, {0x73, 0x00, 0x2e, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00} },
    -{ 0x0680, 16, {0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00} },
    -{ 0x0690, 16, {0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00} },
    -{ 0x06a0, 6, {0x06, 0x03, 0x34, 0x00, 0x37, 0x00} },
    -{ 0xffff, 0, {0x00} }
    -};
    diff --git a/drivers/usb/serial/xircom_pgs_fw.h b/drivers/usb/serial/xircom_pgs_fw.h
    deleted file mode 100644
    index 3ff74a6..0000000
    --- a/drivers/usb/serial/xircom_pgs_fw.h
    +++ /dev/null
    @@ -1,103 +0,0 @@
    -/*
    - * USB Xircom PGS Firmware
    - *
    - * Copyright (C) 1999, 2000 Brian Warner <warner@lothar.com>
    - * Copyright (C) 2001 Cristian M. Craciunescu <cristi@dnt.ro>
    - *
    - * This program is free software; you can redistribute it and/or modify
    - * it under the terms of the GNU General Public License as published by
    - * the Free Software Foundation; either version 2 of the License, or
    - * (at your option) any later version.
    - *
    - * Generated from xircom_pgs.S by ezusb_convert_x.pl
    - */
    -
    -static const struct ezusb_hex_record xircom_pgs_firmware[] = {
    -{ 0x0000, 3, {0x02, 0x02, 0x00} },
    -{ 0x0023, 4, {0x02, 0x05, 0x9b, 0x00} },
    -{ 0x0030, 5, {0x00, 0x00, 0x00, 0x00, 0x00} },
    -{ 0x0043, 4, {0x02, 0x01, 0x00, 0x00} },
    -{ 0x0100, 16, {0x02, 0x02, 0xba, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
    -{ 0x0110, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00} },
    -{ 0x0120, 16, {0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x85, 0x00, 0x02, 0x04, 0xb9, 0x00} },
    -{ 0x0200, 16, {0x75, 0x81, 0x5e, 0xe4, 0xf5, 0x32, 0xf5, 0x33, 0xf5, 0x30, 0xf5, 0x31, 0xf5, 0x34, 0xc2, 0x00} },
    -{ 0x0210, 16, {0xc2, 0x01, 0xa9, 0x00, 0x74, 0xfe, 0x90, 0x10, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x74, 0xfd, 0x90} },
    -{ 0x0220, 16, {0x11, 0x00, 0xf0, 0xa3, 0xd9, 0xfc, 0x90, 0x7f, 0x94, 0x74, 0xbf, 0xf0, 0x90, 0x7f, 0x95, 0x74} },
    -{ 0x0230, 16, {0xef, 0xf0, 0x74, 0x10, 0x90, 0x7f, 0x9e, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x40} },
    -{ 0x0240, 16, {0x90, 0x7f, 0x9d, 0xf0, 0x74, 0x00, 0x90, 0x7f, 0x97, 0xf0, 0x74, 0x82, 0x90, 0x7f, 0x9e, 0xf0} },
    -{ 0x0250, 16, {0x90, 0x7f, 0x95, 0x74, 0x03, 0xf0, 0x90, 0x7f, 0xaf, 0xe0, 0xd2, 0xe0, 0xf0, 0x74, 0x01, 0x90} },
    -{ 0x0260, 16, {0x7f, 0xab, 0xf0, 0x90, 0x7f, 0xae, 0xf0, 0x90, 0x7f, 0xac, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xad} },
    -{ 0x0270, 16, {0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xf0, 0x74, 0x07, 0x90, 0x7f, 0xaf, 0xf0, 0x74, 0x20, 0x90} },
    -{ 0x0280, 16, {0x7f, 0x9c, 0xf0, 0x74, 0x80, 0x90, 0x7f, 0x98, 0xf0, 0x74, 0x53, 0xf5, 0x98, 0x75, 0xc8, 0x30} },
    -{ 0x0290, 16, {0x7b, 0x05, 0x91, 0x44, 0xd2, 0xca, 0x75, 0x98, 0x50, 0xd2, 0xe8, 0xd2, 0xaf, 0xd2, 0xac, 0x74} },
    -{ 0x02a0, 16, {0x00, 0xf5, 0x86, 0x90, 0x7f, 0xd6, 0x74, 0x02, 0xf0, 0x79, 0x2e, 0x7a, 0x00, 0x7b, 0x00, 0xdb} },
    -{ 0x02b0, 16, {0xfe, 0xda, 0xfa, 0xd9, 0xf6, 0x74, 0x06, 0xf0, 0x80, 0xfe, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83} },
    -{ 0x02c0, 16, {0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xab, 0x74} },
    -{ 0x02d0, 16, {0x01, 0xf0, 0x90, 0x7f, 0xe8, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0xa3, 0xe0, 0xfb, 0xa3, 0xe0, 0xfc} },
    -{ 0x02e0, 16, {0xe9, 0x54, 0x60, 0xb4, 0x00, 0x03, 0x02, 0x03, 0x5d, 0xb4, 0x40, 0x6e, 0xba, 0x00, 0x0b, 0x12} },
    -{ 0x02f0, 16, {0x04, 0x44, 0x40, 0x03, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0xba, 0x01, 0x03, 0x02, 0x04, 0x2e} },
    -{ 0x0300, 16, {0xba, 0x02, 0x03, 0x02, 0x04, 0x2e, 0xba, 0x03, 0x03, 0x02, 0x04, 0x68, 0xba, 0x04, 0x1e, 0xbb} },
    -{ 0x0310, 16, {0x00, 0x0a, 0x90, 0x7f, 0x95, 0xe0, 0x44, 0x02, 0xf0, 0x02, 0x04, 0x26, 0x90, 0x7f, 0x98, 0xe0} },
    -{ 0x0320, 16, {0x54, 0xfd, 0xf0, 0x90, 0x7f, 0x95, 0xe0, 0x54, 0xfd, 0xf0, 0x02, 0x04, 0x26, 0xba, 0x05, 0x03} },
    -{ 0x0330, 16, {0x02, 0x04, 0x2e, 0xba, 0x06, 0x19, 0xbb, 0x00, 0x08, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0x02, 0x04} },
    -{ 0x0340, 16, {0x02, 0xbb, 0x01, 0x08, 0xe5, 0x32, 0xc3, 0x95, 0x33, 0x02, 0x04, 0x02, 0x02, 0x04, 0x2e, 0xba} },
    -{ 0x0350, 16, {0x07, 0x05, 0x8b, 0x34, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0x02, 0x04, 0x2e, 0xba, 0x00, 0x20} },
    -{ 0x0360, 16, {0xb9, 0x80, 0x10, 0x90, 0x7f, 0x00, 0xe4, 0xf0, 0xa3, 0xf0, 0x90, 0x7f, 0xb5, 0x74, 0x02, 0xf0} },
    -{ 0x0370, 16, {0x02, 0x04, 0x26, 0xb9, 0x82, 0x02, 0x80, 0xeb, 0xb9, 0x81, 0x02, 0x80, 0xe6, 0x02, 0x04, 0x2e} },
    -{ 0x0380, 16, {0xba, 0x01, 0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x2e, 0xbb, 0x01, 0x03, 0x02, 0x04, 0x26, 0x02} },
    -{ 0x0390, 16, {0x04, 0x2e, 0xba, 0x03, 0x0f, 0xbb, 0x00, 0x03, 0x02, 0x04, 0x2e, 0xbb, 0x01, 0x03, 0x02, 0x04} },
    -{ 0x03a0, 16, {0x26, 0x02, 0x04, 0x2e, 0xba, 0x06, 0x56, 0xbc, 0x01, 0x0f, 0x90, 0x7f, 0xd4, 0x74, 0x06, 0xf0} },
    -{ 0x03b0, 16, {0x90, 0x7f, 0xd5, 0x74, 0x5a, 0xf0, 0x02, 0x04, 0x26, 0xbc, 0x02, 0x12, 0xbb, 0x00, 0x6f, 0x90} },
    -{ 0x03c0, 16, {0x7f, 0xd4, 0x74, 0x06, 0xf0, 0x90, 0x7f, 0xd5, 0x74, 0x6c, 0xf0, 0x02, 0x04, 0x26, 0xbc, 0x03} },
    -{ 0x03d0, 16, {0x29, 0x74, 0x04, 0xc3, 0x9b, 0x40, 0x57, 0x60, 0x55, 0xeb, 0x2b, 0x90, 0x06, 0x8c, 0x25, 0x82} },
    -{ 0x03e0, 16, {0xf5, 0x82, 0x74, 0x00, 0x35, 0x83, 0xf5, 0x83, 0xe0, 0xf9, 0xa3, 0xe0, 0xfa, 0x90, 0x7f, 0xd4} },
    -{ 0x03f0, 16, {0xe9, 0xf0, 0x90, 0x7f, 0xd5, 0xea, 0xf0, 0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0xba, 0x08, 0x0f} },
    -{ 0x0400, 16, {0x74, 0x01, 0x90, 0x7f, 0x00, 0xf0, 0x74, 0x01, 0x90, 0x7f, 0xb5, 0xf0, 0x02, 0x04, 0x26, 0xba} },
    -{ 0x0410, 16, {0x09, 0x03, 0x02, 0x04, 0x26, 0xba, 0x0a, 0x05, 0x74, 0x00, 0x02, 0x04, 0x02, 0xba, 0x0b, 0x03} },
    -{ 0x0420, 16, {0x02, 0x04, 0x26, 0x02, 0x04, 0x2e, 0x90, 0x7f, 0xb4, 0x74, 0x02, 0xf0, 0x80, 0x09, 0x90, 0x7f} },
    -{ 0x0430, 16, {0xb4, 0xe0, 0x44, 0x01, 0xf0, 0x80, 0x00, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0, 0x83, 0xd0} },
    -{ 0x0440, 16, {0x82, 0xd0, 0x86, 0x32, 0xeb, 0x20, 0xe7, 0x1e, 0xc3, 0x94, 0x0a, 0x50, 0x19, 0xeb, 0x23, 0x24} },
    -{ 0x0450, 16, {0x46, 0xf5, 0x82, 0x74, 0x06, 0x34, 0x00, 0xf5, 0x83, 0xe0, 0xf5, 0xcb, 0xf5, 0xcd, 0xa3, 0xe0} },
    -{ 0x0460, 16, {0xf5, 0xca, 0xf5, 0xcc, 0xc3, 0x22, 0xd3, 0x22, 0xb9, 0x41, 0x11, 0xeb, 0x64, 0xff, 0x54, 0x80} },
    -{ 0x0470, 16, {0xfb, 0x90, 0x7f, 0x98, 0xe0, 0x54, 0x7f, 0x4b, 0xf0, 0x02, 0x04, 0x26, 0x90, 0x7f, 0x9b, 0xe0} },
    -{ 0x0480, 16, {0x64, 0xff, 0x02, 0x04, 0x02, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0} },
    -{ 0x0490, 16, {0xe0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5, 0x91, 0x90, 0x7f, 0xa9, 0x74, 0x04, 0xf0, 0x74, 0x20, 0x90} },
    -{ 0x04a0, 16, {0x7f, 0x9c, 0xf0, 0x12, 0x05, 0xdc, 0x74, 0x20, 0x90, 0x7f, 0x9c, 0xf0, 0xd0, 0xe0, 0xd0, 0x85} },
    -{ 0x04b0, 16, {0xd0, 0x84, 0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xc0, 0x86, 0xc0, 0x82, 0xc0, 0x83, 0xc0} },
    -{ 0x04c0, 16, {0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x74, 0x10, 0x90, 0x7f, 0x9c, 0xf0, 0xe5, 0x91, 0xc2, 0xe4, 0xf5} },
    -{ 0x04d0, 16, {0x91, 0x90, 0x7f, 0xaa, 0x74, 0x04, 0xf0, 0x90, 0x7f, 0xc9, 0xe0, 0xf9, 0xe4, 0xf5, 0x86, 0x90} },
    -{ 0x04e0, 16, {0x7d, 0xc0, 0x75, 0x85, 0x10, 0x85, 0x32, 0x84, 0xe0, 0x05, 0x86, 0x05, 0x84, 0xf0, 0xe5, 0x84} },
    -{ 0x04f0, 16, {0xb5, 0x33, 0x02, 0x80, 0x09, 0x05, 0x32, 0x05, 0x86, 0xa3, 0xd9, 0xec, 0x80, 0x00, 0x90, 0x7f} },
    -{ 0x0500, 16, {0xc9, 0xf0, 0xb1, 0x6d, 0x74, 0x20, 0x90, 0x7f, 0x9c, 0xf0, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84} },
    -{ 0x0510, 16, {0xd0, 0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbc, 0xe0, 0x20, 0xe1} },
    -{ 0x0520, 16, {0x4b, 0x90, 0x7d, 0x00, 0xe5, 0x32, 0xf0, 0xa3, 0xe5, 0x33, 0xf0, 0xa3, 0xe5, 0x30, 0xf0, 0xa3} },
    -{ 0x0530, 16, {0xe5, 0x31, 0xf0, 0xa3, 0xe4, 0x30, 0x00, 0x01, 0x04, 0xf0, 0xa3, 0x05, 0x86, 0x90, 0x10, 0x00} },
    -{ 0x0540, 16, {0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0xd9, 0xf6, 0x05, 0x86, 0x74, 0xfc} },
    -{ 0x0550, 16, {0xf0, 0xa3, 0x05, 0x86, 0x90, 0x11, 0x00, 0x79, 0x10, 0xe0, 0xa3, 0x05, 0x86, 0xf0, 0xa3, 0x05} },
    -{ 0x0560, 16, {0x86, 0xd9, 0xf6, 0xe4, 0xf5, 0x86, 0x90, 0x7f, 0xbd, 0x74, 0x26, 0xf0, 0x22, 0x20, 0x00, 0x13} },
    -{ 0x0570, 16, {0xe5, 0x32, 0xb5, 0x33, 0x01, 0x22, 0x05, 0x33, 0x75, 0x83, 0x10, 0x85, 0x33, 0x82, 0xe0, 0xf5} },
    -{ 0x0580, 16, {0x99, 0xd2, 0x00, 0x74, 0x00, 0xb5, 0x34, 0x01, 0x22, 0xe5, 0x33, 0xd3, 0x95, 0x32, 0xc3, 0x95} },
    -{ 0x0590, 16, {0x34, 0x40, 0xf5, 0x75, 0x34, 0x00, 0xd2, 0x01, 0x02, 0x05, 0xdc, 0xc0, 0x86, 0xc0, 0x82, 0xc0} },
    -{ 0x05a0, 16, {0x83, 0xc0, 0x84, 0xc0, 0x85, 0xc0, 0xe0, 0x30, 0x99, 0x07, 0xc2, 0x99, 0xc2, 0x00, 0x12, 0x05} },
    -{ 0x05b0, 16, {0x70, 0x30, 0x98, 0x05, 0x12, 0x05, 0xc6, 0xc2, 0x98, 0xd0, 0xe0, 0xd0, 0x85, 0xd0, 0x84, 0xd0} },
    -{ 0x05c0, 16, {0x83, 0xd0, 0x82, 0xd0, 0x86, 0x32, 0x75, 0x83, 0x11, 0x85, 0x30, 0x82, 0x05, 0x82, 0xe5, 0x99} },
    -{ 0x05d0, 16, {0xf0, 0xe5, 0x82, 0xb5, 0x31, 0x01, 0x22, 0x05, 0x30, 0xb1, 0xdc, 0x22, 0x74, 0x10, 0x90, 0x7f} },
    -{ 0x05e0, 16, {0x9c, 0xf0, 0x90, 0x7f, 0xb8, 0xe0, 0x20, 0xe1, 0x3e, 0x20, 0x01, 0x3c, 0xe5, 0x30, 0xb5, 0x31} },
    -{ 0x05f0, 16, {0x01, 0x22, 0xe4, 0xf5, 0x86, 0x75, 0x83, 0x11, 0x05, 0x86, 0x90, 0x7e, 0x00, 0xf0, 0xa3, 0x05} },
    -{ 0x0600, 16, {0x86, 0x79, 0x01, 0xe5, 0x30, 0xb5, 0x31, 0x02, 0x80, 0x10, 0x05, 0x31, 0x85, 0x31, 0x82, 0xe0} },
    -{ 0x0610, 16, {0x05, 0x86, 0xf0, 0xa3, 0x05, 0x86, 0x09, 0xb9, 0x40, 0xe9, 0x74, 0x10, 0x90, 0x7f, 0x9c, 0xf0} },
    -{ 0x0620, 16, {0x90, 0x7f, 0xb9, 0xe9, 0x60, 0x01, 0xf0, 0x22, 0xc2, 0x01, 0xe4, 0xf5, 0x86, 0x90, 0x7e, 0x00} },
    -{ 0x0630, 16, {0x74, 0x01, 0xf0, 0xa3, 0x74, 0x02, 0xf0, 0x90, 0x7f, 0xb9, 0xf0, 0x22, 0xc2, 0x99, 0xf5, 0x99} },
    -{ 0x0640, 16, {0x30, 0x99, 0xfd, 0xc2, 0x99, 0x22, 0xe5, 0x5e, 0xf6, 0x3c, 0xfd, 0x8f, 0xfe, 0xc8, 0xff, 0x64} },
    -{ 0x0650, 16, {0xff, 0xb2, 0xff, 0xd9, 0xff, 0xed, 0xff, 0xf3, 0xff, 0xfa, 0x12, 0x01, 0x00, 0x01, 0xff, 0xff} },
    -{ 0x0660, 16, {0xff, 0x40, 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab, 0x01, 0x02, 0x03, 0x01, 0x09, 0x02, 0x20, 0x00} },
    -{ 0x0670, 16, {0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0x00, 0x07, 0x05} },
    -{ 0x0680, 16, {0x82, 0x03, 0x40, 0x00, 0x01, 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00, 0x06, 0x94, 0x06, 0x98} },
    -{ 0x0690, 16, {0x06, 0xba, 0x06, 0xe8, 0x04, 0x03, 0x00, 0x00, 0x22, 0x03, 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00} },
    -{ 0x06a0, 16, {0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00, 0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00} },
    -{ 0x06b0, 16, {0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x73, 0x00, 0x2e, 0x03, 0x41, 0x00, 0x43, 0x00} },
    -{ 0x06c0, 16, {0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00, 0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00} },
    -{ 0x06d0, 16, {0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00} },
    -{ 0x06e0, 14, {0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x06, 0x03, 0x34, 0x00, 0x37, 0x00} },
    -{ 0xffff, 0, {0x00} }
    -};
    diff --git a/firmware/Makefile b/firmware/Makefile
    index eb3b992..94e4dd1 100644
    --- a/firmware/Makefile
    +++ b/firmware/Makefile
    @@ -30,6 +30,8 @@ fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XB) += keyspan/usa28xb.fw
    fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28X) += keyspan/usa28x.fw
    fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49W) += keyspan/usa49w.fw
    fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49WLC) += keyspan/usa49wlc.fw
    +fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA_FIRMWARE) += keyspan_pda/keyspan_pda.fw
    +fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM_FIRMWARE) += keyspan_pda/xircom_pgs.fw

    firmware-y := $(fw-external-y) $(fw-shipped-y)
    firmware-dirs := $(sort $(patsubst %,$(objtree)/$(obj)/%/,$(dir $(firmware-y))))
    diff --git a/firmware/keyspan_pda/keyspan_pda.fw.ihex b/firmware/keyspan_pda/keyspan_pda.fw.ihex
    new file mode 100644
    index 0000000..b7d964b
    --- /dev/null
    +++ b/firmware/keyspan_pda/keyspan_pda.fw.ihex
    @@ -0,0 +1,121 @@
    +:100000000000000003020200000000230402055F5C
    +:100010000000000000000043040201000000000096
    +:10002000000000300500000000000000000001009A
    +:100030001002029600020000000200000002000010
    +:10004000000000000000011010020000000200008B
    +:10005000000200000002000000000000000001207B
    +:100060001002000000020000000204610002048986
    +:1000700000000000000002001075815EE4F532F51A
    +:1000800033F530F531F534C20000000000000210F5
    +:1000900010C201A90074FE901000F0A3D9FC74FDF9
    +:1000A0009000000000000220101100F0A3D9FC74A1
    +:1000B00002907F9DF07400907F00000000000230ED
    +:1000C0001097F07486907F9EF0907F957403F09067
    +:1000D0007F0000000000024010AFE0D2E0F07401A9
    +:1000E000907FABF0907FAEF09000000000000250D7
    +:1000F000107FAC7404F0907FAD7404F0907FC9F071
    +:1001000074000000000002601084907F98F074007A
    +:10011000F59875C8307B0591200000000000027042
    +:1001200010D2CA759850D2E8D2AFD2AC7400F5861E
    +:100130009000000000000280107FD67402F0792E3B
    +:100140007A007B00DBFEDAFAD900000000000290A2
    +:1001500010F67406F080FEC086C082C083C084C0E2
    +:1001600085000000000002A010C0E0E591C2E4F5A7
    +:1001700091907FAB7401F0907F000000000002B00E
    +:1001800010E8E0F9A3E0FAA3E0FBA3E0FCE9546087
    +:10019000B4000000000002C0100003020339B440A4
    +:1001A0006EBA000B1204204003000000000002D0D1
    +:1001B0001002040202040ABA010302040ABA02038A
    +:1001C00002000000000002E010040ABA0303020467
    +:1001D00044BA041EBB000A907F000000000002F039
    +:1001E0001095E04402F0020402907F98E054FDF084
    +:1001F0009000000000000300107F95E054FDF00225
    +:100200000402BA050302040ABA0000000000031049
    +:10021000100619BB0008E533D395320203DEBB019B
    +:10022000080000000000032010E532C395330203EC
    +:10023000DE02040ABA07058B340000000000033018
    +:100240001002040202040A02040ABA0020B9801053
    +:100250009000000000000340107F00E4F0A3F09045
    +:100260007FB57402F0020402B900000000000350E0
    +:1002700010820280EBB9810280E602040ABA010F03
    +:10028000BB0000000000036010000302040ABB0171
    +:100290000302040202040ABA030000000000037013
    +:1002A000100FBB000302040ABB0103020402020494
    +:1002B0000A0000000000038010BA0656BC010F902F
    +:1002C0007FD47406F0907FD5740000000000039086
    +:1002D0001012F0020402BC0212BB006F907FD474B3
    +:1002E00006000000000003A010F0907FD57424F0F9
    +:1002F000020402BC03297404C3000000000003B020
    +:10030000109B40576055EB2B9006442582F5827474
    +:1003100000000000000003C0103583F583E0F9A35E
    +:10032000E0FA907FD4E9F0907F000000000003D055
    +:1003300010D5EAF002040202040ABA080F74019010
    +:100340007F000000000003E01000F07401907FB512
    +:10035000F0020402BA09030204000000000003F0E6
    +:100360001002BA0A0574000203DEBA0B030204028B
    +:10037000020000000000040010040A907FB4740220
    +:10038000F08009907FB4E0440100000000000410F8
    +:1003900010F08000D0E0D085D084D083D082D08689
    +:1003A000320000000000042010EB20E71EC3940A76
    +:1003B0005019EB2324FEF582740000000000043085
    +:1003C00010053400F583E0F5CBF5CDA3E0F5CAF5D3
    +:1003D000CC0000000000044010C322D322B9411118
    +:1003E000EB64FF5484FB907F9800000000000450F1
    +:1003F00010E0547B4BF0020402907F9BE064FF020C
    +:10040000030000000000046010DEC086C082C083CC
    +:10041000C084C085C0E0E591C20000000000047007
    +:1004200010E4F591907FA97404F01205A0D0E0D0FB
    +:10043000850000000000048010D084D083D082D0DA
    +:100440008632C086C082C083C000000000000490D5
    +:100450001084C085C0E0E591C2E4F591907FAA7454
    +:1004600004000000000004A010F0907FC9E0F9E44F
    +:10047000F586907DC075851085000000000004B0F1
    +:10048000103284E005860584F0E584B533028009E6
    +:1004900005000000000004C010320586A3D9EC80DE
    +:1004A00000907FC9F0B131D0E0000000000004D01E
    +:1004B00010D085D084D083D082D08632E4F5869067
    +:1004C0007F000000000004E010BCE020E14B907DC4
    +:1004D00000E532F0A3E533F0A3000000000004F0D3
    +:1004E00010E530F0A3E531F0A3E430000104F0A3FF
    +:1004F000050000000000050010869010007910E053
    +:10050000A30586F0A30586D9F600000000000510BB
    +:1005100010058674FCF0A305869011007910E0A305
    +:1005200005000000000005201086F0A30586D9F61E
    +:10053000E4F586907FBD7426F000000000000530D1
    +:100540001022200013E532B53301220533758310E4
    +:100550008500000000000540103382E0F599D200CC
    +:100560007400B5340122E533D300000000000550CB
    +:10057000109532C3953440F5753400D2010205A0C0
    +:10058000C0000000000005601086C082C083C084E7
    +:10059000C085C0E0309907C29900000000000570D6
    +:1005A00010C20012053430980512058AC298D0E0B6
    +:1005B000D0000000000005801085D084D083D08258
    +:1005C000D0863275831185308200000000000590CE
    +:1005D000100582E599F0E582B53101220530B1A020
    +:1005E00022000000000005A010907FB8E020E13854
    +:1005F000200136E530B5310122000000000005B0D1
    +:1006000010E4F5867583110586907E00F0A30586BB
    +:1006100079000000000005C01001E530B53102800E
    +:10062000100531853182E00586000000000005D00C
    +:1006300010F0A3058609B940E9907FB9E96001F09F
    +:1006400022000000000005E010C201E4F586907E63
    +:10065000007401F0A37402F090000000000005F0A7
    +:10066000107FB9F022C299F5993099FDC29922E51F
    +:100670005E0000000000060010F63CFD8FFEC8FF83
    +:1006800064FFB2FFD9FFEDFFF30000000000061089
    +:1006900010FFFA12010001FFFFFF40CD060401899F
    +:1006A000AB00000000000620100102030109022037
    +:1006B0000001010080320904000000000000063043
    +:1006C000100002FFFFFF000705820340000107053D
    +:1006D00002000000000006401002400000064C0628
    +:1006E00050067206A004030000000000000006503F
    +:1006F000102203410043004D0045002000750073A7
    +:100700000000000000000660106200200077006911
    +:1007100000640067006500740000000000000670BF
    +:100720001073002E03410043004D0045002000558A
    +:1007300000000000000006801053004200200073FB
    +:100740000065007200690061000000000000069072
    +:10075000106C002000770069006400670065007479
    +:1007600000000000000006A0060603340037000069
    +:05077000000000000084
    +:00000001FF
    diff --git a/firmware/keyspan_pda/xircom_pgs.fw.ihex b/firmware/keyspan_pda/xircom_pgs.fw.ihex
    new file mode 100644
    index 0000000..50c7ce0
    --- /dev/null
    +++ b/firmware/keyspan_pda/xircom_pgs.fw.ihex
    @@ -0,0 +1,127 @@
    +:100000000000000003020200000000230402059B20
    +:1000100000000000000000300500000000000000AB
    +:100020000000004304020100000000000000010085
    +:10003000100202BA000200000002000000020000EC
    +:10004000000000000000011010020000000200008B
    +:10005000000200000002000000000000000001207B
    +:10006000100200000002000000020485000204B932
    +:1000700000000000000002001075815EE4F532F51A
    +:1000800033F530F531F534C20000000000000210F5
    +:1000900010C201A90074FE901000F0A3D9FC74FDF9
    +:1000A0009000000000000220101100F0A3D9FC9085
    +:1000B0007F9474BFF0907F957400000000000230C0
    +:1000C00010EFF07410907F9EF07400907F98F074A1
    +:1000D000400000000000024010907F9DF0740090EE
    +:1000E0007F97F07482907F9EF00000000000025025
    +:1000F00010907F957403F0907FAFE0D2E0F0740130
    +:100100009000000000000260107FABF0907FAEF026
    +:10011000907FAC7404F0907FAD000000000002708E
    +:10012000107404F0907FC9F07407907FAFF07420D2
    +:100130009000000000000280107F9CF07480907F8F
    +:1001400098F07453F59875C83000000000000290D4
    +:10015000107B059144D2CA759850D2E8D2AFD2AC88
    +:1001600074000000000002A01000F586907FD67495
    +:1001700002F0792E7A007B00DB000000000002B064
    +:1001800010FEDAFAD9F67406F080FEC086C082C08E
    +:1001900083000000000002C010C084C085C0E0E5FC
    +:1001A00091C2E4F591907FAB74000000000002D092
    +:1001B0001001F0907FE8E0F9A3E0FAA3E0FBA3E0F0
    +:1001C000FC000000000002E010E95460B4000302EB
    +:1001D000035DB4406EBA000B12000000000002F094
    +:1001E000100444400302042602042EBA0103020450
    +:1001F0002E0000000000030010BA020302042EBA11
    +:100200000303020468BA041EBB00000000000310D0
    +:1002100010000A907F95E04402F0020426907F9837
    +:10022000E0000000000003201054FDF0907F95E0F6
    +:1002300054FDF0020426BA0503000000000003305C
    +:100240001002042EBA0619BB0008E533D39532021A
    +:1002500004000000000003401002BB0108E532C3A7
    +:10026000953302040202042EBA000000000003507D
    +:100270001007058B3402042602042E02042EBA0055
    +:10028000200000000000036010B98010907F00E49F
    +:10029000F0A3F0907FB57402F0000000000003703E
    +:1002A00010020426B9820280EBB9810280E60204C2
    +:1002B0002E0000000000038010BA010FBB000302F3
    +:1002C000042EBB010302042602000000000003907C
    +:1002D00010042EBA030FBB000302042EBB0103025D
    +:1002E00004000000000003A0102602042EBA0656E7
    +:1002F000BC010F907FD47406F0000000000003B032
    +:1003000010907FD5745AF0020426BC0212BB006F15
    +:1003100090000000000003C0107FD47406F0907FAE
    +:10032000D5746CF0020426BC03000000000003D06A
    +:1003300010297404C39B40576055EB2B90068C2505
    +:1003400082000000000003E010F58274003583F5A0
    +:1003500083E0F9A3E0FA907FD4000000000003F0EE
    +:1003600010E9F0907FD5EAF002042602042EBA08C4
    +:100370000F00000000000400107401907F00F07472
    +:1003800001907FB5F0020426BA00000000000410BE
    +:10039000100903020426BA0A057400020402BA0B0B
    +:1003A00003000000000004201002042602042E9026
    +:1003B0007FB47402F08009907F00000000000430D8
    +:1003C00010B4E04401F08000D0E0D085D084D08328
    +:1003D000D0000000000004401082D08632EB20E7FD
    +:1003E0001EC3940A5019EB2324000000000004509F
    +:1003F0001046F58274063400F583E0F5CBF5CDA305
    +:10040000E00000000000046010F5CAF5CCC322D360
    +:1004100022B94111EB64FF54800000000000047019
    +:1004200010FB907F98E0547F4BF0020426907F9B56
    +:10043000E0000000000004801064FF020402C08697
    +:10044000C082C083C084C085C0000000000004904A
    +:1004500010E0E591C2E4F591907FA97404F0742056
    +:1004600090000000000004A0107F9CF01205DC74D6
    +:1004700020907F9CF0D0E0D085000000000004B008
    +:1004800010D084D083D082D08632C086C082C08310
    +:10049000C0000000000004C01084C085C0E07410DB
    +:1004A000907F9CF0E591C2E4F5000000000004D0CC
    +:1004B0001091907FAA7404F0907FC9E0F9E4F5866A
    +:1004C00090000000000004E0107DC07585108532AA
    +:1004D00084E005860584F0E584000000000004F057
    +:1004E00010B53302800905320586A3D9EC8000904F
    +:1004F0007F0000000000050010C9F0B16D7420906D
    +:100500007F9CF0D0E0D085D0840000000000051072
    +:1005100010D083D082D08632E4F586907FBCE02074
    +:10052000E100000000000520104B907D00E532F056
    +:10053000A3E533F0A3E530F0A30000000000053090
    +:1005400010E531F0A3E430000104F0A3058690101B
    +:100550000000000000000540107910E0A30586F0BF
    +:10056000A30586D9F6058674FC000000000005503E
    +:1005700010F0A305869011007910E0A30586F0A382
    +:1005800005000000000005601086D9F6E4F58690AD
    +:100590007FBD7426F02220001300000000000570CB
    +:1005A00010E532B53301220533758310853382E0BF
    +:1005B000F5000000000005801099D2007400B534E9
    +:1005C0000122E533D39532C3950000000000059069
    +:1005D000103440F5753400D2010205DCC086C082BB
    +:1005E000C0000000000005A01083C084C085C0E0EA
    +:1005F000309907C299C2001205000000000005B042
    +:1006000010703098051205C6C298D0E0D085D0840D
    +:10061000D0000000000005C01083D082D086327563
    +:1006200083118530820582E599000000000005D025
    +:1006300010F0E582B53101220530B1DC2274109052
    +:100640007F000000000005E0109CF0907FB8E020E3
    +:10065000E13E20013CE530B531000000000005F02E
    +:10066000100122E4F5867583110586907E00F0A3C3
    +:10067000050000000000060010867901E530B53164
    +:100680000280100531853182E00000000000061074
    +:10069000100586F0A3058609B940E97410907F9C87
    +:1006A000F00000000000062010907FB9E96001F022
    +:1006B00022C201E4F586907E0000000000000630B2
    +:1006C000107401F0A37402F0907FB9F022C299F582
    +:1006D0009900000000000640103099FDC29922E503
    +:1006E0005EF63CFD8FFEC8FF64000000000006506F
    +:1006F00010FFB2FFD9FFEDFFF3FFFA12010001FF77
    +:10070000FF0000000000066010FF40CD06040189D4
    +:10071000AB01020301090220000000000000067086
    +:100720001001010080320904000002FFFFFF0007F2
    +:10073000050000000000068010820340000107054C
    +:100740000202400000069406980000000000069097
    +:100750001006BA06E8040300002203410043004DDE
    +:1007600000000000000006A0104500200075007386
    +:10077000006200200077006900000000000006B061
    +:1007800010640067006500740073002E034100438D
    +:1007900000000000000006C0104D0045002000557C
    +:1007A000005300420020007300000000000006D04B
    +:1007B0001065007200690061006C0020007700691C
    +:1007C00000000000000006E00E6400670065007491
    +:0D07D00000060334003700000000000000A8
    +:00000001FF
    --
    1.5.4.5

    --
    dwmw2



    \
     
     \ /
      Last update: 2008-05-30 14:23    [W:0.060 / U:1.768 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site