aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorproski <proski>2006-07-30 20:51:45 +0000
committerproski <proski>2006-07-30 20:51:45 +0000
commit5d0f6684d520c439268132c1a873c43df9acc06f (patch)
tree3687753e1dc11a7193a333fc519c0c7fee94ce72
parent0ec334d887a610e44e5007ad3e0d32c9ea56f8df (diff)
Integrate at76fw.c into at76c503.c
-rw-r--r--Makefile4
-rw-r--r--Makefile.k267
-rw-r--r--at76c503.c434
-rw-r--r--at76c503.h9
-rw-r--r--at76fw.c466
5 files changed, 413 insertions, 507 deletions
diff --git a/Makefile b/Makefile
index bba2eb3..12c98a9 100644
--- a/Makefile
+++ b/Makefile
@@ -31,9 +31,9 @@ KERNELRELEASE = $(shell sed -ne 's/"//g;s/^\#define UTS_RELEASE //p' \
$(VERSION_HEADER))
-obj-m = at76c503.o at76_usbdfu.o at76fw.o
+obj-m = at76c503.o at76_usbdfu.o
-SRCS = at76c503.c at76_usbdfu.c at76fw.c
+SRCS = at76c503.c at76_usbdfu.c
HDRS = at76c503.h at76_usbdfu.h
diff --git a/Makefile.k26 b/Makefile.k26
index 7cd84bb..1d535a7 100644
--- a/Makefile.k26
+++ b/Makefile.k26
@@ -1,7 +1,2 @@
-obj-$(CONFIG_USB_ATMEL) += at76c503.o at76_usbdfu.o at76fw.o
-
-# copy the fw-*.h files into this dir and uncomment to compile the firmware statically
-# into the driver (against kernel policy of not including binary-only code)
-#EXTRA_CFLAGS = -DCOMPILE_FIRMWARE_INTO_DRIVER
-
+obj-$(CONFIG_USB_ATMEL) += at76c503.o at76_usbdfu.o
diff --git a/at76c503.c b/at76c503.c
index 0ff18ba..6702428 100644
--- a/at76c503.c
+++ b/at76c503.c
@@ -101,9 +101,12 @@
#include <linux/wireless.h>
#include <net/iw_handler.h>
#include <linux/rtnetlink.h> /* for rtnl_lock() */
+#include <linux/firmware.h>
#ifdef CONFIG_IPAQ_HANDHELD
#include <asm/mach-types.h>
+#include <asm/arch/ipaq.h>
+#include <asm/arch-pxa/h5400-asic.h>
#include <asm/arch-sa1100/h3600.h>
#endif
@@ -208,6 +211,7 @@ static inline struct urb *alloc_urb(int iso_pk, gfp_t mem_flags) {
#define DBG_MIB 0x02000000 /* dump all MIBs in startup_device */
#define DBG_MGMT_TIMER 0x04000000 /* dump mgmt_timer ops */
#define DBG_WE_EVENTS 0x08000000 /* dump wireless events */
+#define DBG_FW 0x10000000 /* firmware download */
#define DBG_DEFAULTS 0
static int debug = DBG_DEFAULTS;
@@ -264,12 +268,14 @@ unsigned long spin_l_istate_flags;
/* the interval in ticks we poll if scan is completed */
#define SCAN_POLL_INTERVAL (HZ/4)
-/* Version Information */
-#define DRIVER_DESC "Generic Atmel at76c503/at76c505 routines"
+/* Version Information */
+#define DRIVER_NAME "at76c503"
#define DRIVER_AUTHOR \
-"Oliver Kurth, Joerg Albert <joerg.albert@gmx.de>, Alex, Nick Jones, "\
-"Balint Seeber <n0_5p4m_p13453@hotmail.com>"
+"Oliver Kurth <oku@masqmail.cx>, Joerg Albert <joerg.albert@gmx.de>, " \
+"Alex <alex@foogod.com>, Nick Jones, Balint Seeber <n0_5p4m_p13453@hotmail.com>"
+#define DRIVER_DESC "Atmel at76c50x USB Wireless LAN Driver"
+
/* Module paramaters */
module_param(debug, int, 0400);
@@ -325,6 +331,11 @@ static int monitor_scan_max_time = 600;
module_param(monitor_scan_max_time, int, 0400);
MODULE_PARM_DESC(monitor_scan_max_time, "scan max channel time in MONITOR MODE (default: 600)");
+static char* netdev_name = "wlan%d";
+module_param(netdev_name, charp, 0400);
+MODULE_PARM_DESC(netdev_name, "network device name (default is wlan%d)");
+
+
#define DEF_RTS_THRESHOLD 1536
#define DEF_FRAG_THRESHOLD 1536
#define DEF_SHORT_RETRY_LIMIT 8
@@ -6348,7 +6359,7 @@ static struct ethtool_ops at76c503_ethtool_ops = {
};
-void at76c503_delete_device(struct at76c503 *dev)
+static void at76c503_delete_device(struct at76c503 *dev)
{
int i;
@@ -6761,10 +6772,9 @@ static int at76c503_get_fw_info(u8 *fw_data, int fw_size,
}
/* == PROC at76c503_do_probe == */
-int at76c503_do_probe(struct module *mod, struct usb_device *udev,
- struct usb_driver *calling_driver,
- u8 *fw_data, int fw_size, u32 board_type,
- const char *netdev_name, void **devptr)
+static int at76c503_do_probe(struct module *mod, struct usb_device *udev,
+ u8 *fw_data, int fw_size, u32 board_type,
+ const char *netdev_name, void **devptr)
{
struct usb_interface *intf = udev->actconfig->interface[0];
int ret;
@@ -6903,28 +6913,404 @@ error:
}
-/**
- * at76c503_init
- */
-static int __init at76c503_init(void)
+/* Firmware names - this must be in sync with boardtype definitions */
+static struct fwentry {
+ const char *const fwname;
+ const struct firmware *fw;
+} firmwares[] = {
+ { "" },
+ { "atmel_at76c503-i3861.bin" },
+ { "atmel_at76c503-i3863.bin" },
+ { "atmel_at76c503-rfmd.bin" },
+ { "atmel_at76c503-rfmd-acc.bin" },
+ { "atmel_at76c505-rfmd.bin" },
+ { "atmel_at76c505-rfmd2958.bin" },
+ { "atmel_at76c505a-rfmd2958.bin" },
+ { "atmel_at76c505amx-rfmd.bin" }
+};
+
+/* USB Device IDs supported by this driver */
+
+/* at76c503-i3861 */
+#define VENDOR_ID_ATMEL 0x03eb
+#define PRODUCT_ID_ATMEL_503I 0x7603 /* Generic AT76C503/3861 device */
+
+#define VENDOR_ID_LINKSYS_OLD 0x066b
+#define PRODUCT_ID_LINKSYS_WUSB11_V21 0x2211 /* Linksys WUSB11 v2.1/v2.6 */
+
+#define VENDOR_ID_NETGEAR 0x0864
+#define PRODUCT_ID_NETGEAR_MA101A 0x4100 /* Netgear MA 101 Rev. A */
+
+#define VENDOR_ID_TEKRAM 0x0b3b
+#define PRODUCT_ID_TEKRAM_U300C 0x1612 /* Tekram U-300C / Allnet ALL0193 */
+
+#define VENDOR_ID_HP 0x03f0
+#define PRODUCT_ID_HP_HN210W 0x011c /* HP HN210W PKW-J7801A */
+
+#define VENDOR_ID_M4Y750 0x0cde /* Unknown Vendor ID! */
+#define PRODUCT_ID_M4Y750 0x0001 /* Sitecom/Z-Com/Zyxel M4Y-750 */
+
+#define VENDOR_ID_DYNALINK 0x069a
+#define PRODUCT_ID_DYNALINK_WLL013_I 0x0320 /* Dynalink/Askey WLL013 (intersil) */
+
+#define VENDOR_ID_SMC_OLD 0x0d5c
+#define PRODUCT_ID_SMC2662W_V1 0xa001 /* EZ connect 11Mpbs
+Wireless USB Adapter SMC2662W (v1) */
+
+#define VENDOR_ID_BENQ 0x04a5 /* BenQ (Acer) */
+#define PRODUCT_ID_BENQ_AWL_300 0x9000 /* AWL-300 */
+
+/* this adapter contains flash */
+#define VENDOR_ID_ADDTRON 0x05dd /* Addtron */
+#define PRODUCT_ID_ADDTRON_AWU120 0xff31 /* AWU-120 */
+/* also Compex WLU11 */
+
+#define VENDOR_ID_INTEL 0x8086 /* Intel */
+#define PRODUCT_ID_INTEL_AP310 0x0200 /* AP310 AnyPoint II USB */
+
+#define VENDOR_ID_CONCEPTRONIC 0x0d8e
+#define PRODUCT_ID_CONCEPTRONIC_C11U 0x7100 /* also Dynalink L11U */
+
+#define VENDOR_ID_ARESCOM 0xd8e
+#define PRODUCT_ID_WL_210 0x7110 /* Arescom WL-210,
+ FCC id 07J-GL2411USB */
+#define VENDOR_ID_IO_DATA 0x04bb
+#define PRODUCT_ID_IO_DATA_WN_B11_USB 0x0919 /* IO-DATA WN-B11/USB */
+
+#define VENDOR_ID_BT 0x069a
+#define PRODUCT_ID_BT_VOYAGER_1010 0x0821 /* BT Voyager 1010 */
+
+
+/* at76c503-i3863 */
+#define VENDOR_ID_ATMEL 0x03eb
+#define PRODUCT_ID_ATMEL_503_I3863 0x7604 /* Generic AT76C503/3863 device */
+
+#define VENDOR_ID_SAMSUNG 0x055d
+#define PRODUCT_ID_SAMSUNG_SWL2100U 0xa000 /* Samsung SWL-2100U */
+
+
+/* at76c503-rfmd */
+#define VENDOR_ID_ATMEL 0x03eb
+#define PRODUCT_ID_ATMEL_503R 0x7605 /* Generic AT76C503/RFMD device */
+#define PRODUCT_ID_W_BUDDIE_WN210 0x4102 /* AirVast W-Buddie WN210 */
+
+#define VENDOR_ID_DYNALINK 0x069a
+#define PRODUCT_ID_DYNALINK_WLL013_R 0x0321 /* Dynalink/Askey WLL013 (rfmd) */
+
+#define VENDOR_ID_LINKSYS 0x077b
+#define PRODUCT_ID_LINKSYS_WUSB11_V26 0x2219 /* Linksys WUSB11 v2.6 */
+#define PRODUCT_ID_NE_NWU11B 0x2227 /* Network Everywhere NWU11B */
+
+#define VENDOR_ID_NETGEAR 0x0864
+#define PRODUCT_ID_NETGEAR_MA101B 0x4102 /* Netgear MA 101 Rev. B */
+
+#define VENDOR_ID_ACTIONTEC 0x1668
+#define PRODUCT_ID_ACTIONTEC_802UAT1 0x7605 /* Actiontec 802UAT1, HWU01150-01UK */
+
+#define VENDOR_ID_DLINK 0x2001 /* D-Link */
+#define PRODUCT_ID_DLINK_DWL120 0x3200 /* DWL-120 rev. E */
+
+#define VENDOR_ID_DICK_SMITH_ELECTR 0x1371 /* Dick Smith Electronics */
+#define PRODUCT_ID_DSE_XH1153 0x5743 /* XH1153 802.11b USB adapter */
+ /* also: CNet CNUSB611 (D) */
+#define PRODUCT_ID_WL_200U 0x0002 /* WL-200U */
+
+#define VENDOR_ID_BENQ 0x04a5 /* BenQ (Acer) */
+#define PRODUCT_ID_BENQ_AWL_400 0x9001 /* BenQ AWL-400 USB stick */
+
+#define VENDOR_ID_3COM 0x506
+#define PRODUCT_ID_3COM_3CRSHEW696 0xa01 /* 3COM 3CRSHEW696 */
+
+#define VENDOR_ID_SIEMENS 0x681
+#define PRODUCT_ID_SIEMENS_SANTIS_WLL013 0x1b /* Siemens Santis ADSL WLAN
+ USB adapter WLL 013 */
+
+#define VENDOR_ID_BELKIN_2 0x50d
+#define PRODUCT_ID_BELKIN_F5D6050_V2 0x50 /* Belkin F5D6050, version 2 */
+
+#define VENDOR_ID_BLITZ 0x07b8
+#define PRODUCT_ID_BLITZ_NETWAVE_BWU613 0xb000 /* iBlitzz, BWU613 (not *B or *SB !) */
+
+#define VENDOR_ID_GIGABYTE 0x1044
+#define PRODUCT_ID_GIGABYTE_GN_WLBM101 0x8003 /* Gigabyte GN-WLBM101 */
+
+#define VENDOR_ID_PLANEX 0x2019
+#define PRODUCT_ID_PLANEX_GW_US11S 0x3220 /* Planex GW-US11S */
+
+#define VENDOR_ID_COMPAQ 0x049f
+#define PRODUCT_ID_IPAQ_INT_WLAN 0x0032 /* internal WLAN adapter in h5[4,5]xx series iPAQs */
+
+
+/* at76c503-rfmd-acc */
+#define VENDOR_ID_BELKIN 0x0d5c
+#define PRODUCT_ID_BELKIN_F5D6050 0xa002 /* Belkin F5D6050 / SMC 2662W v2 / SMC 2662W-AR */
+
+#define VENDOR_ID_SMC 0x083a
+#define PRODUCT_ID_SMC_2664W 0x3501
+
+
+/* at76c505-rfmd */
+#define VENDOR_ID_ATMEL 0x03eb
+#define PRODUCT_ID_ATMEL_505R 0x7606 /* Generic AT76C505/RFMD device */
+
+
+/* at76c505-rfmd2958 */
+#define VENDOR_ID_ATMEL 0x03eb
+#define PRODUCT_ID_ATMEL_505R2958 0x7613 /* Generic AT76C505/RFMD device
+ also OvisLink WL-1130USB */
+
+#define VENDOR_ID_CNET 0x1371
+#define PRODUCT_ID_CNET_CNUSB611G 0x0013 /* CNet CNUSB 611G */
+#define PRODUCT_ID_FL_WL240U 0x0014 /* Fiberline WL-240U with the
+ CNet vendor id */
+
+#define VENDOR_ID_LINKSYS_1915 0x1915
+#define PRODUCT_ID_LINKSYS_WUSB11V28 0x2233 /* Linksys WUSB11 v2.8 */
+
+#define VENDOR_ID_XTERASYS 0x12fd
+#define PRODUCT_ID_XTERASYS_XN_2122B 0x1001 /* Xterasys XN-2122B, also
+ IBlitzz BWU613B / BWU613SB */
+
+#define VENDOR_ID_COREGA 0x07aa
+#define PRODUCT_ID_COREGA_USB_STICK_11_KK 0x7613 /* Corega WLAN USB Stick 11 (K.K.) */
+
+#define VENDOR_ID_MSI 0x0db0
+#define PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC 0x1020
+
+
+/* at76c505a-rfmd2958 */
+#define VENDOR_ID_ATMEL 0x03eb
+#define PRODUCT_ID_ATMEL_505A 0x7614 /* Generic AT76C505A device */
+#define PRODUCT_ID_ATMEL_505AS 0x7617 /* Generic AT76C505AS device */
+
+#define VENDOR_ID_GIGASET 0x1690
+#define PRODUCT_ID_GIGASET_11 0x0701
+
+
+/* at76c505amx-rfmd */
+#define VENDOR_ID_ATMEL 0x03eb
+#define PRODUCT_ID_ATMEL_505AMX 0x7615 /* Generic AT76C505AMX device */
+
+
+static struct usb_device_id dev_table[] = {
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503I ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_LINKSYS_OLD, PRODUCT_ID_LINKSYS_WUSB11_V21),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101A ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_TEKRAM, PRODUCT_ID_TEKRAM_U300C ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_HP, PRODUCT_ID_HP_HN210W ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_M4Y750, PRODUCT_ID_M4Y750 ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_I ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_SMC_OLD, PRODUCT_ID_SMC2662W_V1 ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_300 ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_ADDTRON, PRODUCT_ID_ADDTRON_AWU120 ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_INTEL, PRODUCT_ID_INTEL_AP310 ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_CONCEPTRONIC,PRODUCT_ID_CONCEPTRONIC_C11U),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_ARESCOM, PRODUCT_ID_WL_210),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_IO_DATA, PRODUCT_ID_IO_DATA_WN_B11_USB),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_BT, PRODUCT_ID_BT_VOYAGER_1010 ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503_I3863 ),
+ .driver_info = BOARDTYPE_503_INTERSIL_3863 },
+ { USB_DEVICE(VENDOR_ID_SAMSUNG, PRODUCT_ID_SAMSUNG_SWL2100U),
+ .driver_info = BOARDTYPE_503_INTERSIL_3863 },
+
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503R ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_R ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_LINKSYS_WUSB11_V26),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_NE_NWU11B ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101B ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_DLINK_DWL120 ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_ACTIONTEC,PRODUCT_ID_ACTIONTEC_802UAT1 ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_W_BUDDIE_WN210 ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_DSE_XH1153),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_WL_200U),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_400),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_3COM, PRODUCT_ID_3COM_3CRSHEW696),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_SIEMENS, PRODUCT_ID_SIEMENS_SANTIS_WLL013),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_BELKIN_2, PRODUCT_ID_BELKIN_F5D6050_V2 ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_BLITZ, PRODUCT_ID_BLITZ_NETWAVE_BWU613 ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_GIGABYTE, PRODUCT_ID_GIGABYTE_GN_WLBM101 ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_PLANEX, PRODUCT_ID_PLANEX_GW_US11S ),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_COMPAQ, PRODUCT_ID_IPAQ_INT_WLAN),
+ .driver_info = BOARDTYPE_503_RFMD },
+
+ { USB_DEVICE(VENDOR_ID_SMC, PRODUCT_ID_SMC_2664W),
+ .driver_info = BOARDTYPE_503_RFMD_ACC },
+ { USB_DEVICE(VENDOR_ID_BELKIN, PRODUCT_ID_BELKIN_F5D6050 ),
+ .driver_info = BOARDTYPE_503_RFMD_ACC },
+
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R ),
+ .driver_info = BOARDTYPE_505_RFMD },
+
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R2958 ),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_FL_WL240U ),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_CNET_CNUSB611G ),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_LINKSYS_1915, PRODUCT_ID_LINKSYS_WUSB11V28 ),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_XTERASYS, PRODUCT_ID_XTERASYS_XN_2122B ),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_COREGA, PRODUCT_ID_COREGA_USB_STICK_11_KK ),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_MSI, PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505A ),
+ .driver_info = BOARDTYPE_505A_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AS ),
+ .driver_info = BOARDTYPE_505A_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_GIGASET, PRODUCT_ID_GIGASET_11 ),
+ .driver_info = BOARDTYPE_505A_RFMD_2958 },
+
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AMX ),
+ .driver_info = BOARDTYPE_505AMX_RFMD },
+
+ { }
+};
+
+MODULE_DEVICE_TABLE (usb, dev_table);
+
+
+static int at76c50x_probe(struct usb_interface *interface,
+ const struct usb_device_id *id)
{
- info(DRIVER_DESC " " DRIVER_VERSION);
- return 0;
+ void *devptr = NULL;
+ int retval;
+
+ struct usb_device *udev __attribute__ ((unused));
+ int boardtype = (int)id->driver_info;
+ const char *const fw_name = firmwares[boardtype].fwname;
+ const struct firmware *fw = firmwares[boardtype].fw;
+ udev = interface_to_usbdev(interface);
+
+ if (fw == NULL) {
+ dbg(DBG_FW, "downloading firmware %s", fw_name);
+ retval = request_firmware(&fw, fw_name, &udev->dev);
+ if (retval == 0) {
+ dbg(DBG_FW, "got it.");
+ } else {
+ err("firmware %s not found.", fw_name);
+ /* FIXME: Update URL */
+ err("You may need to download the firmware from "
+ "http://www.thekelleys.org.uk/atmel or "
+ "ftp://ftp.berlios.de/pub/at76c503a/firmware/");
+ return retval;
+ }
+ } else
+ dbg(DBG_FW, "re-using previously loaded fw");
+
+ retval = at76c503_do_probe(THIS_MODULE, udev,
+ fw->data, fw->size,
+ boardtype, netdev_name, &devptr);
+
+ return retval;
}
-/**
- * at76c503_exit
- */
-static void __exit at76c503_exit(void)
+static void at76c50x_disconnect(struct usb_interface *interface)
{
- info(DRIVER_DESC " " DRIVER_VERSION " exit");
+ struct at76c503 *ptr;
+
+ ptr = usb_get_intfdata (interface);
+ usb_set_intfdata(interface, NULL);
+
+ info("%s disconnecting", ((struct at76c503 *)ptr)->netdev->name);
+ at76c503_delete_device(ptr);
+ info(DRIVER_NAME " disconnected");
}
-module_init (at76c503_init);
-module_exit (at76c503_exit);
+/* structure for registering this driver with the USB subsystem */
+static struct usb_driver module_usb = {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
+ .owner = THIS_MODULE,
+#endif
+ .name = DRIVER_NAME,
+ .probe = at76c50x_probe,
+ .disconnect = at76c50x_disconnect,
+ .id_table = dev_table,
+};
+
+
+static int __init mod_init(void)
+{
+ int result;
+
+ info(DRIVER_DESC " " DRIVER_VERSION " loading");
+
+#ifdef CONFIG_IPAQ_HANDHELD
+ if (machine_is_h5400()) {
+ /* turn WLAN power on */
+ /* both needed? */
+ SET_H5400_ASIC_GPIO (GPB, RF_POWER_ON, 1);
+ SET_H5400_ASIC_GPIO (GPB, WLAN_POWER_ON, 1);
+ }
+#endif
+
+ /* register this driver with the USB subsystem */
+ result = usb_register(&module_usb);
+ if (result < 0) {
+ err("usb_register failed (status %d)", result);
+ return -1;
+ }
+
+ return 0;
+}
+
+static void __exit mod_exit(void)
+{
+ int i;
+
+ info(DRIVER_DESC " " DRIVER_VERSION " unloading");
+ usb_deregister(&module_usb);
+ for (i = 0; i < ARRAY_SIZE(firmwares); i++) {
+ if (firmwares[i].fw)
+ release_firmware(firmwares[i].fw);
+ }
+
+#ifdef CONFIG_IPAQ_HANDHELD
+ if (machine_is_h5400()) {
+ /* turn WLAN power off */
+ SET_H5400_ASIC_GPIO (GPB, RF_POWER_ON, 0);
+ SET_H5400_ASIC_GPIO (GPB, WLAN_POWER_ON, 0);
+ }
+#endif
+}
-EXPORT_SYMBOL(at76c503_do_probe);
-EXPORT_SYMBOL(at76c503_delete_device);
+module_init(mod_init);
+module_exit(mod_exit);
MODULE_AUTHOR(DRIVER_AUTHOR);
MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/at76c503.h b/at76c503.h
index adb353b..727af4a 100644
--- a/at76c503.h
+++ b/at76c503.h
@@ -702,13 +702,4 @@ typedef struct p80211msg_lnxind_wlansniffrm
p80211item_uint32_t frmlen;
} __attribute__ ((packed)) p80211msg_lnxind_wlansniffrm_t;
-/* Function prototypes */
-
-int at76c503_do_probe(struct module *mod, struct usb_device *udev,
- struct usb_driver *calling_driver,
- u8 *fw_data, int fw_size, u32 board_type,
- const char *netdev_name, void **devptr);
-
-void at76c503_delete_device(struct at76c503 *dev);
-
#endif /* _AT76C503_H */
diff --git a/at76fw.c b/at76fw.c
deleted file mode 100644
index 934c7a4..0000000
--- a/at76fw.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/* -*- linux-c -*- */
-/*
- * Copyright (c) 2002 - 2003 Oliver Kurth
- * Changes Copyright (c) 2004 Joerg Albert <joerg.albert@gmx.de>
- *
- * 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.
- *
- * This file is part of the Berlios driver for WLAN USB devices based on the
- * Atmel AT76C503A/505/505A. See at76c503.h for details.
- */
-
-#include <linux/version.h>
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/usb.h>
-#include <linux/init.h>
-#include <linux/firmware.h>
-
-#ifdef CONFIG_IPAQ_HANDHELD
-#include <asm/mach-types.h>
-#include <asm/arch/ipaq.h>
-#include <asm/arch-pxa/h5400-asic.h>
-#endif
-
-#include "at76c503.h"
-
-/* Version Information */
-
-#define DRIVER_NAME "at76fw"
-#define DRIVER_AUTHOR \
-"Oliver Kurth <oku@masqmail.cx>, Joerg Albert <joerg.albert@gmx.de>, Alex <alex@foogod.com>"
-#define DRIVER_DESC "Atmel at76c503a Wireless LAN Driver - firmware loader"
-
-/* This must be in sync with boardtype definitions */
-static struct fwentry {
- const char *const fwname;
- const struct firmware *fw;
-} firmwares[] = {
- { "" },
- { "atmel_at76c503-i3861.bin" },
- { "atmel_at76c503-i3863.bin" },
- { "atmel_at76c503-rfmd.bin" },
- { "atmel_at76c503-rfmd-acc.bin" },
- { "atmel_at76c505-rfmd.bin" },
- { "atmel_at76c505-rfmd2958.bin" },
- { "atmel_at76c505a-rfmd2958.bin" },
- { "atmel_at76c505amx-rfmd.bin" }
-};
-
-/* USB Device IDs supported by this driver */
-
-/* at76c503-i3861 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_503I 0x7603 /* Generic AT76C503/3861 device */
-
-#define VENDOR_ID_LINKSYS_OLD 0x066b
-#define PRODUCT_ID_LINKSYS_WUSB11_V21 0x2211 /* Linksys WUSB11 v2.1/v2.6 */
-
-#define VENDOR_ID_NETGEAR 0x0864
-#define PRODUCT_ID_NETGEAR_MA101A 0x4100 /* Netgear MA 101 Rev. A */
-
-#define VENDOR_ID_TEKRAM 0x0b3b
-#define PRODUCT_ID_TEKRAM_U300C 0x1612 /* Tekram U-300C / Allnet ALL0193 */
-
-#define VENDOR_ID_HP 0x03f0
-#define PRODUCT_ID_HP_HN210W 0x011c /* HP HN210W PKW-J7801A */
-
-#define VENDOR_ID_M4Y750 0x0cde /* Unknown Vendor ID! */
-#define PRODUCT_ID_M4Y750 0x0001 /* Sitecom/Z-Com/Zyxel M4Y-750 */
-
-#define VENDOR_ID_DYNALINK 0x069a
-#define PRODUCT_ID_DYNALINK_WLL013_I 0x0320 /* Dynalink/Askey WLL013 (intersil) */
-
-#define VENDOR_ID_SMC_OLD 0x0d5c
-#define PRODUCT_ID_SMC2662W_V1 0xa001 /* EZ connect 11Mpbs
-Wireless USB Adapter SMC2662W (v1) */
-
-#define VENDOR_ID_BENQ 0x04a5 /* BenQ (Acer) */
-#define PRODUCT_ID_BENQ_AWL_300 0x9000 /* AWL-300 */
-
-/* this adapter contains flash */
-#define VENDOR_ID_ADDTRON 0x05dd /* Addtron */
-#define PRODUCT_ID_ADDTRON_AWU120 0xff31 /* AWU-120 */
-/* also Compex WLU11 */
-
-#define VENDOR_ID_INTEL 0x8086 /* Intel */
-#define PRODUCT_ID_INTEL_AP310 0x0200 /* AP310 AnyPoint II USB */
-
-#define VENDOR_ID_CONCEPTRONIC 0x0d8e
-#define PRODUCT_ID_CONCEPTRONIC_C11U 0x7100 /* also Dynalink L11U */
-
-#define VENDOR_ID_ARESCOM 0xd8e
-#define PRODUCT_ID_WL_210 0x7110 /* Arescom WL-210,
- FCC id 07J-GL2411USB */
-#define VENDOR_ID_IO_DATA 0x04bb
-#define PRODUCT_ID_IO_DATA_WN_B11_USB 0x0919 /* IO-DATA WN-B11/USB */
-
-#define VENDOR_ID_BT 0x069a
-#define PRODUCT_ID_BT_VOYAGER_1010 0x0821 /* BT Voyager 1010 */
-
-
-/* at76c503-i3863 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_503_I3863 0x7604 /* Generic AT76C503/3863 device */
-
-#define VENDOR_ID_SAMSUNG 0x055d
-#define PRODUCT_ID_SAMSUNG_SWL2100U 0xa000 /* Samsung SWL-2100U */
-
-
-/* at76c503-rfmd */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_503R 0x7605 /* Generic AT76C503/RFMD device */
-#define PRODUCT_ID_W_BUDDIE_WN210 0x4102 /* AirVast W-Buddie WN210 */
-
-#define VENDOR_ID_DYNALINK 0x069a
-#define PRODUCT_ID_DYNALINK_WLL013_R 0x0321 /* Dynalink/Askey WLL013 (rfmd) */
-
-#define VENDOR_ID_LINKSYS 0x077b
-#define PRODUCT_ID_LINKSYS_WUSB11_V26 0x2219 /* Linksys WUSB11 v2.6 */
-#define PRODUCT_ID_NE_NWU11B 0x2227 /* Network Everywhere NWU11B */
-
-#define VENDOR_ID_NETGEAR 0x0864
-#define PRODUCT_ID_NETGEAR_MA101B 0x4102 /* Netgear MA 101 Rev. B */
-
-#define VENDOR_ID_ACTIONTEC 0x1668
-#define PRODUCT_ID_ACTIONTEC_802UAT1 0x7605 /* Actiontec 802UAT1, HWU01150-01UK */
-
-#define VENDOR_ID_DLINK 0x2001 /* D-Link */
-#define PRODUCT_ID_DLINK_DWL120 0x3200 /* DWL-120 rev. E */
-
-#define VENDOR_ID_DICK_SMITH_ELECTR 0x1371 /* Dick Smith Electronics */
-#define PRODUCT_ID_DSE_XH1153 0x5743 /* XH1153 802.11b USB adapter */
- /* also: CNet CNUSB611 (D) */
-#define PRODUCT_ID_WL_200U 0x0002 /* WL-200U */
-
-#define VENDOR_ID_BENQ 0x04a5 /* BenQ (Acer) */
-#define PRODUCT_ID_BENQ_AWL_400 0x9001 /* BenQ AWL-400 USB stick */
-
-#define VENDOR_ID_3COM 0x506
-#define PRODUCT_ID_3COM_3CRSHEW696 0xa01 /* 3COM 3CRSHEW696 */
-
-#define VENDOR_ID_SIEMENS 0x681
-#define PRODUCT_ID_SIEMENS_SANTIS_WLL013 0x1b /* Siemens Santis ADSL WLAN
- USB adapter WLL 013 */
-
-#define VENDOR_ID_BELKIN_2 0x50d
-#define PRODUCT_ID_BELKIN_F5D6050_V2 0x50 /* Belkin F5D6050, version 2 */
-
-#define VENDOR_ID_BLITZ 0x07b8
-#define PRODUCT_ID_BLITZ_NETWAVE_BWU613 0xb000 /* iBlitzz, BWU613 (not *B or *SB !) */
-
-#define VENDOR_ID_GIGABYTE 0x1044
-#define PRODUCT_ID_GIGABYTE_GN_WLBM101 0x8003 /* Gigabyte GN-WLBM101 */
-
-#define VENDOR_ID_PLANEX 0x2019
-#define PRODUCT_ID_PLANEX_GW_US11S 0x3220 /* Planex GW-US11S */
-
-#define VENDOR_ID_COMPAQ 0x049f
-#define PRODUCT_ID_IPAQ_INT_WLAN 0x0032 /* internal WLAN adapter in h5[4,5]xx series iPAQs */
-
-
-/* at76c503-rfmd-acc */
-#define VENDOR_ID_BELKIN 0x0d5c
-#define PRODUCT_ID_BELKIN_F5D6050 0xa002 /* Belkin F5D6050 / SMC 2662W v2 / SMC 2662W-AR */
-
-#define VENDOR_ID_SMC 0x083a
-#define PRODUCT_ID_SMC_2664W 0x3501
-
-
-/* at76c505-rfmd */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505R 0x7606 /* Generic AT76C505/RFMD device */
-
-
-/* at76c505-rfmd2958 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505R2958 0x7613 /* Generic AT76C505/RFMD device
- also OvisLink WL-1130USB */
-
-#define VENDOR_ID_CNET 0x1371
-#define PRODUCT_ID_CNET_CNUSB611G 0x0013 /* CNet CNUSB 611G */
-#define PRODUCT_ID_FL_WL240U 0x0014 /* Fiberline WL-240U with the
- CNet vendor id */
-
-#define VENDOR_ID_LINKSYS_1915 0x1915
-#define PRODUCT_ID_LINKSYS_WUSB11V28 0x2233 /* Linksys WUSB11 v2.8 */
-
-#define VENDOR_ID_XTERASYS 0x12fd
-#define PRODUCT_ID_XTERASYS_XN_2122B 0x1001 /* Xterasys XN-2122B, also
- IBlitzz BWU613B / BWU613SB */
-
-#define VENDOR_ID_COREGA 0x07aa
-#define PRODUCT_ID_COREGA_USB_STICK_11_KK 0x7613 /* Corega WLAN USB Stick 11 (K.K.) */
-
-#define VENDOR_ID_MSI 0x0db0
-#define PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC 0x1020
-
-
-/* at76c505a-rfmd2958 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505A 0x7614 /* Generic AT76C505A device */
-#define PRODUCT_ID_ATMEL_505AS 0x7617 /* Generic AT76C505AS device */
-
-#define VENDOR_ID_GIGASET 0x1690
-#define PRODUCT_ID_GIGASET_11 0x0701
-
-
-/* at76c505amx-rfmd */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505AMX 0x7615 /* Generic AT76C505AMX device */
-
-
-static struct usb_device_id dev_table[] = {
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503I ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_LINKSYS_OLD, PRODUCT_ID_LINKSYS_WUSB11_V21),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101A ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_TEKRAM, PRODUCT_ID_TEKRAM_U300C ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_HP, PRODUCT_ID_HP_HN210W ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_M4Y750, PRODUCT_ID_M4Y750 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_I ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_SMC_OLD, PRODUCT_ID_SMC2662W_V1 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_300 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_ADDTRON, PRODUCT_ID_ADDTRON_AWU120 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_INTEL, PRODUCT_ID_INTEL_AP310 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_CONCEPTRONIC,PRODUCT_ID_CONCEPTRONIC_C11U),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_ARESCOM, PRODUCT_ID_WL_210),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_IO_DATA, PRODUCT_ID_IO_DATA_WN_B11_USB),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_BT, PRODUCT_ID_BT_VOYAGER_1010 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503_I3863 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3863 },
- { USB_DEVICE(VENDOR_ID_SAMSUNG, PRODUCT_ID_SAMSUNG_SWL2100U),
- .driver_info = BOARDTYPE_503_INTERSIL_3863 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503R ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_R ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_LINKSYS_WUSB11_V26),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_NE_NWU11B ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101B ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_DLINK_DWL120 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_ACTIONTEC,PRODUCT_ID_ACTIONTEC_802UAT1 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_W_BUDDIE_WN210 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_DSE_XH1153),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_WL_200U),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_400),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_3COM, PRODUCT_ID_3COM_3CRSHEW696),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_SIEMENS, PRODUCT_ID_SIEMENS_SANTIS_WLL013),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_BELKIN_2, PRODUCT_ID_BELKIN_F5D6050_V2 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_BLITZ, PRODUCT_ID_BLITZ_NETWAVE_BWU613 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_GIGABYTE, PRODUCT_ID_GIGABYTE_GN_WLBM101 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_PLANEX, PRODUCT_ID_PLANEX_GW_US11S ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_COMPAQ, PRODUCT_ID_IPAQ_INT_WLAN),
- .driver_info = BOARDTYPE_503_RFMD },
-
- { USB_DEVICE(VENDOR_ID_SMC, PRODUCT_ID_SMC_2664W),
- .driver_info = BOARDTYPE_503_RFMD_ACC },
- { USB_DEVICE(VENDOR_ID_BELKIN, PRODUCT_ID_BELKIN_F5D6050 ),
- .driver_info = BOARDTYPE_503_RFMD_ACC },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R ),
- .driver_info = BOARDTYPE_505_RFMD },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R2958 ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_FL_WL240U ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_CNET_CNUSB611G ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_LINKSYS_1915, PRODUCT_ID_LINKSYS_WUSB11V28 ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_XTERASYS, PRODUCT_ID_XTERASYS_XN_2122B ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_COREGA, PRODUCT_ID_COREGA_USB_STICK_11_KK ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_MSI, PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505A ),
- .driver_info = BOARDTYPE_505A_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AS ),
- .driver_info = BOARDTYPE_505A_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_GIGASET, PRODUCT_ID_GIGASET_11 ),
- .driver_info = BOARDTYPE_505A_RFMD_2958 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AMX ),
- .driver_info = BOARDTYPE_505AMX_RFMD },
-
- { }
-};
-
-
-MODULE_DEVICE_TABLE (usb, dev_table);
-
-/* Module paramaters */
-
-static char* netdev_name = "wlan%d";
-module_param(netdev_name, charp,0400);
-MODULE_PARM_DESC(netdev_name, "network device name (default is wlan%d)");
-static int debug=0;
-module_param(debug, bool, 0400);
-MODULE_PARM_DESC(debug, "debug on/off");
-
-/* Use our own dbg macro */
-#undef dbg
-#define dbg(format, arg...) \
- do { \
- if (debug) \
- printk(KERN_DEBUG __FILE__ ": " format "\n" , ## arg);\
- } while (0)
-
-
-/* local function prototypes */
-static int at76c50x_probe(struct usb_interface *interface,
- const struct usb_device_id *id);
-static void at76c50x_disconnect(struct usb_interface *interface);
-
-
-/* structure for registering this driver with the USB subsystem */
-
-static struct usb_driver module_usb = {
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
- .owner = THIS_MODULE,
-#endif
- .name = DRIVER_NAME,
- .probe = at76c50x_probe,
- .disconnect = at76c50x_disconnect,
- .id_table = dev_table,
-};
-
-/* Module and USB entry points */
-
-
-static int at76c50x_probe(struct usb_interface *interface,
- const struct usb_device_id *id)
-{
- void *devptr = NULL;
- int retval;
-
- struct usb_device *udev __attribute__ ((unused));
- int boardtype = (int)id->driver_info;
- const char *const fw_name = firmwares[boardtype].fwname;
- const struct firmware *fw = firmwares[boardtype].fw;
- udev = interface_to_usbdev(interface);
-
- if (fw == NULL) {
- dbg("downloading firmware %s", fw_name);
- retval = request_firmware(&fw, fw_name, &udev->dev);
- if (retval == 0) {
- dbg("got it.");
- } else {
- err("firmware %s not found.", fw_name);
- /* FIXME: Update URL */
- err("You may need to download the firmware from "
- "http://www.thekelleys.org.uk/atmel or "
- "ftp://ftp.berlios.de/pub/at76c503a/firmware/");
- return retval;
- }
- } else
- dbg("re-using previously loaded fw");
-
- retval = at76c503_do_probe(THIS_MODULE, udev, &module_usb,
- fw->data, fw->size,
- boardtype, netdev_name, &devptr);
-
- return retval;
-}
-
-static void at76c50x_disconnect(struct usb_interface *interface)
-{
- struct at76c503 *ptr;
-
- ptr = usb_get_intfdata (interface);
- usb_set_intfdata(interface, NULL);
-
- info("%s disconnecting", ((struct at76c503 *)ptr)->netdev->name);
- at76c503_delete_device(ptr);
- info(DRIVER_NAME " disconnected");
-}
-
-static int __init mod_init(void)
-{
- int result;
-
- info(DRIVER_DESC " " DRIVER_VERSION " loading");
-
-#ifdef CONFIG_IPAQ_HANDHELD
- if (machine_is_h5400()) {
- /* turn WLAN power on */
- /* both needed? */
- SET_H5400_ASIC_GPIO (GPB, RF_POWER_ON, 1);
- SET_H5400_ASIC_GPIO (GPB, WLAN_POWER_ON, 1);
- }
-#endif
-
- /* register this driver with the USB subsystem */
- result = usb_register(&module_usb);
- if (result < 0) {
- err("usb_register failed (status %d)", result);
- return -1;
- }
-
- return 0;
-}
-
-static void __exit mod_exit(void)
-{
- int i;
-
- info(DRIVER_DESC " " DRIVER_VERSION " unloading");
- usb_deregister(&module_usb);
- for (i = 0; i < ARRAY_SIZE(firmwares); i++) {
- if (firmwares[i].fw)
- release_firmware(firmwares[i].fw);
- }
-
-#ifdef CONFIG_IPAQ_HANDHELD
- if (machine_is_h5400()) {
- /* turn WLAN power off */
- SET_H5400_ASIC_GPIO (GPB, RF_POWER_ON, 0);
- SET_H5400_ASIC_GPIO (GPB, WLAN_POWER_ON, 0);
- }
-#endif
-}
-
-module_init(mod_init);
-module_exit(mod_exit);
-
-MODULE_AUTHOR(DRIVER_AUTHOR);
-MODULE_DESCRIPTION(DRIVER_DESC);
-MODULE_LICENSE("GPL");