[patch 2/5] Hotplug firmware loader for Keyspan usb-serial driver

2005-04-05 Thread Jan Harkes

Convert the keyspan USB serial driver to use request_firmware and
firmware_load_ihex.

Signed-off-by: Jan Harkes <[EMAIL PROTECTED]>


 Kconfig   |   90 --
 keyspan.c |  132 +++---
 keyspan.h |   84 ---
 3 files changed, 59 insertions(+), 247 deletions(-)

Index: linux/drivers/usb/serial/keyspan.c
===
--- linux.orig/drivers/usb/serial/keyspan.c 2005-04-05 15:08:37.0 
-0400
+++ linux/drivers/usb/serial/keyspan.c  2005-04-05 15:23:47.0 -0400
@@ -28,6 +28,9 @@
 
   Change History
 
+2005mar10  Jan Harkes
+  Use generic request_firmware/load_ihex functions.
+
 2003sep04  LPM (Keyspan) add support for new single port product USA19HS.
Improve setup message handling for all devices.
 
@@ -106,6 +109,8 @@
 #include 
 #include 
 #include 
+#include 
+#include 
 #include 
 #include 
 #include "usb-serial.h"
@@ -1165,13 +1170,28 @@ static void keyspan_close(struct usb_ser
port->tty = NULL;
 }
 
+static int keyspan_fw_load(struct ihex_record *record, void *arg)
+{
+   struct usb_serial *serial = (struct usb_serial *)arg;
+   int ret;
+
+   ret = ezusb_writememory(serial, record->address, record->data,
+   record->len, 0xa0);
+   if (ret < 0) {
+   dev_err(>dev->dev,
+   "ezusb_writememory failed for Keyspan"
+   "firmware (%d %08X %p %d)\n",
+   ret, record->address, record->data, record->len);
+   }
+   return ret;
+}
 
/* download the firmware to a pre-renumeration device */
 static int keyspan_fake_startup (struct usb_serial *serial)
 {
int response;
-   const struct ezusb_hex_record   *record;
-   char*fw_name;
+   char*model, fw_name[20];
+   const struct firmware   *fw;
 
dbg("Keyspan startup version %04x product %04x",
le16_to_cpu(serial->dev->descriptor.bcdDevice),
@@ -1182,97 +1202,43 @@ static int keyspan_fake_startup (struct 
return(1);
}
 
-   /* Select firmware image on the basis of idProduct */
switch (le16_to_cpu(serial->dev->descriptor.idProduct)) {
-   case keyspan_usa28_pre_product_id:
-   record = _usa28_firmware[0];
-   fw_name = "USA28";
-   break;
-
-   case keyspan_usa28x_pre_product_id:
-   record = _usa28x_firmware[0];
-   fw_name = "USA28X";
-   break;
-
-   case keyspan_usa28xa_pre_product_id:
-   record = _usa28xa_firmware[0];
-   fw_name = "USA28XA";
-   break;
-
-   case keyspan_usa28xb_pre_product_id:
-   record = _usa28xb_firmware[0];
-   fw_name = "USA28XB";
-   break;
-
-   case keyspan_usa19_pre_product_id:
-   record = _usa19_firmware[0];
-   fw_name = "USA19";
-   break;
-
-   case keyspan_usa19qi_pre_product_id:
-   record = _usa19qi_firmware[0];
-   fw_name = "USA19QI";
-   break;
-
-   case keyspan_mpr_pre_product_id:
-   record = _mpr_firmware[0];
-   fw_name = "MPR";
-   break;
-
-   case keyspan_usa19qw_pre_product_id:
-   record = _usa19qw_firmware[0];
-   fw_name = "USA19QI";
-   break;
-
-   case keyspan_usa18x_pre_product_id:
-   record = _usa18x_firmware[0];
-   fw_name = "USA18X";
-   break;
-
-   case keyspan_usa19w_pre_product_id:
-   record = _usa19w_firmware[0];
-   fw_name = "USA19W";
-   break;
-   
-   case keyspan_usa49w_pre_product_id:
-   record = _usa49w_firmware[0];
-   fw_name = "USA49W";
-   break;
-
-   case keyspan_usa49wlc_pre_product_id:
-   record = _usa49wlc_firmware[0];
-   fw_name = "USA49WLC";
-   break;
-
+   case keyspan_usa18x_pre_product_id:   model = "usa18x";   break;
+   case keyspan_usa19_pre_product_id:model = "usa19";break;
+   case keyspan_usa19qi_pre_product_id:  model = "usa19qi";  break;
+   case keyspan_mpr_pre_product_id:  model = "mpr";  break;
+   case keyspan_usa19qw_pre_product_id:  model = "usa19qw";  break;
+   case keyspan_usa19w_pre_product_id:   model = "usa19w";   break;
+   case keyspan_usa28_pre_product_id:model = "usa28";break;
+   case keyspan_usa28x_pre_product_id:   model = "usa28x";   break;
+ 

[patch 2/5] Hotplug firmware loader for Keyspan usb-serial driver

2005-04-05 Thread Jan Harkes

Convert the keyspan USB serial driver to use request_firmware and
firmware_load_ihex.

Signed-off-by: Jan Harkes [EMAIL PROTECTED]


 Kconfig   |   90 --
 keyspan.c |  132 +++---
 keyspan.h |   84 ---
 3 files changed, 59 insertions(+), 247 deletions(-)

Index: linux/drivers/usb/serial/keyspan.c
===
--- linux.orig/drivers/usb/serial/keyspan.c 2005-04-05 15:08:37.0 
-0400
+++ linux/drivers/usb/serial/keyspan.c  2005-04-05 15:23:47.0 -0400
@@ -28,6 +28,9 @@
 
   Change History
 
+2005mar10  Jan Harkes
+  Use generic request_firmware/load_ihex functions.
+
 2003sep04  LPM (Keyspan) add support for new single port product USA19HS.
Improve setup message handling for all devices.
 
@@ -106,6 +109,8 @@
 #include linux/tty_flip.h
 #include linux/module.h
 #include linux/spinlock.h
+#include linux/firmware.h
+#include linux/ihex_parser.h
 #include asm/uaccess.h
 #include linux/usb.h
 #include usb-serial.h
@@ -1165,13 +1170,28 @@ static void keyspan_close(struct usb_ser
port-tty = NULL;
 }
 
+static int keyspan_fw_load(struct ihex_record *record, void *arg)
+{
+   struct usb_serial *serial = (struct usb_serial *)arg;
+   int ret;
+
+   ret = ezusb_writememory(serial, record-address, record-data,
+   record-len, 0xa0);
+   if (ret  0) {
+   dev_err(serial-dev-dev,
+   ezusb_writememory failed for Keyspan
+   firmware (%d %08X %p %d)\n,
+   ret, record-address, record-data, record-len);
+   }
+   return ret;
+}
 
/* download the firmware to a pre-renumeration device */
 static int keyspan_fake_startup (struct usb_serial *serial)
 {
int response;
-   const struct ezusb_hex_record   *record;
-   char*fw_name;
+   char*model, fw_name[20];
+   const struct firmware   *fw;
 
dbg(Keyspan startup version %04x product %04x,
le16_to_cpu(serial-dev-descriptor.bcdDevice),
@@ -1182,97 +1202,43 @@ static int keyspan_fake_startup (struct 
return(1);
}
 
-   /* Select firmware image on the basis of idProduct */
switch (le16_to_cpu(serial-dev-descriptor.idProduct)) {
-   case keyspan_usa28_pre_product_id:
-   record = keyspan_usa28_firmware[0];
-   fw_name = USA28;
-   break;
-
-   case keyspan_usa28x_pre_product_id:
-   record = keyspan_usa28x_firmware[0];
-   fw_name = USA28X;
-   break;
-
-   case keyspan_usa28xa_pre_product_id:
-   record = keyspan_usa28xa_firmware[0];
-   fw_name = USA28XA;
-   break;
-
-   case keyspan_usa28xb_pre_product_id:
-   record = keyspan_usa28xb_firmware[0];
-   fw_name = USA28XB;
-   break;
-
-   case keyspan_usa19_pre_product_id:
-   record = keyspan_usa19_firmware[0];
-   fw_name = USA19;
-   break;
-
-   case keyspan_usa19qi_pre_product_id:
-   record = keyspan_usa19qi_firmware[0];
-   fw_name = USA19QI;
-   break;
-
-   case keyspan_mpr_pre_product_id:
-   record = keyspan_mpr_firmware[0];
-   fw_name = MPR;
-   break;
-
-   case keyspan_usa19qw_pre_product_id:
-   record = keyspan_usa19qw_firmware[0];
-   fw_name = USA19QI;
-   break;
-
-   case keyspan_usa18x_pre_product_id:
-   record = keyspan_usa18x_firmware[0];
-   fw_name = USA18X;
-   break;
-
-   case keyspan_usa19w_pre_product_id:
-   record = keyspan_usa19w_firmware[0];
-   fw_name = USA19W;
-   break;
-   
-   case keyspan_usa49w_pre_product_id:
-   record = keyspan_usa49w_firmware[0];
-   fw_name = USA49W;
-   break;
-
-   case keyspan_usa49wlc_pre_product_id:
-   record = keyspan_usa49wlc_firmware[0];
-   fw_name = USA49WLC;
-   break;
-
+   case keyspan_usa18x_pre_product_id:   model = usa18x;   break;
+   case keyspan_usa19_pre_product_id:model = usa19;break;
+   case keyspan_usa19qi_pre_product_id:  model = usa19qi;  break;
+   case keyspan_mpr_pre_product_id:  model = mpr;  break;
+   case keyspan_usa19qw_pre_product_id:  model = usa19qw;  break;
+   case keyspan_usa19w_pre_product_id:   model = usa19w;   break;
+   case