msm: sdio: Keep certain messages in a local buffer

While logging to the kernel log, keep the last 20 or so messages in
a local buffer. This can be accessed by debugfs or through a crash
dump. This is useful when there is heavy logging to the kernel log
and sdio messages are lost.

Signed-off-by: Krishna Konda <kkonda@codeaurora.org>
diff --git a/arch/arm/mach-msm/sdio_al.c b/arch/arm/mach-msm/sdio_al.c
index caf0b62..2213f9f 100644
--- a/arch/arm/mach-msm/sdio_al.c
+++ b/arch/arm/mach-msm/sdio_al.c
@@ -38,6 +38,8 @@
 #include <linux/debugfs.h>
 #include <linux/uaccess.h>
 #include <linux/syscalls.h>
+#include <linux/time.h>
+#include <linux/spinlock.h>
 
 #include <mach/dma.h>
 #include <mach/gpio.h>
@@ -151,9 +153,31 @@
 
 #define SDIO_TEST_POSTFIX "_TEST"
 
-#define DATA_DEBUG(x...) if (sdio_al->debug.debug_data_on) pr_info(x)
-#define LPM_DEBUG(x...) if (sdio_al->debug.debug_lpm_on) pr_info(x)
+#define DATA_DEBUG(x, y...)						\
+	do {								\
+		if (sdio_al->debug.debug_data_on)			\
+			pr_info(y);					\
+		sdio_al_log(x, y);					\
+	} while (0)
 
+#define LPM_DEBUG(x, y...)						\
+	do {								\
+		if (sdio_al->debug.debug_lpm_on)			\
+			pr_info(y);					\
+		sdio_al_log(x, y);					\
+	} while (0)
+
+#define sdio_al_loge(x, y...)						\
+	do {								\
+		pr_err(y);						\
+		sdio_al_log(x, y);					\
+	} while (0)
+
+#define sdio_al_logi(x, y...)						\
+	do {								\
+		pr_info(y);						\
+		sdio_al_log(x, y);					\
+	} while (0)
 
 /* The index of the SDIO card used for the sdio_al_dloader */
 #define SDIO_BOOTLOADER_CARD_INDEX 1
@@ -167,13 +191,13 @@
 };
 
 struct sdio_al_debug {
-
 	u8 debug_lpm_on;
 	u8 debug_data_on;
 	struct dentry *sdio_al_debug_root;
 	struct dentry *sdio_al_debug_lpm_on;
 	struct dentry *sdio_al_debug_data_on;
 	struct dentry *sdio_al_debug_info;
+	struct dentry *sdio_al_debug_log_buffers[MAX_NUM_OF_SDIO_DEVICES + 1];
 };
 
 /* Polling time for the inactivity timer for devices that doesn't have
@@ -284,6 +308,16 @@
 	struct peer_sdioc_channel_config ch_config[SDIO_AL_MAX_CHANNELS];
 };
 
+#define SDIO_AL_DEBUG_LOG_SIZE 3000
+struct sdio_al_local_log {
+	char buffer[SDIO_AL_DEBUG_LOG_SIZE];
+	unsigned int buf_cur_pos;
+	spinlock_t log_lock;
+};
+
+#define SDIO_AL_DEBUG_TMP_LOG_SIZE 250
+static int sdio_al_log(struct sdio_al_local_log *, const char *fmt, ...);
+
 /**
  *  SDIO Abstraction Layer driver context.
  *
@@ -299,6 +333,8 @@
  *
  */
 struct sdio_al {
+	struct sdio_al_local_log gen_log;
+	struct sdio_al_local_log device_log[MAX_NUM_OF_SDIO_DEVICES];
 	struct sdio_al_platform_data *pdata;
 	struct sdio_al_debug debug;
 	struct sdio_al_device *devices[MAX_NUM_OF_SDIO_DEVICES];
@@ -358,6 +394,7 @@
  *
  */
 struct sdio_al_device {
+	struct sdio_al_local_log *dev_log;
 	struct mmc_card *card;
 	struct sdio_mailbox *mailbox;
 	struct sdio_channel channel[SDIO_AL_MAX_CHANNELS];
@@ -487,6 +524,8 @@
 	.write = debug_info_write,
 };
 
+struct debugfs_blob_wrapper sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES + 1];
+
 /*
 *
 * Trigger on/off for debug messages
@@ -501,6 +540,8 @@
 */
 static int sdio_al_debugfs_init(void)
 {
+	int i, blob_errs = 0;
+
 	sdio_al->debug.sdio_al_debug_root = debugfs_create_dir("sdio_al", NULL);
 	if (!sdio_al->debug.sdio_al_debug_root)
 		return -ENOENT;
@@ -523,39 +564,125 @@
 					NULL,
 					&debug_info_ops);
 
+	for (i = 0; i < MAX_NUM_OF_SDIO_DEVICES; ++i) {
+		char temp[18];
+
+		scnprintf(temp, 18, "sdio_al_log_dev_%d", i + 1);
+		sdio_al->debug.sdio_al_debug_log_buffers[i] =
+			debugfs_create_blob(temp,
+					S_IRUGO | S_IWUGO,
+					sdio_al->debug.sdio_al_debug_root,
+					&sdio_al_dbgfs_log[i]);
+	}
+
+	sdio_al->debug.sdio_al_debug_log_buffers[MAX_NUM_OF_SDIO_DEVICES] =
+			debugfs_create_blob("sdio_al_gen_log",
+				S_IRUGO | S_IWUGO,
+				sdio_al->debug.sdio_al_debug_root,
+				&sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES]);
+
+	for (i = 0; i < (MAX_NUM_OF_SDIO_DEVICES + 1); ++i) {
+		if (!sdio_al->debug.sdio_al_debug_log_buffers[i]) {
+			pr_err(MODULE_NAME ": Failed to create debugfs buffer"
+				   " entry for "
+				   "sdio_al->debug.sdio_al_debug_log_buffers[%d]",
+				   i);
+			blob_errs = 1;
+		}
+	}
+
+	if (blob_errs) {
+		for (i = 0; i < (MAX_NUM_OF_SDIO_DEVICES + 1); ++i)
+			if (sdio_al->debug.sdio_al_debug_log_buffers[i])
+				debugfs_remove(
+					sdio_al->
+					debug.sdio_al_debug_log_buffers[i]);
+	}
+
+
 	if ((!sdio_al->debug.sdio_al_debug_data_on) &&
 	    (!sdio_al->debug.sdio_al_debug_lpm_on) &&
-	    (!sdio_al->debug.sdio_al_debug_info)
-	    ) {
+	    (!sdio_al->debug.sdio_al_debug_info) &&
+		blob_errs) {
 		debugfs_remove(sdio_al->debug.sdio_al_debug_root);
 		sdio_al->debug.sdio_al_debug_root = NULL;
 		return -ENOENT;
 	}
+
+	sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES].data =
+						sdio_al->gen_log.buffer;
+	sdio_al_dbgfs_log[MAX_NUM_OF_SDIO_DEVICES].size =
+						SDIO_AL_DEBUG_LOG_SIZE;
+
 	return 0;
 }
 
 static void sdio_al_debugfs_cleanup(void)
 {
-       debugfs_remove(sdio_al->debug.sdio_al_debug_lpm_on);
-       debugfs_remove(sdio_al->debug.sdio_al_debug_data_on);
+	int i;
+
+	debugfs_remove(sdio_al->debug.sdio_al_debug_lpm_on);
+	debugfs_remove(sdio_al->debug.sdio_al_debug_data_on);
 	debugfs_remove(sdio_al->debug.sdio_al_debug_info);
-       debugfs_remove(sdio_al->debug.sdio_al_debug_root);
+
+	for (i = 0; i < (MAX_NUM_OF_SDIO_DEVICES + 1); ++i)
+		debugfs_remove(sdio_al->debug.sdio_al_debug_log_buffers[i]);
+
+	debugfs_remove(sdio_al->debug.sdio_al_debug_root);
 }
 #endif
 
+static int sdio_al_log(struct sdio_al_local_log *log, const char *fmt, ...)
+{
+	va_list args;
+	int r;
+	char *tp, *log_buf;
+	unsigned int *log_cur_pos;
+	struct timeval kt;
+	unsigned long flags;
+	static char sdio_al_log_tmp[SDIO_AL_DEBUG_TMP_LOG_SIZE];
+
+	spin_lock_irqsave(&log->log_lock, flags);
+
+	kt = ktime_to_timeval(ktime_get());
+	r = scnprintf(sdio_al_log_tmp, SDIO_AL_DEBUG_TMP_LOG_SIZE,
+			"[%8ld.%6ld] ", kt.tv_sec, kt.tv_usec);
+
+	va_start(args, fmt);
+	r += vscnprintf(&sdio_al_log_tmp[r], (SDIO_AL_DEBUG_TMP_LOG_SIZE - r),
+			fmt, args);
+	va_end(args);
+
+	log_buf = log->buffer;
+	log_cur_pos = &(log->buf_cur_pos);
+
+	for (tp = sdio_al_log_tmp; tp < (sdio_al_log_tmp + r); tp++) {
+		log_buf[(*log_cur_pos)++] = *tp;
+		if ((*log_cur_pos) == SDIO_AL_DEBUG_LOG_SIZE)
+			*log_cur_pos = 0;
+	}
+
+	spin_unlock_irqrestore(&log->log_lock, flags);
+
+	return r;
+}
+
 static int sdio_al_verify_func1(struct sdio_al_device *sdio_al_dev,
 				char const *func)
 {
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": %s: NULL sdio_al_dev\n", func);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+				"sdio_al_dev\n", func);
 		return -ENODEV;
 	}
 	if (!sdio_al_dev->card) {
-		pr_err(MODULE_NAME ": %s: NULL card\n", func);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": %s: NULL "
+				"card\n", func);
 		return -ENODEV;
 	}
 	if (!sdio_al_dev->card->sdio_func[0]) {
-		pr_err(MODULE_NAME ": %s: NULL func1\n", func);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": %s: NULL "
+				"func1\n", func);
 		return -ENODEV;
 	}
 	return 0;
@@ -573,8 +700,8 @@
 
 	if ((sdio_al_dev->state == MODEM_RESTART) ||
 	    (sdio_al_dev->state == CARD_REMOVED)) {
-		pr_err(MODULE_NAME ": %s: device state %d\n", func,
-		       sdio_al_dev->state);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": %s: device "
+				"state %d\n", func, sdio_al_dev->state);
 		return -ENODEV;
 	}
 	return 0;
@@ -598,8 +725,8 @@
 		(struct sdio_al_device *) device_handle;
 
 	if (!sdio_al_dev) {
-		pr_err(MODULE_NAME ": %s - device_handle is NULL\n",
-			__func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - "
+				"device_handle is NULL\n", __func__);
 		return;
 	}
 
@@ -608,8 +735,10 @@
 		lpm_callback((void *)sdio_al_dev,
 					   sdio_al_dev->is_ok_to_sleep);
 	}
-	LPM_DEBUG(MODULE_NAME ": %s - device %d registered for wakeup "
-	"callback\n", __func__, sdio_al_dev->card->host->index);
+
+	LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": %s - device %d "
+			"registered for wakeup callback\n", __func__,
+			sdio_al_dev->card->host->index);
 }
 
 void sdio_al_unregister_lpm_cb(void *device_handle)
@@ -618,14 +747,15 @@
 		(struct sdio_al_device *) device_handle;
 
 	if (!sdio_al_dev) {
-		pr_err(MODULE_NAME ": %s - device_handle is NULL\n",
-			__func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - "
+				"device_handle is NULL\n", __func__);
 		return;
 	}
 
 	sdio_al_dev->lpm_callback = NULL;
-	LPM_DEBUG(MODULE_NAME ": %s - device %d unregister for wakeup "
-	"callback\n", __func__, sdio_al_dev->card->host->index);
+	LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": %s - device %d "
+		"unregister for wakeup callback\n", __func__,
+		sdio_al_dev->card->host->index);
 }
 
 static void sdio_al_vote_for_sleep(struct sdio_al_device *sdio_al_dev,
@@ -634,7 +764,8 @@
 	pr_debug(MODULE_NAME ": %s()", __func__);
 
 	if (!sdio_al_dev) {
-		pr_err(MODULE_NAME ": %s - sdio_al_dev is NULL\n", __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - sdio_al_dev"
+				" is NULL\n", __func__);
 		return;
 	}
 
@@ -648,11 +779,11 @@
 	}
 
 	if (sdio_al_dev->lpm_callback != NULL) {
-		LPM_DEBUG(MODULE_NAME ": %s - is_vote_for_sleep=%d for "
-			"card#%d, calling callback...",
-			__func__,
-			is_vote_for_sleep,
-			sdio_al_dev->card->host->index);
+		LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": %s - "
+				"is_vote_for_sleep=%d for card#%d, "
+				"calling callback...", __func__,
+				is_vote_for_sleep,
+				sdio_al_dev->card->host->index);
 		sdio_al_dev->lpm_callback((void *)sdio_al_dev,
 					   is_vote_for_sleep);
 	}
@@ -673,8 +804,9 @@
 	int ret;
 
 	if (sdio_al_dev->lpm_chan == INVALID_SDIO_CHAN) {
-		pr_err(MODULE_NAME ":Invalid lpm_chan for card %d\n",
-				   sdio_al_dev->card->host->index);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Invalid "
+				"lpm_chan for card %d\n",
+				sdio_al_dev->card->host->index);
 		return -EINVAL;
 	}
 
@@ -685,8 +817,9 @@
 	ret = sdio_memcpy_toio(lpm_func, SDIOC_SW_MAILBOX_ADDR+offset,
 				&sdio_al_dev->is_ok_to_sleep, sizeof(u32));
 	if (ret) {
-		pr_err(MODULE_NAME ":failed to write lpm info for card %d\n",
-				   sdio_al_dev->card->host->index);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":failed to "
+				"write lpm info for card %d\n",
+				sdio_al_dev->card->host->index);
 		return ret;
 	}
 
@@ -742,7 +875,8 @@
 
 	masked_user_irq = (user_irq >> offset) && 0xFF;
 	if (masked_user_irq == 0x1) {
-		pr_info(MODULE_NAME ":user_irq enabled\n");
+		sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":user_irq "
+				"enabled\n");
 		return 1;
 	}
 
@@ -784,8 +918,8 @@
 	write_lpm_info(sdio_al_dev);
 
 	msmsdcc_lpm_enable(host);
-	LPM_DEBUG(MODULE_NAME ":Finished sleep sequence for card %d. "
-			    "Sleep now.\n",
+	LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":Finished sleep sequence"
+			" for card %d. Sleep now.\n",
 		sdio_al_dev->card->host->index);
 	/* Release wakelock */
 	sdio_al_vote_for_sleep(sdio_al_dev, 1);
@@ -844,9 +978,9 @@
 			HW_MAILBOX_ADDR, sizeof(*mailbox));
 	pr_debug(MODULE_NAME ":after sdio_memcpy_fromio.\n");
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to read Mailbox for card %d,"
-				    " goto error state\n",
-		       sdio_al_dev->card->host->index);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to read "
+				"Mailbox for card %d, goto error state\n",
+				sdio_al_dev->card->host->index);
 		sdio_al_get_into_err_state(sdio_al_dev);
 		/* Stop the timer to stop reading the mailbox */
 		sdio_al_dev->poll_delay_msec = 0;
@@ -867,15 +1001,15 @@
 		(mailbox->mask_thresh_above_limit_pipe_8_15<<8);
 
 	if (overflow_pipe || underflow_pipe)
-		pr_err(MODULE_NAME ":Mailbox ERROR "
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Mailbox ERROR "
 				"overflow=0x%x, underflow=0x%x\n",
 				overflow_pipe, underflow_pipe);
 
 	/* In case of modem reset we would like to read the daya from the modem
 	   to clear the interrupts but do not process it */
 	if (sdio_al_dev->state != CARD_INSERTED) {
-		pr_err(MODULE_NAME ":sdio_al_device (card %d) is in invalid "
-				   "state %d\n",
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_al_device"
+				" (card %d) is in invalid state %d\n",
 				sdio_al_dev->card->host->index,
 				sdio_al_dev->state);
 		return -ENODEV;
@@ -900,8 +1034,8 @@
 
 		if ((ch->state == SDIO_CHANNEL_STATE_CLOSED) &&
 			(read_avail > 0)) {
-			pr_err(MODULE_NAME ":%s: Invalid read_avail 0x%x, "
-					   "for CLOSED ch %s\n",
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				 ":%s: Invalid read_avail 0x%x, for CLOSED ch %s\n",
 				 __func__, read_avail, ch->name);
 			sdio_read_from_closed_ch(ch, read_avail);
 		}
@@ -910,7 +1044,7 @@
 			continue;
 
 		if (read_avail > INVALID_DATA_AVAILABLE) {
-			pr_err(MODULE_NAME
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
 				 ":Invalid read_avail 0x%x for pipe %d\n",
 				 read_avail, ch->rx_pipe_index);
 			continue;
@@ -923,17 +1057,19 @@
 		if (ch->is_packet_mode) {
 			if ((eot_pipe & (1<<ch->rx_pipe_index)) &&
 			    sdio_al_dev->print_after_interrupt) {
-				LPM_DEBUG(MODULE_NAME ":Interrupt on ch %s, "
-					  "card %d", ch->name,
-					  sdio_al_dev->card->host->index);
+				LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME
+					":Interrupt on ch %s, "
+					"card %d", ch->name,
+					sdio_al_dev->card->host->index);
 			}
 			new_packet_size = check_pending_rx_packet(ch, eot_pipe);
 		} else {
 			if ((thresh_pipe & (1<<ch->rx_pipe_index)) &&
 			    sdio_al_dev->print_after_interrupt) {
-				LPM_DEBUG(MODULE_NAME ":Interrupt on ch %s, "
-					  "card %d", ch->name,
-					  sdio_al_dev->card->host->index);
+				LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME
+					":Interrupt on ch %s, "
+					"card %d", ch->name,
+					sdio_al_dev->card->host->index);
 			}
 			ch->read_avail = read_avail;
 			/* Restore default thresh for non packet channels */
@@ -970,7 +1106,7 @@
 		new_write_avail = mailbox->pipe_bytes_avail[ch->tx_pipe_index];
 
 		if (new_write_avail > INVALID_DATA_AVAILABLE) {
-			pr_err(MODULE_NAME
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
 				 ":Invalid write_avail 0x%x for pipe %d\n",
 				 new_write_avail, ch->tx_pipe_index);
 			continue;
@@ -1011,18 +1147,18 @@
 
 	if ((rx_notify_bitmask == 0) && (tx_notify_bitmask == 0) &&
 	    !any_read_avail && !any_write_pending) {
-		DATA_DEBUG(MODULE_NAME ":Nothing to Notify for card %d,"
-				" is_closing=%d\n",
+		DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":Nothing to "
+				"Notify for card %d, is_closing=%d\n",
 				sdio_al_dev->card->host->index, is_closing);
 		if (is_closing)
 			restart_inactive_time(sdio_al_dev);
 		else if (is_inactive_time_expired(sdio_al_dev))
 			sdio_al_sleep(sdio_al_dev, host);
 	} else {
-		DATA_DEBUG(MODULE_NAME ":Notify bitmask for card %d "
-				       "rx=0x%x, tx=0x%x.\n",
-			sdio_al_dev->card->host->index, rx_notify_bitmask,
-			   tx_notify_bitmask);
+		DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":Notify bitmask"
+				" for card %d rx=0x%x, tx=0x%x.\n",
+				sdio_al_dev->card->host->index,
+				rx_notify_bitmask, tx_notify_bitmask);
 		/* Restart inactivity timer if any activity on the channel */
 		restart_inactive_time(sdio_al_dev);
 	}
@@ -1045,8 +1181,8 @@
 
 
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": NULL sdio_al_dev for channel %s\n",
-				 ch->name);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL sdio_al_dev"
+				" for channel %s\n", ch->name);
 		return -EINVAL;
 	}
 
@@ -1067,17 +1203,20 @@
 		new_packet_size = rx_avail - rx_pending;
 
 		if ((rx_avail <= rx_pending)) {
-			pr_err(MODULE_NAME ":Invalid new packet size."
-					    " rx_avail=%d.\n", rx_avail);
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": Invalid new packet size."
+					" rx_avail=%d.\n", rx_avail);
 			new_packet_size = 0;
 			goto exit_err;
 		}
 
 		p = kzalloc(sizeof(*p), GFP_KERNEL);
 		if (p == NULL) {
-			pr_err(MODULE_NAME ":failed to allocate item for "
-				   "rx_pending list. rx_avail=%d, rx_pending=%d.\n",
-				   rx_avail, rx_pending);
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": failed to allocate item for "
+					"rx_pending list. rx_avail=%d, "
+					"rx_pending=%d.\n",
+					rx_avail, rx_pending);
 			new_packet_size = 0;
 			goto exit_err;
 		}
@@ -1115,8 +1254,9 @@
 		list_del(&p->list);
 		kfree(p);
 	} else {
-		pr_err(MODULE_NAME ":%s: ch %s: unexpected empty list!!\n",
-			__func__, ch->name);
+		sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: ch "
+				"%s: unexpected empty list!!\n",
+				__func__, ch->name);
 	}
 
 	if (list_empty(&ch->rx_size_list_head))	{
@@ -1150,20 +1290,23 @@
 							 work);
 
 	if (sdio_al_work == NULL) {
-		pr_err(MODULE_NAME ": %s: NULL sdio_al_work\n", __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+				"sdio_al_work\n", __func__);
 		return;
 	}
 
 	sdio_al_dev = sdio_al_work->sdio_al_dev;
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": %s: NULL sdio_al_dev\n", __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+				"sdio_al_dev\n", __func__);
 		return;
 	}
-	pr_info(MODULE_NAME ":Bootloader Worker Started, "
-			    "wait for bootloader_done event..\n");
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":Bootloader Worker Started"
+			", wait for bootloader_done event..\n");
 	wait_event(sdio_al_dev->wait_mbox,
 		   sdio_al_dev->bootloader_done);
-	pr_info(MODULE_NAME ":Got bootloader_done event..\n");
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":Got bootloader_done "
+			"event..\n");
 	/* Do polling until MDM is up */
 	for (i = 0; i < 5000; ++i) {
 		if (sdio_al_verify_dev(sdio_al_dev, __func__))
@@ -1174,11 +1317,10 @@
 			sdio_al_dev->bootloader_done = 0;
 			ret = sdio_al_client_setup(sdio_al_dev);
 			if (ret) {
-				pr_err(MODULE_NAME ":"
-				"sdio_al_client_setup failed, "
-				"for card %d ret=%d\n",
-				sdio_al_dev->card->host->index,
-				ret);
+				sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": sdio_al_client_setup failed, "
+					"for card %d ret=%d\n",
+					sdio_al_dev->card->host->index, ret);
 				sdio_al_get_into_err_state(sdio_al_dev);
 			}
 			goto done;
@@ -1186,8 +1328,9 @@
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		msleep(100);
 	}
-	pr_err(MODULE_NAME ":Timeout waiting for user_irq for card %d\n",
-	       sdio_al_dev->card->host->index);
+	sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Timeout waiting for "
+			"user_irq for card %d\n",
+			sdio_al_dev->card->host->index);
 	sdio_al_get_into_err_state(sdio_al_dev);
 
 done:
@@ -1210,13 +1353,15 @@
 							 struct sdio_al_work,
 							 work);
 	if (sdio_al_work == NULL) {
-		pr_err(MODULE_NAME ": worker: NULL sdio_al_work\n");
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": worker: NULL "
+				"sdio_al_work\n");
 		return;
 	}
 
 	sdio_al_dev = sdio_al_work->sdio_al_dev;
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": worker: NULL sdio_al_dev\n");
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": worker: NULL "
+				"sdio_al_dev\n");
 		return;
 	}
 	pr_debug(MODULE_NAME ":Worker Started..\n");
@@ -1311,15 +1456,21 @@
 		/* host driver already reported errors */
 	} else {
 		if (cmd.resp[0] & R5_ERROR) {
-			pr_err(MODULE_NAME ":%s: R5_ERROR", __func__);
+			sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+						":%s: R5_ERROR for card %d",
+						__func__, card->host->index);
 			return -EIO;
 		}
 		if (cmd.resp[0] & R5_FUNCTION_NUMBER) {
-			pr_err(MODULE_NAME ":%s: R5_FUNCTION_NUMBER", __func__);
+			sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+						":%s: R5_FUNCTION_NUMBER for card %d",
+						__func__, card->host->index);
 			return -EINVAL;
 		}
 		if (cmd.resp[0] & R5_OUT_OF_RANGE) {
-			pr_err(MODULE_NAME ":%s: R5_OUT_OF_RANGE", __func__);
+			sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+						":%s: R5_OUT_OF_RANGE for card %d",
+						__func__, card->host->index);
 			return -ERANGE;
 		}
 	}
@@ -1342,9 +1493,21 @@
 	struct mmc_card *card = NULL;
 	u32 fn = ch->func->num;
 
+	if (!ch) {
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+				"channel\n", __func__);
+		return -ENODEV;
+	}
+
+	if (!ch->sdio_al_dev) {
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL "
+				"sdio_al_dev\n", __func__);
+		return -ENODEV;
+	}
+
 	if (len == 0) {
-		pr_err(MODULE_NAME ":channel %s trying to write 0 bytes\n",
-			ch->name);
+		sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":channel "
+				"%s trying to write 0 bytes\n", ch->name);
 		return -EINVAL;
 	}
 
@@ -1356,9 +1519,10 @@
 			ret = sdio_memcpy_toio(ch->func, PIPE_TX_FIFO_ADDR,
 					       (void *) buf, blocks*blksz);
 			if (ret != 0) {
-				pr_err(MODULE_NAME ":%s: sdio_memcpy_toio "
-						   "failed for channel %s\n",
-							__func__, ch->name);
+				sdio_al_loge(ch->sdio_al_dev->dev_log,
+					MODULE_NAME ":%s: sdio_memcpy_toio "
+					"failed for channel %s\n",
+					__func__, ch->name);
 				ch->sdio_al_dev->is_err = true;
 				return ret;
 			}
@@ -1374,9 +1538,9 @@
 	}
 
 	if (ret != 0) {
-		pr_err(MODULE_NAME ":%s: sdio_write_cmd54 "
-				   "failed for channel %s\n",
-					__func__, ch->name);
+		sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+				"sdio_write_cmd54 failed for channel %s\n",
+				__func__, ch->name);
 		ch->sdio_al_dev->is_err = true;
 		return ret;
 	}
@@ -1420,9 +1584,10 @@
 	 */
 	ret = enable_mask_irq(sdio_al_dev, 0, 1, 0);
 	if (ret) {
-		pr_err(MODULE_NAME ":Enable_mask_irq for card %d failed, "
-				   "ret=%d\n",
-		       sdio_al_dev->card->host->index, ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				": Enable_mask_irq for card %d failed, "
+				"ret=%d\n",
+				sdio_al_dev->card->host->index, ret);
 		sdio_release_host(func1);
 		return ret;
 	}
@@ -1448,19 +1613,21 @@
 	struct sdio_al_device *bootloader_dev = sdio_al->bootloader_dev;
 
 	if (bootloader_dev == NULL) {
-		pr_err(MODULE_NAME ":No bootloader_dev\n");
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME
+				": No bootloader_dev\n");
 		return -ENODEV;
 	}
 
-
 	if (bootloader_dev->flashless_boot_on) {
-		pr_info(MODULE_NAME ":Already in boot process.\n");
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":Already "
+			"in boot process.\n");
 		return 0;
 	}
 
 	func1 = bootloader_dev->card->sdio_func[0];
 	if (!func1) {
-		pr_err(MODULE_NAME ": %s: NULL func1\n", __func__);
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME
+			": %s: NULL func1\n", __func__);
 		return -ENODEV;
 	}
 
@@ -1468,7 +1635,8 @@
 		= kzalloc(sizeof(*bootloader_dev->sdioc_boot_sw_header),
 			  GFP_KERNEL);
 	if (bootloader_dev->sdioc_boot_sw_header == NULL) {
-		pr_err(MODULE_NAME ":fail to allocate sdioc boot sw header.\n");
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":fail to "
+			"allocate sdioc boot sw header.\n");
 		return -ENOMEM;
 	}
 
@@ -1479,15 +1647,17 @@
 				 SDIOC_SW_HEADER_ADDR,
 				 sizeof(struct peer_sdioc_boot_sw_header));
 	if (ret) {
-		pr_err(MODULE_NAME ":fail to read sdioc boot sw header.\n");
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":fail to "
+			"read sdioc boot sw header.\n");
 		sdio_release_host(func1);
 		goto exit_err;
 	}
 
 	if (bootloader_dev->sdioc_boot_sw_header->signature !=
 	    (u32) PEER_SDIOC_SW_MAILBOX_BOOT_SIGNATURE) {
-		pr_err(MODULE_NAME ":invalid mailbox signature 0x%x.\n",
-		       bootloader_dev->sdioc_boot_sw_header->signature);
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ":invalid "
+			"mailbox signature 0x%x.\n",
+			bootloader_dev->sdioc_boot_sw_header->signature);
 		sdio_release_host(func1);
 		ret = -EINVAL;
 		goto exit_err;
@@ -1496,18 +1666,19 @@
 	/* Upper byte has to be equal - no backward compatibility for unequal */
 	if ((bootloader_dev->sdioc_boot_sw_header->version >> 16) !=
 	    (sdio_al->pdata->peer_sdioc_boot_version_major)) {
-		pr_err(MODULE_NAME ": HOST(0x%x) and CLIENT(0x%x) SDIO_AL BOOT "
-		       "VERSION don't match\n",
-		       ((sdio_al->pdata->peer_sdioc_boot_version_major<<16)+
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME ": HOST(0x%x)"
+			" and CLIENT(0x%x) SDIO_AL BOOT VERSION don't match\n",
+			((sdio_al->pdata->peer_sdioc_boot_version_major<<16)+
 			sdio_al->pdata->peer_sdioc_boot_version_minor),
-		       bootloader_dev->sdioc_boot_sw_header->version);
+			bootloader_dev->sdioc_boot_sw_header->version);
 		sdio_release_host(func1);
 		ret = -EIO;
 		goto exit_err;
 	}
 
-	pr_info(MODULE_NAME ": SDIOC BOOT SW version 0x%x\n",
-		bootloader_dev->sdioc_boot_sw_header->version);
+	sdio_al_logi(bootloader_dev->dev_log, MODULE_NAME ": SDIOC BOOT SW "
+			"version 0x%x\n",
+			bootloader_dev->sdioc_boot_sw_header->version);
 
 	bootloader_dev->flashless_boot_on = true;
 
@@ -1515,8 +1686,9 @@
 
 	ret = sdio_al_wait_for_bootloader_comp(bootloader_dev);
 	if (ret) {
-		pr_err(MODULE_NAME ":sdio_al_wait_for_bootloader_comp failed, "
-				   "err=%d\n", ret);
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME
+				": sdio_al_wait_for_bootloader_comp failed, "
+				"err=%d\n", ret);
 		goto exit_err;
 	}
 
@@ -1525,17 +1697,18 @@
 			sdio_al_bootloader_completed);
 
 	if (ret) {
-		pr_err(MODULE_NAME ":sdio_downloader_setup failed, err=%d\n",
-			ret);
+		sdio_al_loge(bootloader_dev->dev_log, MODULE_NAME
+			": sdio_downloader_setup failed, err=%d\n", ret);
 		goto exit_err;
 	}
 
-	pr_info(MODULE_NAME ":In Flashless boot, waiting for its "
-		"completion\n");
+	sdio_al_logi(bootloader_dev->dev_log, MODULE_NAME ":In Flashless boot,"
+		" waiting for its completion\n");
 
 
 exit_err:
-	pr_info(MODULE_NAME ":free sdioc_boot_sw_header.\n");
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":free "
+			"sdioc_boot_sw_header.\n");
 	kfree(bootloader_dev->sdioc_boot_sw_header);
 	bootloader_dev->sdioc_boot_sw_header = NULL;
 	bootloader_dev = NULL;
@@ -1564,22 +1737,25 @@
 	ret = sdio_memcpy_fromio(sdio_al_dev->card->sdio_func[0], header,
 			SDIOC_SW_HEADER_ADDR, sizeof(*header));
 	if (ret) {
-		pr_err(MODULE_NAME ":fail to read sdioc sw header.\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":fail to read "
+				"sdioc sw header.\n");
 		goto exit_err;
 	}
 
 	if (header->signature == (u32)PEER_SDIOC_SW_MAILBOX_UT_SIGNATURE) {
-		pr_info(MODULE_NAME ":SDIOC SW unittest signature. 0x%x\n",
-			header->signature);
+		sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":SDIOC SW "
+				"unittest signature. 0x%x\n",
+				header->signature);
 		sdio_al->unittest_mode = true;
 		/* Verify test code compatibility with the modem */
 		sdioc_test_version = (header->version & 0xFF00) >> 8;
 		test_version = sdio_al->pdata->peer_sdioc_version_minor >> 8;
 		if (test_version != sdioc_test_version) {
-			pr_err(MODULE_NAME ":HOST(0x%x) and CLIENT(0x%x) "
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				": HOST(0x%x) and CLIENT(0x%x) "
 				"testing VERSION don't match\n",
-			       test_version,
-			       sdioc_test_version);
+				test_version,
+				sdioc_test_version);
 			msleep(500);
 			BUG();
 		}
@@ -1587,8 +1763,8 @@
 
 	if ((header->signature != (u32) PEER_SDIOC_SW_MAILBOX_SIGNATURE) &&
 	    (header->signature != (u32) PEER_SDIOC_SW_MAILBOX_UT_SIGNATURE)) {
-		pr_err(MODULE_NAME ":SDIOC SW invalid signature. 0x%x\n",
-			header->signature);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":SDIOC SW "
+				"invalid signature. 0x%x\n", header->signature);
 		goto exit_err;
 	}
 	/* Upper byte has to be equal - no backward compatibility for unequal */
@@ -1597,29 +1773,31 @@
 		if ((sdio_al->sdioc_major !=
 		    sdio_al->pdata->peer_sdioc_version_major) &&
 		    (sdio_al->sdioc_major != PEER_SDIOC_OLD_VERSION_MAJOR)) {
-			pr_err(MODULE_NAME ": HOST(0x%x) and CLIENT(0x%x) "
-			       "SDIO_AL VERSION don't match\n",
-			       ((sdio_al->pdata->peer_sdioc_version_major<<16)+
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				": HOST(0x%x) and CLIENT(0x%x) "
+				"SDIO_AL VERSION don't match\n",
+				((sdio_al->pdata->peer_sdioc_version_major<<16)+
 				sdio_al->pdata->peer_sdioc_version_minor),
-			       header->version);
+				header->version);
 			goto exit_err;
 		}
 	} else {
 		if (sdio_al->sdioc_major !=
 		    sdio_al->pdata->peer_sdioc_version_major) {
-			pr_err(MODULE_NAME ": HOST(0x%x) and CLIENT(0x%x) "
-			       "SDIO_AL VERSION don't match\n",
-			       ((sdio_al->pdata->peer_sdioc_version_major<<16)+
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				": HOST(0x%x) and CLIENT(0x%x) "
+				"SDIO_AL VERSION don't match\n",
+				((sdio_al->pdata->peer_sdioc_version_major<<16)+
 				sdio_al->pdata->peer_sdioc_version_minor),
-			       header->version);
+				header->version);
 			goto exit_err;
 		}
 	}
 	sdio_al_dev->ch_close_supported = (header->version & 0x000F) >=
 		(sdio_al->pdata->peer_sdioc_version_minor & 0xF);
 
-	pr_info(MODULE_NAME ":SDIOC SW version 0x%x, sdio_al major 0x%x"
-			" minor 0x%x\n", header->version,
+	sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":SDIOC SW version 0x%x,"
+			" sdio_al major 0x%x minor 0x%x\n", header->version,
 			sdio_al->sdioc_major,
 			sdio_al->pdata->peer_sdioc_version_minor);
 
@@ -1656,8 +1834,8 @@
 			ch->state = SDIO_CHANNEL_STATE_INVALID;
 		}
 
-		pr_info(MODULE_NAME ":Channel=%s, state=%d\n", ch->name,
-			ch->state);
+		sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":Channel=%s, "
+				"state=%d\n", ch->name,	ch->state);
 	}
 
 	return 0;
@@ -1681,8 +1859,8 @@
 	struct sdio_al_device *sdio_al_dev = ch->sdio_al_dev;
 
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": NULL sdio_al_dev for channel %s\n",
-				 ch->name);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL sdio_al_dev"
+				" for channel %s\n", ch->name);
 		return -EINVAL;
 	}
 
@@ -1698,7 +1876,8 @@
 	ret = sdio_memcpy_fromio(ch->func, sw_mailbox,
 			SDIOC_SW_MAILBOX_ADDR, sizeof(*sw_mailbox));
 	if (ret) {
-		pr_err(MODULE_NAME ":fail to read sw mailbox.\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":fail to read "
+				"sw mailbox.\n");
 		goto exit_err;
 	}
 
@@ -1707,7 +1886,8 @@
 		sizeof(struct peer_sdioc_channel_config));
 
 	if (!ch_config->is_ready) {
-		pr_err(MODULE_NAME ":sw mailbox channel not ready.\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sw mailbox "
+				"channel not ready.\n");
 		goto exit_err;
 	}
 
@@ -1731,7 +1911,8 @@
 	if (ch->min_write_avail > ch->write_threshold)
 		ch->min_write_avail = ch->write_threshold;
 
-	pr_info(MODULE_NAME ":ch %s read_threshold=%d, write_threshold=%d,"
+	sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":ch %s "
+			"read_threshold=%d, write_threshold=%d,"
 			" min_write_avail=%d, max_rx_threshold=%d,"
 			" max_tx_threshold=%d\n", ch->name, ch->read_threshold,
 			ch->write_threshold, ch->min_write_avail,
@@ -1745,7 +1926,8 @@
 	return 0;
 
 exit_err:
-	pr_info(MODULE_NAME ":Reading SW Mailbox error.\n");
+	sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":Reading SW Mailbox "
+			"error.\n");
 	kfree(sw_mailbox);
 
 	return -1;
@@ -1825,7 +2007,8 @@
 
 	mask = sdio_readl(func1, addr, &ret);
 	if (ret) {
-		pr_err(MODULE_NAME ":enable_mask_irq fail\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"enable_mask_irq fail\n");
 		goto exit_err;
 	}
 
@@ -1903,7 +2086,8 @@
 	sdio_writel(func1, threshold,
 			PIPES_THRESHOLD_ADDR+pipe_index*4, &ret);
 	if (ret)
-		pr_err(MODULE_NAME ":set_pipe_threshold err=%d\n", -ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"set_pipe_threshold err=%d\n", -ret);
 
 	return ret;
 }
@@ -1942,8 +2126,8 @@
 	struct sdio_al_device *sdio_al_dev = ch->sdio_al_dev;
 
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": NULL sdio_al_dev for channel %s\n",
-				 ch->name);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL "
+				"sdio_al_dev for channel %s\n", ch->name);
 		return -EINVAL;
 	}
 
@@ -1971,15 +2155,16 @@
 	/* Init SDIO Function */
 	ret = sdio_al_enable_func_retry(ch->func, ch->name);
 	if (ret) {
-		pr_err(MODULE_NAME ":sdio_enable_func() err=%d\n", -ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"sdio_enable_func() err=%d\n", -ret);
 		goto exit_err;
 	}
 
 	/* Note: Patch Func CIS tuple issue */
 	ret = sdio_set_block_size(ch->func, SDIO_AL_BLOCK_SIZE);
 	if (ret) {
-		pr_err(MODULE_NAME ":sdio_set_block_size()failed, err=%d\n",
-		       -ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"sdio_set_block_size()failed, err=%d\n", -ret);
 		goto exit_err;
 	}
 
@@ -2098,26 +2283,35 @@
 	}
 
 	if (!sdio_al_dev->is_ok_to_sleep) {
-		LPM_DEBUG(MODULE_NAME ":card %d already awake, "
-					  "no need to wake up\n",
-			sdio_al_dev->card->host->index);
+		LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":card %d already"
+				" awake, no need to wake up\n",
+				sdio_al_dev->card->host->index);
+		return 0;
+	}
+
+	if (!sdio_al_dev->is_ok_to_sleep) {
+		LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":card %d "
+				"already awake, no need to wake up\n",
+				sdio_al_dev->card->host->index);
 		return 0;
 	}
 
 	/* Wake up sequence */
 	if (not_from_int) {
 		if (ch) {
-			LPM_DEBUG(MODULE_NAME ": Wake up card %d (not by "
-				  "interrupt), ch %s",
-				  sdio_al_dev->card->host->index, ch->name);
+			LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": Wake up"
+					" card %d (not by interrupt), ch %s",
+					sdio_al_dev->card->host->index,
+					ch->name);
 		} else {
-			LPM_DEBUG(MODULE_NAME ": Wake up card %d (not "
-				  "by interrupt)",
-				  sdio_al_dev->card->host->index);
+			LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": Wake up"
+					  " card %d (not	by interrupt)",
+					  sdio_al_dev->card->host->index);
 		}
 	} else {
-		LPM_DEBUG(MODULE_NAME ": Wake up card %d by interrupt",
-			sdio_al_dev->card->host->index);
+		LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": Wake up card "
+				"%d by interrupt",
+				sdio_al_dev->card->host->index);
 		sdio_al_dev->print_after_interrupt = 1;
 	}
 
@@ -2138,21 +2332,22 @@
 
 	/* Here get_mdm2ap_status() returning 0 is not an error condition */
 	if (sdio_al->pdata->get_mdm2ap_status() == 0)
-		LPM_DEBUG(MODULE_NAME ": get_mdm2ap_status() is 0\n");
+		LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"get_mdm2ap_status() is 0\n");
 
 	/* Enable Wake up Function */
 	ret = sdio_al_enable_func_retry(wk_func, "wakeup func");
 	if (ret) {
-		pr_err(MODULE_NAME ":sdio_enable_func() err=%d\n",
-		       -ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"sdio_enable_func() err=%d\n", -ret);
 		goto error_exit;
 	}
 	/* Mark NOT OK_TOSLEEP */
 	sdio_al_dev->is_ok_to_sleep = 0;
 	ret = write_lpm_info(sdio_al_dev);
 	if (ret) {
-		pr_err(MODULE_NAME ":write_lpm_info() failed, err=%d\n",
-			       -ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"write_lpm_info() failed, err=%d\n", -ret);
 		sdio_al_dev->is_ok_to_sleep = 1;
 		sdio_disable_func(wk_func);
 		goto error_exit;
@@ -2164,8 +2359,8 @@
 	sdio_al_dev->poll_delay_msec = get_min_poll_time_msec(sdio_al_dev);
 	start_timer(sdio_al_dev);
 
-	LPM_DEBUG(MODULE_NAME "Finished Wake up sequence for card %d",
-		sdio_al_dev->card->host->index);
+	LPM_DEBUG(sdio_al_dev->dev_log, MODULE_NAME "Finished Wake up sequence"
+			" for card %d", sdio_al_dev->card->host->index);
 
 	msmsdcc_set_pwrsave(sdio_al_dev->card->host, 1);
 	pr_debug(MODULE_NAME ":Turn clock off\n");
@@ -2201,8 +2396,8 @@
 	pr_debug(MODULE_NAME ":start %s.\n", __func__);
 
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": NULL sdio_al_dev for card %d\n",
-				 func->card->host->index);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": NULL sdio_al_dev"
+				" for card %d\n", func->card->host->index);
 		return;
 	}
 
@@ -2224,13 +2419,13 @@
 {
 	struct sdio_al_device *sdio_al_dev = (struct sdio_al_device *)data;
 	if (sdio_al_dev == NULL) {
-		pr_err(MODULE_NAME ": NULL sdio_al_dev for data %lu\n",
-				 data);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": NULL "
+				"sdio_al_dev for data %lu\n", data);
 		return;
 	}
 	if (sdio_al_dev->state != CARD_INSERTED) {
-		pr_err(MODULE_NAME ": sdio_al_dev is in invalid state %d\n",
-				 sdio_al_dev->state);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": sdio_al_dev "
+				"is in invalid state %d\n", sdio_al_dev->state);
 		return;
 	}
 	pr_debug(MODULE_NAME " Timer Expired\n");
@@ -2253,19 +2448,21 @@
 	int fn = 0;
 
 	if (card == NULL) {
-		pr_err(MODULE_NAME ":sdio_al_setup: No Card detected\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": "
+				"sdio_al_setup: No Card detected\n");
 		return -ENODEV;
 	}
 
 
-	pr_info(MODULE_NAME ":sdio_al_setup for card %d\n",
-		sdio_al_dev->card->host->index);
+	sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":sdio_al_setup for "
+			"card %d\n", sdio_al_dev->card->host->index);
 
 	func1 = card->sdio_func[0];
 
 	ret = sdio_al->pdata->config_mdm2ap_status(1);
 	if (ret) {
-		pr_err(MODULE_NAME "Could not request GPIO\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME "Could not "
+				"request GPIO\n");
 		return ret;
 	}
 
@@ -2282,13 +2479,14 @@
 		sdio_disable_func(card->sdio_func[fn-1]);
 
 	sdio_set_drvdata(func1, sdio_al_dev);
-	pr_info(MODULE_NAME ":claim IRQ for card %d\n",
-			card->host->index);
+	sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":claim IRQ for card "
+			"%d\n",	card->host->index);
 
 	ret = sdio_claim_irq(func1, sdio_func_irq);
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to claim IRQ for card %d\n",
-			card->host->index);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to claim"
+				" IRQ for card %d\n",
+				card->host->index);
 		goto exit_err;
 	}
 
@@ -2305,7 +2503,7 @@
 
 exit_err:
 	sdio_release_host(func1);
-	pr_err(MODULE_NAME ":Setup Failure.\n");
+	sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Setup Failure.\n");
 
 	return ret;
 }
@@ -2338,8 +2536,9 @@
 			sdio_al_vote_for_sleep(sdio_al_dev, 1);
 
 			if (sdio_al_verify_func1(sdio_al_dev, __func__)) {
-				pr_err(MODULE_NAME ": %s: Invalid func1",
-				       __func__);
+				sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+						": %s: Invalid func1",
+						__func__);
 				return;
 			}
 			func1 = sdio_al_dev->card->sdio_func[0];
@@ -2428,7 +2627,8 @@
 
 	ch = find_channel_by_name(name);
 	if (ch == NULL) {
-		pr_err(MODULE_NAME ":Can't find channel name %s\n", name);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":Can't find "
+			"channel name %s\n", name);
 		return -EINVAL;
 	}
 
@@ -2440,14 +2640,16 @@
 
 	if ((ch->state != SDIO_CHANNEL_STATE_IDLE) &&
 		(ch->state != SDIO_CHANNEL_STATE_CLOSED)) {
-		pr_err(MODULE_NAME ":Wrong ch %s state %d\n", name, ch->state);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Wrong ch %s "
+				"state %d\n", name, ch->state);
 		ret = -EPERM;
 		goto exit_err;
 	}
 
 	if (sdio_al_dev->state != CARD_INSERTED) {
-		pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
-		       __func__, sdio_al_dev->state);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+				"sdio_al_dev is in invalid state %d\n",
+				__func__, sdio_al_dev->state);
 		ret = -ENODEV;
 		goto exit_err;
 	}
@@ -2470,21 +2672,25 @@
 
 	ret = open_channel(ch);
 	if (ret) {
-		pr_err(MODULE_NAME ":sdio_open %s err=%d\n", name, -ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_open %s "
+				"err=%d\n", name, -ret);
 		goto exit_err;
 	}
 
-	pr_info(MODULE_NAME ":sdio_open %s completed OK\n", name);
+	sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":sdio_open %s "
+			"completed OK\n", name);
 	if (sdio_al_dev->lpm_chan == INVALID_SDIO_CHAN) {
 		if (sdio_al->sdioc_major == PEER_SDIOC_OLD_VERSION_MAJOR) {
 			if (!ch->is_packet_mode) {
-				pr_info(MODULE_NAME ":setting channel %s as "
-						    "lpm_chan\n", name);
+				sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME
+						":setting channel %s as "
+						"lpm_chan\n", name);
 				sdio_al_dev->lpm_chan = ch->num;
 			}
 		} else {
-			pr_info(MODULE_NAME ":setting channel %s as lpm_chan\n",
-				name);
+			sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": "
+					"setting channel %s as lpm_chan\n",
+					name);
 			sdio_al_dev->lpm_chan = ch->num;
 		}
 	}
@@ -2512,8 +2718,9 @@
 
 	wk_func = sdio_al_dev->card->sdio_func[SDIO_AL_WAKEUP_FUNC-1];
 	if (!wk_func) {
-		pr_err(MODULE_NAME ":%s: NULL wakeup func:%d\n",
-				__func__, SDIO_AL_WAKEUP_FUNC);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: NULL "
+				"wakeup func:%d\n", __func__,
+				SDIO_AL_WAKEUP_FUNC);
 		ret = -ENODEV;
 		goto exit;
 	}
@@ -2524,7 +2731,8 @@
 
 	ret = sdio_al_wake_up(sdio_al_dev, 1, ch);
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to wake up\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+				"wake up\n");
 		goto exit;
 	}
 	/* request operation from MDM peer */
@@ -2532,12 +2740,14 @@
 	ret = sdio_memcpy_toio(ch->func, SDIOC_SW_MAILBOX_ADDR+offset,
 			&peer_operation, sizeof(u32));
 	if (ret) {
-		pr_err(MODULE_NAME ":failed to request close operation\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":failed to "
+				"request close operation\n");
 		goto exit;
 	}
 	ret = sdio_al_enable_func_retry(wk_func, "wk_func");
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to enable Func#%d\n", wk_func->num);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to enable"
+				" Func#%d\n", wk_func->num);
 		goto exit;
 	}
 	pr_debug(MODULE_NAME ":%s: wk_func enabled on ch %s\n",
@@ -2547,12 +2757,14 @@
 	ret  =  sdio_memcpy_toio(ch->func, SDIOC_SW_MAILBOX_ADDR+offset,
 			&peer_operation, sizeof(u32));
 	if (ret) {
-		pr_err(MODULE_NAME ":failed to send start close operation\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":failed to "
+				"send start close operation\n");
 		goto exit;
 	}
 	ret = sdio_disable_func(wk_func);
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to disable Func#%d\n", wk_func->num);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+				"disable Func#%d\n", wk_func->num);
 		goto exit;
 	}
 	/* poll for peer operation ack */
@@ -2562,14 +2774,16 @@
 				SDIOC_SW_MAILBOX_ADDR+offset,
 				sizeof(u32));
 		if (ret) {
-			pr_err(MODULE_NAME ":failed to request ack on close"
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					":failed to request ack on close"
 					" operation, loop_count = %d\n",
 					loop_count);
 			goto exit;
 		}
 		loop_count++;
 		if (loop_count > 10) {
-			pr_info(MODULE_NAME ":%s: peer_operation=0x%x wait loop"
+			sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+					"peer_operation=0x%x wait loop"
 					" %d on ch %s\n", __func__,
 					peer_operation, loop_count, ch->name);
 		}
@@ -2590,7 +2804,8 @@
 	ulong flush_expires;
 
 	if (!ch) {
-		pr_err(MODULE_NAME ":%s: NULL channel\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+				"channel\n",  __func__);
 		return -ENODEV;
 	}
 	sdio_al_dev = ch->sdio_al_dev;
@@ -2598,14 +2813,15 @@
 		return -ENODEV;
 
 	if (!sdio_al_dev->ch_close_supported) {
-		pr_info(MODULE_NAME ":%s: Not supported by mdm, ch %s\n",
-				__func__, ch->name);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: Not "
+			"supported by mdm, ch %s\n",
+			__func__, ch->name);
 		return -ENOTSUPP;
 	}
 
 	if (!ch->func) {
-		pr_err(MODULE_NAME ":%s: NULL func on channel:%d\n",
-				__func__, ch->num);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: NULL func"
+				" on channel:%d\n", __func__, ch->num);
 		return -ENODEV;
 	}
 	sdio_claim_host(sdio_al_dev->card->sdio_func[0]);
@@ -2616,7 +2832,8 @@
 		return -ENODEV;
 	}
 	if (sdio_al_dev->state != CARD_INSERTED) {
-		pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+				"sdio_al_dev is in invalid state %d\n",
 				__func__, sdio_al_dev->state);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -ENODEV;
@@ -2624,7 +2841,8 @@
 	ch->state = SDIO_CHANNEL_STATE_CLOSING;
 	ret = peer_set_operation(PEER_OP_CODE_CLOSE, sdio_al_dev, ch);
 	if (ret) {
-		pr_err(MODULE_NAME ":%s: peer_set_operation() failed: %d\n",
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+				"peer_set_operation() failed: %d\n",
 				__func__, ret);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -ENODEV;
@@ -2645,23 +2863,25 @@
 			ret = sdio_read_internal(ch, sdio_al_dev->rx_flush_buf,
 						 flush_len);
 			if (ret) {
-				pr_err(MODULE_NAME ":%s failed to"
-						" sdio_read: %d, ch %s\n",
+				sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+						":%s failed to sdio_read: %d, ch %s\n",
 						__func__, ret, ch->name);
 				return ret;
 			}
 
 			if (time_after(jiffies, flush_expires) != 0) {
-				pr_err(MODULE_NAME ":%s flush rx packets"
-				       " timeout: ch %s\n",
-				       __func__, ch->name);
+				sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+						":%s flush rx packets"
+						" timeout: ch %s\n",
+						__func__, ch->name);
 				sdio_al_get_into_err_state(sdio_al_dev);
 				return -EBUSY;
 			}
 		}
 		msleep(100);
 		if (ch->signature != SDIO_AL_SIGNATURE) {
-			pr_err(MODULE_NAME ":%s: after sleep, invalid signature"
+			sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+					"after sleep, invalid signature"
 					" 0x%x\n", __func__, ch->signature);
 			return -ENODEV;
 		}
@@ -2682,7 +2902,8 @@
 	/* disable function to be able to open the channel again */
 	ret = sdio_disable_func(ch->func);
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to disable Func#%d\n", ch->func->num);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+				"disable Func#%d\n", ch->func->num);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return ret;
 	}
@@ -2700,16 +2921,19 @@
 int sdio_write_avail(struct sdio_channel *ch)
 {
 	if (!ch) {
-		pr_err(MODULE_NAME ":%s: NULL channel\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+				"channel\n", __func__);
 		return -ENODEV;
 	}
 	if (ch->signature != SDIO_AL_SIGNATURE) {
-		pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n",  __func__,
-			ch->signature);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+				"Invalid signature 0x%x\n",  __func__,
+				ch->signature);
 		return -ENODEV;
 	}
 	if (ch->state != SDIO_CHANNEL_STATE_OPEN) {
-		pr_err(MODULE_NAME ":%s: channel %s state is not open (%d)\n",
+		sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+				"channel %s state is not open (%d)\n",
 				__func__, ch->name, ch->state);
 		return -ENODEV;
 	}
@@ -2727,16 +2951,19 @@
 int sdio_read_avail(struct sdio_channel *ch)
 {
 	if (!ch) {
-		pr_err(MODULE_NAME ":%s: NULL channel\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+				"channel\n", __func__);
 		return -ENODEV;
 	}
 	if (ch->signature != SDIO_AL_SIGNATURE) {
-		pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n",  __func__,
-			ch->signature);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+				"Invalid signature 0x%x\n",  __func__,
+				ch->signature);
 		return -ENODEV;
 	}
 	if (ch->state != SDIO_CHANNEL_STATE_OPEN) {
-		pr_err(MODULE_NAME ":%s: channel %s state is not open (%d)\n",
+		sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+				"channel %s state is not open (%d)\n",
 				__func__, ch->name, ch->state);
 		return -ENODEV;
 	}
@@ -2792,22 +3019,24 @@
 	struct sdio_al_device *sdio_al_dev = NULL;
 
 	if (!ch) {
-		pr_err(MODULE_NAME ":%s: NULL channel\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+				"channel\n",  __func__);
 		return -ENODEV;
 	}
 	if (!data) {
-		pr_err(MODULE_NAME ":%s: NULL data\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL data\n",
+				__func__);
 		return -ENODEV;
 	}
 	if (len == 0) {
-		pr_err(MODULE_NAME ":channel %s trying to read 0 bytes\n",
-		       ch->name);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":channel %s trying"
+				" to read 0 bytes\n", ch->name);
 		return -EINVAL;
 	}
 
 	if (ch->signature != SDIO_AL_SIGNATURE) {
-		pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n",  __func__,
-			ch->signature);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: Invalid "
+				"signature 0x%x\n",  __func__, ch->signature);
 		return -ENODEV;
 	}
 
@@ -2824,8 +3053,9 @@
 	}
 
 	if (sdio_al_dev->state != CARD_INSERTED) {
-		pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
-		       __func__, sdio_al_dev->state);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: "
+				"sdio_al_dev is in invalid state %d\n",
+				__func__, sdio_al_dev->state);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -ENODEV;
 	}
@@ -2834,39 +3064,40 @@
 	   so either we had rx interrupt and woken up, or we never went to
 	   sleep */
 	if (sdio_al_dev->is_ok_to_sleep) {
-		pr_err(MODULE_NAME ":%s: called when is_ok_to_sleep is set "
-		       "for ch %s, len=%d, last_any_read_avail=%d,"
-		       "last_read_avail=%d, last_old_read_avail=%d",
-		       __func__, ch->name, len,
-		       ch->statistics.last_any_read_avail,
-		       ch->statistics.last_read_avail,
-		       ch->statistics.last_old_read_avail);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s: called "
+				"when is_ok_to_sleep is set for ch %s, len=%d,"
+				" last_any_read_avail=%d, last_read_avail=%d, "
+				"last_old_read_avail=%d", __func__, ch->name,
+				len, ch->statistics.last_any_read_avail,
+				ch->statistics.last_read_avail,
+				ch->statistics.last_old_read_avail);
 	}
 	BUG_ON(sdio_al_dev->is_ok_to_sleep);
 
 	if ((ch->state != SDIO_CHANNEL_STATE_OPEN) &&
 			(ch->state != SDIO_CHANNEL_STATE_CLOSING)) {
-		pr_err(MODULE_NAME ":%s wrong channel %s state %d\n",
-				 __func__, ch->name, ch->state);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":%s wrong "
+				"channel %s state %d\n",
+				__func__, ch->name, ch->state);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -EINVAL;
 	}
 
-	DATA_DEBUG(MODULE_NAME ":start ch %s read %d avail %d.\n",
-		ch->name, len, ch->read_avail);
+	DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":start ch %s read %d "
+			"avail %d.\n", ch->name, len, ch->read_avail);
 
 	restart_inactive_time(sdio_al_dev);
 
 	if ((ch->is_packet_mode) && (len != ch->read_avail)) {
-		pr_err(MODULE_NAME ":sdio_read ch %s len != read_avail\n",
-				 ch->name);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_read ch "
+				"%s len != read_avail\n", ch->name);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -EINVAL;
 	}
 
 	if (len > ch->read_avail) {
-		pr_err(MODULE_NAME ":ERR ch %s: reading more bytes (%d) than"
-				   " the avail(%d).\n",
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":ERR ch %s: "
+				"reading more bytes (%d) than the avail(%d).\n",
 				ch->name, len, ch->read_avail);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -ENOMEM;
@@ -2875,8 +3106,9 @@
 	ret = sdio_memcpy_fromio(ch->func, data, PIPE_RX_FIFO_ADDR, len);
 
 	if (ret) {
-		pr_err(MODULE_NAME ":ch %s: sdio_read err=%d, len=%d, "
-				"read_avail=%d, last_read_avail=%d, last_old_read_avail=%d\n",
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":ch %s: "
+				"sdio_read err=%d, len=%d, read_avail=%d, "
+				"last_read_avail=%d, last_old_read_avail=%d\n",
 				ch->name, -ret, len, ch->read_avail,
 				ch->statistics.last_read_avail,
 				ch->statistics.last_old_read_avail);
@@ -2894,8 +3126,9 @@
 		ch->read_avail -= len;
 
 	ch->total_rx_bytes += len;
-	DATA_DEBUG(MODULE_NAME ":end ch %s read %d avail %d total %d.\n",
-		ch->name, len, ch->read_avail, ch->total_rx_bytes);
+	DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":end ch %s read %d "
+			"avail %d total %d.\n", ch->name, len,
+			ch->read_avail, ch->total_rx_bytes);
 
 	if ((ch->read_avail == 0) && !(ch->is_packet_mode))
 		ask_reading_mailbox(sdio_al_dev);
@@ -2915,18 +3148,20 @@
 int sdio_read(struct sdio_channel *ch, void *data, int len)
 {
 	if (!ch) {
-		pr_err(MODULE_NAME ":%s: NULL channel\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+				"channel\n", __func__);
 		return -ENODEV;
 	}
 	if (ch->signature != SDIO_AL_SIGNATURE) {
-		pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n",  __func__,
-			ch->signature);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: "
+			"Invalid signature 0x%x\n",  __func__, ch->signature);
 		return -ENODEV;
 	}
 	if (ch->state == SDIO_CHANNEL_STATE_OPEN) {
 		return sdio_read_internal(ch, data, len);
 	} else {
-		pr_err(MODULE_NAME ":%s: Invalid channel %s state %d\n",
+		sdio_al_loge(ch->sdio_al_dev->dev_log, MODULE_NAME
+				":%s: Invalid channel %s state %d\n",
 				__func__, ch->name, ch->state);
 	}
 	return -ENODEV;
@@ -2943,22 +3178,24 @@
 	struct sdio_al_device *sdio_al_dev = NULL;
 
 	if (!ch) {
-		pr_err(MODULE_NAME ":%s: NULL channel\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL "
+				"channel\n",  __func__);
 		return -ENODEV;
 	}
 	if (!data) {
-		pr_err(MODULE_NAME ":%s: NULL data\n",  __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL data\n",
+				__func__);
 		return -ENODEV;
 	}
 	if (len == 0) {
-		pr_err(MODULE_NAME ":channel %s trying to write 0 bytes\n",
-			ch->name);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":channel %s trying"
+				" to write 0 bytes\n", ch->name);
 		return -EINVAL;
 	}
 
 	if (ch->signature != SDIO_AL_SIGNATURE) {
-		pr_err(MODULE_NAME ":%s: Invalid signature 0x%x\n",  __func__,
-			ch->signature);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: Invalid "
+				"signature 0x%x\n",  __func__, ch->signature);
 		return -ENODEV;
 	}
 
@@ -2970,8 +3207,9 @@
 
 
 	if (sdio_al_dev->state != CARD_INSERTED) {
-		pr_err(MODULE_NAME ":%s: sdio_al_dev is in invalid state %d\n",
-		       __func__, sdio_al_dev->state);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				":%s: sdio_al_dev is in invalid state %d\n",
+				__func__, sdio_al_dev->state);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -ENODEV;
 	}
@@ -2984,8 +3222,8 @@
 	}
 
 	if (ch->state != SDIO_CHANNEL_STATE_OPEN) {
-		pr_err(MODULE_NAME ":writing to closed channel %s\n",
-				 ch->name);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":writing to "
+				"closed channel %s\n", ch->name);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -EINVAL;
 	}
@@ -3000,12 +3238,12 @@
 		restart_inactive_time(sdio_al_dev);
 	}
 
-	DATA_DEBUG(MODULE_NAME ":start ch %s write %d avail %d.\n",
-		ch->name, len, ch->write_avail);
+	DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":start ch %s write %d "
+			"avail %d.\n", ch->name, len, ch->write_avail);
 
 	if (len > ch->write_avail) {
-		pr_err(MODULE_NAME ":ERR ch %s: write more bytes (%d) than "
-				   " available %d.\n",
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":ERR ch %s: "
+				"write more bytes (%d) than  available %d.\n",
 				ch->name, len, ch->write_avail);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return -ENOMEM;
@@ -3013,15 +3251,16 @@
 
 	ret = sdio_ch_write(ch, data, len);
 	if (ret) {
-		pr_err(MODULE_NAME ":sdio_write on channel %s err=%d\n",
-			ch->name, -ret);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":sdio_write "
+				"on channel %s err=%d\n", ch->name, -ret);
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 		return ret;
 	}
 
 	ch->total_tx_bytes += len;
-	DATA_DEBUG(MODULE_NAME ":end ch %s write %d avail %d total %d.\n",
-		ch->name, len, ch->write_avail, ch->total_tx_bytes);
+	DATA_DEBUG(sdio_al_dev->dev_log, MODULE_NAME ":end ch %s write %d "
+			"avail %d total %d.\n", ch->name, len,
+			ch->write_avail, ch->total_tx_bytes);
 
 	/* Round up to whole buffer size */
 	len = ROUND_UP(len, ch->peer_tx_buf_size);
@@ -3060,7 +3299,8 @@
 	struct sdio_func *func1 = NULL;
 	int ret;
 
-	pr_info("Initiating msm_sdio_al_shutdown...");
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: Initiating "
+		"msm_sdio_al_shutdown...", __func__);
 
 	for (i = 0; i < MAX_NUM_OF_SDIO_DEVICES; i++) {
 		struct sdio_al_device *sdio_al_dev = NULL;
@@ -3071,19 +3311,20 @@
 		}
 		sdio_al_dev = sdio_al->devices[i];
 		if (sdio_al_dev->state == CARD_REMOVED) {
-			pr_info(MODULE_NAME ": %s: card %d is already removed",
-				__func__, sdio_al_dev->card->host->index);
+			sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": %s: "
+				"card %d is already removed", __func__,
+				sdio_al_dev->card->host->index);
 			continue;
 		}
 		if (sdio_al_dev->state == MODEM_RESTART) {
-			pr_info(MODULE_NAME ": %s: card %d was already "
-					    "notified for modem reset",
+			sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": %s: "
+				"card %d was already notified for modem reset",
 				__func__, sdio_al_dev->card->host->index);
 			continue;
 		}
 
-		pr_info(MODULE_NAME ": %s: Set the state to MODEM_RESTART"
-			" for card %d",
+		sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ": %s: Set the "
+			"state to MODEM_RESTART for card %d",
 			__func__, sdio_al_dev->card->host->index);
 		sdio_al_dev->state = MODEM_RESTART;
 		sdio_al_dev->is_ready = false;
@@ -3117,9 +3358,9 @@
 					sdio_al_dev->card->host->index);
 				ret = sdio_al_wake_up(sdio_al_dev, 1, NULL);
 				if (ret == 0) {
-					pr_info(MODULE_NAME ": %s: "
-							    "sdio_release_irq"
-							    " for card %d",
+					sdio_al_logi(sdio_al_dev->dev_log,
+						MODULE_NAME ": %s: "
+						"sdio_release_irq for card %d",
 						__func__,
 						sdio_al_dev->card->host->index);
 					sdio_release_irq(func1);
@@ -3151,7 +3392,8 @@
 			sdio_al_dev->card->host->index);
 		sdio_al_vote_for_sleep(sdio_al_dev, 1);
 	}
-	pr_info("msm_sdio_al_shutdown complete.");
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: "
+		"msm_sdio_al_shutdown complete.", __func__);
 }
 
 static struct platform_driver msm_sdio_al_driver = {
@@ -3213,16 +3455,18 @@
 				sdio_al_dev->channel[i].name, -1);
 		}
 		if (!sdio_al_dev->channel[i].pdev) {
-			pr_err(MODULE_NAME ":NULL platform device for ch %s",
-			       sdio_al_dev->channel[i].name);
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					":NULL platform device for ch %s",
+					sdio_al_dev->channel[i].name);
 			sdio_al_dev->channel[i].state =
 				SDIO_CHANNEL_STATE_INVALID;
 			continue;
 		}
 		ret = platform_device_add(sdio_al_dev->channel[i].pdev);
 		if (ret) {
-			pr_err(MODULE_NAME ":platform_device_add failed, "
-					   "ret=%d\n", ret);
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					":platform_device_add failed, "
+					"ret=%d\n", ret);
 			sdio_al_dev->channel[i].state =
 				SDIO_CHANNEL_STATE_INVALID;
 		}
@@ -3258,27 +3502,31 @@
 	signature = sdio_readl(func1, SDIOC_SW_HEADER_ADDR, &ret);
 	sdio_release_host(func1);
 	if (ret) {
-		pr_err(MODULE_NAME ":fail to read signature from sw header.\n");
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":fail to read "
+				"signature from sw header.\n");
 		return ret;
 	}
 
 	switch (signature) {
 	case PEER_SDIOC_SW_MAILBOX_BOOT_SIGNATURE:
 		if (sdio_al_dev == sdio_al->bootloader_dev) {
-			pr_info(MODULE_NAME ":setup bootloader on card %d\n",
-				sdio_al_dev->card->host->index);
+			sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":setup "
+					"bootloader on card %d\n",
+					sdio_al_dev->card->host->index);
 			return sdio_al_bootloader_setup();
 		} else {
-			pr_info(MODULE_NAME ":wait for bootloader completion "
-					    "on card %d\n",
-				sdio_al_dev->card->host->index);
+			sdio_al_logi(sdio_al_dev->dev_log, MODULE_NAME ":wait "
+					"for bootloader completion "
+					"on card %d\n",
+					sdio_al_dev->card->host->index);
 			return sdio_al_wait_for_bootloader_comp(sdio_al_dev);
 		}
 	case PEER_SDIOC_SW_MAILBOX_SIGNATURE:
 	case PEER_SDIOC_SW_MAILBOX_UT_SIGNATURE:
 		return init_channels(sdio_al_dev);
 	default:
-		pr_err(MODULE_NAME ":Invalid signature 0x%x\n", signature);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Invalid "
+				"signature 0x%x\n", signature);
 		return -EINVAL;
 	}
 
@@ -3297,13 +3545,15 @@
 	struct mmc_card *card = NULL;
 
 	if (!func) {
-		pr_err(MODULE_NAME ": %s: NULL func\n", __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL func\n",
+				__func__);
 		return -ENODEV;
 	}
 	card = func->card;
 
 	if (!card) {
-		pr_err(MODULE_NAME ": %s: NULL card\n", __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL card\n",
+				__func__);
 		return -ENODEV;
 	}
 
@@ -3336,11 +3586,18 @@
 	for (i = 0; i < MAX_NUM_OF_SDIO_DEVICES ; ++i)
 		if (sdio_al->devices[i] == NULL) {
 			sdio_al->devices[i] = sdio_al_dev;
+			sdio_al_dev->dev_log = &sdio_al->device_log[i];
+			spin_lock_init(&sdio_al_dev->dev_log->log_lock);
+#ifdef CONFIG_DEBUG_FS
+			sdio_al_dbgfs_log[i].data =
+						sdio_al_dev->dev_log->buffer;
+			sdio_al_dbgfs_log[i].size = SDIO_AL_DEBUG_LOG_SIZE;
+#endif
 			break;
 		}
 	if (i == MAX_NUM_OF_SDIO_DEVICES) {
-		pr_err(MODULE_NAME ":No space in devices array for the "
-				   "device\n");
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":No space in "
+				"devices array for the device\n");
 		return -ENOMEM;
 	}
 
@@ -3384,16 +3641,16 @@
 	/* Init Func#1 */
 	ret = sdio_al_enable_func_retry(card->sdio_func[0], "Init Func#1");
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to enable Func#%d\n",
-		       card->sdio_func[0]->num);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to "
+				"enable Func#%d\n", card->sdio_func[0]->num);
 		goto exit;
 	}
 
 	/* Patch Func CIS tuple issue */
 	ret = sdio_set_block_size(card->sdio_func[0], SDIO_AL_BLOCK_SIZE);
 	if (ret) {
-		pr_err(MODULE_NAME ":Fail to set block size, Func#%d\n",
-			card->sdio_func[0]->num);
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ":Fail to set "
+			"block size, Func#%d\n", card->sdio_func[0]->num);
 		goto exit;
 	}
 	sdio_al_dev->card->sdio_func[0]->max_blksize = SDIO_AL_BLOCK_SIZE;
@@ -3417,13 +3674,15 @@
 	struct mmc_card *card = NULL;
 
 	if (!func) {
-		pr_err(MODULE_NAME ": %s: NULL func\n", __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL func\n",
+				__func__);
 		return;
 	}
 	card = func->card;
 
 	if (!card) {
-		pr_err(MODULE_NAME ": %s: NULL card\n", __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: NULL card\n",
+				__func__);
 		return;
 	}
 
@@ -3443,14 +3702,14 @@
 		return;
 	}
 
-	pr_info(MODULE_NAME ":%s for card %d\n",
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s for card %d\n",
 			 __func__, card->host->index);
 
 	if (card->sdio_func[0])
 		sdio_claim_host(card->sdio_func[0]);
 	else
-		pr_err(MODULE_NAME ":%s: NULL func1 for card %d\n",
-			 __func__, card->host->index);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ":%s: NULL func1 "
+				"for card %d\n", __func__, card->host->index);
 
 	if (sdio_al_dev->state == CARD_REMOVED)
 		return;
@@ -3461,22 +3720,23 @@
 	for (i = 0; i < SDIO_AL_MAX_CHANNELS; i++)
 		sdio_al_dev->channel[i].signature = 0x0;
 
-	pr_info(MODULE_NAME ":%s: ask_reading_mailbox for card %d\n",
-			 __func__, card->host->index);
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: ask_reading_mailbox "
+			"for card %d\n", __func__, card->host->index);
 	sdio_al_dev->is_ready = false; /* Flag worker to exit */
 	sdio_al_dev->ask_mbox = false;
 	ask_reading_mailbox(sdio_al_dev); /* Wakeup worker */
 
 	if (state != MODEM_RESTART) {
 		if (sdio_al_dev->is_timer_initialized) {
-			pr_info(MODULE_NAME ": %s: Stop timer for card %d",
-				__func__, sdio_al_dev->card->host->index);
+			sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: Stop"
+					" timer for card %d", __func__,
+					sdio_al_dev->card->host->index);
 			sdio_al_dev->poll_delay_msec = 0;
 			del_timer_sync(&sdio_al_dev->timer);
 		}
 
-		pr_info(MODULE_NAME ":%s: notifying clients for "
-				    "card %d\n",
+		sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: "
+				"notifying clients for card %d\n",
 				 __func__, card->host->index);
 		for (i = 0; i < SDIO_AL_MAX_CHANNELS; i++) {
 			if (sdio_al_dev->channel[i].state ==
@@ -3490,25 +3750,26 @@
 	if (card->sdio_func[0])
 		sdio_release_host(card->sdio_func[0]);
 
-	pr_info(MODULE_NAME ":%s: vote for sleep for card %d\n",
-			 __func__, card->host->index);
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: vote for sleep for "
+			"card %d\n", __func__, card->host->index);
 	sdio_al_vote_for_sleep(sdio_al_dev, 1);
 
-	pr_info(MODULE_NAME ":%s: flush_workqueue for card %d\n",
-			 __func__, card->host->index);
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: flush_workqueue for "
+			"card %d\n", __func__, card->host->index);
 	flush_workqueue(sdio_al_dev->workqueue);
 	destroy_workqueue(sdio_al_dev->workqueue);
 	wake_lock_destroy(&sdio_al_dev->wake_lock);
 
-	pr_info(MODULE_NAME ":%s: delete data structures for card %d\n",
-			 __func__, card->host->index);
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: delete data "
+			"structures for card %d\n", __func__,
+			card->host->index);
 	kfree(sdio_al_dev->sdioc_sw_header);
 	kfree(sdio_al_dev->mailbox);
 	kfree(sdio_al_dev->rx_flush_buf);
 	kfree(sdio_al_dev);
 
-	pr_info(MODULE_NAME ":%s: sdio card %d removed.\n", __func__,
-		card->host->index);
+	sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ":%s: sdio card %d removed."
+			"\n", __func__,	card->host->index);
 }
 
 static void sdio_print_mailbox(char *prefix_str, struct sdio_mailbox *mailbox)
@@ -3518,12 +3779,13 @@
 	char buf1[10];
 
 	if (!mailbox) {
-		pr_err(MODULE_NAME ": mailbox is NULL\n");
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": mailbox is "
+				"NULL\n");
 		return;
 	}
 
-	pr_err(MODULE_NAME ": %s: pipes 0_7: eot=0x%x, "
-		"thresh=0x%x, overflow=0x%x, "
+	sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s: pipes 0_7: eot=0x%x,"
+		" thresh=0x%x, overflow=0x%x, "
 		"underflow=0x%x, mask_thresh=0x%x\n",
 		 prefix_str, mailbox->eot_pipe_0_7,
 		 mailbox->thresh_above_limit_pipe_0_7,
@@ -3540,7 +3802,7 @@
 		strncat(buf, buf1, sizeof(buf));
 	}
 
-	pr_err(MODULE_NAME "%s", buf);
+	sdio_al_loge(&sdio_al->gen_log, MODULE_NAME "%s", buf);
 }
 
 static void sdio_al_print_info(void)
@@ -3563,15 +3825,16 @@
 
 	atomic_set(&first_time, 1);
 
-	pr_err(MODULE_NAME ": %s - SDIO DEBUG INFO\n", __func__);
+	sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - SDIO DEBUG INFO\n",
+			__func__);
 
 	if (!sdio_al) {
-		pr_err(MODULE_NAME ": %s - ERROR - sdio_al is NULL\n",
-			 __func__);
+		sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": %s - ERROR - "
+				"sdio_al is NULL\n",  __func__);
 		return;
 	}
 
-	pr_err(MODULE_NAME ": GPIO mdm2ap_status=%d\n",
+	sdio_al_loge(&sdio_al->gen_log, MODULE_NAME ": GPIO mdm2ap_status=%d\n",
 				sdio_al->pdata->get_mdm2ap_status());
 
 	for (j = 0 ; j < MAX_NUM_OF_SDIO_DEVICES ; ++j) {
@@ -3582,8 +3845,8 @@
 		}
 
 		if (!sdio_al_dev->card && !sdio_al_dev->card->host) {
-			pr_err(MODULE_NAME ": Card or Host fields "
-			       "are NULL\n);");
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": Card"
+					" or Host fields are NULL\n);");
 			continue;
 		}
 
@@ -3594,13 +3857,13 @@
 		mailbox = sdio_al_dev->mailbox;
 		sdio_print_mailbox(buf, mailbox);
 
-		pr_err(MODULE_NAME ": Card#%d: "
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": Card#%d: "
 			"is_ok_to_sleep=%d\n",
 			sdio_al_dev->card->host->index,
 			sdio_al_dev->is_ok_to_sleep);
 
 
-		pr_err(MODULE_NAME ": Card#%d: "
+		sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME ": Card#%d: "
 				   "Shadow channels SW MB:",
 		       sdio_al_dev->card->host->index);
 
@@ -3617,7 +3880,8 @@
 
 			ch_config = &sdio_al_dev->channel[i].ch_config;
 
-			pr_err(MODULE_NAME ": Ch %s: max_rx_thres=0x%x, "
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				": Ch %s: max_rx_thres=0x%x, "
 				"max_tx_thres=0x%x, tx_buf=0x%x, "
 				"is_packet_mode=%d, "
 				"max_packet=0x%x, min_write=0x%x",
@@ -3628,14 +3892,13 @@
 				ch_config->max_packet_size,
 				ch->min_write_avail);
 
-			pr_err(MODULE_NAME ": total_rx=0x%x, "
-				"total_tx=0x%x, "
-				"read_avail=0x%x, "
-				"write_avail=0x%x, rx_pending=0x%x, "
-				"num_reads=0x%x, num_notifs=0x%x",
-				ch->total_rx_bytes, ch->total_tx_bytes,
-				ch->read_avail, ch->write_avail,
-				ch->rx_pending_bytes,
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				": total_rx=0x%x, total_tx=0x%x, "
+				"read_avail=0x%x, write_avail=0x%x, "
+				"rx_pending=0x%x, num_reads=0x%x, "
+				"num_notifs=0x%x", ch->total_rx_bytes,
+				ch->total_tx_bytes, ch->read_avail,
+				ch->write_avail, ch->rx_pending_bytes,
 				ch->statistics.total_read_times,
 				ch->statistics.total_notifs);
 		} /* end loop over all channels */
@@ -3650,15 +3913,16 @@
 			return;
 
 		if (!sdio_al_dev->card->host) {
-			pr_err(MODULE_NAME ": Host is NULL");
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": Host is NULL");
 			continue;
 		}
 
 		if (sdio_al_dev->lpm_chan == INVALID_SDIO_CHAN) {
-			pr_err(MODULE_NAME ": %s - for "
-			       "Card#%d, is lpm_chan=="
-			       "INVALID_SDIO_CHAN. continuing...",
-			       __func__, sdio_al_dev->card->host->index);
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+				": %s - for Card#%d, is lpm_chan=="
+				"INVALID_SDIO_CHAN. continuing...",
+				__func__, sdio_al_dev->card->host->index);
 			continue;
 		}
 
@@ -3670,9 +3934,10 @@
 		lpm_func = sdio_al_dev->card->sdio_func[sdio_al_dev->
 								lpm_chan+1];
 		if (!lpm_func) {
-			pr_err(MODULE_NAME ": %s - lpm_func is NULL for card#%d"
-			       " continuing...\n", __func__,
-			       sdio_al_dev->card->host->index);
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": %s - lpm_func is NULL for card#%d"
+					" continuing...\n", __func__,
+					sdio_al_dev->card->host->index);
 			continue;
 		}
 
@@ -3686,11 +3951,13 @@
 		sdio_release_host(sdio_al_dev->card->sdio_func[0]);
 
 		if (ret)
-			pr_err(MODULE_NAME ": %s - fail to read "
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": %s - fail to read "
 				"is_HOST_ok_to_sleep from mailbox for card %d",
 				__func__, sdio_al_dev->card->host->index);
 		else
-			pr_err(MODULE_NAME ": Card#%d: "
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": Card#%d: "
 				"is_HOST_ok_to_sleep=%d\n",
 				sdio_al_dev->card->host->index,
 				is_ok_to_sleep);
@@ -3703,7 +3970,8 @@
 			return;
 
 		if (!sdio_al_dev->card->host) {
-			pr_err(MODULE_NAME ": Host is NULL");
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": Host is NULL");
 			continue;
 		}
 
@@ -3719,7 +3987,8 @@
 		sdio_release_host(func1);
 
 		if (ret) {
-			pr_err(MODULE_NAME ": fail to read "
+			sdio_al_loge(sdio_al_dev->dev_log, MODULE_NAME
+					": fail to read "
 			       "mailbox for card#%d. "
 			       "continuing...\n",
 			       sdio_al_dev->card->host->index);
@@ -3760,8 +4029,8 @@
 				  void *data)
 {
 	if (notif_type != SUBSYS_BEFORE_SHUTDOWN) {
-		pr_info(MODULE_NAME ": %s: got notification %ld",
-			__func__, notif_type);
+		sdio_al_logi(&sdio_al->gen_log, MODULE_NAME ": %s: got "
+				"notification %ld", __func__, notif_type);
 		return NOTIFY_DONE;
 	}
 
@@ -3821,6 +4090,9 @@
 	}
 
 	sdio_register_driver(&sdio_al_sdiofn_driver);
+
+	spin_lock_init(&sdio_al->gen_log.log_lock);
+
 exit:
 	if (ret)
 		kfree(sdio_al);