--- a/ar6000/hif/hif2.c	2009-03-25 00:23:38.000000000 +0300
+++ b/ar6000//hif/hif2.c	2009-03-30 00:23:14.000000000 +0400
@@ -25,9 +25,18 @@
 #include <linux/sched.h>
 #include <linux/mmc/sdio_func.h>
 #include <linux/mmc/sdio.h>
-#include <linux/mmc/sdio_ids.h>
+
+/*
+ * turn on GTA02 platform depened code.
+ * if you make driver for another, comment it.
+ */
+#define _GTA02_
+
+#ifdef _GTA02_
 #include <asm/gpio.h>
 #include <mach/gta02-pm-wlan.h>
+#include <mach/regs-gpio.h>
+#endif /* end _GTA02_ */
 
 #include "athdefs.h"
 #include "a_types.h"
@@ -132,9 +141,6 @@
 /* ----- Request processing ------------------------------------------------ */
 
 
-#include <mach/regs-gpio.h>
-
-
 static A_STATUS process_request(struct hif_request *req)
 {
 	int ret;
@@ -143,16 +149,20 @@
 	dev_dbg(&req->func->dev, "process_request(req %p)\n", req);
 	sdio_claim_host(req->func);
 	if (req->read) {
+#ifdef _GTA02_
 		while (!s3c2410_gpio_getpin(S3C2410_GPE7)) {
 			printk(KERN_INFO "READ WHILE BUSY !\n");
 			yield();
 		}
+#endif /* end _GTA02_ */
 		ret = req->read(req->func, req->buf, req->addr, req->len);
 	} else {
+#ifdef _GTA02_
 		while (!s3c2410_gpio_getpin(S3C2410_GPE7)) {
 			printk(KERN_INFO "WRITE WHILE BUSY !\n");
 			yield();
 		}
+#endif /* end _GTA02_ */
 		ret = req->write(req->func, req->addr, req->buf, req->len);
 	}
 	sdio_release_host(req->func);
@@ -599,6 +609,7 @@
 }
 
 
+#ifdef _GTA02_
 static int ar6000_rfkill_cb(void *data, int on)
 {
 	struct hif_device *hif = data;
@@ -611,6 +622,7 @@
 	ar6000_deactivate(hif);
 	return 0;
 }
+#endif /* end _GTA02_ */
 
 
 static int sdio_ar6000_probe(struct sdio_func *func,
@@ -632,6 +644,7 @@
 	mutex_init(&hif->activate_lock);
 	hif->active = 0;
 
+#ifdef _GTA02_
 	if (gta02_wlan_query_rfkill_lock())
 		ret = ar6000_activate(hif);
 	if (!ret) {
@@ -639,6 +652,10 @@
 		return 0;
 	}
 	gta02_wlan_query_rfkill_unlock();
+#else /* not _GTA02_ */
+	if (!(ret = ar6000_activate(hif)))
+		return 0;
+#endif /* end _GTA02_ */
 	sdio_set_drvdata(func, NULL);
 	kfree(hif);
 	return ret;
@@ -651,7 +668,9 @@
 	HIF_DEVICE *hif = sdio_get_drvdata(func);
 
 	dev_dbg(dev, "sdio_ar6000_remove\n");
+#ifdef _GTA02_
 	gta02_wlan_clear_rfkill_cb();
+#endif /* end _GTA02_ */
 	ar6000_deactivate(hif);
 	sdio_set_drvdata(func, NULL);
 	kfree(hif);
@@ -660,18 +679,25 @@
 
 /* ----- Device registration/unregistration (called by HIF) ---------------- */
 
+/*
+ * define vendor/device IDs. Preffered keep it in this file,
+ * while it is not will added to official linux kernel.
+ */
+#define SDIO_VENDOR_ID_ATHEROS          0x271
+#define SDIO_DEVICE_ID_ATHEROS_AR6001   0x100
+#define SDIO_DEVICE_ID_ATHEROS_AR6002   0x200
 
 #define ATHEROS_SDIO_DEVICE(id, offset) \
     SDIO_DEVICE(SDIO_VENDOR_ID_ATHEROS, SDIO_DEVICE_ID_ATHEROS_##id | (offset))
 
 static const struct sdio_device_id sdio_ar6000_ids[] = {
-	{ ATHEROS_SDIO_DEVICE(AR6000, 0)	},
-	{ ATHEROS_SDIO_DEVICE(AR6000, 0x1)	},
-	{ ATHEROS_SDIO_DEVICE(AR6000, 0x8)	},
-	{ ATHEROS_SDIO_DEVICE(AR6000, 0x9)	},
-	{ ATHEROS_SDIO_DEVICE(AR6000, 0xa)	},
-	{ ATHEROS_SDIO_DEVICE(AR6000, 0xb)	},
-	{ /* end: all zeroes */			},
+	{ ATHEROS_SDIO_DEVICE(AR6002, 0x0) },
+	{ ATHEROS_SDIO_DEVICE(AR6002, 0x1) },
+	{ ATHEROS_SDIO_DEVICE(AR6001, 0x8) },
+	{ ATHEROS_SDIO_DEVICE(AR6001, 0x9) },
+	{ ATHEROS_SDIO_DEVICE(AR6001, 0xa) },
+	{ ATHEROS_SDIO_DEVICE(AR6001, 0xb) },
+	{ /* end: all zeroes */	           },
 };
 
 MODULE_DEVICE_TABLE(sdio, sdio_ar6000_ids);
