r3610 - developers/sameo/patches/ar6k-atheros

sameo at sita.openmoko.org sameo at sita.openmoko.org
Fri Dec 7 02:13:35 CET 2007


Author: sameo
Date: 2007-12-07 02:13:30 +0100 (Fri, 07 Dec 2007)
New Revision: 3610

Modified:
   developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack.patch
   developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_ar6000_wlan.patch
   developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_functions.patch
   developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_shcd.patch
   developers/sameo/patches/ar6k-atheros/gta02_wifi_defconfig
   developers/sameo/patches/ar6k-atheros/mach-gta02_wifi.patch
   developers/sameo/patches/ar6k-atheros/pnp_fixes_2.6.22.5.patch
   developers/sameo/patches/ar6k-atheros/s3c24xx_hcd_atheros.patch
Log:
ar6k-atheros: DMA support.

We now use DMA for all IO xfers.
The udelay bug is now fixed as well: We are missing a RSPFIN interrupt
and getting an RFDET/TXDET one instead.




Modified: developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack.patch	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack.patch	2007-12-07 01:13:30 UTC (rev 3610)
@@ -60,7 +60,7 @@
 Index: linux-2.6.22/include/linux/sdio/_sdio_defs.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/_sdio_defs.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/_sdio_defs.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,632 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: _sdio_defs.h
@@ -697,7 +697,7 @@
 Index: linux-2.6.22/include/linux/sdio/ctsystem.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/ctsystem.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/ctsystem.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,110 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: cpsystem.h
@@ -812,7 +812,7 @@
 Index: linux-2.6.22/include/linux/sdio/ctsystem_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/ctsystem_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/ctsystem_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,959 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: ctsystem_linux.h
@@ -1776,7 +1776,7 @@
 Index: linux-2.6.22/include/linux/sdio/mmc_defs.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/mmc_defs.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/mmc_defs.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,99 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: mmc_defs.h
@@ -1880,7 +1880,7 @@
 Index: linux-2.6.22/include/linux/sdio/sdio_busdriver.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/sdio_busdriver.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/sdio_busdriver.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1431 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_busdriver.h
@@ -3315,8 +3315,8 @@
 +#endif /* __SDIO_BUSDRIVER_H___ */
 Index: linux-2.6.22/drivers/Kconfig
 ===================================================================
---- linux-2.6.22.orig/drivers/Kconfig	2007-11-28 16:37:55.000000000 +0100
-+++ linux-2.6.22/drivers/Kconfig	2007-11-28 16:38:00.000000000 +0100
+--- linux-2.6.22.orig/drivers/Kconfig	2007-11-29 20:54:44.000000000 +0100
++++ linux-2.6.22/drivers/Kconfig	2007-11-29 20:54:57.000000000 +0100
 @@ -68,6 +68,8 @@
  
  source "drivers/usb/Kconfig"
@@ -3329,7 +3329,7 @@
 Index: linux-2.6.22/drivers/sdio/Kconfig
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/Kconfig	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/Kconfig	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,18 @@
 +#
 +# SDIO driver and host controller support
@@ -3352,7 +3352,7 @@
 Index: linux-2.6.22/drivers/sdio/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,6 @@
 +#Makefile for SDIO stack
 +obj-$(CONFIG_SDIO)	+= lib/
@@ -3363,7 +3363,7 @@
 Index: linux-2.6.22/drivers/sdio/lib/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/lib/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/lib/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,6 @@
 +#
 +# SDIO stack library Makefile
@@ -3374,7 +3374,7 @@
 Index: linux-2.6.22/drivers/sdio/lib/sdio_lib_c.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/lib/sdio_lib_c.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/lib/sdio_lib_c.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,903 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_lib_c.c
@@ -4282,7 +4282,7 @@
 Index: linux-2.6.22/drivers/sdio/lib/sdio_lib_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/lib/sdio_lib_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/lib/sdio_lib_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,254 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_function_os.c
@@ -4541,7 +4541,7 @@
 Index: linux-2.6.22/drivers/sdio/busdriver/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/busdriver/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/busdriver/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,7 @@
 +#
 +# SDIO stack bus drivers
@@ -4553,7 +4553,7 @@
 Index: linux-2.6.22/drivers/sdio/busdriver/_busdriver.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/busdriver/_busdriver.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/busdriver/_busdriver.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,462 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: _busdriver.h
@@ -5020,7 +5020,7 @@
 Index: linux-2.6.22/drivers/sdio/busdriver/sdio_bus.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,2119 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bus.c
@@ -7144,7 +7144,7 @@
 Index: linux-2.6.22/drivers/sdio/busdriver/sdio_bus_events.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus_events.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus_events.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1073 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bus_events.c
@@ -8222,7 +8222,7 @@
 Index: linux-2.6.22/drivers/sdio/busdriver/sdio_bus_misc.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus_misc.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus_misc.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,3192 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bus_misc.c
@@ -11419,7 +11419,7 @@
 Index: linux-2.6.22/drivers/sdio/busdriver/sdio_bus_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/busdriver/sdio_bus_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,807 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bus_os.c
@@ -12231,7 +12231,7 @@
 Index: linux-2.6.22/drivers/sdio/busdriver/sdio_function.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/busdriver/sdio_function.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/busdriver/sdio_function.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,713 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_function.c
@@ -12949,7 +12949,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/Kconfig
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/Kconfig	2007-11-29 20:54:03.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/Kconfig	2007-12-04 21:34:41.000000000 +0100
 @@ -0,0 +1,56 @@
 +#
 +#
@@ -13010,7 +13010,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/Makefile	2007-11-29 20:54:03.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/Makefile	2007-12-04 21:34:41.000000000 +0100
 @@ -0,0 +1,8 @@
 +# SDIO stack host controller Makefile
 +obj-$(CONFIG_SDIO_STDHCD)		+= stdhost/
@@ -13023,7 +13023,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pci_ellen/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,7 @@
 +#
 +# SDIO pci_ellen host controller makefile
@@ -13035,7 +13035,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1238 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd.c
@@ -14278,7 +14278,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,185 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_linux.h
@@ -14468,7 +14468,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_hcd_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,781 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os.c
@@ -15254,7 +15254,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_pciellen_hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_pciellen_hcd.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pci_ellen/sdio_pciellen_hcd.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,253 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_pciellen_hcd.h
@@ -15512,7 +15512,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/mx21/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/mx21/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/mx21/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,7 @@
 +#
 +# SDIO mx21 host controller makefile
@@ -15524,7 +15524,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1286 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_mx21c
@@ -16815,7 +16815,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,210 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_mx21.h
@@ -17030,7 +17030,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,105 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_mx21_linux.h
@@ -17140,7 +17140,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/mx21/sdio_mx21_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,435 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os.c
@@ -17580,7 +17580,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,3 @@
 +# SDIO omap host controller makefile
 +sdio_omap_hcd-objs		:= sdio_hcd_os.o sdio_hcd_os_2_6.o
@@ -17588,7 +17588,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1337 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd.c
@@ -18930,7 +18930,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,165 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_linux.h
@@ -19100,7 +19100,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd_os_2_6.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd_os_2_6.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_hcd_os_2_6.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,574 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os_2_6.c
@@ -19679,7 +19679,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap/sdio_omap_hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_omap_hcd.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap/sdio_omap_hcd.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,372 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_pmap_hcd.h
@@ -20056,7 +20056,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap_2420/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap_2420/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap_2420/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,3 @@
 +# SDIO omap host controller makefile
 +obj-m += sdio_omap_hcd.o
@@ -20064,7 +20064,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1363 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd.c
@@ -21432,7 +21432,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,147 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_linux.h
@@ -21584,7 +21584,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,608 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os.c
@@ -22197,7 +22197,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_os_2_6.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_os_2_6.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_hcd_os_2_6.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,731 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os_2_6.c
@@ -22933,7 +22933,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_omap_hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_omap_hcd.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/omap_2420/sdio_omap_hcd.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,370 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_pmap_hcd.h
@@ -23308,7 +23308,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa255/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa255/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa255/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# SDIO pxa255 host controller
@@ -23318,7 +23318,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,914 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd.c
@@ -24237,7 +24237,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,136 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_linux.h
@@ -24378,7 +24378,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_hcd_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,589 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os.c
@@ -24972,7 +24972,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_pxa255hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_pxa255hcd.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa255/sdio_pxa255hcd.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,227 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_pxa255hcd.h
@@ -25204,7 +25204,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa270/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa270/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa270/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# SDIO pxa270 host controller
@@ -25214,7 +25214,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1087 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd.c
@@ -26306,7 +26306,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,150 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_linux.h
@@ -26461,7 +26461,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_hcd_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1084 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os.c
@@ -27550,7 +27550,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_pxa270hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_pxa270hcd.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pxa270/sdio_pxa270hcd.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,273 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_pxa270hcd.h
@@ -27827,8 +27827,8 @@
 +#endif /* __SDIO_PXA255HCD_H___ */
 Index: linux-2.6.22/drivers/Makefile
 ===================================================================
---- linux-2.6.22.orig/drivers/Makefile	2007-11-28 16:37:55.000000000 +0100
-+++ linux-2.6.22/drivers/Makefile	2007-11-28 16:38:00.000000000 +0100
+--- linux-2.6.22.orig/drivers/Makefile	2007-11-29 20:54:44.000000000 +0100
++++ linux-2.6.22/drivers/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -71,6 +71,7 @@
  obj-$(CONFIG_EISA)		+= eisa/
  obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
@@ -27840,7 +27840,7 @@
 Index: linux-2.6.22/include/linux/sdio/sdlist.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/sdlist.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/sdlist.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,137 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdlist.h
@@ -27982,7 +27982,7 @@
 Index: linux-2.6.22/include/linux/sdio/sdio_hcd_defs.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/sdio_hcd_defs.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/sdio_hcd_defs.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,215 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_defs.h
@@ -28202,7 +28202,7 @@
 Index: linux-2.6.22/include/linux/sdio/sdio_lib.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/sdio/sdio_lib.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/include/linux/sdio/sdio_lib.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,262 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_lib.h
@@ -28468,8 +28468,8 @@
 +#endif /* __SDIO_LIB_H___*/
 Index: linux-2.6.22/arch/arm/Kconfig
 ===================================================================
---- linux-2.6.22.orig/arch/arm/Kconfig	2007-11-28 16:37:55.000000000 +0100
-+++ linux-2.6.22/arch/arm/Kconfig	2007-11-28 16:38:00.000000000 +0100
+--- linux-2.6.22.orig/arch/arm/Kconfig	2007-11-29 20:54:44.000000000 +0100
++++ linux-2.6.22/arch/arm/Kconfig	2007-11-29 20:54:57.000000000 +0100
 @@ -971,6 +971,8 @@
  
  source "drivers/pnp/Kconfig"

Modified: developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_ar6000_wlan.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_ar6000_wlan.patch	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_ar6000_wlan.patch	2007-12-07 01:13:30 UTC (rev 3610)
@@ -4,7 +4,7 @@
  drivers/pnp/driver.c                                          |    2 
  drivers/sdio/function/wlan/Makefile                           |    4 
  drivers/sdio/function/wlan/ar6000/Makefile                    |   29 
- drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.c         | 5850 ++++++++++
+ drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.c         | 5862 ++++++++++
  drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.h         |  133 
  drivers/sdio/function/wlan/ar6000/bmi/Makefile                |    1 
  drivers/sdio/function/wlan/ar6000/bmi/bmi.c                   |  473 
@@ -19,7 +19,7 @@
  drivers/sdio/function/wlan/ar6000/hif/hif.c                   |  664 +
  drivers/sdio/function/wlan/ar6000/hif/hif_internal.h          |   85 
  drivers/sdio/function/wlan/ar6000/htc/Makefile                |    5 
- drivers/sdio/function/wlan/ar6000/htc/htc.c                   |  433 
+ drivers/sdio/function/wlan/ar6000/htc/htc.c                   |  441 
  drivers/sdio/function/wlan/ar6000/htc/htc_events.c            | 1056 +
  drivers/sdio/function/wlan/ar6000/htc/htc_internal.h          |  464 
  drivers/sdio/function/wlan/ar6000/htc/htc_recv.c              |  211 
@@ -59,12 +59,12 @@
  drivers/sdio/function/wlan/ar6000/wlan/wlan_recv_beacon.c     |  169 
  drivers/sdio/function/wlan/ar6000/wlan/wlan_utils.c           |   56 
  drivers/sdio/function/wlan/ar6000/wmi/wmi.c                   | 2881 ++++
- 60 files changed, 23219 insertions(+), 7 deletions(-)
+ 60 files changed, 23239 insertions(+), 7 deletions(-)
 
 Index: linux-2.6.22/drivers/sdio/function/wlan/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,4 @@
 +#
 +# SDIO wlan ar600 card function driver
@@ -73,7 +73,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,29 @@
 +#
 +#  AR6K Kernel Module makefile.
@@ -107,7 +107,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/bmi.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/bmi.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/bmi.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,76 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -188,7 +188,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,133 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -326,7 +326,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ar6000_api.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ar6000_api.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ar6000_api.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,84 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -415,7 +415,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athdrv.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athdrv.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athdrv.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,598 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -1018,7 +1018,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athtypes.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athtypes.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athtypes.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,43 @@
 +/*
 + * Copyright 2003-2006 Atheros Communications, Inc.
@@ -1066,7 +1066,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,333 @@
 +/*-
 + * Copyright (c) 2001 Atsushi Onoe
@@ -1404,7 +1404,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211_ioctl.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211_ioctl.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211_ioctl.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,120 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -1529,7 +1529,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211_node.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211_node.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/ieee80211_node.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,74 @@
 +/*
 + * Copyright (c) 2001 Atsushi Onoe
@@ -1608,7 +1608,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/osapi_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/osapi_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/osapi_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,167 @@
 +/*
 + * Copyright 2003-2006 Atheros Communications, Inc.
@@ -1780,7 +1780,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi_host.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi_host.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi_host.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,75 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -1860,7 +1860,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/bmi_internal.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/bmi_internal.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/bmi_internal.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,31 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -1896,7 +1896,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/hif.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/hif.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/hif.c	2007-12-03 19:42:50.000000000 +0100
 @@ -0,0 +1,664 @@
 +/*
 + * Copyright (c) 2004-2005 Atheros Communications Inc.
@@ -2428,7 +2428,7 @@
 +     * issues the first command after switching on dragon. Need to
 +     * investigate this a bit more - TODO
 +     */
-+    A_MDELAY(1000);
++//    A_MDELAY(1000);
 +
 +    /* Inform HTC */
 +    if ((htcCallbacks.deviceInsertedHandler(device)) != A_OK) {
@@ -2565,8 +2565,8 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc.c	2007-11-28 16:38:00.000000000 +0100
-@@ -0,0 +1,433 @@
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc.c	2007-12-03 21:16:59.000000000 +0100
+@@ -0,0 +1,441 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
 + *
@@ -2698,11 +2698,19 @@
 +       size negotiation with the target has completed. Furthermore, we have
 +       to do it only once during the lifetime of the target detection */
 +    if (!target->ready) {
++	    int i;
++
++	    for (i = 0; i < 5; i++) {
++		    mdelay(100);
++	    }
 +        AR_DEBUG_PRINTF(ATH_DEBUG_INF,
 +                        ("Waiting for the block size negotiation to finish\n"));
++	wait_event_interruptible_timeout(htcEvent,
++					 (target->ready == TRUE), 60 * HZ);
++#if 0
 +        A_WAIT_EVENT_INTERRUPTIBLE_TIMEOUT(htcEvent, (target->ready == TRUE),
 +                                           HTC_TARGET_RESPONSE_TIMEOUT);
-+
++#endif
 +        if (target->ready) {
 +            status = A_OK;
 +        } else {
@@ -3003,7 +3011,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_events.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_events.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_events.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1056 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -4064,7 +4072,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_internal.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_internal.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_internal.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,464 @@
 +/*
 + * Copyright (c) 2004-2005 Atheros Communications Inc.
@@ -4533,7 +4541,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_recv.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_recv.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_recv.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,211 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -4749,7 +4757,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_send.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_send.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_send.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,395 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -5149,7 +5157,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_utils.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_utils.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/htc_utils.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,375 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -5529,7 +5537,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/dset_api.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/dset_api.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/dset_api.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,49 @@
 +/*
 + * Copyright 2005-2006 Atheros Communications, Inc.
@@ -5583,7 +5591,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/gpio_api.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/gpio_api.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/gpio_api.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,64 @@
 +/*
 + * Copyright 2005-2006 Atheros Communications, Inc.
@@ -5652,7 +5660,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hif.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hif.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hif.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,207 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -5864,7 +5872,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/host_version.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/host_version.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/host_version.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,48 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -5917,7 +5925,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/htc.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/htc.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/htc.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,120 @@
 +/*
 + * Copyright (c) 2006 Atheros Communications, Inc.
@@ -6042,7 +6050,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/osapi.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/osapi.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/osapi.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,63 @@
 +/*
 + * Copyright 2003-2006 Atheros Communications, Inc.
@@ -6110,7 +6118,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/queue.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/queue.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/queue.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,552 @@
 +/*
 + * Copyright (c) 1991, 1993
@@ -6667,7 +6675,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wlan_api.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wlan_api.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wlan_api.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,90 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -6762,7 +6770,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi_api.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi_api.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi_api.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,173 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -6940,7 +6948,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_node.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_node.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_node.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,285 @@
 +/*
 + * Copyright (c) 2001 Atsushi Onoe
@@ -7230,7 +7238,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_utils.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_utils.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_utils.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,56 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -7291,7 +7299,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/wmi/wmi.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wmi/wmi.c	2007-11-29 19:03:09.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wmi/wmi.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,2881 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -10177,8 +10185,8 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.c	2007-11-28 16:38:00.000000000 +0100
-@@ -0,0 +1,5850 @@
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/ar6000/ar6000_drv.c	2007-12-03 20:24:33.000000000 +0100
+@@ -0,0 +1,5862 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
 + *
@@ -10987,19 +10995,22 @@
 +        if(HTCEventReg(ar->arHtcTarget, endpoint[i], HTC_BUFFER_RECEIVED,
 +            ar6000_rx, ar) != A_OK)
 +        {
-+            return(-EIO);
++//		printk("%s() failed 1\n", __FUNCTION__);
++		return(-EIO);
 +        }
 +
 +        if(HTCEventReg(ar->arHtcTarget, endpoint[i], HTC_DATA_AVAILABLE,
 +            ar6000_rx_refill, ar) != A_OK)
 +        {
-+            return(-EIO);
++//		printk("%s() failed 2\n", __FUNCTION__);
++		return(-EIO);
 +        }
 +
 +        if(HTCEventReg(ar->arHtcTarget, endpoint[i], HTC_BUFFER_SENT,
-+            ar6000_tx_complete, ar) != A_OK)
++		       ar6000_tx_complete, ar) != A_OK)
 +        {
-+            return(-EIO);
++//		printk("%s() failed 3\n", __FUNCTION__);
++		return(-EIO);
 +        }
 +    }
 +
@@ -11028,23 +11039,32 @@
 +    /* initialized prior to enabling HTC.                        */
 +    ar6000_cookie_init(ar);
 +
++//    printk("%s() start\n", __FUNCTION__);
++
 +    /* Enable the target and the interrupts associated with it */
 +    status = HTCStart(ar->arHtcTarget);
 +
++    //   printk("%s() done\n", __FUNCTION__);
++
 +    if (status != A_OK) {
 +        if (ar->arWmiEnabled == TRUE) {
 +            wmi_shutdown(ar->arWmi);
 +            ar->arWmiEnabled = FALSE;
 +            ar->arWmi = NULL;
 +        }
++//	printk("%s() failed 4\n", __FUNCTION__);
++
 +        ar6000_cookie_cleanup(ar);
 +        return -EIO;
 +    }
 +
 +    if (!bypasswmi) {
++	    int i;
++//	    printk("%s() 0\n", __FUNCTION__);
++
 +        /*Wait for Wmi event to be ready  */
-+        timeleft = wait_event_interruptible_timeout(arEvent,
-+            (ar->arWmiReady == TRUE), 1 * HZ);
++	    timeleft = wait_event_interruptible_timeout(arEvent,
++							(ar->arWmiReady == TRUE), 60 * HZ);
 +
 +        if(!timeleft || signal_pending(current))
 +        {
@@ -13101,7 +13121,7 @@
 +    AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
 +    TARGET_STATS *pStats = &ar->arTargetStats;
 +    struct iw_statistics * pIwStats = &ar->arIwStats;
-+    u32 counter;
++//    u32 counter;
 +
 +    printk("%s()\n", __FUNCTION__);
 +
@@ -16032,7 +16052,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/bmi.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/bmi.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/bmi.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,473 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -16510,14 +16530,14 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,2 @@
 +obj-$(CONFIG_SDIO_AR6000_WLAN)  += hif.o
 +
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,11 @@
 +#
 +# hif for compact flash
@@ -16533,7 +16553,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1001 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -17539,7 +17559,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,110 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -17654,7 +17674,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs_internal.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs_internal.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/ar6000_cs_internal.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,62 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -17721,7 +17741,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/hif.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/hif.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/hif.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,390 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -18116,7 +18136,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/hif_internal.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/hif_internal.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/cf/hif_internal.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,78 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -18199,13 +18219,13 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/bmi/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1 @@
 +obj-$(CONFIG_SDIO_AR6000_WLAN)			+= bmi.o
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/hif_internal.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/hif_internal.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/hif/hif_internal.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,85 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -18295,7 +18315,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/htc/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# SDIO ar6000 wlan htc function driver
@@ -18305,14 +18325,14 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,2 @@
 +obj-$(CONFIG_SDIO_AR6000_WLAN) += wlan_node.o  wlan_recv_beacon.o  wlan_utils.o
 +
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_recv_beacon.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_recv_beacon.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/wlan/wlan_recv_beacon.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,169 @@
 +/*
 + * Copyright (c) 2001 Atsushi Onoe
@@ -18486,7 +18506,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mbox_reg.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mbox_reg.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mbox_reg.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,550 @@
 +/*
 + * Copyright 2006 Atheros Communications, Inc.
@@ -19041,7 +19061,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mc_reg.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mc_reg.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mc_reg.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1129 @@
 +/*
 + * Copyright 2006 Atheros Communications, Inc.
@@ -20175,7 +20195,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/rtc_reg.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/rtc_reg.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/rtc_reg.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1204 @@
 +/*
 + * Copyright 2006 Atheros Communications, Inc.
@@ -21384,7 +21404,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athdefs.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athdefs.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/athdefs.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,82 @@
 +
 +#ifndef __ATHDEFS_H__
@@ -21471,7 +21491,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mbox_host_reg.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mbox_host_reg.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/hw/mbox_host_reg.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,416 @@
 +/*
 + * Copyright 2006 Atheros Communications, Inc.
@@ -21892,7 +21912,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_bmi.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_bmi.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_bmi.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,136 @@
 +/*
 + * Copyright 2006 Atheros Communications, Inc.
@@ -22033,7 +22053,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_version.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_version.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_version.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,46 @@
 +/*
 + * Copyright 2006 Atheros Communications, Inc.
@@ -22084,7 +22104,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_gpio.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_gpio.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/AR6000_gpio.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,39 @@
 +/*
 + * Copyright 2005-2006 Atheros Communications, Inc.
@@ -22128,7 +22148,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/app/dset.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/app/dset.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/app/dset.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,77 @@
 +#ifndef _DSET_H_
 +#define _DSET_H_
@@ -22210,7 +22230,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi.h	2007-11-29 15:54:17.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmi.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1150 @@
 +/*
 + * Copyright (c) 2004-2006 Atheros Communications Inc.
@@ -23365,7 +23385,7 @@
 Index: linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmix.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmix.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/wlan/ar6000/include/wmix.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,197 @@
 +/*
 + * Copyright (c) 2004-2005 Atheros Communications Inc.
@@ -23566,8 +23586,8 @@
 +#endif /* _WMIX_H_ */
 Index: linux-2.6.22/drivers/pnp/core.c
 ===================================================================
---- linux-2.6.22.orig/drivers/pnp/core.c	2007-11-28 16:37:41.000000000 +0100
-+++ linux-2.6.22/drivers/pnp/core.c	2007-11-28 16:38:00.000000000 +0100
+--- linux-2.6.22.orig/drivers/pnp/core.c	2007-11-29 20:54:27.000000000 +0100
++++ linux-2.6.22/drivers/pnp/core.c	2007-11-29 20:54:57.000000000 +0100
 @@ -169,14 +169,12 @@
   *
   * this function will free all mem used by dev
@@ -23595,8 +23615,8 @@
 -#endif  /*  0  */
 Index: linux-2.6.22/drivers/pnp/driver.c
 ===================================================================
---- linux-2.6.22.orig/drivers/pnp/driver.c	2007-11-28 16:37:41.000000000 +0100
-+++ linux-2.6.22/drivers/pnp/driver.c	2007-11-28 16:38:00.000000000 +0100
+--- linux-2.6.22.orig/drivers/pnp/driver.c	2007-11-29 20:54:27.000000000 +0100
++++ linux-2.6.22/drivers/pnp/driver.c	2007-11-29 20:54:57.000000000 +0100
 @@ -243,8 +243,6 @@
  
  EXPORT_SYMBOL(pnp_register_driver);
@@ -23608,8 +23628,8 @@
  EXPORT_SYMBOL(pnp_device_detach);
 Index: linux-2.6.22/drivers/pnp/Kconfig
 ===================================================================
---- linux-2.6.22.orig/drivers/pnp/Kconfig	2007-11-28 16:37:41.000000000 +0100
-+++ linux-2.6.22/drivers/pnp/Kconfig	2007-11-28 16:38:00.000000000 +0100
+--- linux-2.6.22.orig/drivers/pnp/Kconfig	2007-11-29 20:54:27.000000000 +0100
++++ linux-2.6.22/drivers/pnp/Kconfig	2007-11-29 20:54:57.000000000 +0100
 @@ -7,7 +7,7 @@
  
  config PNP

Modified: developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_functions.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_functions.patch	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_functions.patch	2007-12-07 01:13:30 UTC (rev 3610)
@@ -21,7 +21,7 @@
 Index: linux-2.6.22/drivers/sdio/function/gps/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/gps/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/gps/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# SDIO GPS function driver
@@ -31,7 +31,7 @@
 Index: linux-2.6.22/drivers/sdio/function/gps/gps.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/gps/gps.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/gps/gps.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,392 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: gps.c
@@ -428,7 +428,7 @@
 Index: linux-2.6.22/drivers/sdio/function/gps/gps.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/gps/gps.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/gps/gps.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,194 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: gps.h
@@ -627,7 +627,7 @@
 Index: linux-2.6.22/drivers/sdio/function/gps/gps_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/gps/gps_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/gps/gps_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,63 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: gps_linux.h
@@ -695,7 +695,7 @@
 Index: linux-2.6.22/drivers/sdio/function/gps/gps_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/gps/gps_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/gps/gps_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,633 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: gps_os.c
@@ -1333,7 +1333,7 @@
 Index: linux-2.6.22/drivers/sdio/function/bluetooth/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/bluetooth/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/bluetooth/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# SDIO bluetooth functiondriver
@@ -1343,7 +1343,7 @@
 Index: linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,769 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bt.c
@@ -2117,7 +2117,7 @@
 Index: linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,176 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bt.h
@@ -2298,7 +2298,7 @@
 Index: linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,70 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bt_linux.h
@@ -2373,7 +2373,7 @@
 Index: linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/bluetooth/sdio_bt_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,584 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_bt_os.c
@@ -2962,7 +2962,7 @@
 Index: linux-2.6.22/drivers/sdio/function/memory/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/memory/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/memory/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,5 @@
 +#
 +# SDIO memory card function driver
@@ -2972,7 +2972,7 @@
 Index: linux-2.6.22/drivers/sdio/function/memory/sdio_memory.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,926 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_memory.c
@@ -3903,7 +3903,7 @@
 Index: linux-2.6.22/drivers/sdio/function/memory/sdio_memory.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,98 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: function.h
@@ -4006,7 +4006,7 @@
 Index: linux-2.6.22/drivers/sdio/function/memory/sdio_memory_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,80 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_memory_linux.h
@@ -4091,7 +4091,7 @@
 Index: linux-2.6.22/drivers/sdio/function/memory/sdio_memory_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/memory/sdio_memory_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1036 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_memory_os.c
@@ -5132,7 +5132,7 @@
 Index: linux-2.6.22/drivers/sdio/function/Kconfig
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/Kconfig	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/Kconfig	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,32 @@
 +
 +menu "SDIO function drivers"
@@ -5169,7 +5169,7 @@
 Index: linux-2.6.22/drivers/sdio/function/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/function/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/function/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,7 @@
 +#
 +# SDIO function drivers Makefile

Modified: developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_shcd.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_shcd.patch	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/common_atheros_sdiostack_shcd.patch	2007-12-07 01:13:30 UTC (rev 3610)
@@ -12,7 +12,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pci_std/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pci_std/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pci_std/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,4 @@
 +obj-m += sdio_pcistd_hcd.o
 +
@@ -21,7 +21,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/pci_std/sdio_hcd_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/pci_std/sdio_hcd_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/pci_std/sdio_hcd_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,569 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_hcd_os.c
@@ -595,7 +595,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/stdhost/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/stdhost/Makefile	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/stdhost/Makefile	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,7 @@
 +#
 +# SDIO standard host controller makefile
@@ -607,7 +607,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,1663 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_std_hcd.c
@@ -2275,7 +2275,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,330 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_std_hcd.h
@@ -2610,7 +2610,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_linux.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_linux.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_linux.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,132 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_std_hcd_linux.h
@@ -2747,7 +2747,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_linux_lib.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_linux_lib.h	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_linux_lib.h	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,79 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_std_hcd_linux_lib.h
@@ -2831,7 +2831,7 @@
 Index: linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_os.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_os.c	2007-11-28 16:38:00.000000000 +0100
++++ linux-2.6.22/drivers/sdio/hcd/stdhost/sdio_std_hcd_os.c	2007-11-29 20:54:57.000000000 +0100
 @@ -0,0 +1,826 @@
 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 + at file: sdio_std_hcd_os.c

Modified: developers/sameo/patches/ar6k-atheros/gta02_wifi_defconfig
===================================================================
--- developers/sameo/patches/ar6k-atheros/gta02_wifi_defconfig	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/gta02_wifi_defconfig	2007-12-07 01:13:30 UTC (rev 3610)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.22.5
-# Thu Nov 22 15:33:15 2007
+# Tue Dec  4 02:10:32 2007
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -666,7 +666,7 @@
 CONFIG_MTD_NAND_S3C2410_BBT=y
 # CONFIG_MTD_NAND_S3C2410_DEBUG is not set
 CONFIG_MTD_NAND_S3C2410_HWECC=y
-CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
 # CONFIG_MTD_NAND_DISKONCHIP is not set
 # CONFIG_MTD_NAND_NANDSIM is not set
 # CONFIG_MTD_NAND_PLATFORM is not set
@@ -702,6 +702,7 @@
 # Host Controllers
 #
 CONFIG_SDIO_S3C24XX=y
+CONFIG_SDIO_S3C24XX_DMA=y
 # CONFIG_SDIO_SPI is not set
 
 #

Modified: developers/sameo/patches/ar6k-atheros/mach-gta02_wifi.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros/mach-gta02_wifi.patch	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/mach-gta02_wifi.patch	2007-12-07 01:13:30 UTC (rev 3610)
@@ -4,8 +4,8 @@
 
 Index: linux-2.6.22/arch/arm/mach-s3c2440/mach-gta02.c
 ===================================================================
---- linux-2.6.22.orig/arch/arm/mach-s3c2440/mach-gta02.c	2007-11-28 16:37:29.000000000 +0100
-+++ linux-2.6.22/arch/arm/mach-s3c2440/mach-gta02.c	2007-11-28 19:06:57.000000000 +0100
+--- linux-2.6.22.orig/arch/arm/mach-s3c2440/mach-gta02.c	2007-11-29 20:54:19.000000000 +0100
++++ linux-2.6.22/arch/arm/mach-s3c2440/mach-gta02.c	2007-11-29 20:54:57.000000000 +0100
 @@ -305,6 +305,35 @@
  	},
  };

Modified: developers/sameo/patches/ar6k-atheros/pnp_fixes_2.6.22.5.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros/pnp_fixes_2.6.22.5.patch	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/pnp_fixes_2.6.22.5.patch	2007-12-07 01:13:30 UTC (rev 3610)
@@ -4,8 +4,8 @@
 
 Index: linux-2.6.22/drivers/pnp/resource.c
 ===================================================================
---- linux-2.6.22.orig/drivers/pnp/resource.c	2007-11-28 16:37:31.000000000 +0100
-+++ linux-2.6.22/drivers/pnp/resource.c	2007-11-28 16:38:00.000000000 +0100
+--- linux-2.6.22.orig/drivers/pnp/resource.c	2007-11-29 20:54:23.000000000 +0100
++++ linux-2.6.22/drivers/pnp/resource.c	2007-11-29 20:54:57.000000000 +0100
 @@ -447,6 +447,7 @@
  		}
  	}

Modified: developers/sameo/patches/ar6k-atheros/s3c24xx_hcd_atheros.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros/s3c24xx_hcd_atheros.patch	2007-12-06 17:35:26 UTC (rev 3609)
+++ developers/sameo/patches/ar6k-atheros/s3c24xx_hcd_atheros.patch	2007-12-07 01:13:30 UTC (rev 3610)
@@ -1,16 +1,16 @@
 ---
- drivers/sdio/hcd/Kconfig               |    8 
+ drivers/sdio/hcd/Kconfig               |   14 
  drivers/sdio/hcd/Makefile              |    1 
  drivers/sdio/hcd/s3c24xx/Makefile      |    2 
- drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c | 1301 +++++++++++++++++++++++++++++++++
- drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h |   63 +
- 5 files changed, 1375 insertions(+)
+ drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c | 1481 +++++++++++++++++++++++++++++++++
+ drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h |   66 +
+ 5 files changed, 1564 insertions(+)
 
-Index: linux-2.6.22/drivers/sdio/hcd/Kconfig
+Index: linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/Kconfig
 ===================================================================
---- linux-2.6.22.orig/drivers/sdio/hcd/Kconfig	2007-11-28 19:04:34.000000000 +0100
-+++ linux-2.6.22/drivers/sdio/hcd/Kconfig	2007-11-28 19:31:56.000000000 +0100
-@@ -46,6 +46,14 @@
+--- linux-2.6.22.5-openmoko-dma-wifi.orig/drivers/sdio/hcd/Kconfig	2007-12-05 18:54:42.000000000 +0100
++++ linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/Kconfig	2007-12-05 18:56:13.000000000 +0100
+@@ -46,6 +46,20 @@
  	help
  	  good luck.
  
@@ -21,38 +21,57 @@
 +	help
 +	  good luck.
 +
++config SDIO_S3C24XX_DMA
++	bool "Samsung s3c24xx host controller DMA I/O"
++	depends on SDIO_S3C24XX
++	default n
++	help
++	  good luck.
 +
  config SDIO_SPI
  	tristate "SPI host controller"
  	depends on SPI
-Index: linux-2.6.22/drivers/sdio/hcd/Makefile
+Index: linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/Makefile
 ===================================================================
---- linux-2.6.22.orig/drivers/sdio/hcd/Makefile	2007-11-28 19:04:34.000000000 +0100
-+++ linux-2.6.22/drivers/sdio/hcd/Makefile	2007-11-28 19:31:56.000000000 +0100
+--- linux-2.6.22.5-openmoko-dma-wifi.orig/drivers/sdio/hcd/Makefile	2007-12-05 18:54:42.000000000 +0100
++++ linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/Makefile	2007-12-05 18:56:13.000000000 +0100
 @@ -6,3 +6,4 @@
  obj-$(CONFIG_ARCH_OMAP24XX)		+= omap_2420/
  obj-$(CONFIG_PXA27x)			+= pxa270/
  obj-$(CONFIG_PXA255)			+= pxa255/
 +obj-$(CONFIG_PLAT_S3C24XX)	 	+= s3c24xx/
-Index: linux-2.6.22/drivers/sdio/hcd/s3c24xx/Makefile
+Index: linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/s3c24xx/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/s3c24xx/Makefile	2007-11-28 19:31:56.000000000 +0100
++++ linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/s3c24xx/Makefile	2007-12-05 18:56:13.000000000 +0100
 @@ -0,0 +1,2 @@
 +obj-$(CONFIG_PLAT_S3C24XX) += sdio_s3c24xx_hcd.o
 +sdio_s3c24xx_hcd-objs := s3c24xx_hcd.o
-Index: linux-2.6.22/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c
+Index: linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c	2007-11-29 20:24:25.000000000 +0100
-@@ -0,0 +1,1301 @@
++++ linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c	2007-12-07 01:56:31.000000000 +0100
+@@ -0,0 +1,1481 @@
 +/*
-+ *  s3c24xx_hcd.c - Samsung S3C MCI driver
++ * s3c24xx_hcd.c - Samsung S3C MCI driver, Atheros SDIO API compatible.
 + *
++ * Copyright (C) 2007 by OpenMoko, Inc.
++ * Written by Samuel Ortiz <sameo at openedhand.com>
++ * All Rights Reserved
 + *
 + * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
++ * 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 program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License along
++ * with this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 + */
 +
 +#include <linux/kernel.h>
@@ -68,6 +87,8 @@
 +#include <linux/workqueue.h>
 +#include <linux/completion.h>
 +#include <linux/delay.h>
++#include <linux/seq_file.h>
++#include <linux/debugfs.h>
 +
 +#include <linux/sdio/ctsystem.h>
 +#include <linux/sdio/sdio_busdriver.h>
@@ -97,6 +118,22 @@
 +
 +extern struct platform_device s3c_device_sdi;
 +
++static void dump_request(struct s3c24xx_hcd_context * context)
++{
++    if (context->hcd.pCurrentRequest != NULL) {
++        DBG_PRINT(SDDBG_ERROR, ("Current Request Command:%d, ARG:0x%8.8X flags: 0x%04x\n",
++				context->hcd.pCurrentRequest->Command, context->hcd.pCurrentRequest->Argument,
++				GET_SDREQ_RESP_TYPE(context->hcd.pCurrentRequest->Flags)));
++        if (IS_SDREQ_DATA_TRANS(context->hcd.pCurrentRequest->Flags)) {
++            DBG_PRINT(SDDBG_ERROR, ("Data %s, Blocks: %d, BlockLen:%d Remaining: %d \n",
++                      IS_SDREQ_WRITE_DATA(context->hcd.pCurrentRequest->Flags) ? "WRITE":"READ",
++                      context->hcd.pCurrentRequest->BlockCount,
++                      context->hcd.pCurrentRequest->BlockLen,
++                      context->hcd.pCurrentRequest->DataRemaining));
++        }
++    }
++}
++
 +static void s3c24xx_dump_regs(struct s3c24xx_hcd_context * context)
 +{
 +	u32 con, pre, cmdarg, cmdcon, cmdsta, r0, r1, r2, r3, timer, bsize;
@@ -139,11 +176,15 @@
 +
 +static inline void s3c24xx_hcd_clear_imask(struct s3c24xx_hcd_context * context)
 +{
-+	if (context->int_sdio)
++	/* UGLY UGLY UGLY */
++//	udelay(20);
++
++	if (context->int_sdio) {
 +		writel(S3C2410_SDIIMSK_SDIOIRQ | S3C2410_SDIIMSK_READWAIT,
 +		       context->base + S3C2440_SDIIMSK);
-+	else
++	}  else {
 +		writel(0, context->base + S3C2440_SDIIMSK);
++	}
 +}
 +
 +static inline void s3c24xx_hcd_set_imask(struct s3c24xx_hcd_context * context)
@@ -227,7 +268,7 @@
 +	writel(fsta, context->base + S3C2410_SDIFSTA);
 +}
 +
-+
++#if 0
 +static void s3c24xx_hcd_reset(struct s3c24xx_hcd_context * context)
 +{
 +	u32 con, counter;
@@ -252,6 +293,7 @@
 +
 +	spin_unlock_irqrestore(&context->lock, flags);
 +}
++#endif
 +
 +static SDIO_STATUS s3c24xx_hcd_clock_enable(struct s3c24xx_hcd_context * context,
 +					    unsigned int clock_rate,
@@ -333,11 +375,9 @@
 +}
 +
 +
-+static void s3c24xx_hcd_pio_complete(struct s3c24xx_hcd_context * context)
++static void s3c24xx_hcd_dma_complete(struct s3c24xx_hcd_context * context)
 +{
-+	u32 fsta, dsta, counter;
-+	u8 *ptr;
-+	int fifo_count;
++	u32 dsta, counter, i;
 +	PSDREQUEST req;
 +	SDIO_STATUS status = SDIO_STATUS_ERROR;
 +
@@ -347,71 +387,91 @@
 +		return;
 +	}
 +
-+	ptr = req->pDataBuffer;
++	if (context->complete == S3C24XX_HCD_DATA_READ) {
++		/* DMA READ completion */
++		if (context->latest_xfer_size != req->DataRemaining) {
++			DBG_PRINT(SDDBG_ERROR, ("Unexpected read xfer size: %d <-> %d\n",
++						context->latest_xfer_size, req->DataRemaining));
++			status = SDIO_STATUS_BUS_WRITE_ERROR;
++		}
 +
-+	if (context->dma_en) {
-+		/* Start DMA */
-+//		printk("Starting DMA\n");
-+//		s3c2410_dma_ctrl(context->dma_channel, S3C2410_DMAOP_START);
-+
-+		printk("Waiting for DMA to complete\n");
-+		wait_for_completion(&context->dma_complete);
-+		printk("DMA done\n");
-+
-+		if (context->complete == S3C24XX_HCD_DATA_READ) {
-+			/* DMA READ completion */
-+			if (context->latest_xfer_size != req->DataRemaining) {
-+				DBG_PRINT(SDDBG_ERROR, ("Unexpected read xfer size: %d <-> %d\n",
-+							context->latest_xfer_size, req->DataRemaining));
-+				status = SDIO_STATUS_BUS_WRITE_ERROR;
++		counter = 0;
++		dsta = readl(context->base + S3C2410_SDIDSTA);
++		while (!(dsta & S3C2410_SDIDSTA_XFERFINISH)) {
++			if (counter > 500) {
++				printk("read xfer timed out\n");
++				s3c24xx_dump_regs(context);
++				memcpy(req->pDataBuffer, context->io_buffer,
++				       req->BlockCount * req->BlockLen);
++				printk("Transfer: %dx%d\n", req->BlockCount, req->BlockLen);
++				for (i = 0; i < req->DataRemaining; i++)
++					printk("0x%x ", *(((char *)context->io_buffer) + i));
++				printk("\n");
++				status = SDIO_STATUS_BUS_READ_TIMEOUT;
++				goto out;
 +			}
 +			dsta = readl(context->base + S3C2410_SDIDSTA);
-+			if (dsta & S3C2410_SDIDSTA_XFERFINISH) {
-+				int i;
-+				printk("DMA read xfer done\n");
++			counter++;
++			mdelay(1);
++		};
 +
-+				for (i = 0; i < 4; i++)
-+					printk("0x%x ", *(((char *)context->io_buffer) + i));
-+				printk("\n");
++		dma_sync_single(NULL, context->io_buffer_dma,
++				req->BlockCount * req->BlockLen, DMA_BIDIRECTIONAL);
 +
-+				writel(S3C2410_SDIDSTA_XFERFINISH, context->base + S3C2410_SDIDSTA);
-+				memcpy(req->pDataBuffer, context->io_buffer,
-+				       req->BlockCount * req->BlockLen);
-+				req->DataRemaining = 0;
-+				status = SDIO_STATUS_SUCCESS;
-+			} else {
-+				int i;
++		writel(S3C2410_SDIDSTA_XFERFINISH, context->base + S3C2410_SDIDSTA);
 +
-+				printk("DMA read xfer unfinished\n");
-+				for (i = 0; i < 4; i++)
-+					printk("0x%x ", *(((char *)context->io_buffer) + i));
-+				printk("\n");
++		memcpy(req->pDataBuffer, context->io_buffer,
++		       req->BlockCount * req->BlockLen);
 +
-+				status = SDIO_STATUS_BUS_READ_TIMEOUT;
-+			}
-+		} else if (context->complete == S3C24XX_HCD_DATA_WRITE) {
-+			/* DMA WRITE completion */
-+			if (context->latest_xfer_size != req->DataRemaining) {
-+				DBG_PRINT(SDDBG_ERROR, ("Unexpected write xfer size: %d <-> %d\n",
-+							context->latest_xfer_size, req->DataRemaining));
++		req->DataRemaining = 0;
++		status = SDIO_STATUS_SUCCESS;
++
++	} else if (context->complete == S3C24XX_HCD_DATA_WRITE) {
++		/* DMA WRITE completion */
++		if (context->latest_xfer_size != req->DataRemaining) {
++			DBG_PRINT(SDDBG_ERROR, ("Unexpected write xfer size: %d <-> %d\n",
++						context->latest_xfer_size, req->DataRemaining));
++			status = SDIO_STATUS_BUS_WRITE_ERROR;
++		}
++
++		dsta = readl(context->base + S3C2410_SDIDSTA);
++		counter = 0;
++		while (!(dsta & S3C2410_SDIDSTA_XFERFINISH)) {
++			if (counter > 500) {
++				printk("write xfer timed out\n");
 +				status = SDIO_STATUS_BUS_WRITE_ERROR;
++				goto out;
 +			}
-+
 +			dsta = readl(context->base + S3C2410_SDIDSTA);
-+			if (dsta & S3C2410_SDIDSTA_XFERFINISH) {
-+				printk("DMA write xfer done\n");
-+				writel(S3C2410_SDIDSTA_XFERFINISH, context->base + S3C2410_SDIDSTA);
-+				req->DataRemaining = 0;
-+				status = SDIO_STATUS_SUCCESS;
-+			} else {
-+				printk("DMA write xfer unfinished\n");
-+				status = SDIO_STATUS_BUS_WRITE_ERROR;
-+			}
-+		}
++			counter++;
++			mdelay(1);
++		};
 +
-+		goto out;
++		writel(S3C2410_SDIDSTA_XFERFINISH, context->base + S3C2410_SDIDSTA);
++		req->DataRemaining = 0;
++		status = SDIO_STATUS_SUCCESS;
 +	}
 +
++ out:
++	req->Status = status;
++}
++
++static void s3c24xx_hcd_pio_complete(struct s3c24xx_hcd_context * context)
++{
++	u32 fsta, counter;
++	u8 *ptr;
++	int fifo_count;
++	PSDREQUEST req;
++	SDIO_STATUS status = SDIO_STATUS_ERROR;
++
++	req = GET_CURRENT_REQUEST(&context->hcd);
++	if (req == NULL) {
++		DBG_PRINT(SDDBG_ERROR, ("%s(): No current request\n", __FUNCTION__));
++		return;
++	}
++
++	ptr = req->pDataBuffer;
++
 +	if (context->complete == S3C24XX_HCD_DATA_READ) {
 +		counter = 0;
 +		DBG_PRINT(SDDBG_TRACE, ("Data read..."));
@@ -424,7 +484,6 @@
 +				status = SDIO_STATUS_BUS_READ_TIMEOUT;
 +				s3c24xx_dump_regs(context);
 +				goto out;
-+				break;
 +			}
 +		} while(!(fsta & S3C2410_SDIFSTA_RFDET));
 +		DBG_PRINT(SDDBG_TRACE, ("RX detected\n"));
@@ -459,6 +518,7 @@
 +
 +				ptr += context->data_size;
 +				fifo_count -= context->data_size;
++
 +			}
 +
 +			if (!req->DataRemaining) {
@@ -497,15 +557,9 @@
 +		} while(!(fsta & S3C2410_SDIFSTA_TFDET));
 +		DBG_PRINT(SDDBG_TRACE, ("TX detected\n"));
 +
-+
-+//		while ((fifo_count = (63 -
-+//		       (readl(context->base + S3C2410_SDIFSTA) & S3C2410_SDIFSTA_COUNTMASK)))) {
-+//				printk("%s(): We can write %d bytes\n", __FUNCTION__, fifo_count);
-+
-+
 +		while (1) {
 +			counter = 0;
-+			fifo_count = 63 - readl(context->base + S3C2410_SDIFSTA) & S3C2410_SDIFSTA_COUNTMASK;
++			fifo_count = 63 - (readl(context->base + S3C2410_SDIFSTA) & S3C2410_SDIFSTA_COUNTMASK);
 +			while (!fifo_count) {
 +				counter++;
 +				mdelay(1);
@@ -514,7 +568,7 @@
 +					DBG_PRINT(SDDBG_ERROR, ("No more space in FIFO\n"));
 +					goto out;
 +				}
-+				fifo_count = 63 - readl(context->base + S3C2410_SDIFSTA) & S3C2410_SDIFSTA_COUNTMASK;
++				fifo_count = 63 - (readl(context->base + S3C2410_SDIFSTA) & S3C2410_SDIFSTA_COUNTMASK);
 +			}
 +
 +			if (fifo_count > req->DataRemaining)
@@ -561,20 +615,18 @@
 +	req->Status = status;
 +}
 +
-+static void s3c24xx_hcd_pio_work(struct work_struct *work)
++static void s3c24xx_hcd_io_work(struct work_struct *work)
 +{
 +	PSDREQUEST req;
 +	struct s3c24xx_hcd_context * context =
-+		container_of(work, struct s3c24xx_hcd_context, pio_work);
++		container_of(work, struct s3c24xx_hcd_context, io_work);
 +
++	disable_irq(context->io_irq);
++
 +	req = GET_CURRENT_REQUEST(&context->hcd);
 +	if (req == NULL) {
-+		if (context->int_sdio_pending) {
-+			SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
-+			context->int_sdio_pending = 0;
-+		} else {
-+			DBG_PRINT(SDDBG_ERROR, ("%s(): No current request\n", __FUNCTION__));
-+		}
++		DBG_PRINT(SDDBG_ERROR, ("%s(): No current request\n", __FUNCTION__));
++		enable_irq(context->io_irq);
 +		return;
 +	}
 +
@@ -585,13 +637,6 @@
 +		goto out;
 +	}
 +
-+	if (context->int_sdio_pending) {
-+		SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
-+		context->int_sdio_pending = 0;
-+	}
-+
-+  	spin_lock(&context->lock);
-+
 +	if (context->complete == S3C24XX_HCD_NO_RESPONSE &&
 +	    req->Status == SDIO_STATUS_SUCCESS) {
 +		DBG_PRINT(SDDBG_TRACE, ("CMD done, Status: %d\n", req->Status));
@@ -616,6 +661,7 @@
 +			memcpy(&req->Response[1], (u8*)resp, 4);
 +			req->Response[5] = (readl(context->base + S3C2410_SDICMDSTAT) & 0xff);
 +		} else {
++			printk("LONG response: 0x%08x\n", resp[0]);
 +			DBG_PRINT(SDDBG_TRACE, ("LONG response: 0x%08x\n", resp[0]));
 +			memcpy(&req->Response[1], (u8*)resp, 16);
 +			//req->Response[17] = (readl(context->base + S3C2410_SDICMDSTAT) & 0xff);
@@ -623,8 +669,18 @@
 +
 +		/* There is a data stage */
 +		if (context->complete == S3C24XX_HCD_DATA_READ ||
-+		    context->complete == S3C24XX_HCD_DATA_WRITE)
-+			s3c24xx_hcd_pio_complete(context);
++		    context->complete == S3C24XX_HCD_DATA_WRITE) {
++			if (context->dma_en) {
++
++				s3c2410_dma_ctrl(context->dma_channel, S3C2410_DMAOP_START);
++
++				wait_for_completion(&context->dma_complete);
++
++				s3c24xx_hcd_dma_complete(context);
++			} else {
++				s3c24xx_hcd_pio_complete(context);
++			}
++		}
 +	}
 +
 + out:
@@ -634,7 +690,7 @@
 +	writel(0, context->base + S3C2410_SDICMDARG);
 +	writel(0, context->base + S3C2410_SDICMDCON);
 +
-+	spin_unlock(&context->lock);
++	enable_irq(context->io_irq);
 +
 +	SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_TRANSFER_DONE);
 +}
@@ -645,7 +701,11 @@
 +	struct s3c24xx_hcd_context * context =
 +		(struct s3c24xx_hcd_context *) buf_id;
 +
-+	printk("DMA done\n");
++	if (result != S3C2410_RES_OK) {
++		DBG_PRINT(SDDBG_ERROR, ("%s(): DMA xfer failed: %d\n", __FUNCTION__, result));
++		s3c24xx_dump_regs(context);
++	}
++
 +	context->latest_xfer_size = size;
 +	complete(&context->dma_complete);
 +}
@@ -676,20 +736,24 @@
 +	if(!IS_SDREQ_WRITE_DATA(req->Flags)) {
 +		read = 1;
 +		source = S3C2410_DMASRC_HW;
-+		hwcfg = S3C2410_DISRCC_APB;
++		hwcfg = S3C2410_DISRCC_APB | 1;
 +	} else {
 +		memcpy(context->io_buffer, req->pDataBuffer, req->DataRemaining);
++		dma_sync_single(NULL, context->io_buffer_dma,
++				req->BlockCount * req->BlockLen, DMA_BIDIRECTIONAL);
++
 +	}
 +
 +	s3c2410_dma_devconfig(context->dma_channel, source, hwcfg,
 +			      (unsigned long)context->mem->start + S3C2440_SDIDATA);
 +
-+	s3c2410_dma_config(context->dma_channel, 1,
-+			   (S3C2410_DCON_HWTRIG | S3C2410_DCON_CH0_SDI));
++	s3c2410_dma_config(context->dma_channel, context->data_size,
++			   S3C2410_DCON_CH0_SDI);
++			   //(S3C2410_DCON_HWTRIG | S3C2410_DCON_CH0_SDI));
 +
 +	s3c2410_dma_set_buffdone_fn(context->dma_channel, s3c24xx_hcd_dma_done);
 +
-+	s3c2410_dma_setflags(context->dma_channel, S3C2410_DMAF_AUTOSTART);
++//	s3c2410_dma_setflags(context->dma_channel, S3C2410_DMAF_AUTOSTART);
 +
 +	s3c2410_dma_ctrl(context->dma_channel, S3C2410_DMAOP_FLUSH);
 +
@@ -703,7 +767,7 @@
 +
 +static irqreturn_t s3c24xx_hcd_irq(int irq, void *dev_id)
 +{
-+	u32 cmdsta, dsta;
++	u32 cmdsta, dsta, fsta;
 +	unsigned long flags;
 +	PSDREQUEST req;
 +	struct s3c24xx_hcd_context * context =
@@ -715,27 +779,29 @@
 +
 +	cmdsta = readl(context->base + S3C2410_SDICMDSTAT);
 +	dsta = readl(context->base + S3C2410_SDIDSTA);
++	fsta = readl(context->base + S3C2410_SDIFSTA);
++
++	context->cmdsta = cmdsta;
++	context->dsta = dsta;
++	context->fsta = fsta;
++
 +	s3c24xx_hcd_clear_csta(context);
 +
 +	if (dsta & S3C2410_SDIDSTA_SDIOIRQDETECT) {
 +		writel(S3C2410_SDIDSTA_SDIOIRQDETECT, context->base + S3C2410_SDIDSTA);
 +
-+		if (context->int_sdio &&
-+		    !context->int_sdio_reported &&
-+		    !context->int_sdio_pending) {
++		if (context->int_sdio) {
 +			u32 imask;
 +
-+//			printk("Got SDIO IRQ\n");
-+
 +			context->int_sdio = 0;
-+			context->int_sdio_reported = 1;
-+			context->int_sdio_pending = 1;
 +
 +			imask = readl(context->base + S3C2440_SDIIMSK);
 +			imask &= ~S3C2410_SDIIMSK_SDIOIRQ;
 +			writel(imask, context->base + S3C2440_SDIIMSK);
-+			schedule_work(&context->pio_work);
++			SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
 +		}
++
++		writel(S3C2410_SDIDSTA_SDIOIRQDETECT, context->base + S3C2410_SDIDSTA);
 +	}
 +
 +	req = GET_CURRENT_REQUEST(&context->hcd);
@@ -747,27 +813,79 @@
 +	if (cmdsta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
 +		DBG_PRINT(SDDBG_ERROR, ("TIMEOUT\n"));
 +		req->Status = SDIO_STATUS_BUS_RESP_TIMEOUT;
-+		schedule_work(&context->pio_work);
++		writel(S3C2410_SDICMDSTAT_CMDTIMEOUT, context->base + S3C2410_SDICMDSTAT);
++		schedule_work(&context->io_work);
 +	}
 +
++	if (cmdsta & S3C2410_SDICMDSTAT_CRCFAIL) {
++		DBG_PRINT(SDDBG_ERROR, ("CRCFAIL 0x%x\n", cmdsta));
++		req->Status = SDIO_STATUS_BUS_RESP_CRC_ERR;
++		dump_request(context);
++		writel(S3C2410_SDICMDSTAT_CRCFAIL, context->base + S3C2410_SDICMDSTAT);
++		schedule_work(&context->io_work);
++	}
++
++
 +	if (cmdsta & S3C2410_SDICMDSTAT_CMDSENT) {
++		writel(S3C2410_SDICMDSTAT_CMDSENT, context->base + S3C2410_SDICMDSTAT);
++
 +		if (context->complete == S3C24XX_HCD_NO_RESPONSE) {
 +			req->Status = SDIO_STATUS_SUCCESS;
-+			schedule_work(&context->pio_work);
++			schedule_work(&context->io_work);
 +		}
 +	}
 +
-+	if (cmdsta & S3C2410_SDICMDSTAT_RSPFIN) {
++	if (cmdsta & S3C2410_SDICMDSTAT_RSPFIN ||
++		(IS_SDREQ_WRITE_DATA(req->Flags) && (fsta &  S3C2410_SDIFSTA_TFDET)) ||
++		(!IS_SDREQ_WRITE_DATA(req->Flags) && (fsta &  S3C2410_SDIFSTA_RFDET))) {
++
++		writel(S3C2410_SDICMDSTAT_RSPFIN, context->base + S3C2410_SDICMDSTAT);
++
 +		if (context->complete == S3C24XX_HCD_RESPONSE_SHORT ||
 +		    context->complete == S3C24XX_HCD_RESPONSE_LONG ||
 +		    context->complete == S3C24XX_HCD_DATA_READ ||
 +		    context->complete == S3C24XX_HCD_DATA_WRITE) {
 +			req->Status = SDIO_STATUS_SUCCESS;
-+			schedule_work(&context->pio_work);
++			schedule_work(&context->io_work);
 +		}
 +	}
 +
 + out:
++	if (dsta & S3C2410_SDIDSTA_RDYWAITREQ) {
++		printk("S3C2410_SDIDSTA_RDYWAITREQ\n");
++		//writel(S3C2410_SDIDSTA_RDYWAITREQ, context->base + S3C2410_SDIDSTA);
++	}
++
++	if (dsta & S3C2410_SDIDSTA_FIFOFAIL) {
++		printk("S3C2410_SDIDSTA_FIFOFAIL\n");
++		writel(S3C2410_SDIDSTA_FIFOFAIL, context->base + S3C2410_SDIDSTA);
++	}
++
++	if (dsta & S3C2410_SDIDSTA_CRCFAIL) {
++		printk("S3C2410_SDIDSTA_CRCFAIL\n");
++		writel(S3C2410_SDIDSTA_CRCFAIL, context->base + S3C2410_SDIDSTA);
++	}
++
++	if (dsta & S3C2410_SDIDSTA_RXCRCFAIL) {
++		printk("S3C2410_SDIDSTA_RXCRCFAIL\n");
++		writel(S3C2410_SDIDSTA_RXCRCFAIL, context->base + S3C2410_SDIDSTA);
++	}
++
++	if (dsta & S3C2410_SDIDSTA_DATATIMEOUT) {
++		printk("S3C2410_SDIDSTA_DATATIMEOUT\n");
++		writel(S3C2410_SDIDSTA_DATATIMEOUT, context->base + S3C2410_SDIDSTA);
++	}
++
++	if (dsta & S3C2410_SDIDSTA_BUSYFINISH) {
++		printk("S3C2410_SDIDSTA_BUSYFINISH\n");
++		writel(S3C2410_SDIDSTA_BUSYFINISH, context->base + S3C2410_SDIDSTA);
++	}
++
++	if (dsta & S3C2410_SDIDSTA_SBITERR) {
++		printk("S3C2410_SDIDSTA_SBIERR\n");
++		writel(S3C2410_SDIDSTA_SBITERR, context->base + S3C2410_SDIDSTA);
++	}
++
 +	spin_unlock_irqrestore(&context->lock, flags);
 +	return IRQ_HANDLED;
 +}
@@ -775,7 +893,8 @@
 +
 +SDIO_STATUS s3c24xx_hcd_config(PSDHCD hcd, PSDCONFIG config)
 +{
-+	u32 con, imsk, dsta;
++	u32 con, imsk;
++	unsigned long flags;
 +	SDIO_STATUS status = SDIO_STATUS_SUCCESS;
 +	PSDCONFIG_SDIO_INT_CTRL_DATA int_data;
 +	struct s3c24xx_hcd_context * context = (struct s3c24xx_hcd_context *)hcd->pContext;
@@ -816,14 +935,12 @@
 +				printk("SDIO_INT_CTRL enable IRQ\n");
 +				DBG_PRINT(SDDBG_TRACE, ("SDIO_INT_CTRL enable IRQ\n"));
 +				context->int_sdio = 1;
-+				context->int_sdio_reported = 0;
 +				imsk |= S3C2410_SDIIMSK_SDIOIRQ;
 +				writel(imsk, context->base + S3C2440_SDIIMSK);
 +			} else {
 +				printk("SDIO_INT_CTRL disable IRQ\n");
 +				DBG_PRINT(SDDBG_TRACE, ("SDIO_INT_CTRL disable IRQ\n"));
 +				context->int_sdio = 0;
-+				context->int_sdio_reported = 0;
 +				imsk &= ~S3C2410_SDIIMSK_SDIOIRQ;
 +				writel(imsk, context->base + S3C2440_SDIIMSK);
 +			}
@@ -832,15 +949,15 @@
 +		break;
 +        case SDCONFIG_SDIO_REARM_INT:
 +		DBG_PRINT(SDDBG_TRACE, ("config SDIO_REARM_INT\n"));
++		spin_lock_irqsave(&context->lock,flags);
++
 +		context->int_sdio = 1;
-+		context->int_sdio_reported = 0;
 +		imsk = readl(context->base + S3C2440_SDIIMSK);
 +		imsk |= S3C2410_SDIIMSK_SDIOIRQ;
 +		writel(imsk, context->base + S3C2440_SDIIMSK);
-+		dsta = readl(context->base + S3C2410_SDIDSTA);
-+		if (dsta & S3C2410_SDIDSTA_SDIOIRQDETECT) {
-+			context->int_sdio_pending = 1;
-+		}
++
++		spin_unlock_irqrestore(&context->lock,flags);
++
 +		status = SDIO_STATUS_SUCCESS;
 +		break;
 +	case SDCONFIG_FUNC_CHANGE_BUS_MODE:
@@ -871,23 +988,7 @@
 +	return SDIOErrorToOSError(status);
 +}
 +
-+static void dump_request(struct s3c24xx_hcd_context * context)
-+{
-+    if (context->hcd.pCurrentRequest != NULL) {
-+        DBG_PRINT(SDDBG_ERROR, ("Current Request Command:%d, ARG:0x%8.8X flags: 0x%04x\n",
-+				context->hcd.pCurrentRequest->Command, context->hcd.pCurrentRequest->Argument,
-+				GET_SDREQ_RESP_TYPE(context->hcd.pCurrentRequest->Flags)));
-+        if (IS_SDREQ_DATA_TRANS(context->hcd.pCurrentRequest->Flags)) {
-+            DBG_PRINT(SDDBG_ERROR, ("Data %s, Blocks: %d, BlockLen:%d Remaining: %d \n",
-+                      IS_SDREQ_WRITE_DATA(context->hcd.pCurrentRequest->Flags) ? "WRITE":"READ",
-+                      context->hcd.pCurrentRequest->BlockCount,
-+                      context->hcd.pCurrentRequest->BlockLen,
-+                      context->hcd.pCurrentRequest->DataRemaining));
-+        }
-+    }
-+}
 +
-+
 +SDIO_STATUS s3c24xx_hcd_request(PSDHCD hcd)
 +{
 +	SDIO_STATUS status = SDIO_STATUS_PENDING;
@@ -910,7 +1011,8 @@
 +	writel(0xFFFFFFFF, context->base + S3C2410_SDIFSTA);
 +
 +	/* Enabling irqs */
-+	imask = S3C2410_SDIIMSK_READWAIT | S3C2410_SDIIMSK_SDIOIRQ;
++	imask = S3C2410_SDIIMSK_READWAIT;
++//	imask = S3C2410_SDIIMSK_READWAIT | S3C2410_SDIIMSK_SDIOIRQ;
 +
 +	cmdcon = readl(context->base + S3C2410_SDICMDCON);
 +
@@ -942,38 +1044,33 @@
 +
 +	}
 +
-+	/* Check if there is a data part */
-+	if (IS_SDREQ_DATA_TRANS(req->Flags) &&
-+	    !IS_SDREQ_WRITE_DATA(req->Flags))  {
-+		/* Data read */
-+		u32 dcon;
++	/* There is a data part */
++	if (IS_SDREQ_DATA_TRANS(req->Flags)) {
++		u32 dcon = 0;
 +
-+		DBG_PRINT(SDDBG_TRACE, ("Start data read, block count=%d, block size=%d\n",
-+			  req->BlockCount, req->BlockLen));
++		if (readl(context->base + S3C2410_SDIDSTA) &
++		    (S3C2410_SDIDSTA_TXDATAON | S3C2410_SDIDSTA_RXDATAON)) {
++			printk("##### DATA ON: 0x%x ######\n", readl(context->base + S3C2410_SDIDSTA));
++		}
 +
 +		/* Setting timer */
 +		writel(0x7fffff, context->base + S3C2410_SDITIMER);
 +
 +		/* Block size */
 +		writel(req->BlockLen, context->base + S3C2410_SDIBSIZE);
++		/* Number of blocks */
++		dcon |= (0xfff & req->BlockCount);
 +
-+		/* Data configuration: receive after cmd, block mode*/
-+		dcon = S3C2410_SDIDCON_RXAFTERCMD | S3C2410_SDIDCON_BLOCKMODE;
 +		if (context->bus_width == 4)
 +			dcon |= S3C2410_SDIDCON_WIDEBUS;
 +
-+		/* Number of blocks */
-+		dcon |= (0xfff & req->BlockCount);
-+
 +		req->DataRemaining = req->BlockCount * req->BlockLen;
 +
-+		/* This is a read */
-+		dcon |= S3C2410_SDIDCON_XFER_RXSTART;
-+
 +		/* Set data size, and start the transfer */
 +		if (!(req->DataRemaining % 4)) {
 +			context->data_size = 4;
 +			dcon |= S3C2440_SDIDCON_DS_WORD;
++			dcon |= (1 << 24);
 +		} else if (!(req->DataRemaining % 2)) {
 +			context->data_size = 2;
 +			dcon |= S3C2440_SDIDCON_DS_HALFWORD;
@@ -981,81 +1078,60 @@
 +			context->data_size = 1;
 +			dcon |= S3C2440_SDIDCON_DS_BYTE;
 +		}
++
++#ifdef CONFIG_SDIO_S3C24XX_DMA
++		context->dma_en = 1;
++#else
++		context->dma_en = 0;
 +		context->data_size = 1;
 +		dcon |= S3C2440_SDIDCON_DS_BYTE;
++#endif
 +
-+		dcon |= S3C2440_SDIDCON_DATSTART;
-+
 +		if (context->dma_en) {
 +			dcon |= S3C2410_SDIDCON_DMAEN;
 +			s3c24xx_hcd_prepare_dma(context);
 +		}
 +
-+		writel(dcon, context->base + S3C2410_SDIDCON);
++		if (IS_SDREQ_WRITE_DATA(req->Flags)) {
++			/* Data write */
++			DBG_PRINT(SDDBG_TRACE, ("Start data write, block count=%d, block size=%d\n",
++						req->BlockCount, req->BlockLen));
 +
-+		imask |= S3C2410_SDIIMSK_RXFIFOHALF | S3C2410_SDIIMSK_RXFIFOLAST |
-+			S3C2410_SDIIMSK_FIFOFAIL | S3C2410_SDIIMSK_DATACRC |
-+			S3C2410_SDIIMSK_DATATIMEOUT | S3C2410_SDIIMSK_DATAFINISH;
++			/* Data configuration: transmit after resp, block mode*/
++			dcon |= S3C2410_SDIDCON_TXAFTERRESP | S3C2410_SDIDCON_BLOCKMODE;
 +
-+		cmdcon |= S3C2410_SDICMDCON_WITHDATA;
++			/* This is a write */
++			dcon |= S3C2410_SDIDCON_XFER_TXSTART;
 +
-+		context->complete = S3C24XX_HCD_DATA_READ;
-+	} else if (IS_SDREQ_DATA_TRANS(req->Flags) &&
-+		   IS_SDREQ_WRITE_DATA(req->Flags))  {
-+		/* Data write */
-+		u32 dcon;
++			imask |= S3C2410_SDIIMSK_TXFIFOHALF | S3C2410_SDIIMSK_TXFIFOEMPTY |
++				S3C2410_SDIIMSK_FIFOFAIL | S3C2410_SDIIMSK_DATACRC |
++				S3C2410_SDIIMSK_DATATIMEOUT | S3C2410_SDIIMSK_DATAFINISH;
 +
-+		DBG_PRINT(SDDBG_TRACE, ("Start data write, block count=%d, block size=%d\n",
-+			  req->BlockCount, req->BlockLen));
++			context->complete = S3C24XX_HCD_DATA_WRITE;
++		} else {
++			/* Data read */
++			DBG_PRINT(SDDBG_TRACE, ("Start data read, block count=%d, block size=%d\n",
++						req->BlockCount, req->BlockLen));
 +
-+		/* Setting timer */
-+		writel(0x7fffff, context->base + S3C2410_SDITIMER);
++			/* Data configuration: receive after cmd, block mode*/
++			dcon |= S3C2410_SDIDCON_RXAFTERCMD | S3C2410_SDIDCON_BLOCKMODE;
 +
-+		/* Block size */
-+		writel(req->BlockLen, context->base + S3C2410_SDIBSIZE);
++			/* This is a read */
++			dcon |= S3C2410_SDIDCON_XFER_RXSTART;
 +
-+		/* Data configuration: receive after cmd, block mode*/
-+		dcon = S3C2410_SDIDCON_TXAFTERRESP | S3C2410_SDIDCON_BLOCKMODE;
-+		if (context->bus_width == 4)
-+			dcon |= S3C2410_SDIDCON_WIDEBUS;
++			imask |= S3C2410_SDIIMSK_RXFIFOHALF | S3C2410_SDIIMSK_RXFIFOLAST |
++				S3C2410_SDIIMSK_FIFOFAIL | S3C2410_SDIIMSK_DATACRC |
++				S3C2410_SDIIMSK_DATATIMEOUT | S3C2410_SDIIMSK_DATAFINISH;
 +
-+		/* Number of blocks */
-+		dcon |= (0xfff & req->BlockCount);
-+
-+		/* This is a write */
-+		dcon |= S3C2410_SDIDCON_XFER_TXSTART;
-+
-+		req->DataRemaining = req->BlockCount * req->BlockLen;
-+
-+		/* Start data size, and start the transfer */
-+		if (!(req->DataRemaining % 4)) {
-+			context->data_size = 4;
-+			dcon |= S3C2440_SDIDCON_DS_WORD;
-+		} else if (!(req->DataRemaining % 2)) {
-+			context->data_size = 2;
-+			dcon |= S3C2440_SDIDCON_DS_HALFWORD;
-+		} else {
-+			context->data_size = 1;
-+			dcon |= S3C2440_SDIDCON_DS_BYTE;
++			context->complete = S3C24XX_HCD_DATA_READ;
 +		}
-+		context->data_size = 1;
-+		dcon |= S3C2440_SDIDCON_DS_BYTE;
 +
 +		dcon |= S3C2440_SDIDCON_DATSTART;
 +
-+		if (context->dma_en) {
-+			dcon |= S3C2410_SDIDCON_DMAEN;
-+			s3c24xx_hcd_prepare_dma(context);
-+		}
-+
 +		writel(dcon, context->base + S3C2410_SDIDCON);
 +
-+		imask |= S3C2410_SDIIMSK_TXFIFOHALF | S3C2410_SDIIMSK_TXFIFOEMPTY |
-+			S3C2410_SDIIMSK_FIFOFAIL | S3C2410_SDIIMSK_DATACRC |
-+			S3C2410_SDIIMSK_DATATIMEOUT | S3C2410_SDIIMSK_DATAFINISH;
++		cmdcon |= S3C2410_SDICMDCON_WITHDATA;
 +
-+		cmdcon |= S3C2410_SDICMDCON_WITHDATA;
-+		context->complete = S3C24XX_HCD_DATA_WRITE;
 +	} else {
 +		cmdcon &= ~S3C2410_SDICMDCON_WITHDATA;
 +	}
@@ -1138,10 +1214,10 @@
 +
 +	/* DMA */
 +	context->io_buffer_size = 4 * 4096;
-+	context->io_buffer = dma_alloc_coherent(&context->pdev->dev,
-+						context->io_buffer_size,
-+						&context->io_buffer_dma,
-+						GFP_KERNEL);
++	context->io_buffer = dma_alloc_writecombine(&context->pdev->dev,
++						    context->io_buffer_size,
++						    &context->io_buffer_dma,
++						    GFP_KERNEL | GFP_DMA);
 +
 +	if (context->io_buffer == NULL) {
 +		DBG_PRINT(SDDBG_ERROR, ("failed to allocate DMA buffer\n"));
@@ -1180,8 +1256,8 @@
 +	return SDIOErrorToOSError(status);
 +
 + out_free_dma:
-+	dma_free_coherent(&context->pdev->dev,context->io_buffer_size,
-+			  context->io_buffer, context->io_buffer_dma);
++	dma_free_writecombine(&context->pdev->dev,context->io_buffer_size,
++			      context->io_buffer, context->io_buffer_dma);
 +
 + out_free_irq:
 +	free_irq(context->io_irq, context);
@@ -1204,8 +1280,8 @@
 +	free_irq(context->io_irq, context);
 +	iounmap(context->base);
 +	release_mem_region(context->mem->start, RESSIZE(context->mem));
-+	dma_free_coherent(&context->pdev->dev,context->io_buffer_size,
-+			  context->io_buffer, context->io_buffer_dma);
++	dma_free_writecombine(&context->pdev->dev,context->io_buffer_size,
++			      context->io_buffer, context->io_buffer_dma);
 +}
 +
 +static int s3c24xx_hcd_pnp_probe(struct pnp_dev *pBusDevice, const struct pnp_device_id *pId)
@@ -1292,15 +1368,16 @@
 +	hcd_context.dma_en = 0;
 +
 +	hcd_context.int_sdio = 0;
-+	hcd_context.int_sdio_reported = 0;
-+	hcd_context.int_sdio_pending = 0;
 +
 +	spin_lock_init(&hcd_context.lock);
 +
 +	init_completion(&hcd_context.dma_complete);
++	init_completion(&hcd_context.xfer_complete);
 +
-+	INIT_WORK(&hcd_context.pio_work, s3c24xx_hcd_pio_work);
++	INIT_WORK(&hcd_context.io_work, s3c24xx_hcd_io_work);
 +
++	mdelay(100);
++
 +	status = SDIO_BusAddOSDevice(&hcd_context.device.dma,
 +				     &hcd_context.device.pnp_driver,
 +				     &hcd_context.device.pnp_device);
@@ -1327,9 +1404,118 @@
 +	.remove		= s3c24xx_hcd_remove,
 +};
 +
++#ifdef CONFIG_DEBUG_FS
++static struct dentry *debugfs_dir;
 +
++static int s3c24xx_hcd_debugfs_show(struct seq_file *s, void *data)
++{
++	PSDREQUEST req;
++	u32 con, pre, cmdarg, cmdcon, cmdsta, r0, r1, r2, r3, timer, bsize;
++	u32 datcon, datcnt, datsta, fsta, imask;
++	struct s3c24xx_hcd_context * context = &hcd_context;
++
++
++	con 	= readl(context->base + S3C2410_SDICON);
++	pre 	= readl(context->base + S3C2410_SDIPRE);
++	cmdarg 	= readl(context->base + S3C2410_SDICMDARG);
++	cmdcon 	= readl(context->base + S3C2410_SDICMDCON);
++	cmdsta 	= readl(context->base + S3C2410_SDICMDSTAT);
++	r0 	= readl(context->base + S3C2410_SDIRSP0);
++	r1 	= readl(context->base + S3C2410_SDIRSP1);
++	r2 	= readl(context->base + S3C2410_SDIRSP2);
++	r3 	= readl(context->base + S3C2410_SDIRSP3);
++	timer 	= readl(context->base + S3C2410_SDITIMER);
++	bsize 	= readl(context->base + S3C2410_SDIBSIZE);
++	datcon 	= readl(context->base + S3C2410_SDIDCON);
++	datcnt 	= readl(context->base + S3C2410_SDIDCNT);
++	datsta 	= readl(context->base + S3C2410_SDIDSTA);
++	fsta 	= readl(context->base + S3C2410_SDIFSTA);
++	imask   = readl(context->base + S3C2440_SDIIMSK);
++
++	seq_printf(s, "SDICON:    0x%08x\n", con);
++	seq_printf(s, "SDIPRE:    0x%08x\n", pre);
++	seq_printf(s, "SDICmdArg: 0x%08x\n", cmdarg);
++	seq_printf(s, "SDICmdCon: 0x%08x\n", cmdcon);
++	seq_printf(s, "SDICmdSta: 0x%08x\n", cmdsta);
++	seq_printf(s, "SDIRSP0:   0x%08x\n", r0);
++	seq_printf(s, "SDIRSP1:   0x%08x\n", r1);
++	seq_printf(s, "SDIRSP2:   0x%08x\n", r2);
++	seq_printf(s, "SDIRSP3:   0x%08x\n", r3);
++	seq_printf(s, "SDIDTimer: 0x%08x\n", timer);
++	seq_printf(s, "SDIBSize:  0x%08x\n", bsize);
++	seq_printf(s, "SDIDatCon: 0x%08x\n", datcon);
++	seq_printf(s, "SDIDatCnt: 0x%08x\n", datcnt);
++	seq_printf(s, "SDIDatSta: 0x%08x\n", datsta);
++	seq_printf(s, "SDIFSta:   0x%08x\n", fsta);
++	seq_printf(s, "SDIIntMsk: 0x%08x\n", imask);
++	seq_printf(s, "\n");
++
++	seq_printf(s, "Current REQ: \n");
++	req = GET_CURRENT_REQUEST(&context->hcd);
++	if (req == NULL) {
++		seq_printf(s, " No current request\n");
++	} else {
++		seq_printf(s, " Command: %d\n", req->Command);
++		seq_printf(s, " Args: 0x%x\n", req->Argument);
++		seq_printf(s, " Flags: 0x%x\n", req->Flags);
++		seq_printf(s, " %d blocks x %d bytes\n", req->BlockCount, req->BlockLen);
++		seq_printf(s, " %d bytes remaining\n", req->DataRemaining);
++	}
++
++	seq_printf(s, "Context: \n");
++	seq_printf(s, " INT mask: 0x%x\n", context->int_mask);
++	seq_printf(s, " sdio INT: %d\n", context->int_sdio);
++	seq_printf(s, " cmdsta: 0x%x\n", context->cmdsta);
++	seq_printf(s, " dsta: 0x%x\n", context->dsta);
++	seq_printf(s, " fsta: 0x%x\n", context->fsta);
++
++	return 0;
++}
++
++static int s3c24xx_hcd_debugfs_open(struct inode *inode,
++					struct file *file)
++{
++	return single_open(file, s3c24xx_hcd_debugfs_show, NULL);
++}
++
++static const struct file_operations s3c24xx_hcd_debugfs_fops = {
++	.open		= s3c24xx_hcd_debugfs_open,
++	.read		= seq_read,
++	.llseek		= seq_lseek,
++	.release	= single_release,
++	.owner		= THIS_MODULE,
++};
++
++
++static int s3c24xx_debugfs_init(struct s3c24xx_hcd_context * context)
++{
++	debugfs_dir = debugfs_create_dir("s3c24xx_sdio", NULL);
++
++	debugfs_create_file("registers", 0444, debugfs_dir,
++			    (void *)context,
++			    &s3c24xx_hcd_debugfs_fops);
++
++	return 0;
++}
++
++#else
++
++static int s3c24xx_debugfs_init(struct s3c24xx_hcd_context * context)
++{
++	return 0;
++}
++
++#endif
++
 +static int __init s3c24xx_hcd_init(void)
 +{
++	int ret;
++
++	ret = s3c24xx_debugfs_init(&hcd_context);
++	if (!ret) {
++		printk("%s(): debugfs init failed\n", __FUNCTION__);
++	}
++
 +	platform_driver_register(&s3c24xx_hcd_sdio);
 +
 +	return 0;
@@ -1347,11 +1533,11 @@
 +
 +module_init(s3c24xx_hcd_init);
 +module_exit(s3c24xx_hcd_exit);
-Index: linux-2.6.22/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h
+Index: linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h	2007-11-29 10:53:03.000000000 +0100
-@@ -0,0 +1,63 @@
++++ linux-2.6.22.5-openmoko-dma-wifi/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h	2007-12-07 01:55:33.000000000 +0100
+@@ -0,0 +1,66 @@
 +#ifndef __SDIO_S3C24XX_HCD_H___
 +#define __SDIO_S3C24XX_HCD_H___
 +
@@ -1396,17 +1582,20 @@
 +	UINT32                    dma_channel;
 +	UINT32                    dma_en;
 +	struct completion         dma_complete;
++	struct completion         xfer_complete;
 +
 +	UINT32		  	  int_mask;
 +	UINT32		  	  int_sdio;            /* Do we have SDIO interrupt on ? */
-+	UINT32		  	  int_sdio_reported;
-+	UINT32		  	  int_sdio_pending;
 +
 +	UINT32		  	  complete;
 +
++	UINT32		  	  cmdsta;
++	UINT32		  	  dsta;
++	UINT32		  	  fsta;
++
 +	spinlock_t		  lock;
 +
-+	struct work_struct        pio_work;
++	struct work_struct        io_work;
 +};
 +
 +SDIO_STATUS s3c24xx_hcd_config(PSDHCD hcd, PSDCONFIG config);





More information about the commitlog mailing list