From 0d6cc1cf8775841a4d980a9ab80231605da6bf78 Mon Sep 17 00:00:00 2001 From: Maximilian Attems Date: Fri, 13 Jun 2008 10:05:38 +0000 Subject: [PATCH] add request_firmware patch for ip2 COMPUTONE driver still needs to be enabled, but be happy for now.. svn path=/dists/trunk/linux-2.6/; revision=11629 --- debian/changelog | 1 + .../drivers-char-ip2-request_firmware.patch | 171 ++++++++++++++++++ debian/patches/series/1~experimental.1 | 1 + 3 files changed, 173 insertions(+) create mode 100644 debian/patches/features/all/drivers-char-ip2-request_firmware.patch diff --git a/debian/changelog b/debian/changelog index 85be6d67c..252570658 100644 --- a/debian/changelog +++ b/debian/changelog @@ -38,6 +38,7 @@ linux-2.6 (2.6.26~rc6-1~experimental.1) UNRELEASED; urgency=low * topconfig: Enable PROFILING across all flavours. (closes: #484885) * 486: enable OLPC support thanks Andres Salomon for merge. Kconfig variable patch by Robert Millan (closes: #485063). + * Add request_firmware patch for ip2. [ Martin Michlmayr ] * [arm/orion5x] Update the config to reflect upstream renaming this diff --git a/debian/patches/features/all/drivers-char-ip2-request_firmware.patch b/debian/patches/features/all/drivers-char-ip2-request_firmware.patch new file mode 100644 index 000000000..bd84e03a4 --- /dev/null +++ b/debian/patches/features/all/drivers-char-ip2-request_firmware.patch @@ -0,0 +1,171 @@ +From 6b99baa860efde1daacc8be88abdf008b697c0ca Mon Sep 17 00:00:00 2001 +From: David Woodhouse +Date: Wed, 11 Jun 2008 16:57:21 +0100 +Subject: [PATCH] ip2: use request_firmware() + +Converted with help from Jaswinder Singh + +Signed-off-by: David Woodhouse + +[ ported to debian dfsg without moving firmware anywhere -maks ] + +--- + + drivers/char/Kconfig | 1 + drivers/char/ip2/ip2base.c | 5 +-- + drivers/char/ip2/ip2main.c | 45 ++++++++++++++++++++++++++--------- + 3 files changed, 36 insertions(+), 15 deletions(-) + +diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig +index 7d3f39e..2d854bb 100644 +--- a/drivers/char/Kconfig ++++ b/drivers/char/Kconfig +@@ -108,7 +108,6 @@ config SERIAL_NONSTANDARD + + config COMPUTONE + tristate "Computone IntelliPort Plus serial support" +- depends on BROKEN + depends on SERIAL_NONSTANDARD && (ISA || EISA || PCI) + ---help--- + This driver supports the entire family of Intelliport II/Plus +diff --git a/drivers/char/ip2/ip2base.c b/drivers/char/ip2/ip2base.c +index 435ccfc..8155e24 100644 +--- a/drivers/char/ip2/ip2base.c ++++ b/drivers/char/ip2/ip2base.c +@@ -21,10 +21,9 @@ + #endif + + #include "ip2types.h" +-#include "fip_firm.h" // the meat + + int +-ip2_loadmain(int *, int *, unsigned char *, int ); // ref into ip2main.c ++ip2_loadmain(int *, int *); // ref into ip2main.c + + /* Note: Add compiled in defaults to these arrays, not to the structure + in ip2.h any longer. That structure WILL get overridden +@@ -52,7 +51,7 @@ static int __init ip2_init(void) + irq[0] = irq[1] = irq[2] = irq[3] = 0; + } + +- return ip2_loadmain(io,irq,(unsigned char *)fip_firm,sizeof(fip_firm)); ++ return ip2_loadmain(io, irq); + } + module_init(ip2_init); + +diff --git a/drivers/char/ip2/ip2main.c b/drivers/char/ip2/ip2main.c +index c12cf8f..4c05856 100644 +--- a/drivers/char/ip2/ip2main.c ++++ b/drivers/char/ip2/ip2main.c +@@ -98,6 +98,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -155,9 +157,7 @@ static char *pcDriver_name = "ip2"; + static char *pcIpl = "ip2ipl"; + + // cheezy kludge or genius - you decide? +-int ip2_loadmain(int *, int *, unsigned char *, int); +-static unsigned char *Fip_firmware; +-static int Fip_firmware_size; ++int ip2_loadmain(int *, int *); + + /***********************/ + /* Function Prototypes */ +@@ -208,7 +208,7 @@ static int ip2_ipl_open(struct inode *, struct file *); + static int DumpTraceBuffer(char __user *, int); + static int DumpFifoBuffer( char __user *, int); + +-static void ip2_init_board(int); ++static void ip2_init_board(int, const struct firmware *); + static unsigned short find_eisa_board(int); + + /***************/ +@@ -474,8 +474,25 @@ static const struct tty_operations ip2_ops = { + /* SA_RANDOM - can be source for cert. random number generators */ + #define IP2_SA_FLAGS 0 + ++ ++static const struct firmware *ip2_request_firmware(void) ++{ ++ struct platform_device *pdev; ++ const struct firmware *fw; ++ ++ pdev = platform_device_register_simple("ip2", 0, NULL, 0); ++ if (!IS_ERR(pdev)) ++ return NULL; ++ if (request_firmware(&fw, "intelliport2.bin", &pdev->dev)) { ++ printk(KERN_ERR "Failed to load firmware 'intelliport2.bin'\n"); ++ fw = NULL; ++ } ++ platform_device_unregister(pdev); ++ return fw; ++} ++ + int +-ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) ++ip2_loadmain(int *iop, int *irqp) + { + int i, j, box; + int err = 0; +@@ -483,6 +500,7 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) + i2eBordStrPtr pB = NULL; + int rc = -1; + static struct pci_dev *pci_dev_i = NULL; ++ const struct firmware *fw = NULL; + + ip2trace (ITRC_NO_PORT, ITRC_INIT, ITRC_ENTER, 0 ); + +@@ -516,9 +534,6 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) + } + poll_only = !poll_only; + +- Fip_firmware = firmware; +- Fip_firmware_size = firmsize; +- + /* Announce our presence */ + printk( KERN_INFO "%s version %s\n", pcName, pcVersion ); + +@@ -638,10 +653,18 @@ ip2_loadmain(int *iop, int *irqp, unsigned char *firmware, int firmsize) + } + } + for ( i = 0; i < IP2_MAX_BOARDS; ++i ) { ++ /* We don't want to request the firmware unless we have at ++ least one board */ + if ( i2BoardPtrTable[i] != NULL ) { +- ip2_init_board( i ); ++ if (!fw) ++ fw = ip2_request_firmware(); ++ if (!fw) ++ break; ++ ip2_init_board(i, fw); + } + } ++ if (fw) ++ release_firmware(fw); + + ip2trace (ITRC_NO_PORT, ITRC_INIT, 2, 0 ); + +@@ -769,7 +792,7 @@ out: + /* are reported on the console. */ + /******************************************************************************/ + static void +-ip2_init_board( int boardnum ) ++ip2_init_board(int boardnum, const struct firmware *fw) + { + int i; + int nports = 0, nboxes = 0; +@@ -789,7 +812,7 @@ ip2_init_board( int boardnum ) + goto err_initialize; + } + +- if ( iiDownloadAll ( pB, (loadHdrStrPtr)Fip_firmware, 1, Fip_firmware_size ) ++ if ( iiDownloadAll ( pB, (loadHdrStrPtr)fw->data, 1, fw->size ) + != II_DOWN_GOOD ) { + printk ( KERN_ERR "IP2: failed to download loadware\n" ); + goto err_release_region; diff --git a/debian/patches/series/1~experimental.1 b/debian/patches/series/1~experimental.1 index 24f77a80f..19be4dcea 100644 --- a/debian/patches/series/1~experimental.1 +++ b/debian/patches/series/1~experimental.1 @@ -10,6 +10,7 @@ + debian/dfsg/drivers-net-tg3-fix-simple.patch #+ debian/dfsg/drivers-net-bnx2-request_firmware-1.patch + features/all/drivers-usb-serial-keyspan-request_firmware.patch ++ features/all/drivers-char-ip2-request_firmware.patch + features/all/export-gfs2-locking-symbols.patch + features/all/export-unionfs-symbols.patch