diff --git a/btmtk_sdio.c b/btmtk_sdio.c
index b5aa886..11e424b 100644
--- a/btmtk_sdio.c
+++ b/btmtk_sdio.c
@@ -1946,6 +1946,52 @@
          BTMTK_INFO("%s end\n", __func__);
  }
 
+
+/*
+cmd_type:
+#define HCI_COMMAND_PKT         0x01
+#define HCI_ACLDATA_PKT         0x02
+#define HCI_SCODATA_PKT         0x03
+#define HCI_EVENT_PKT           0x04
+#define HCI_VENDOR_PKT          0xff
+
+
+*/
+  static int btmtk_sdio_send_cmd(u8 cmd_type,u8* cmd,int cmd_len)
+ {
+        u8 ret = 0;
+        u32 sdio_header_len = 0;
+
+        u8 *send_data = NULL;
+
+        if(cmd_len==0){
+                BTMTK_ERR("%s cmd_len (%d) error return\n", __func__,cmd_len);
+                return -EINVAL;
+        }
+
+        send_data = kmalloc(cmd_len+BTM_HEADER_LEN, GFP_KERNEL);
+        sdio_header_len = cmd_len + BTM_HEADER_LEN;
+        memset(send_data, 0, cmd_len+BTM_HEADER_LEN);
+        send_data[0] = (sdio_header_len & 0x0000ff);
+        send_data[1] = (sdio_header_len & 0x00ff00) >> 8;
+        send_data[2] = 0;
+        send_data[3] = 0;
+        send_data[4] = cmd_type ;
+        memcpy(&send_data[BTM_HEADER_LEN], &cmd[0], cmd_len);
+        ret = btmtk_sdio_host_to_card(g_priv, send_data, sdio_header_len);
+        return ret;
+ }
+ static int btmtk_sdio_send_woble_cmd(void)
+ {
+        u8 ret = 0;
+                u8 cmd[] = { 0xC9, 0xFC, 0x0D, 0x01, 0x0E, 0x00, 0x05, 0x43,
+                                0x52, 0x4B, 0x54, 0x4D, 0x20, 0x04, 0x32, 0x00 };
+
+        ret = btmtk_sdio_send_cmd(HCI_COMMAND_PKT,cmd,sizeof(cmd));
+        BTMTK_INFO("%s return %d\n", __func__,ret);
+        return ret;
+ }
+
  static int btmtk_sdio_suspend(struct device *dev)
  {
          struct sdio_func *func = dev_to_sdio_func(dev);
@@ -1955,7 +2001,9 @@
          struct hci_dev *hcidev;
          u8 ret = 0;
 
-         BTMTK_INFO("%s begin return 0, do nothing", __func__);
+         ret = btmtk_sdio_set_own_back(DRIVER_OWN);
+         ret = btmtk_sdio_send_woble_cmd();
+
          return sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
 
          btmtk_sdio_bt_set_power(0);
diff --git a/btmtk_sdio.h b/btmtk_sdio.h
index 8863f10..9545fa5 100644
--- a/btmtk_sdio.h
+++ b/btmtk_sdio.h
@@ -19,7 +19,7 @@
  *
  **/
 
-#define VERSION "v0.0.0.19"
+#define VERSION "v0.0.0.20"
 
 #define SDIO_HEADER_LEN                 4
 
