[patch 2/5] Hotplug firmware loader for Keyspan usb-serial driver
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
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