hdr->cmd = cpu_to_le32(cmd);
                /* send it down */
                /* TODO: add more proper sending and error checking */
-               ret = iwmct_tx(priv, 0, parser->buf, trans_size);
+               ret = iwmct_tx(priv, parser->buf, trans_size);
                if (ret != 0) {
                        LOG_INFO(priv, FW_DOWNLOAD,
                                "iwmct_tx returned %d\n", ret);
        LOG_HEXDUMP(FW_DOWNLOAD, parser->buf, sizeof(*hdr));
        /* send it down */
        /* TODO: add more proper sending and error checking */
-       ret = iwmct_tx(priv, 0, parser->buf, IWMC_SDIO_BLK_SIZE);
+       ret = iwmct_tx(priv, parser->buf, IWMC_SDIO_BLK_SIZE);
        if (ret)
                LOG_INFO(priv, FW_DOWNLOAD, "iwmct_tx returned %d", ret);
 
 
        struct list_head read_req_list;
 };
 
-extern int iwmct_tx(struct iwmct_priv *priv, unsigned int addr,
-               void *src, int count);
-
+extern int iwmct_tx(struct iwmct_priv *priv, void *src, int count);
 extern int iwmct_fw_load(struct iwmct_priv *priv);
 
 extern void iwmct_dbg_init_params(struct iwmct_priv *drv);
 
 MODULE_AUTHOR(DRIVER_COPYRIGHT);
 MODULE_FIRMWARE(FW_NAME(FW_API_VER));
 
+
+static inline int __iwmct_tx(struct iwmct_priv *priv, void *src, int count)
+{
+       return sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR, src, count);
+
+}
+int iwmct_tx(struct iwmct_priv *priv, void *src, int count)
+{
+       int ret;
+       sdio_claim_host(priv->func);
+       ret =  __iwmct_tx(priv, src, count);
+       sdio_release_host(priv->func);
+       return ret;
+}
 /*
  * This workers main task is to wait for OP_OPR_ALIVE
  * from TOP FW until ALIVE_MSG_TIMOUT timeout is elapsed.
        }
 
        memcpy(buf, cmd, len);
-
-       sdio_claim_host(priv->func);
-       ret = sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR, buf,
-                              FW_HCMD_BLOCK_SIZE);
-       sdio_release_host(priv->func);
+       ret = iwmct_tx(priv, buf, FW_HCMD_BLOCK_SIZE);
 
        kfree(buf);
        return ret;
 }
 
-int iwmct_tx(struct iwmct_priv *priv, unsigned int addr,
-       void *src, int count)
-{
-       int ret;
-
-       sdio_claim_host(priv->func);
-       ret = sdio_memcpy_toio(priv->func, addr, src, count);
-       sdio_release_host(priv->func);
-
-       return ret;
-}
 
 static void iwmct_irq_read_worker(struct work_struct *ws)
 {
 
                if (barker & BARKER_DNLOAD_SYNC_MSK) {
                        /* Send the same barker back */
-                       ret = sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR,
-                                              buf, iosize);
+                       ret = __iwmct_tx(priv, buf, iosize);
                        if (ret) {
                                LOG_ERROR(priv, IRQ,
                                         "error %d echoing barker\n", ret);