Index: at76c503-fw_skel.c =================================================================== RCS file: /cvsroot/at76c503a/at76c503a/at76c503-fw_skel.c,v retrieving revision 1.6 diff -u -r1.6 at76c503-fw_skel.c --- at76c503-fw_skel.c 18 Mar 2004 20:54:57 -0000 1.6 +++ at76c503-fw_skel.c 5 Jul 2004 19:46:45 -0000 @@ -23,6 +23,12 @@ * */ +#ifdef CONFIG_IPAQ_HANDHELD +#include +#include +#include +#endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0) extern inline char *fw_dev_param(struct usb_device *udev, char *buf) { @@ -173,6 +179,15 @@ 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) { @@ -192,6 +207,14 @@ if (static_fw.size == 0 && fw != NULL) /* we had loaded and allocated the buffer before */ release_firmware(fw); +#endif + +#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 } Index: at76c503.c =================================================================== RCS file: /cvsroot/at76c503a/at76c503a/at76c503.c,v retrieving revision 1.55 diff -u -r1.55 at76c503.c --- at76c503.c 31 May 2004 13:59:27 -0000 1.55 +++ at76c503.c 5 Jul 2004 19:46:51 -0000 @@ -110,6 +110,12 @@ #endif // #if WIRELESS_EXT > 12 #include /* for rtnl_lock() */ +#include + +#ifdef CONFIG_IPAQ_HANDHELD +#include +#include +#endif #include "at76c503.h" #include "ieee802_11.h" @@ -238,8 +244,23 @@ #define ASSOC_RETRIES 3 #define DISASSOC_RETRIES 3 +#ifdef CONFIG_IPAQ_HANDHELD +#define scan_hook(x) \ + do { \ + if (machine_is_h5400()) { \ + if (x) \ + ipaq_led_blink (RED_LED, 1, 2); \ + else \ + ipaq_led_off (RED_LED); \ + } \ + } while (0) +#else +#define scan_hook(x) +#endif + #define NEW_STATE(dev,newstate) \ do {\ + scan_hook(newstate == SCANNING); \ dbg(DBG_PROGRESS, "%s: state %d -> %d (" #newstate ")",\ dev->netdev->name, dev->istate, newstate);\ dev->istate = newstate;\ @@ -3958,6 +3979,34 @@ } +#ifdef CONFIG_IPAQ_HANDHELD + +static struct timer_list led_timer; + +static void +ipaq_clear_led (unsigned long time) +{ + ipaq_led_off (RED_LED_2); +} + +static void +ipaq_blink_led (void) +{ + ipaq_led_on (RED_LED_2); + + mod_timer (&led_timer, jiffies + (HZ / 25)); +} + +static void +ipaq_init_led (void) +{ + led_timer.function = ipaq_clear_led; + + init_timer (&led_timer); +} + +#endif + static int at76c503_tx(struct sk_buff *skb, struct net_device *netdev) { @@ -3972,6 +4021,11 @@ struct ieee802_11_hdr *i802_11_hdr = (struct ieee802_11_hdr *)&(tx_buffer->packet); +#ifdef CONFIG_IPAQ_HANDHELD + if (machine_is_h5400 ()) + ipaq_blink_led (); +#endif + /* we can get rid of memcpy, if we set netdev->hard_header_len to 8 + sizeof(struct ieee802_11_hdr), because then we have enough space */ @@ -6273,6 +6327,12 @@ } dbg(DBG_PROC_ENTRY, "%s: before freeing dev/netdev", __FUNCTION__); free_netdev(dev->netdev); /* dev is in net_dev */ +#ifdef CONFIG_IPAQ_HANDHELD + if (machine_is_h5400()) { + ipaq_led_off (RED_LED); + ipaq_led_off (RED_LED_2); + } +#endif dbg(DBG_PROC_ENTRY, "%s: EXIT", __FUNCTION__); } @@ -6451,6 +6511,11 @@ /* we let this timer run the whole time this driver instance lives */ mod_timer(&dev->bss_list_timer, jiffies+BSS_LIST_TIMEOUT); +#ifdef CONFIG_IPAQ_HANDHELD + if (machine_is_h5400 ()) + ipaq_init_led (); +#endif + if(at76c503_alloc_urbs(dev) < 0) goto error; @@ -6534,7 +6599,7 @@ if (ret) { err("unable to register netdevice %s (status %d)!", dev->netdev->name, ret); - goto error; + return -1; } info("registered %s", dev->netdev->name); dev->flags |= AT76C503A_NETDEV_REGISTERED;