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
This commit is contained in:
parent
fe21adb137
commit
0d6cc1cf87
|
@ -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
|
||||
|
|
|
@ -0,0 +1,171 @@
|
|||
From 6b99baa860efde1daacc8be88abdf008b697c0ca Mon Sep 17 00:00:00 2001
|
||||
From: David Woodhouse <dwmw2@infradead.org>
|
||||
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 <dwmw2@infradead.org>
|
||||
|
||||
[ 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 <linux/major.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/device.h>
|
||||
+#include <linux/firmware.h>
|
||||
+#include <linux/platform_device.h>
|
||||
|
||||
#include <linux/tty.h>
|
||||
#include <linux/tty_flip.h>
|
||||
@@ -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;
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue