Skip to contentSkip to conversation

ti-st: Enhange logging for Shared Transport - TI driver

PATCH Superseded [email protected] 6 participants 10 messages Mar 15, 2012 – Mar 16, 2012 Char and misc drivers

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ti-st: Enhange logging for Shared Transport - TI driver

From: Alexandra Sava <[email protected]>

* added new module parameter named debug_mask to control displayed messages verbosity
* the logging mechanism is enabled via CONFIG_TI_ST_DEBUG Kconfig option

---
 drivers/misc/ti-st/Kconfig   |    7 ++
 drivers/misc/ti-st/debug.h   |   34 +++++++++
 drivers/misc/ti-st/st_core.c |  153 +++++++++++++++++++-----------------------
 drivers/misc/ti-st/st_kim.c  |  126 +++++++++++++++++-----------------
 drivers/misc/ti-st/st_ll.c   |   28 ++++----
 5 files changed, 187 insertions(+), 161 deletions(-)
 create mode 100644 drivers/misc/ti-st/debug.h
drivers/misc/ti-st/Kconfig +7 -0
index abb5de1..6d4e6a3 100644
@@ -14,4 +14,11 @@ config TI_ST
 	  are returned to relevant protocol drivers based on their
 	  packet types.
 
+if TI_ST
+config TI_ST_DEBUG
+	bool "Enable full debugging output for the Shared transport core driver"
+	depends on TI_ST
+	---help---
+		Debugging support.
+endif # TI_ST
 endmenu
drivers/misc/ti-st/debug.h new file +34 -0
new file mode 100644
index 0000000..68ffc74
@@ -0,0 +1,34 @@
+#ifndef TI_ST_DEBUG_H
+#define TI_ST_DEBUG_H
+
+enum TI_ST_DEBUG_MASK {
+	TI_ST_DBG_HCI_LL = 0x0001, /* HCI_LL protocol */
+	TI_ST_DBG_KIM = 0x0002, /* GPIO control and firmware download */
+	TI_ST_DBG_CORE = 0x0003, /* ST KIM driver and ST LL driver */
+	TI_ST_DBG_ALL = 0xffff /* enable all logs */
+};
+
+extern unsigned short debug_mask;
+
+#define ti_st_info(fmt, ...)	\
+	pr_info(fmt, ##__VA_ARGS__);
+#define ti_st_err(fmt, ...)		\
+	pr_err(fmt, ##__VA_ARGS__);
+#define ti_st_warn(fmt, ...)	\
+	pr_warn(fmt, ##__VA_ARGS__);
+
+
+#ifdef CONFIG_TI_ST_DEBUG
+#define ti_st_dbg(mask, fmt, ...)                  \
+	({                              \
+		if (debug_mask & mask)                     \
+			pr_debug(fmt, ##__VA_ARGS__);    \
+	})
+#else
+static inline void ti_st_dbg(enum TI_ST_DEBUG_MASK dbg_mask,
+							 const char *fmt, ...)
+{
+}
+
+#endif
+#endif
drivers/misc/ti-st/st_core.c +68 -85

524 lines not on this page · raw message

drivers/misc/ti-st/st_kim.c +64 -62

408 lines not on this page · raw message

drivers/misc/ti-st/st_ll.c +14 -14
index 1ff460a..ccdad8b 100644
@@ -24,6 +24,7 @@
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/ti_wilink_st.h>
+#include "debug.h"
 
 /**********************************************************************/
 /* internal functions */
@@ -31,7 +32,7 @@ static void send_ll_cmd(struct st_data_s *st_data,
 	unsigned char cmd)
 {
 
-	pr_debug("%s: writing %x", __func__, cmd);
+	ti_st_dbg(TI_ST_DBG_HCI_LL, "%s: writing %x", __func__, cmd);
 	st_int_write(st_data, &cmd, 1);
 	return;
 }
@@ -41,11 +42,11 @@ static void ll_device_want_to_sleep(struct st_data_s *st_data)
 	struct kim_data_s	*kim_data;
 	struct ti_st_plat_data	*pdata;
 
-	pr_debug("%s", __func__);
+	ti_st_dbg(TI_ST_DBG_HCI_LL, "%s", __func__);
 	/* sanity check */
 	if (st_data->ll_state != ST_LL_AWAKE)
-		pr_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
-			  "in state %ld", st_data->ll_state);
+		ti_st_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
+					"in state %ld", st_data->ll_state);
 
 	send_ll_cmd(st_data, LL_SLEEP_ACK);
 	/* update state */
@@ -70,15 +71,15 @@ static void ll_device_want_to_wakeup(struct st_data_s *st_data)
 		break;
 	case ST_LL_ASLEEP_TO_AWAKE:
 		/* duplicate wake_ind */
-		pr_err("duplicate wake_ind while waiting for Wake ack");
+		ti_st_err("duplicate wake_ind while waiting for Wake ack");
 		break;
 	case ST_LL_AWAKE:
 		/* duplicate wake_ind */
-		pr_err("duplicate wake_ind already AWAKE");
+		ti_st_err("duplicate wake_ind already AWAKE");
 		break;
 	case ST_LL_AWAKE_TO_ASLEEP:
 		/* duplicate wake_ind */
-		pr_err("duplicate wake_ind");
+		ti_st_err("duplicate wake_ind");
 		break;
 	}
 	/* update state */
@@ -116,14 +117,13 @@ void st_ll_wakeup(struct st_data_s *ll)
 		ll->ll_state = ST_LL_ASLEEP_TO_AWAKE;
 	} else {
 		/* don't send the duplicate wake_indication */
-		pr_err(" Chip already AWAKE ");
+		ti_st_err(" Chip already AWAKE ");
 	}
 }
 
 /* called when ST Core wants the state */
 unsigned long st_ll_getstate(struct st_data_s *ll)
 {
-	pr_debug(" returning state %ld", ll->ll_state);
 	return ll->ll_state;
 }
 
@@ -133,22 +133,22 @@ unsigned long st_ll_sleep_state(struct st_data_s *st_data,
 {
 	switch (cmd) {
 	case LL_SLEEP_IND:	/* sleep ind */
-		pr_debug("sleep indication recvd");
+		ti_st_dbg(TI_ST_DBG_HCI_LL, "sleep indication recvd");
 		ll_device_want_to_sleep(st_data);
 		break;
 	case LL_SLEEP_ACK:	/* sleep ack */
-		pr_err("sleep ack rcvd: host shouldn't");
+		ti_st_err("sleep ack rcvd: host shouldn't");
 		break;
 	case LL_WAKE_UP_IND:	/* wake ind */
-		pr_debug("wake indication recvd");
+		ti_st_dbg(TI_ST_DBG_HCI_LL, "wake indication recvd");
 		ll_device_want_to_wakeup(st_data);
 		break;
 	case LL_WAKE_UP_ACK:	/* wake ack */
-		pr_debug("wake ack rcvd");
+		ti_st_dbg(TI_ST_DBG_HCI_LL, "wake ack rcvd");
 		st_data->ll_state = ST_LL_AWAKE;
 		break;
 	default:
-		pr_err(" unknown input/state ");
+		ti_st_err(" unknown input/state ");
 		return -EINVAL;
 	}
 	return 0;
Signature · 1 line
1.7.4.1
#1 lore raw

Adding Greg's new email address.

Quoted 1,185 lines · On Thu, Mar 15, 2012 at 8:26 PM, <[email protected]> wrote:

From: Alexandra Sava <[email protected]>

* added new module parameter named debug_mask to control displayed messages verbosity
* the logging mechanism is enabled via CONFIG_TI_ST_DEBUG Kconfig option

---
 drivers/misc/ti-st/Kconfig   |    7 ++
 drivers/misc/ti-st/debug.h   |   34 +++++++++ drivers/misc/ti-st/st_core.c |  153 +++++++++++++++++++----------------------- drivers/misc/ti-st/st_kim.c  |  126 +++++++++++++++++----------------- drivers/misc/ti-st/st_ll.c   |   28 ++++----

 5 files changed, 187 insertions(+), 161 deletions(-)

 create mode 100644 drivers/misc/ti-st/debug.h

drivers/misc/ti-st/Kconfig +0 -0
index abb5de1..6d4e6a3 100644
@@ -14,4 +14,11 @@ config TI_ST

         are returned to relevant protocol drivers based on their packet types.

drivers/misc/ti-st/Kconfig +7 -0
+if TI_ST
+config TI_ST_DEBUG
+       bool "Enable full debugging output for the Shared transport core driver"
+       depends on TI_ST
+       ---help---
+               Debugging support.
+endif # TI_ST

 endmenu

drivers/misc/ti-st/debug.h new file +34 -0
new file mode 100644
index 0000000..68ffc74
@@ -0,0 +1,34 @@
+#ifndef TI_ST_DEBUG_H
+#define TI_ST_DEBUG_H
+
+enum TI_ST_DEBUG_MASK {
+       TI_ST_DBG_HCI_LL = 0x0001, /* HCI_LL protocol */
+       TI_ST_DBG_KIM = 0x0002, /* GPIO control and firmware download */
+       TI_ST_DBG_CORE = 0x0003, /* ST KIM driver and ST LL driver */
+       TI_ST_DBG_ALL = 0xffff /* enable all logs */
+};
+
+extern unsigned short debug_mask;
+
+#define ti_st_info(fmt, ...)   \
+       pr_info(fmt, ##__VA_ARGS__);
+#define ti_st_err(fmt, ...)            \
+       pr_err(fmt, ##__VA_ARGS__);
+#define ti_st_warn(fmt, ...)   \
+       pr_warn(fmt, ##__VA_ARGS__);
+
+
+#ifdef CONFIG_TI_ST_DEBUG
+#define ti_st_dbg(mask, fmt, ...)                  \
+       ({                              \
+               if (debug_mask & mask)                     \
+                       pr_debug(fmt, ##__VA_ARGS__);    \
+       })
+#else
+static inline void ti_st_dbg(enum TI_ST_DEBUG_MASK dbg_mask,
+                                                        const char *fmt, ...)
+{
+}
+
+#endif
+#endif
drivers/misc/ti-st/st_core.c +7 -5
index 2b62232..245cf31 100644
@@ -1,4 +1,5 @@
  /*
+
  *  Shared Transport Line discipline driver Core
  *     This hooks up ST KIM driver and ST LL driver
  *  Copyright (C) 2009-2010 Texas Instruments
@@ -29,6 +30,7 @@
  #include <linux/skbuff.h>
 
  #include <linux/ti_wilink_st.h>
+#include "debug.h"
 
  /* function pointer pointing to either,
  * st_kim_recv during registration to receive fw download responses
@@ -40,7 +42,7 @@ void (*st_recv) (void*, const unsigned char*, long);
  static void add_channel_to_table(struct st_data_s *st_gdata,
                struct st_proto_s *new_proto)
  {
-       pr_info("%s: id %d\n", __func__, new_proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: id %d\n", __func__, new_proto->chnl_id);
        /* list now has the channel id as index itself */
        st_gdata->list[new_proto->chnl_id] = new_proto;
        st_gdata->is_registered[new_proto->chnl_id] = true;
@@ -49,7 +51,7 @@ static void add_channel_to_table(struct st_data_s *st_gdata,
  static void remove_channel_from_table(struct st_data_s *st_gdata,
                struct st_proto_s *proto)
  {
-       pr_info("%s: id %d\n", __func__, proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: id %d\n", __func__, proto->chnl_id);
  /*     st_gdata->list[proto->chnl_id] = NULL; */
        st_gdata->is_registered[proto->chnl_id] = false;
  }
@@ -65,7 +67,7 @@ int st_get_uart_wr_room(struct st_data_s *st_gdata)
  {
        struct tty_struct *tty;
        if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
-               pr_err("tty unavailable to perform write");
+               ti_st_err("tty unavailable to perform write");
                return -1;
        }
        tty = st_gdata->tty;
@@ -84,7 +86,7 @@ int st_int_write(struct st_data_s *st_gdata,
  {
        struct tty_struct *tty;
        if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
-               pr_err("tty unavailable to perform write");
+               ti_st_err("tty unavailable to perform write");
                return -EINVAL;
        }
        tty = st_gdata->tty;
@@ -102,12 +104,12 @@ int st_int_write(struct st_data_s *st_gdata,
  */
  void st_send_frame(unsigned char chnl_id, struct st_data_s *st_gdata)
  {
-       pr_debug(" %s(prot:%d) ", __func__, chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, " %s(prot:%d) ", __func__, chnl_id);
 

       if (unlikely
           (st_gdata == NULL || st_gdata->rx_skb == NULL
            || st_gdata->is_registered[chnl_id] == false)) {
-               pr_err("chnl_id %d not registered, no data to send?",
+               ti_st_err("chnl_id %d not registered, no data to send?", chnl_id); kfree_skb(st_gdata->rx_skb);
               return;

drivers/misc/ti-st/st_core.c +0 -0
@@ -122,12 +124,12 @@ void st_send_frame(unsigned char chnl_id, struct st_data_s *st_gdata)

                       (st_gdata->list[chnl_id]->recv (st_gdata->list[chnl_id]->priv_data, st_gdata->rx_skb) != 0)) {
-                       pr_err(" proto stack %d's ->recv failed", chnl_id);
+                       ti_st_err(" proto stack %d's ->recv failed", chnl_id); kfree_skb(st_gdata->rx_skb);
                       return;
               }
       } else {
-               pr_err(" proto stack %d's ->recv null", chnl_id);
+               ti_st_err(" proto stack %d's ->recv null", chnl_id); kfree_skb(st_gdata->rx_skb);
       }
       return;

drivers/misc/ti-st/st_core.c +1 -1
@@ -143,14 +145,15 @@ void st_send_frame(unsigned char chnl_id, struct st_data_s *st_gdata)
  void st_reg_complete(struct st_data_s *st_gdata, char err)
  {
        unsigned char i = 0;
-       pr_info(" %s ", __func__);
+
        for (i = 0; i < ST_MAX_CHANNELS; i++) {

               if (likely(st_gdata != NULL && st_gdata->is_registered[i] == true && st_gdata->list[i]->reg_complete_cb != NULL)) { st_gdata->list[i]->reg_complete_cb (st_gdata->list[i]->priv_data, err);
-                       pr_info("protocol %d's cb sent %d\n", i, err);
+                       ti_st_dbg(TI_ST_DBG_KIM, "protocol %d's cb "
+                                               "sent %d\n", i, err); if (err) { /* cleanup registered protocol */ st_gdata->protos_registered--; st_gdata->is_registered[i] = false;

drivers/misc/ti-st/st_core.c +6 -9
@@ -164,8 +167,6 @@ static inline int st_check_data_len(struct st_data_s *st_gdata,
  {
        int room = skb_tailroom(st_gdata->rx_skb);
 
-       pr_debug("len %d room %d", len, room);
-
        if (!len) {
                /* Received packet has only packet header and
                 * has zero length payload. So, ask ST CORE to
@@ -177,7 +178,7 @@ static inline int st_check_data_len(struct st_data_s *st_gdata,
                /* Received packet's payload length is larger.
                 * We can't accommodate it in created skb.
                 */
-               pr_err("Data length is too large len %d room %d", len,
+               ti_st_err("Data length is too large len %d room %d", len,
                           room);
                kfree_skb(st_gdata->rx_skb);
        } else {
@@ -201,7 +202,7 @@ static inline int st_check_data_len(struct st_data_s *st_gdata,
 
  /**
  * st_wakeup_ack - internal function for action when wake-up ack
- *     received
+ * received
  */
  static inline void st_wakeup_ack(struct st_data_s *st_gdata,
        unsigned char cmd)
@@ -244,15 +245,14 @@ void st_int_recv(void *disc_data,
        unsigned long flags;
 
        ptr = (char *)data;
-       /* tty_receive sent null ? */
        if (unlikely(ptr == NULL) || (st_gdata == NULL)) {
-               pr_err(" received null from TTY ");
+               ti_st_err(" received null from TTY ");
                return;
        }
 
-       pr_debug("count %ld rx_state %ld"
-                  "rx_count %ld", count, st_gdata->rx_state,
-                  st_gdata->rx_count);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: count %ld rx_state %ld"
+               "rx_count %ld", __func__, count, st_gdata->rx_state,
+               st_gdata->rx_count);
 
        spin_lock_irqsave(&st_gdata->lock, flags);
        /* Decode received bytes here */
@@ -271,7 +271,7 @@ void st_int_recv(void *disc_data,
                        switch (st_gdata->rx_state) {
                        /* Waiting for complete packet ? */

                       case ST_W4_DATA:
-                               pr_debug("Complete pkt received");
+                               ti_st_dbg(TI_ST_DBG_CORE, "Complete pkt received"); /* Ask ST CORE to forward
                                * the packet to protocol driver */ st_send_frame(st_gdata->rx_chnl, st_gdata);

drivers/misc/ti-st/st_core.c +0 -0
@@ -285,32 +285,28 @@ void st_int_recv(void *disc_data,

                               plen =
                               &st_gdata->rx_skb->data [proto->offset_len_in_hdr];
-                               pr_debug("plen pointing to %x\n", *plen); if (proto->len_size == 1)/* 1 byte len field */ payload_len = *(unsigned char *)plen; else if (proto->len_size == 2) payload_len = __le16_to_cpu(*(unsigned short *)plen); else
-                                       pr_info("%s: invalid length "
-                                       "for id %d\n",
-                                       __func__, proto->chnl_id);
+                                       ti_st_dbg(TI_ST_DBG_CORE, "%s: invalid length"
+                                       "for id %d\n", __func__, proto->chnl_id); +
                               st_check_data_len(st_gdata, proto->chnl_id, payload_len);
-                               pr_debug("off %d, pay len %d\n",
-                                       proto->offset_len_in_hdr, payload_len); continue;
-                       }       /* end of switch rx_state */
+                       }
               }

-               /* end of if rx_count */
               /* Check first byte of packet and identify module
                * owner (BT/FM/GPS) */
               switch (*ptr) {
               case LL_SLEEP_IND:
               case LL_SLEEP_ACK:
               case LL_WAKE_UP_IND:
-                       pr_debug("PM packet");
+                       ti_st_dbg(TI_ST_DBG_CORE, "PM packet"); /* this takes appropriate action based on
                        * sleep state received --
                        */

drivers/misc/ti-st/st_core.c +0 -0
@@ -327,8 +323,7 @@ void st_int_recv(void *disc_data,
                        count--;
                        continue;

               case LL_WAKE_UP_ACK:
-                       pr_debug("PM packet");
-
+                       ti_st_dbg(TI_ST_DBG_CORE, "PM packet"); spin_unlock_irqrestore(&st_gdata->lock, flags); /* wake up ack received */ st_wakeup_ack(st_gdata, *ptr);

drivers/misc/ti-st/st_core.c +0 -0
@@ -341,10 +336,9 @@ void st_int_recv(void *disc_data,

               default:
                       type = *ptr;
                       if (st_gdata->list[type] == NULL) {
-                               pr_err("chip/interface misbehavior dropping"
+                               ti_st_err("chip/interface misbehavior dropping" " frame starting with 0x%02x", type); goto done;
-
                       }
                       st_gdata->rx_skb = alloc_skb( st_gdata->list[type]->max_frame_size,

drivers/misc/ti-st/st_core.c +4 -3
@@ -352,19 +346,19 @@ void st_int_recv(void *disc_data,
                        skb_reserve(st_gdata->rx_skb,
                                        st_gdata->list[type]->reserve);
                        /* next 2 required for BT only */
-                       st_gdata->rx_skb->cb[0] = type; /*pkt_type*/
-                       st_gdata->rx_skb->cb[1] = 0; /*incoming*/
+                       st_gdata->rx_skb->cb[0] = type; /* pkt_type */
+                       st_gdata->rx_skb->cb[1] = 0; /* incoming */
                        st_gdata->rx_chnl = *ptr;
                        st_gdata->rx_state = ST_W4_HEADER;
                        st_gdata->rx_count = st_gdata->list[type]->hdr_len;
-                       pr_debug("rx_count %ld\n", st_gdata->rx_count);
+                       ti_st_dbg(TI_ST_DBG_CORE, "%s: rx_count %ld\n", __func__,
+                                               st_gdata->rx_count);
                };
                ptr++;
                count--;
        }

 done:
       spin_unlock_irqrestore(&st_gdata->lock, flags);
-       pr_debug("done %s", __func__); return;
 }

drivers/misc/ti-st/st_core.c +0 -2
@@ -378,7 +372,6 @@ struct sk_buff *st_int_dequeue(struct st_data_s *st_gdata)
  {
        struct sk_buff *returning_skb;
 
-       pr_debug("%s", __func__);
        if (st_gdata->tx_skb != NULL) {
                returning_skb = st_gdata->tx_skb;
                st_gdata->tx_skb = NULL;
@@ -400,19 +393,18 @@ void st_int_enqueue(struct st_data_s *st_gdata, struct sk_buff *skb)
  {
        unsigned long flags = 0;
 
-       pr_debug("%s", __func__);
        spin_lock_irqsave(&st_gdata->lock, flags);
 
        switch (st_ll_getstate(st_gdata)) {

       case ST_LL_AWAKE:
-               pr_debug("ST LL is AWAKE, sending normally");
+               ti_st_dbg(TI_ST_DBG_CORE, "ST LL is AWAKE, sending normally"); skb_queue_tail(&st_gdata->txq, skb);
               break;
       case ST_LL_ASLEEP_TO_AWAKE:
               skb_queue_tail(&st_gdata->tx_waitq, skb);
               break;
       case ST_LL_AWAKE_TO_ASLEEP:
-               pr_err("ST LL is illegal state(%ld),"
+               ti_st_err("ST LL is illegal state(%ld),"
                          "purging received skb.", st_ll_getstate(st_gdata)); kfree_skb(skb);
               break;

drivers/misc/ti-st/st_core.c +0 -0
@@ -421,14 +413,13 @@ void st_int_enqueue(struct st_data_s *st_gdata, struct sk_buff *skb)
                st_ll_wakeup(st_gdata);
                break;

       default:
-               pr_err("ST LL is illegal state(%ld),"
+               ti_st_err("ST LL is illegal state(%ld),"
                          "purging received skb.", st_ll_getstate(st_gdata)); kfree_skb(skb);
               break;
       }

       spin_unlock_irqrestore(&st_gdata->lock, flags);
-       pr_debug("done %s", __func__); return;
 }

drivers/misc/ti-st/st_core.c +0 -0
@@ -442,10 +433,10 @@ void st_tx_wakeup(struct st_data_s *st_data)
  {
        struct sk_buff *skb;

       unsigned long flags;    /* for irq save flags */
-       pr_debug("%s", __func__);
+
       /* check for sending & set flag sending here */ if (test_and_set_bit(ST_TX_SENDING, &st_data->tx_state)) {
-               pr_debug("ST already sending");
+               ti_st_dbg(TI_ST_DBG_CORE, "ST already sending"); /* keep sending */
               set_bit(ST_TX_WAKEUP, &st_data->tx_state); return;

drivers/misc/ti-st/st_core.c +2 -2
@@ -499,25 +490,25 @@ void kim_st_list_protocols(struct st_data_s *st_gdata, void *buf)
  */
  long st_register(struct st_proto_s *new_proto)
  {
-       struct st_data_s        *st_gdata;
+       struct st_data_s *st_gdata;
        long err = 0;
        unsigned long flags = 0;
 
        st_kim_ref(&st_gdata, 0);
-       pr_info("%s(%d) ", __func__, new_proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s(%d) ", __func__, new_proto->chnl_id);

       if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL || new_proto->reg_complete_cb == NULL) {
-               pr_err("gdata/new_proto/recv or reg_complete_cb not ready");
+               ti_st_err("gdata/new_proto/recv or reg_complete_cb not ready"); return -EINVAL;
       }

       if (new_proto->chnl_id >= ST_MAX_CHANNELS) {
-               pr_err("chnl_id %d not supported", new_proto->chnl_id);
+               ti_st_err("chnl_id %d not supported", new_proto->chnl_id); return -EPROTONOSUPPORT;
       }

       if (st_gdata->is_registered[new_proto->chnl_id] == true) {
-               pr_err("chnl_id %d already registered", new_proto->chnl_id);
+               ti_st_err("chnl_id %d already registered", new_proto->chnl_id); return -EALREADY;
       }

drivers/misc/ti-st/st_core.c +4 -2
@@ -525,7 +516,8 @@ long st_register(struct st_proto_s *new_proto)
        spin_lock_irqsave(&st_gdata->lock, flags);
 
        if (test_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state)) {
-               pr_info(" ST_REG_IN_PROGRESS:%d ", new_proto->chnl_id);
+               ti_st_dbg(TI_ST_DBG_CORE, " ST_REG_IN_PROGRESS:%d ",
+                                 new_proto->chnl_id);
                /* fw download in progress */
 
                add_channel_to_table(st_gdata, new_proto);
@@ -536,7 +528,8 @@ long st_register(struct st_proto_s *new_proto)
                spin_unlock_irqrestore(&st_gdata->lock, flags);
                return -EINPROGRESS;
        } else if (st_gdata->protos_registered == ST_EMPTY) {
-               pr_info(" chnl_id list empty :%d ", new_proto->chnl_id);
+               ti_st_dbg(TI_ST_DBG_CORE, " chnl_id list empty :%d ",
+                                 new_proto->chnl_id);
                set_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
                st_recv = st_kim_recv;
 
@@ -554,7 +547,7 @@ long st_register(struct st_proto_s *new_proto)
                        clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);

                       if ((st_gdata->protos_registered != ST_EMPTY) && (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-                               pr_err(" KIM failure complete callback ");
+                               ti_st_err(" KIM failure complete callback "); st_reg_complete(st_gdata, err); clear_bit(ST_REG_PENDING, &st_gdata->st_state); }

drivers/misc/ti-st/st_core.c +1 -1
@@ -566,12 +559,12 @@ long st_register(struct st_proto_s *new_proto)
                clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
                st_recv = st_int_recv;
 
-               /* this is where all pending registration
+               /* this is where all pending registrations
                 * are signalled to be complete by calling callback functions
                 */

               if ((st_gdata->protos_registered != ST_EMPTY) && (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-                       pr_debug(" call reg complete callback ");
+                       ti_st_dbg(TI_ST_DBG_CORE, " call reg complete callback "); st_reg_complete(st_gdata, 0);
               }
               clear_bit(ST_REG_PENDING, &st_gdata->st_state);

drivers/misc/ti-st/st_core.c +5 -6
@@ -580,7 +573,7 @@ long st_register(struct st_proto_s *new_proto)
                 * since the above check is old
                 */
                if (st_gdata->is_registered[new_proto->chnl_id] == true) {
-                       pr_err(" proto %d already registered ",
+                       ti_st_err(" proto %d already registered ",
                                   new_proto->chnl_id);
                        spin_unlock_irqrestore(&st_gdata->lock, flags);
                        return -EALREADY;
@@ -602,7 +595,6 @@ long st_register(struct st_proto_s *new_proto)
                spin_unlock_irqrestore(&st_gdata->lock, flags);
                return err;
        }
-       pr_debug("done %s(%d) ", __func__, new_proto->chnl_id);
  }
  EXPORT_SYMBOL_GPL(st_register);
 
@@ -615,18 +607,18 @@ long st_unregister(struct st_proto_s *proto)
        unsigned long flags = 0;
        struct st_data_s        *st_gdata;
 
-       pr_debug("%s: %d ", __func__, proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: %d ", __func__, proto->chnl_id);
 
        st_kim_ref(&st_gdata, 0);
-       if (!st_gdata || proto->chnl_id >= ST_MAX_CHANNELS) {
-               pr_err(" chnl_id %d not supported", proto->chnl_id);
+       if (!st_gdata || !proto || proto->chnl_id >= ST_MAX_CHANNELS) {
+               ti_st_err(" chnl_id %d not supported", proto->chnl_id);
                return -EPROTONOSUPPORT;
        }
 
        spin_lock_irqsave(&st_gdata->lock, flags);
 
        if (st_gdata->is_registered[proto->chnl_id] == false) {
-               pr_err(" chnl_id %d not registered", proto->chnl_id);
+               ti_st_err(" chnl_id %d not registered", proto->chnl_id);
                spin_unlock_irqrestore(&st_gdata->lock, flags);
                return -EPROTONOSUPPORT;
        }
@@ -641,7 +633,7 @@ long st_unregister(struct st_proto_s *proto)
 

       if ((st_gdata->protos_registered == ST_EMPTY) && (!test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-               pr_info(" all chnl_ids unregistered ");
+               ti_st_dbg(TI_ST_DBG_CORE, " all chnl_ids unregistered ");

               /* stop traffic on tty */
               if (st_gdata->tty) {

drivers/misc/ti-st/st_core.c +0 -0
@@ -669,11 +661,11 @@ long st_write(struct sk_buff *skb)
        st_kim_ref(&st_gdata, 0);

       if (unlikely(skb == NULL || st_gdata == NULL
               || st_gdata->tty == NULL)) {
-               pr_err("data/tty unavailable to perform write");
+               ti_st_err("data/tty unavailable to perform write"); return -EINVAL;
       }

-       pr_debug("%d to be written", skb->len);
+       ti_st_dbg(TI_ST_DBG_CORE, "%d to be written", skb->len); len = skb->len;

       /* st_ll to decide where to enqueue the skb */

drivers/misc/ti-st/st_core.c +12 -21
@@ -696,7 +688,6 @@ static int st_tty_open(struct tty_struct *tty)
  {
        int err = 0;
        struct st_data_s *st_gdata;
-       pr_info("%s ", __func__);
 
        st_kim_ref(&st_gdata, 0);
        st_gdata->tty = tty;
@@ -705,8 +696,7 @@ static int st_tty_open(struct tty_struct *tty)
        /* don't do an wakeup for now */
        clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 
-       /* mem already allocated
-        */
+       /* mem already allocated */
        tty->receive_room = 65536;
        /* Flush any pending characters in the driver and discipline. */
        tty_ldisc_flush(tty);
@@ -716,7 +706,6 @@ static int st_tty_open(struct tty_struct *tty)
         * installation of N_TI_WL ldisc is complete
         */
        st_kim_complete(st_gdata->kim_data);
-       pr_debug("done %s", __func__);
        return err;
  }
 
@@ -726,8 +715,6 @@ static void st_tty_close(struct tty_struct *tty)
        unsigned long flags = 0;
        struct  st_data_s *st_gdata = tty->disc_data;
 
-       pr_info("%s ", __func__);
-
        /* TODO:
         * if a protocol has been registered & line discipline
         * un-installed for some reason - what should be done ?
@@ -735,7 +722,7 @@ static void st_tty_close(struct tty_struct *tty)
        spin_lock_irqsave(&st_gdata->lock, flags);
        for (i = ST_BT; i < ST_MAX_CHANNELS; i++) {
                if (st_gdata->is_registered[i] == true)
-                       pr_err("%d not un-registered", i);
+                       ti_st_dbg(TI_ST_DBG_CORE, "%d not un-registered", i);
                st_gdata->list[i] = NULL;
                st_gdata->is_registered[i] = false;
        }
@@ -761,8 +748,6 @@ static void st_tty_close(struct tty_struct *tty)
        kfree_skb(st_gdata->rx_skb);
        st_gdata->rx_skb = NULL;
        spin_unlock_irqrestore(&st_gdata->lock, flags);
-
-       pr_debug("%s: done ", __func__);
  }
 
  static void st_tty_receive(struct tty_struct *tty, const unsigned char *data,
@@ -778,7 +763,6 @@ static void st_tty_receive(struct tty_struct *tty, const unsigned char *data,
         * to KIM for validation
         */
        st_recv(tty->disc_data, data, count);
-       pr_debug("done %s", __func__);
  }
 
  /* wake-up function called in from the TTY layer
@@ -787,7 +771,7 @@ static void st_tty_receive(struct tty_struct *tty, const unsigned char *data,
  static void st_tty_wakeup(struct tty_struct *tty)
  {
        struct  st_data_s *st_gdata = tty->disc_data;
-       pr_debug("%s ", __func__);
+
        /* don't do an wakeup for now */
        clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 
@@ -798,7 +782,6 @@ static void st_tty_wakeup(struct tty_struct *tty)
  static void st_tty_flush_buffer(struct tty_struct *tty)
  {
        struct  st_data_s *st_gdata = tty->disc_data;
-       pr_debug("%s ", __func__);
 
        kfree_skb(st_gdata->tx_skb);
        st_gdata->tx_skb = NULL;
@@ -826,18 +809,18 @@ int st_core_init(struct st_data_s **core_data)
 
        err = tty_register_ldisc(N_TI_WL, &st_ldisc_ops);
        if (err) {
-               pr_err("error registering %d line discipline %ld",
-                          N_TI_WL, err);
+               ti_st_err("error registering %d line discipline %ld",
+                                       N_TI_WL, err);
                return err;
        }
-       pr_debug("registered n_shared line discipline");
+       ti_st_dbg(TI_ST_DBG_CORE, "registered n_shared line discipline");
 
        st_gdata = kzalloc(sizeof(struct st_data_s), GFP_KERNEL);
        if (!st_gdata) {
-               pr_err("memory allocation failed");
+               ti_st_err("memory allocation failed");
                err = tty_unregister_ldisc(N_TI_WL);
                if (err)
-                       pr_err("unable to un-register ldisc %ld", err);
+                       ti_st_err("unable to un-register ldisc %ld", err);
                err = -ENOMEM;
                return err;
        }
@@ -853,11 +836,11 @@ int st_core_init(struct st_data_s **core_data)
 
        err = st_ll_init(st_gdata);
        if (err) {
-               pr_err("error during st_ll initialization(%ld)", err);
+               ti_st_err("error during st_ll initialization(%ld)", err);
                kfree(st_gdata);
                err = tty_unregister_ldisc(N_TI_WL);
                if (err)
-                       pr_err("unable to un-register ldisc");
+                       ti_st_err("unable to un-register ldisc");
                return err;
        }
        *core_data = st_gdata;
@@ -870,7 +853,7 @@ void st_core_exit(struct st_data_s *st_gdata)
        /* internal module cleanup */
        err = st_ll_deinit(st_gdata);
        if (err)
-               pr_err("error during deinit of ST LL %ld", err);
+               ti_st_err("error during deinit of ST LL %ld", err);
 
        if (st_gdata != NULL) {
                /* Free ST Tx Qs and skbs */
@@ -881,7 +864,7 @@ void st_core_exit(struct st_data_s *st_gdata)
                /* TTY ldisc cleanup */
                err = tty_unregister_ldisc(N_TI_WL);
                if (err)
-                       pr_err("unable to un-register ldisc %ld", err);
+                       ti_st_err("unable to un-register ldisc %ld", err);
                /* free the global data pointer */
                kfree(st_gdata);
        }
drivers/misc/ti-st/st_kim.c +10 -3
index a7a861c..f6f6c30 100644
@@ -32,6 +32,7 @@
  #include <linux/sched.h>
  #include <linux/sysfs.h>
  #include <linux/tty.h>
+#include "debug.h"
 
  #include <linux/skbuff.h>
  #include <linux/ti_wilink_st.h>
@@ -41,6 +42,10 @@
  #define MAX_ST_DEVICES 3       /* Imagine 1 on each UART for now */
  static struct platform_device *st_kim_devices[MAX_ST_DEVICES];
 
+/* if CONFIG_TI_ST_DEBUG is defined, enable all logs by default */
+unsigned short debug_mask = 0xffff;
+module_param(debug_mask, ushort, 0644);
+
  /**********************************************************************/
  /* internal functions */
 
@@ -54,7 +59,9 @@ static struct platform_device *st_kim_devices[MAX_ST_DEVICES];
  */
  static struct platform_device *st_get_plat_device(int id)
  {
-       return st_kim_devices[id];
+       if (id < MAX_ST_DEVICES)
+               return st_kim_devices[id];
+       return NULL;
  }
 
  /**
@@ -67,8 +74,8 @@ void validate_firmware_response(struct kim_data_s *kim_gdata)
  {
        struct sk_buff *skb = kim_gdata->rx_skb;
        if (unlikely(skb->data[5] != 0)) {
-               pr_err("no proper response during fw download");
-               pr_err("data6 %x", skb->data[5]);
+               ti_st_err("no proper response during fw download");
+               ti_st_err("response num: %x", skb->data[5]);
                kfree_skb(skb);

               return;         /* keep waiting for the proper response */ }

drivers/misc/ti-st/st_kim.c +3 -5
@@ -84,7 +91,7 @@ static inline int kim_check_data_len(struct kim_data_s *kim_gdata, int len)
  {
        register int room = skb_tailroom(kim_gdata->rx_skb);
 
-       pr_debug("len %d room %d", len, room);
+       ti_st_dbg(TI_ST_DBG_KIM, "%s: len %d room %d", __func__, len, room);
 
        if (!len) {
                validate_firmware_response(kim_gdata);
@@ -92,8 +99,7 @@ static inline int kim_check_data_len(struct kim_data_s *kim_gdata, int len)
                /* Received packet's payload length is larger.
                 * We can't accommodate it in created skb.
                 */
-               pr_err("Data length is too large len %d room %d", len,
-                          room);
+               ti_st_err("Data length is too large len %d room %d", len, room);
                kfree_skb(kim_gdata->rx_skb);
        } else {
                /* Packet header has non-zero payload length and
@@ -126,11 +132,10 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
        int len = 0, type = 0;
        unsigned char *plen;
 
-       pr_debug("%s", __func__);
        /* Decode received bytes here */
        ptr = data;
        if (unlikely(ptr == NULL)) {
-               pr_err(" received null from TTY ");
+               ti_st_err(" received null from TTY ");
                return;
        }
 
@@ -149,7 +154,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
                        switch (kim_gdata->rx_state) {
                                /* Waiting for complete packet ? */

                       case ST_W4_DATA:
-                               pr_debug("Complete pkt received");
+                               ti_st_dbg(TI_ST_DBG_KIM, "Complete pkt received"); validate_firmware_response(kim_gdata); kim_gdata->rx_state = ST_W4_PACKET_TYPE; kim_gdata->rx_skb = NULL;

drivers/misc/ti-st/st_kim.c +0 -0
@@ -158,11 +163,11 @@ void kim_int_recv(struct kim_data_s *kim_gdata,

                       case ST_W4_HEADER:
                               plen =
                               (unsigned char *)&kim_gdata->rx_skb->data[1];
-                               pr_debug("event hdr: plen 0x%02x\n", *plen);
+                               ti_st_dbg(TI_ST_DBG_KIM, "event hdr: plen 0x%02x\n", *plen); kim_check_data_len(kim_gdata, *plen); continue;
-                       }       /* end of switch */
-               }               /* end of if rx_state */
+                       }
+               }
               switch (*ptr) {
                       /* Bluetooth event packet? */
               case 0x04:

drivers/misc/ti-st/st_kim.c +0 -0
@@ -171,7 +176,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
                        type = *ptr;
                        break;

               default:
-                       pr_info("unknown packet");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: unknown packet", __func__); ptr++;
                       count--;
                       continue;

drivers/misc/ti-st/st_kim.c +0 -0
@@ -181,7 +186,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,

               kim_gdata->rx_skb =
                       alloc_skb(1024+8, GFP_ATOMIC);
               if (!kim_gdata->rx_skb) {
-                       pr_err("can't allocate mem for new packet");
+                       ti_st_err("can't allocate mem for new packet"); kim_gdata->rx_state = ST_W4_PACKET_TYPE; kim_gdata->rx_count = 0;
                       return;

drivers/misc/ti-st/st_kim.c +1 -4
@@ -189,7 +194,6 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
                skb_reserve(kim_gdata->rx_skb, 8);
                kim_gdata->rx_skb->cb[0] = 4;
                kim_gdata->rx_skb->cb[1] = 0;
-
        }
        return;
  }
@@ -199,17 +203,15 @@ static long read_local_version(struct kim_data_s *kim_gdata, char *bts_scr_name)
        unsigned short version = 0, chip = 0, min_ver = 0, maj_ver = 0;
        const char read_ver_cmd[] = { 0x01, 0x01, 0x10, 0x00 };
 
-       pr_debug("%s", __func__);
-
        INIT_COMPLETION(kim_gdata->kim_rcvd);
        if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) {
-               pr_err("kim: couldn't write 4 bytes");
+               ti_st_err("kim: couldn't write 4 bytes");
                return -EIO;
        }
 

       if (!wait_for_completion_timeout (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
-               pr_err(" waiting for ver info- timed out ");
+               ti_st_err(" waiting for ver info - timed out "); return -ETIMEDOUT;
       }
       INIT_COMPLETION(kim_gdata->kim_rcvd);

drivers/misc/ti-st/st_kim.c +5 -4
@@ -232,7 +234,8 @@ static long read_local_version(struct kim_data_s *kim_gdata, char *bts_scr_name)
        kim_gdata->version.maj_ver = maj_ver;
        kim_gdata->version.min_ver = min_ver;
 
-       pr_info("%s", bts_scr_name);
+       ti_st_dbg(TI_ST_DBG_KIM, "local_version - %s", bts_scr_name);
+
        return 0;
  }
 
@@ -245,14 +248,14 @@ void skip_change_remote_baud(unsigned char **ptr, long *len)
                ((struct bts_action *) cur_action)->size;
 
        if (((struct bts_action *) nxt_action)->type != ACTION_WAIT_EVENT) {
-               pr_err("invalid action after change remote baud command");
+               ti_st_err("invalid action after change remote baud command");
        } else {
                *ptr = *ptr + sizeof(struct bts_action) +
                        ((struct bts_action *)cur_action)->size;
                *len = *len - (sizeof(struct bts_action) +
                                ((struct bts_action *)cur_action)->size);
                /* warn user on not commenting these in firmware */
-               pr_warn("skipping the wait event of change remote baud");
+               ti_st_warn("skipping the wait event of change remote baud");
        }
  }
 
@@ -274,7 +277,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
 
        err = read_local_version(kim_gdata, bts_scr_name);
        if (err != 0) {
-               pr_err("kim: failed to read local ver");
+               ti_st_err("kim: failed to read local ver");
                return err;
        }

       err =

drivers/misc/ti-st/st_kim.c +0 -0
@@ -282,10 +285,11 @@ static long download_firmware(struct kim_data_s *kim_gdata)
                             &kim_gdata->kim_pdev->dev);

       if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) || (kim_gdata->fw_entry->size == 0))) {
-               pr_err(" request_firmware failed(errno %ld) for %s", err,
-                          bts_scr_name);
+               ti_st_err(" request_firmware failed(errno %ld) for %s", err,
+                             bts_scr_name);
               return -EINVAL;
       }
+
       ptr = (void *)kim_gdata->fw_entry->data;
       len = kim_gdata->fw_entry->size;
       /* bts_header to remove out magic number and

drivers/misc/ti-st/st_kim.c +3 -3
@@ -295,21 +299,21 @@ static long download_firmware(struct kim_data_s *kim_gdata)
        len -= sizeof(struct bts_header);
 
        while (len > 0 && ptr) {
-               pr_debug(" action size %d, type %d ",
-                          ((struct bts_action *)ptr)->size,
-                          ((struct bts_action *)ptr)->type);
+               ti_st_dbg(TI_ST_DBG_KIM, " action size %d, type %d ",
+                                       ((struct bts_action *)ptr)->size,
+                                       ((struct bts_action *)ptr)->type);
 
                switch (((struct bts_action *)ptr)->type) {

               case ACTION_SEND_COMMAND:       /* action send */
-                       pr_debug("S");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: send command", __func__); action_ptr = &(((struct bts_action *)ptr)->data[0]); if (unlikely
                           (((struct hci_command *)action_ptr)->opcode == 0xFF36)) {
                               /* ignore remote change
                                * baud rate HCI VS command */
-                               pr_warn("change remote baud"
-                                   " rate command in firmware");
+                               ti_st_warn("change remote baud rate command"
+                                               " in firmware"); skip_change_remote_baud(&ptr, &len); break;
                       }

drivers/misc/ti-st/st_kim.c +0 -0
@@ -323,8 +327,8 @@ static long download_firmware(struct kim_data_s *kim_gdata)

                               wr_room_space = st_get_uart_wr_room(kim_gdata->core_data); if (wr_room_space < 0) {
-                                       pr_err("Unable to get free "
-                                                       "space info from uart tx buffer");
+                                       ti_st_err("Unable to get free space "
+                                               "info from uart tx buffer"); release_firmware(kim_gdata->fw_entry); return wr_room_space;
                               }

drivers/misc/ti-st/st_kim.c +3 -3
@@ -334,7 +338,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
 
                        /* Timeout happened ? */
                        if (time_after_eq(jiffies, timeout)) {
-                               pr_err("Timeout while waiting for free "
+                               ti_st_err("Timeout while waiting for free "
                                                "free space in uart tx buffer");
                                release_firmware(kim_gdata->fw_entry);
                                return -ETIMEDOUT;
@@ -361,19 +365,19 @@ static long download_firmware(struct kim_data_s *kim_gdata)
                         * and requested command write size
                         */
                        if (err != cmd_size) {
-                               pr_err("Number of bytes written to uart "
-                                               "tx buffer are not matching with "
+                               ti_st_err("Number of bytes written to uart tx "
+                                               "buffer are not matching with "
                                                "requested cmd write size");
                                release_firmware(kim_gdata->fw_entry);
                                return -EIO;
                        }
                        break;

               case ACTION_WAIT_EVENT:  /* wait */
-                       pr_debug("W");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: wait event", __func__); if (!wait_for_completion_timeout (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
-                               pr_err("response timeout during fw download ");
+                               ti_st_err("response timeout during fw download"); /* timed out */ release_firmware(kim_gdata->fw_entry); return -ETIMEDOUT;

drivers/misc/ti-st/st_kim.c +0 -0
@@ -381,7 +385,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
                        INIT_COMPLETION(kim_gdata->kim_rcvd);
                        break;

               case ACTION_DELAY:      /* sleep */
-                       pr_info("sleep command in scr");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: sleep command", __func__); action_ptr = &(((struct bts_action *)ptr)->data[0]); mdelay(((struct bts_action_delay *)action_ptr)->msec); break;

drivers/misc/ti-st/st_kim.c +4 -6
@@ -395,6 +399,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
        }
        /* fw download complete */
        release_firmware(kim_gdata->fw_entry);
+       ti_st_dbg(TI_ST_DBG_KIM, "firmware dld compleated");
        return 0;
  }
 
@@ -446,7 +451,6 @@ long st_kim_start(void *kim_data)
        struct ti_st_plat_data  *pdata;
        struct kim_data_s       *kim_gdata = (struct kim_data_s *)kim_data;
 
-       pr_info(" %s", __func__);
        pdata = kim_gdata->kim_pdev->dev.platform_data;
 
        do {
@@ -463,7 +467,6 @@ long st_kim_start(void *kim_data)
                INIT_COMPLETION(kim_gdata->ldisc_installed);
                /* send notification to UIM */
                kim_gdata->ldisc_install = 1;
-               pr_info("ldisc_install = 1");
                sysfs_notify(&kim_gdata->kim_pdev->dev.kobj,
                                NULL, "install");
                /* wait for ldisc to be installed */
@@ -472,17 +475,17 @@ long st_kim_start(void *kim_data)
                if (!err) {
                        /* ldisc installation timeout,
                         * flush uart, power cycle BT_EN */
-                       pr_err("ldisc installation timeout");
+                       ti_st_err("ldisc installation timeout");
                        err = st_kim_stop(kim_gdata);
                        continue;
                } else {
                        /* ldisc installed now */
-                       pr_info("line discipline installed");
+                       ti_st_dbg(TI_ST_DBG_KIM, "line discipline installed");
                        err = download_firmware(kim_gdata);
                        if (err != 0) {
                                /* ldisc installed but fw download failed,
                                 * flush uart & power cycle BT_EN */
-                               pr_err("download firmware failed");
+                               ti_st_err("download firmware failed");
                                err = st_kim_stop(kim_gdata);
                                continue;
                        } else {        /* on success don't retry */
@@ -521,7 +524,6 @@ long st_kim_stop(void *kim_data)
        }
 
        /* send uninstall notification to UIM */
-       pr_info("ldisc_install = 0");
        kim_gdata->ldisc_install = 0;
        sysfs_notify(&kim_gdata->kim_pdev->dev.kobj, NULL, "install");
 
@@ -529,7 +531,7 @@ long st_kim_stop(void *kim_data)
        err = wait_for_completion_timeout(&kim_gdata->ldisc_installed,
                        msecs_to_jiffies(LDISC_TIME));

       if (!err) {             /* timeout */
-               pr_err(" timed out waiting for ldisc to be un-installed");
+               ti_st_err("timed out waiting for ldisc to be un-installed"); return -ETIMEDOUT;
       }

drivers/misc/ti-st/st_kim.c +16 -16
@@ -578,9 +580,9 @@ static ssize_t store_dev_name(struct device *dev,
                struct device_attribute *attr, const char *buf, size_t count)
  {
        struct kim_data_s *kim_data = dev_get_drvdata(dev);
-       pr_debug("storing dev name >%s<", buf);
+       ti_st_dbg(TI_ST_DBG_KIM, "storing dev name >%s<", buf);
        strncpy(kim_data->dev_name, buf, count);
-       pr_debug("stored dev name >%s<", kim_data->dev_name);
+       ti_st_dbg(TI_ST_DBG_KIM, "stored dev name >%s<", kim_data->dev_name);
        return count;
  }
 
@@ -588,9 +590,9 @@ static ssize_t store_baud_rate(struct device *dev,
                struct device_attribute *attr, const char *buf, size_t count)
  {
        struct kim_data_s *kim_data = dev_get_drvdata(dev);
-       pr_debug("storing baud rate >%s<", buf);
+       ti_st_dbg(TI_ST_DBG_KIM, "storing baud rate >%s<", buf);
        sscanf(buf, "%ld", &kim_data->baud_rate);
-       pr_debug("stored baud rate >%ld<", kim_data->baud_rate);
+       ti_st_dbg(TI_ST_DBG_KIM, "stored baud rate >%ld<", kim_data->baud_rate);
        return count;
  }
  #endif /* if DEBUG */
@@ -718,14 +720,14 @@ static int kim_probe(struct platform_device *pdev)
 
        kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC);
        if (!kim_gdata) {
-               pr_err("no mem to allocate");
+               ti_st_err("no mem to allocate");
                return -ENOMEM;
        }
        dev_set_drvdata(&pdev->dev, kim_gdata);
 
        status = st_core_init(&kim_gdata->core_data);
        if (status != 0) {
-               pr_err(" ST core init failed");
+               ti_st_err(" ST core init failed");
                return -EIO;
        }
        /* refer to itself */
@@ -735,14 +737,14 @@ static int kim_probe(struct platform_device *pdev)
        kim_gdata->nshutdown = pdata->nshutdown_gpio;
        status = gpio_request(kim_gdata->nshutdown, "kim");
        if (unlikely(status)) {
-               pr_err(" gpio %ld request failed ", kim_gdata->nshutdown);
+               ti_st_err(" gpio %ld request failed ", kim_gdata->nshutdown);
                return status;
        }
 
        /* Configure nShutdown GPIO as output=0 */
        status = gpio_direction_output(kim_gdata->nshutdown, 0);
        if (unlikely(status)) {
-               pr_err(" unable to configure gpio %ld", kim_gdata->nshutdown);
+               ti_st_err("unable to configure gpio %ld", kim_gdata->nshutdown);
                return status;
        }
        /* get reference of pdev for request_firmware
@@ -753,7 +755,7 @@ static int kim_probe(struct platform_device *pdev)
 
        status = sysfs_create_group(&pdev->dev.kobj, &uim_attr_grp);
        if (status) {
-               pr_err("failed to create sysfs entries");
+               ti_st_err("failed to create sysfs entries");
                return status;
        }
 
@@ -761,20 +763,20 @@ static int kim_probe(struct platform_device *pdev)
        strncpy(kim_gdata->dev_name, pdata->dev_name, UART_DEV_NAME_LEN);
        kim_gdata->flow_cntrl = pdata->flow_cntrl;
        kim_gdata->baud_rate = pdata->baud_rate;
-       pr_info("sysfs entries created\n");
+       ti_st_dbg(TI_ST_DBG_KIM, "sysfs entries created\n");
 
        kim_debugfs_dir = debugfs_create_dir("ti-st", NULL);
        if (IS_ERR(kim_debugfs_dir)) {
-               pr_err(" debugfs entries creation failed ");
+               ti_st_err(" debugfs entries creation failed ");
                kim_debugfs_dir = NULL;
                return -EIO;
        }
 
        debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
-                               kim_gdata, &version_debugfs_fops);
+                                               kim_gdata, &version_debugfs_fops);
        debugfs_create_file("protocols", S_IRUGO, kim_debugfs_dir,
-                               kim_gdata, &list_debugfs_fops);
-       pr_info(" debugfs entries created ");
+                                               kim_gdata, &list_debugfs_fops);
+       ti_st_dbg(TI_ST_DBG_KIM, " debugfs entries created ");
        return 0;
  }
 
@@ -790,11 +792,11 @@ static int kim_remove(struct platform_device *pdev)
         * nShutdown gpio from the system
         */
        gpio_free(pdata->nshutdown_gpio);
-       pr_info("nshutdown GPIO Freed");
+       ti_st_dbg(TI_ST_DBG_KIM, "nshutdown GPIO Freed");
 
        debugfs_remove_recursive(kim_debugfs_dir);
        sysfs_remove_group(&pdev->dev.kobj, &uim_attr_grp);
-       pr_info("sysfs entries removed");
+       ti_st_dbg(TI_ST_DBG_KIM, "sysfs entries removed");
 
        kim_gdata->kim_pdev = NULL;
        st_core_exit(kim_gdata->core_data);
drivers/misc/ti-st/st_ll.c +5 -4
index 1ff460a..ccdad8b 100644
@@ -24,6 +24,7 @@
  #include <linux/module.h>
  #include <linux/platform_device.h>
  #include <linux/ti_wilink_st.h>
+#include "debug.h"
 
  /**********************************************************************/
  /* internal functions */
@@ -31,7 +32,7 @@ static void send_ll_cmd(struct st_data_s *st_data,
        unsigned char cmd)
  {
 
-       pr_debug("%s: writing %x", __func__, cmd);
+       ti_st_dbg(TI_ST_DBG_HCI_LL, "%s: writing %x", __func__, cmd);
        st_int_write(st_data, &cmd, 1);
        return;
  }
@@ -41,11 +42,11 @@ static void ll_device_want_to_sleep(struct st_data_s *st_data)
        struct kim_data_s       *kim_data;
        struct ti_st_plat_data  *pdata;
 
-       pr_debug("%s", __func__);
+       ti_st_dbg(TI_ST_DBG_HCI_LL, "%s", __func__);
        /* sanity check */
        if (st_data->ll_state != ST_LL_AWAKE)
-               pr_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
-                         "in state %ld", st_data->ll_state);
+               ti_st_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
+                                       "in state %ld", st_data->ll_state);
 
        send_ll_cmd(st_data, LL_SLEEP_ACK);
        /* update state */
@@ -70,15 +71,15 @@ static void ll_device_want_to_wakeup(struct st_data_s *st_data)
                break;

       case ST_LL_ASLEEP_TO_AWAKE:
               /* duplicate wake_ind */
-               pr_err("duplicate wake_ind while waiting for Wake ack");
+               ti_st_err("duplicate wake_ind while waiting for Wake ack"); break;
       case ST_LL_AWAKE:
               /* duplicate wake_ind */
-               pr_err("duplicate wake_ind already AWAKE");
+               ti_st_err("duplicate wake_ind already AWAKE"); break;
       case ST_LL_AWAKE_TO_ASLEEP:
               /* duplicate wake_ind */
-               pr_err("duplicate wake_ind");
+               ti_st_err("duplicate wake_ind");
               break;
       }
       /* update state */

drivers/misc/ti-st/st_ll.c +1 -2
@@ -116,14 +117,13 @@ void st_ll_wakeup(struct st_data_s *ll)
                ll->ll_state = ST_LL_ASLEEP_TO_AWAKE;
        } else {
                /* don't send the duplicate wake_indication */
-               pr_err(" Chip already AWAKE ");
+               ti_st_err(" Chip already AWAKE ");
        }
  }
 
  /* called when ST Core wants the state */
  unsigned long st_ll_getstate(struct st_data_s *ll)
  {
-       pr_debug(" returning state %ld", ll->ll_state);
        return ll->ll_state;
  }
 
@@ -133,22 +133,22 @@ unsigned long st_ll_sleep_state(struct st_data_s *st_data,
  {
        switch (cmd) {

       case LL_SLEEP_IND:      /* sleep ind */
-               pr_debug("sleep indication recvd");
+               ti_st_dbg(TI_ST_DBG_HCI_LL, "sleep indication recvd"); ll_device_want_to_sleep(st_data);
               break;
       case LL_SLEEP_ACK:      /* sleep ack */
-               pr_err("sleep ack rcvd: host shouldn't");
+               ti_st_err("sleep ack rcvd: host shouldn't"); break;
       case LL_WAKE_UP_IND:    /* wake ind */
-               pr_debug("wake indication recvd");
+               ti_st_dbg(TI_ST_DBG_HCI_LL, "wake indication recvd"); ll_device_want_to_wakeup(st_data);
               break;
       case LL_WAKE_UP_ACK:    /* wake ack */
-               pr_debug("wake ack rcvd");
+               ti_st_dbg(TI_ST_DBG_HCI_LL, "wake ack rcvd"); st_data->ll_state = ST_LL_AWAKE;
               break;

Quoted 9 lines

       default:
-               pr_err(" unknown input/state ");
+               ti_st_err(" unknown input/state "); return -EINVAL;
       }
       return 0;
--
1.7.4.1

I agree that this driver needs improvements but I don't see any value in adding new macros for existing debugging infrastructure (e.g ti_st_err vs pr_err).

I propose to look for the following issues:
* cleanup pr_debug's, the driver is just too verbose.
* replace pr_err kind of functions with dev_err where appropriate
* fix yoda conditions:
if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4))

thanks,
Daniel.

#2 lore raw
Quoted 9 lines · Daniel Baluta

Adding Greg's new email address.

Quoted 6 lines · On Thu, Mar 15, 2012 at 8:26 PM, <[email protected]> wrote:

From: Alexandra Sava <[email protected]>

* added new module parameter named debug_mask to control displayed messages verbosity
* the logging mechanism is enabled via CONFIG_TI_ST_DEBUG Kconfig option

Any specific reason you want to have this ? Custom logging ? Also please fix the spelling in the subject line.

Quoted 1,335 lines
Quoted 1,313 lines

 drivers/misc/ti-st/Kconfig   |    7 ++
 drivers/misc/ti-st/debug.h   |   34 +++++++++
 drivers/misc/ti-st/st_core.c |  153
+++++++++++++++++++-----------------------
drivers/misc/ti-st/st_kim.c  |  126
+++++++++++++++++-----------------
 drivers/misc/ti-st/st_ll.c   |   28 ++++----

 5 files changed, 187 insertions(+), 161 deletions(-)

 create mode 100644 drivers/misc/ti-st/debug.h

drivers/misc/ti-st/Kconfig +0 -0
index abb5de1..6d4e6a3 100644
@@ -14,4 +14,11 @@ config TI_ST

         are returned to relevant protocol drivers based on their packet types.

drivers/misc/ti-st/Kconfig +3 -0
+if TI_ST
+config TI_ST_DEBUG
+       bool "Enable full debugging output for the Shared transport

core driver" +       depends on TI_ST +       ---help---
+               Debugging support.
+endif # TI_ST
 endmenu

drivers/misc/ti-st/debug.h new file +6 -0
new file mode 100644
index 0000000..68ffc74
@@ -0,0 +1,34 @@
+#ifndef TI_ST_DEBUG_H
+#define TI_ST_DEBUG_H
+
+enum TI_ST_DEBUG_MASK {
+       TI_ST_DBG_HCI_LL = 0x0001, /* HCI_LL protocol */
+       TI_ST_DBG_KIM = 0x0002, /* GPIO control and firmware

download */ +       TI_ST_DBG_CORE = 0x0003, /* ST KIM driver and ST LL driver */ +       TI_ST_DBG_ALL = 0xffff /* enable all logs */ +};

drivers/misc/ti-st/debug.h new file +19 -0
+
+extern unsigned short debug_mask;
+
+#define ti_st_info(fmt, ...)   \
+       pr_info(fmt, ##__VA_ARGS__);
+#define ti_st_err(fmt, ...)            \
+       pr_err(fmt, ##__VA_ARGS__);
+#define ti_st_warn(fmt, ...)   \
+       pr_warn(fmt, ##__VA_ARGS__);
+
+
+#ifdef CONFIG_TI_ST_DEBUG
+#define ti_st_dbg(mask, fmt, ...)                  \
+       ({                              \
+               if (debug_mask & mask)                     \
+                       pr_debug(fmt, ##__VA_ARGS__);    \ +       })
+#else
+static inline void ti_st_dbg(enum TI_ST_DEBUG_MASK dbg_mask,
+                                                        const char

*fmt, ...) +{ +}

drivers/misc/ti-st/debug.h new file +3 -0
+
+#endif
+#endif
drivers/misc/ti-st/st_core.c +3 -1
index 2b62232..245cf31 100644
@@ -1,4 +1,5 @@
  /*
+
  *  Shared Transport Line discipline driver Core
  *     This hooks up ST KIM driver and ST LL driver
  *  Copyright (C) 2009-2010 Texas Instruments
@@ -29,6 +30,7 @@
  #include <linux/skbuff.h>
 
  #include <linux/ti_wilink_st.h>
+#include "debug.h"
 
  /* function pointer pointing to either,
  * st_kim_recv during registration to receive fw download responses
@@ -40,7 +42,7 @@ void (*st_recv) (void*, const unsigned char*,
 long); 
  static void add_channel_to_table(struct st_data_s *st_gdata,
                struct st_proto_s *new_proto)
  {
-       pr_info("%s: id %d\n", __func__, new_proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: id %d\n", __func__,
 new_proto->chnl_id); 
        /* list now has the channel id as index itself */

       st_gdata->list[new_proto->chnl_id] = new_proto; st_gdata->is_registered[new_proto->chnl_id] = true;

drivers/misc/ti-st/st_core.c +1 -1
@@ -49,7 +51,7 @@ static void add_channel_to_table(struct st_data_s
 *st_gdata, 
  static void remove_channel_from_table(struct st_data_s *st_gdata,
                struct st_proto_s *proto)
  {
-       pr_info("%s: id %d\n", __func__, proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: id %d\n", __func__,
 proto->chnl_id); 
  /*     st_gdata->list[proto->chnl_id] = NULL; */

       st_gdata->is_registered[proto->chnl_id] = false; }

drivers/misc/ti-st/st_core.c +2 -2
@@ -65,7 +67,7 @@ int st_get_uart_wr_room(struct st_data_s *st_gdata)
  {
        struct tty_struct *tty;
        if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
-               pr_err("tty unavailable to perform write");
+               ti_st_err("tty unavailable to perform write");
                return -1;
        }
        tty = st_gdata->tty;
@@ -84,7 +86,7 @@ int st_int_write(struct st_data_s *st_gdata,
  {
        struct tty_struct *tty;
        if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
-               pr_err("tty unavailable to perform write");
+               ti_st_err("tty unavailable to perform write");
                return -EINVAL;
        }
        tty = st_gdata->tty;
@@ -102,12 +104,12 @@ int st_int_write(struct st_data_s *st_gdata,
  */

 void st_send_frame(unsigned char chnl_id, struct st_data_s *st_gdata)
 {
-       pr_debug(" %s(prot:%d) ", __func__, chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, " %s(prot:%d) ", __func__, chnl_id);

       if (unlikely
           (st_gdata == NULL || st_gdata->rx_skb == NULL || st_gdata->is_registered[chnl_id] == false)) {
-               pr_err("chnl_id %d not registered, no data to send?",
+               ti_st_err("chnl_id %d not registered, no data to send?",
                          chnl_id); kfree_skb(st_gdata->rx_skb);
               return;

drivers/misc/ti-st/st_core.c +0 -0
@@ -122,12 +124,12 @@ void st_send_frame(unsigned char chnl_id,
 struct st_data_s *st_gdata) 

                       (st_gdata->list[chnl_id]->recv (st_gdata->list[chnl_id]->priv_data, st_gdata->rx_skb)
                            != 0)) {
-                       pr_err(" proto stack %d's ->recv failed", chnl_id); +                       ti_st_err(" proto stack %d's ->recv failed", chnl_id);
                       kfree_skb(st_gdata->rx_skb); return;
               }
       } else {
-               pr_err(" proto stack %d's ->recv null", chnl_id);
+               ti_st_err(" proto stack %d's ->recv null", chnl_id); kfree_skb(st_gdata->rx_skb);
       }
       return;

drivers/misc/ti-st/st_core.c +1 -1
@@ -143,14 +145,15 @@ void st_send_frame(unsigned char chnl_id,
 struct st_data_s *st_gdata) 
  void st_reg_complete(struct st_data_s *st_gdata, char err)
  {
        unsigned char i = 0;
-       pr_info(" %s ", __func__);
+
        for (i = 0; i < ST_MAX_CHANNELS; i++) {

               if (likely(st_gdata != NULL && st_gdata->is_registered[i] == true && st_gdata->list[i]->reg_complete_cb != NULL)) {
                       st_gdata->list[i]->reg_complete_cb (st_gdata->list[i]->priv_data, err);
-                       pr_info("protocol %d's cb sent %d\n", i, err); +                       ti_st_dbg(TI_ST_DBG_KIM, "protocol %d's cb " +                                               "sent %d\n", i, err);
                       if (err) { /* cleanup registered protocol */ st_gdata->protos_registered--; st_gdata->is_registered[i] = false;

drivers/misc/ti-st/st_core.c +0 -2
@@ -164,8 +167,6 @@ static inline int st_check_data_len(struct
 st_data_s *st_gdata, 
  {
        int room = skb_tailroom(st_gdata->rx_skb);
 
-       pr_debug("len %d room %d", len, room);
-
        if (!len) {
                /* Received packet has only packet header and

                * has zero length payload. So, ask ST CORE to

drivers/misc/ti-st/st_core.c +0 -1
@@ -177,7 +178,7 @@ static inline int st_check_data_len(struct
 st_data_s *st_gdata, 
                /* Received packet's payload length is larger.
                 * We can't accommodate it in created skb.
                 */
-               pr_err("Data length is too large len %d room %d",

len, +               ti_st_err("Data length is too large len %d room %d", len,
                          room); kfree_skb(st_gdata->rx_skb);
       } else {

drivers/misc/ti-st/st_core.c +0 -0
@@ -201,7 +202,7 @@ static inline int st_check_data_len(struct
 st_data_s *st_gdata, 
 
  /**
  * st_wakeup_ack - internal function for action when wake-up ack - *

received + * received
 */
 static inline void st_wakeup_ack(struct st_data_s *st_gdata, unsigned char cmd)

drivers/misc/ti-st/st_core.c +4 -5
@@ -244,15 +245,14 @@ void st_int_recv(void *disc_data,
        unsigned long flags;
 
        ptr = (char *)data;
-       /* tty_receive sent null ? */
        if (unlikely(ptr == NULL) || (st_gdata == NULL)) {
-               pr_err(" received null from TTY ");
+               ti_st_err(" received null from TTY ");
                return;
        }
 
-       pr_debug("count %ld rx_state %ld"
-                  "rx_count %ld", count, st_gdata->rx_state,
-                  st_gdata->rx_count);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: count %ld rx_state %ld"
+               "rx_count %ld", __func__, count, st_gdata->rx_state,
+               st_gdata->rx_count);
 
        spin_lock_irqsave(&st_gdata->lock, flags);
        /* Decode received bytes here */
@@ -271,7 +271,7 @@ void st_int_recv(void *disc_data,
                        switch (st_gdata->rx_state) {
                        /* Waiting for complete packet ? */

                       case ST_W4_DATA:
-                               pr_debug("Complete pkt received");
+                               ti_st_dbg(TI_ST_DBG_CORE, "Complete pkt received");
                               /* Ask ST CORE to forward
                                * the packet to protocol driver */ st_send_frame(st_gdata->rx_chnl, st_gdata); @@ -285,32 +285,28 @@ void st_int_recv(void *disc_data, plen = &st_gdata->rx_skb->data [proto->offset_len_in_hdr];
-                               pr_debug("plen pointing to %x\n", *plen);
                               if (proto->len_size == 1)/* 1 byte len field */
                                       payload_len = *(unsigned char *)plen;
                               else if (proto->len_size == 2) payload_len = __le16_to_cpu(*(unsigned short *)plen);
                               else
-                                       pr_info("%s: invalid length "
-                                       "for id %d\n",
-                                       __func__, proto->chnl_id);
+                                       ti_st_dbg(TI_ST_DBG_CORE, "%s: invalid length" +                                       "for id %d\n", __func__, proto->chnl_id); + st_check_data_len(st_gdata, proto->chnl_id,
                                               payload_len);
-                               pr_debug("off %d, pay len %d\n",
-                                       proto->offset_len_in_hdr, payload_len);
                               continue;
-                       }       /* end of switch rx_state */ + }
               }

-               /* end of if rx_count */
               /* Check first byte of packet and identify module
                * owner (BT/FM/GPS) */
               switch (*ptr) {
               case LL_SLEEP_IND:
               case LL_SLEEP_ACK:
               case LL_WAKE_UP_IND:
-                       pr_debug("PM packet");
+                       ti_st_dbg(TI_ST_DBG_CORE, "PM packet"); /* this takes appropriate action based on
                        * sleep state received --
                        */

drivers/misc/ti-st/st_core.c +0 -0
@@ -327,8 +323,7 @@ void st_int_recv(void *disc_data,
                        count--;
                        continue;

               case LL_WAKE_UP_ACK:
-                       pr_debug("PM packet");
-
+                       ti_st_dbg(TI_ST_DBG_CORE, "PM packet"); spin_unlock_irqrestore(&st_gdata->lock, flags);
                       /* wake up ack received */ st_wakeup_ack(st_gdata, *ptr);

drivers/misc/ti-st/st_core.c +0 -0
@@ -341,10 +336,9 @@ void st_int_recv(void *disc_data,

               default:
                       type = *ptr;
                       if (st_gdata->list[type] == NULL) {
-                               pr_err("chip/interface misbehavior dropping" +                               ti_st_err("chip/interface misbehavior dropping"
                                       " frame starting with 0x%02x", type);
                               goto done;
-
                       }
                       st_gdata->rx_skb = alloc_skb(

st_gdata->list[type]->max_frame_size, @@ -352,19 +346,19 @@ void st_int_recv(void *disc_data, skb_reserve(st_gdata->rx_skb,

st_gdata->list[type]->reserve);
                       /* next 2 required for BT only */
-                       st_gdata->rx_skb->cb[0] = type; /*pkt_type*/
-                       st_gdata->rx_skb->cb[1] = 0; /*incoming*/
+                       st_gdata->rx_skb->cb[0] = type; /* pkt_type */ +                       st_gdata->rx_skb->cb[1] = 0; /* incoming */
                       st_gdata->rx_chnl = *ptr; st_gdata->rx_state = ST_W4_HEADER; st_gdata->rx_count = st_gdata->list[type]->hdr_len; -
pr_debug("rx_count %ld\n", st_gdata->rx_count); + ti_st_dbg(TI_ST_DBG_CORE, "%s: rx_count %ld\n", __func__, + st_gdata->rx_count);
               };
               ptr++;
               count--;
       }
 done:
       spin_unlock_irqrestore(&st_gdata->lock, flags);
-       pr_debug("done %s", __func__);
       return;
 }

drivers/misc/ti-st/st_core.c +0 -1
@@ -378,7 +372,6 @@ struct sk_buff *st_int_dequeue(struct st_data_s
 *st_gdata) 
  {
        struct sk_buff *returning_skb;
 
-       pr_debug("%s", __func__);
        if (st_gdata->tx_skb != NULL) {
                returning_skb = st_gdata->tx_skb;

               st_gdata->tx_skb = NULL;

drivers/misc/ti-st/st_core.c +0 -1
@@ -400,19 +393,18 @@ void st_int_enqueue(struct st_data_s
 *st_gdata, struct sk_buff *skb) 
  {
        unsigned long flags = 0;
 
-       pr_debug("%s", __func__);
        spin_lock_irqsave(&st_gdata->lock, flags);
 
        switch (st_ll_getstate(st_gdata)) {

       case ST_LL_AWAKE:
-               pr_debug("ST LL is AWAKE, sending normally");
+               ti_st_dbg(TI_ST_DBG_CORE, "ST LL is AWAKE, sending normally");
               skb_queue_tail(&st_gdata->txq, skb); break;
       case ST_LL_ASLEEP_TO_AWAKE:
               skb_queue_tail(&st_gdata->tx_waitq, skb); break;
       case ST_LL_AWAKE_TO_ASLEEP:
-               pr_err("ST LL is illegal state(%ld),"
+               ti_st_err("ST LL is illegal state(%ld)," "purging received skb.", st_ll_getstate(st_gdata));
               kfree_skb(skb);
               break;

drivers/misc/ti-st/st_core.c +0 -0
@@ -421,14 +413,13 @@ void st_int_enqueue(struct st_data_s
 *st_gdata, struct sk_buff *skb) 
                st_ll_wakeup(st_gdata);
                break;

       default:
-               pr_err("ST LL is illegal state(%ld),"
+               ti_st_err("ST LL is illegal state(%ld)," "purging received skb.", st_ll_getstate(st_gdata));
               kfree_skb(skb);
               break;
       }

       spin_unlock_irqrestore(&st_gdata->lock, flags);
-       pr_debug("done %s", __func__); return;
 }

drivers/misc/ti-st/st_core.c +0 -0
@@ -442,10 +433,10 @@ void st_tx_wakeup(struct st_data_s *st_data)
  {
        struct sk_buff *skb;

       unsigned long flags;    /* for irq save flags */
-       pr_debug("%s", __func__);
+
       /* check for sending & set flag sending here */ if (test_and_set_bit(ST_TX_SENDING, &st_data->tx_state)) {
-               pr_debug("ST already sending");
+               ti_st_dbg(TI_ST_DBG_CORE, "ST already sending"); /* keep sending */
               set_bit(ST_TX_WAKEUP, &st_data->tx_state); return;

drivers/misc/ti-st/st_core.c +2 -2
@@ -499,25 +490,25 @@ void kim_st_list_protocols(struct st_data_s
 *st_gdata, void *buf) 
  */
  long st_register(struct st_proto_s *new_proto)
  {
-       struct st_data_s        *st_gdata;
+       struct st_data_s *st_gdata;
        long err = 0;
        unsigned long flags = 0;
 
        st_kim_ref(&st_gdata, 0);
-       pr_info("%s(%d) ", __func__, new_proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s(%d) ", __func__,
 new_proto->chnl_id); 

       if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL
           || new_proto->reg_complete_cb == NULL) {
-               pr_err("gdata/new_proto/recv or reg_complete_cb not ready"); +               ti_st_err("gdata/new_proto/recv or reg_complete_cb not ready");
               return -EINVAL;
       }

       if (new_proto->chnl_id >= ST_MAX_CHANNELS) {
-               pr_err("chnl_id %d not supported", new_proto->chnl_id); +               ti_st_err("chnl_id %d not supported", new_proto->chnl_id);
               return -EPROTONOSUPPORT;
       }

       if (st_gdata->is_registered[new_proto->chnl_id] == true) {
-               pr_err("chnl_id %d already registered", new_proto->chnl_id); +               ti_st_err("chnl_id %d already registered", new_proto->chnl_id);
               return -EALREADY;
       }

drivers/misc/ti-st/st_core.c +0 -1
@@ -525,7 +516,8 @@ long st_register(struct st_proto_s *new_proto)
        spin_lock_irqsave(&st_gdata->lock, flags);
 
        if (test_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state)) {
-               pr_info(" ST_REG_IN_PROGRESS:%d ",

new_proto->chnl_id); +               ti_st_dbg(TI_ST_DBG_CORE, " ST_REG_IN_PROGRESS:%d ", +
new_proto->chnl_id);
               /* fw download in progress */

               add_channel_to_table(st_gdata, new_proto);

drivers/misc/ti-st/st_core.c +0 -1
@@ -536,7 +528,8 @@ long st_register(struct st_proto_s *new_proto)
                spin_unlock_irqrestore(&st_gdata->lock, flags);
                return -EINPROGRESS;
        } else if (st_gdata->protos_registered == ST_EMPTY) {
-               pr_info(" chnl_id list empty :%d ",

new_proto->chnl_id); +               ti_st_dbg(TI_ST_DBG_CORE, " chnl_id list empty :%d ", +
new_proto->chnl_id);
               set_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state); st_recv = st_kim_recv;

drivers/misc/ti-st/st_core.c +0 -0
@@ -554,7 +547,7 @@ long st_register(struct st_proto_s *new_proto)
                        clear_bit(ST_REG_IN_PROGRESS,
 &st_gdata->st_state); 
                        if ((st_gdata->protos_registered != ST_EMPTY)

&&
                           (test_bit(ST_REG_PENDING, &st_gdata->st_state))) { -                               pr_err(" KIM failure complete callback "); +
ti_st_err(" KIM failure complete callback "); st_reg_complete(st_gdata, err); clear_bit(ST_REG_PENDING, &st_gdata->st_state);
                       }

drivers/misc/ti-st/st_core.c +1 -1
@@ -566,12 +559,12 @@ long st_register(struct st_proto_s *new_proto)
                clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
                st_recv = st_int_recv;
 
-               /* this is where all pending registration
+               /* this is where all pending registrations
                 * are signalled to be complete by calling callback

functions
                */
               if ((st_gdata->protos_registered != ST_EMPTY) && (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-                       pr_debug(" call reg complete callback ");
+                       ti_st_dbg(TI_ST_DBG_CORE, " call reg complete callback ");
                       st_reg_complete(st_gdata, 0);
               }
               clear_bit(ST_REG_PENDING, &st_gdata->st_state);

drivers/misc/ti-st/st_core.c +0 -0
@@ -580,7 +573,7 @@ long st_register(struct st_proto_s *new_proto)
                 * since the above check is old
                 */

               if (st_gdata->is_registered[new_proto->chnl_id] == true) { -                       pr_err(" proto %d already registered ", +                       ti_st_err(" proto %d already registered ", new_proto->chnl_id); spin_unlock_irqrestore(&st_gdata->lock, flags);
                       return -EALREADY;

drivers/misc/ti-st/st_core.c +2 -4
@@ -602,7 +595,6 @@ long st_register(struct st_proto_s *new_proto)
                spin_unlock_irqrestore(&st_gdata->lock, flags);
                return err;
        }
-       pr_debug("done %s(%d) ", __func__, new_proto->chnl_id);
  }
  EXPORT_SYMBOL_GPL(st_register);
 
@@ -615,18 +607,18 @@ long st_unregister(struct st_proto_s *proto)
        unsigned long flags = 0;
        struct st_data_s        *st_gdata;
 
-       pr_debug("%s: %d ", __func__, proto->chnl_id);
+       ti_st_dbg(TI_ST_DBG_CORE, "%s: %d ", __func__,
 proto->chnl_id); 
 
        st_kim_ref(&st_gdata, 0);
-       if (!st_gdata || proto->chnl_id >= ST_MAX_CHANNELS) {
-               pr_err(" chnl_id %d not supported", proto->chnl_id);
+       if (!st_gdata || !proto || proto->chnl_id >=

ST_MAX_CHANNELS) { +               ti_st_err(" chnl_id %d not supported", proto->chnl_id);
               return -EPROTONOSUPPORT;
       }

       spin_lock_irqsave(&st_gdata->lock, flags);

       if (st_gdata->is_registered[proto->chnl_id] == false) {
-               pr_err(" chnl_id %d not registered", proto->chnl_id);
+               ti_st_err(" chnl_id %d not registered", proto->chnl_id);
               spin_unlock_irqrestore(&st_gdata->lock, flags); return -EPROTONOSUPPORT;
       }

drivers/misc/ti-st/st_core.c +0 -0
@@ -641,7 +633,7 @@ long st_unregister(struct st_proto_s *proto)
 

       if ((st_gdata->protos_registered == ST_EMPTY) && (!test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-               pr_info(" all chnl_ids unregistered ");
+               ti_st_dbg(TI_ST_DBG_CORE, " all chnl_ids unregistered ");

               /* stop traffic on tty */
               if (st_gdata->tty) {

drivers/misc/ti-st/st_core.c +0 -0
@@ -669,11 +661,11 @@ long st_write(struct sk_buff *skb)
        st_kim_ref(&st_gdata, 0);

       if (unlikely(skb == NULL || st_gdata == NULL
               || st_gdata->tty == NULL)) {
-               pr_err("data/tty unavailable to perform write");
+               ti_st_err("data/tty unavailable to perform write"); return -EINVAL;
       }

-       pr_debug("%d to be written", skb->len);
+       ti_st_dbg(TI_ST_DBG_CORE, "%d to be written", skb->len); len = skb->len;

       /* st_ll to decide where to enqueue the skb */

drivers/misc/ti-st/st_core.c +1 -3
@@ -696,7 +688,6 @@ static int st_tty_open(struct tty_struct *tty)
  {
        int err = 0;
        struct st_data_s *st_gdata;
-       pr_info("%s ", __func__);
 
        st_kim_ref(&st_gdata, 0);
        st_gdata->tty = tty;
@@ -705,8 +696,7 @@ static int st_tty_open(struct tty_struct *tty)
        /* don't do an wakeup for now */
        clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 
-       /* mem already allocated
-        */
+       /* mem already allocated */
        tty->receive_room = 65536;
        /* Flush any pending characters in the driver and discipline.
 */ 

       tty_ldisc_flush(tty);

drivers/misc/ti-st/st_core.c +1 -4
@@ -716,7 +706,6 @@ static int st_tty_open(struct tty_struct *tty)
         * installation of N_TI_WL ldisc is complete
         */
        st_kim_complete(st_gdata->kim_data);
-       pr_debug("done %s", __func__);
        return err;
  }
 
@@ -726,8 +715,6 @@ static void st_tty_close(struct tty_struct *tty)
        unsigned long flags = 0;
        struct  st_data_s *st_gdata = tty->disc_data;
 
-       pr_info("%s ", __func__);
-
        /* TODO:
         * if a protocol has been registered & line discipline
         * un-installed for some reason - what should be done ?
@@ -735,7 +722,7 @@ static void st_tty_close(struct tty_struct *tty)
        spin_lock_irqsave(&st_gdata->lock, flags);
        for (i = ST_BT; i < ST_MAX_CHANNELS; i++) {
                if (st_gdata->is_registered[i] == true)
-                       pr_err("%d not un-registered", i);
+                       ti_st_dbg(TI_ST_DBG_CORE, "%d not
 un-registered", i); 
                st_gdata->list[i] = NULL;
                st_gdata->is_registered[i] = false;

       }

drivers/misc/ti-st/st_core.c +0 -0
@@ -761,8 +748,6 @@ static void st_tty_close(struct tty_struct *tty)
        kfree_skb(st_gdata->rx_skb);
        st_gdata->rx_skb = NULL;

       spin_unlock_irqrestore(&st_gdata->lock, flags); -
-       pr_debug("%s: done ", __func__);
 }

 static void st_tty_receive(struct tty_struct *tty, const unsigned char *data, @@ -778,7 +763,6 @@ static void st_tty_receive(struct tty_struct *tty, const unsigned char *data,
        * to KIM for validation
        */
       st_recv(tty->disc_data, data, count);
-       pr_debug("done %s", __func__);
 }

 /* wake-up function called in from the TTY layer

drivers/misc/ti-st/st_core.c +5 -7
@@ -787,7 +771,7 @@ static void st_tty_receive(struct tty_struct
 *tty, const unsigned char *data,  static void st_tty_wakeup(struct
 tty_struct *tty) 
  {
        struct  st_data_s *st_gdata = tty->disc_data;
-       pr_debug("%s ", __func__);
+
        /* don't do an wakeup for now */
        clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
@@ -798,7 +782,6 @@ static void st_tty_wakeup(struct tty_struct *tty)
  static void st_tty_flush_buffer(struct tty_struct *tty)
  {
        struct  st_data_s *st_gdata = tty->disc_data;
-       pr_debug("%s ", __func__);
 
        kfree_skb(st_gdata->tx_skb);
        st_gdata->tx_skb = NULL;
@@ -826,18 +809,18 @@ int st_core_init(struct st_data_s **core_data)
 
        err = tty_register_ldisc(N_TI_WL, &st_ldisc_ops);
        if (err) {
-               pr_err("error registering %d line discipline %ld",
-                          N_TI_WL, err);
+               ti_st_err("error registering %d line discipline %ld",
+                                       N_TI_WL, err);
                return err;
        }
-       pr_debug("registered n_shared line discipline");
+       ti_st_dbg(TI_ST_DBG_CORE, "registered n_shared line
 discipline"); 
 
        st_gdata = kzalloc(sizeof(struct st_data_s), GFP_KERNEL);
        if (!st_gdata) {
-               pr_err("memory allocation failed");
+               ti_st_err("memory allocation failed");
                err = tty_unregister_ldisc(N_TI_WL);
                if (err)
-                       pr_err("unable to un-register ldisc %ld",

err); +                       ti_st_err("unable to un-register ldisc %ld", err);
               err = -ENOMEM;
               return err;
       }

drivers/misc/ti-st/st_core.c +0 -1
@@ -853,11 +836,11 @@ int st_core_init(struct st_data_s **core_data)
 
        err = st_ll_init(st_gdata);
        if (err) {
-               pr_err("error during st_ll initialization(%ld)",

err); +               ti_st_err("error during st_ll initialization(%ld)", err);
               kfree(st_gdata);
               err = tty_unregister_ldisc(N_TI_WL);
               if (err)
-                       pr_err("unable to un-register ldisc");
+                       ti_st_err("unable to un-register ldisc"); return err;
       }
       *core_data = st_gdata;

drivers/misc/ti-st/st_core.c +1 -2
@@ -870,7 +853,7 @@ void st_core_exit(struct st_data_s *st_gdata)
        /* internal module cleanup */
        err = st_ll_deinit(st_gdata);
        if (err)
-               pr_err("error during deinit of ST LL %ld", err);
+               ti_st_err("error during deinit of ST LL %ld", err);
 
        if (st_gdata != NULL) {
                /* Free ST Tx Qs and skbs */
@@ -881,7 +864,7 @@ void st_core_exit(struct st_data_s *st_gdata)
                /* TTY ldisc cleanup */
                err = tty_unregister_ldisc(N_TI_WL);
                if (err)
-                       pr_err("unable to un-register ldisc %ld",

err); +                       ti_st_err("unable to un-register ldisc %ld", err);
               /* free the global data pointer */ kfree(st_gdata);
       }

drivers/misc/ti-st/st_kim.c +8 -1
index a7a861c..f6f6c30 100644
@@ -32,6 +32,7 @@
  #include <linux/sched.h>
  #include <linux/sysfs.h>
  #include <linux/tty.h>
+#include "debug.h"
 
  #include <linux/skbuff.h>
  #include <linux/ti_wilink_st.h>
@@ -41,6 +42,10 @@
  #define MAX_ST_DEVICES 3       /* Imagine 1 on each UART for now */
  static struct platform_device *st_kim_devices[MAX_ST_DEVICES];
 
+/* if CONFIG_TI_ST_DEBUG is defined, enable all logs by default */
+unsigned short debug_mask = 0xffff;
+module_param(debug_mask, ushort, 0644);
+
  /**********************************************************************/
  /* internal functions */
 
@@ -54,7 +59,9 @@ static struct platform_device
 *st_kim_devices[MAX_ST_DEVICES]; 
  */
  static struct platform_device *st_get_plat_device(int id)
  {
-       return st_kim_devices[id];
+       if (id < MAX_ST_DEVICES)
+               return st_kim_devices[id];
+       return NULL;
  }
 

 /**

drivers/misc/ti-st/st_kim.c +2 -2
@@ -67,8 +74,8 @@ void validate_firmware_response(struct kim_data_s
 *kim_gdata) 
  {
        struct sk_buff *skb = kim_gdata->rx_skb;
        if (unlikely(skb->data[5] != 0)) {
-               pr_err("no proper response during fw download");
-               pr_err("data6 %x", skb->data[5]);
+               ti_st_err("no proper response during fw download");
+               ti_st_err("response num: %x", skb->data[5]);
                kfree_skb(skb);

               return;         /* keep waiting for the proper response */
       }

drivers/misc/ti-st/st_kim.c +1 -1
@@ -84,7 +91,7 @@ static inline int kim_check_data_len(struct
 kim_data_s *kim_gdata, int len) 
  {
        register int room = skb_tailroom(kim_gdata->rx_skb);
 
-       pr_debug("len %d room %d", len, room);
+       ti_st_dbg(TI_ST_DBG_KIM, "%s: len %d room %d", __func__,
 len, room); 
 

       if (!len) { validate_firmware_response(kim_gdata);

drivers/misc/ti-st/st_kim.c +1 -2
@@ -92,8 +99,7 @@ static inline int kim_check_data_len(struct
 kim_data_s *kim_gdata, int len) 
                /* Received packet's payload length is larger.
                 * We can't accommodate it in created skb.
                 */
-               pr_err("Data length is too large len %d room %d",
 len, 
-                          room);
+               ti_st_err("Data length is too large len %d room %d",
 len, room); 

               kfree_skb(kim_gdata->rx_skb);
       } else {
               /* Packet header has non-zero payload length and

drivers/misc/ti-st/st_kim.c +1 -2
@@ -126,11 +132,10 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
        int len = 0, type = 0;
        unsigned char *plen;
 
-       pr_debug("%s", __func__);
        /* Decode received bytes here */
        ptr = data;
        if (unlikely(ptr == NULL)) {
-               pr_err(" received null from TTY ");
+               ti_st_err(" received null from TTY ");
                return;
        }
 
@@ -149,7 +154,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
                        switch (kim_gdata->rx_state) {
                                /* Waiting for complete packet ? */

                       case ST_W4_DATA:
-                               pr_debug("Complete pkt received");
+                               ti_st_dbg(TI_ST_DBG_KIM, "Complete pkt received");
                               validate_firmware_response(kim_gdata); kim_gdata->rx_state = ST_W4_PACKET_TYPE;
                               kim_gdata->rx_skb = NULL;

drivers/misc/ti-st/st_kim.c +0 -0
@@ -158,11 +163,11 @@ void kim_int_recv(struct kim_data_s *kim_gdata,

                       case ST_W4_HEADER:
                               plen =
                               (unsigned char *)&kim_gdata->rx_skb->data[1]; -
pr_debug("event hdr: plen 0x%02x\n", *plen); + ti_st_dbg(TI_ST_DBG_KIM, "event hdr: plen 0x%02x\n", *plen); kim_check_data_len(kim_gdata, *plen); continue;
-                       }       /* end of switch */
-               }               /* end of if rx_state */ + } +               }
               switch (*ptr) {
                       /* Bluetooth event packet? */
               case 0x04:

drivers/misc/ti-st/st_kim.c +0 -0
@@ -171,7 +176,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
                        type = *ptr;
                        break;

               default:
-                       pr_info("unknown packet");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: unknown packet", __func__);
                       ptr++;
                       count--;
                       continue;

drivers/misc/ti-st/st_kim.c +0 -0
@@ -181,7 +186,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,

               kim_gdata->rx_skb =
                       alloc_skb(1024+8, GFP_ATOMIC);
               if (!kim_gdata->rx_skb) {
-                       pr_err("can't allocate mem for new packet");
+                       ti_st_err("can't allocate mem for new packet");
                       kim_gdata->rx_state = ST_W4_PACKET_TYPE; kim_gdata->rx_count = 0;
                       return;

drivers/misc/ti-st/st_kim.c +0 -1
@@ -189,7 +194,6 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
                skb_reserve(kim_gdata->rx_skb, 8);
                kim_gdata->rx_skb->cb[0] = 4;
                kim_gdata->rx_skb->cb[1] = 0;
-
        }
        return;
  }
@@ -199,17 +203,15 @@ static long read_local_version(struct

kim_data_s *kim_gdata, char *bts_scr_name)        unsigned short version = 0, chip = 0, min_ver = 0, maj_ver = 0;
       const char read_ver_cmd[] = { 0x01, 0x01, 0x10, 0x00 };

-       pr_debug("%s", __func__);
-
       INIT_COMPLETION(kim_gdata->kim_rcvd);
       if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) { -               pr_err("kim: couldn't write 4 bytes");
+               ti_st_err("kim: couldn't write 4 bytes"); return -EIO;
       }

       if (!wait_for_completion_timeout (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
-               pr_err(" waiting for ver info- timed out ");
+               ti_st_err(" waiting for ver info - timed out "); return -ETIMEDOUT;
       }
       INIT_COMPLETION(kim_gdata->kim_rcvd);

drivers/misc/ti-st/st_kim.c +1 -1
@@ -232,7 +234,8 @@ static long read_local_version(struct kim_data_s
 *kim_gdata, char *bts_scr_name)        kim_gdata->version.maj_ver =
 maj_ver; 
        kim_gdata->version.min_ver = min_ver;
 
-       pr_info("%s", bts_scr_name);
+       ti_st_dbg(TI_ST_DBG_KIM, "local_version - %s",

bts_scr_name); +
       return 0;
 }

drivers/misc/ti-st/st_kim.c +0 -0
@@ -245,14 +248,14 @@ void skip_change_remote_baud(unsigned char
 **ptr, long *len) 
                ((struct bts_action *) cur_action)->size;
 

       if (((struct bts_action *) nxt_action)->type != ACTION_WAIT_EVENT) { -               pr_err("invalid action after change remote baud command"); +               ti_st_err("invalid action after change remote baud command");
       } else {
               *ptr = *ptr + sizeof(struct bts_action) + ((struct bts_action *)cur_action)->size; *len = *len - (sizeof(struct bts_action) + ((struct bts_action *)cur_action)->size);
               /* warn user on not commenting these in firmware */
-               pr_warn("skipping the wait event of change remote baud"); +               ti_st_warn("skipping the wait event of change remote baud");
       }
 }

drivers/misc/ti-st/st_kim.c +1 -1
@@ -274,7 +277,7 @@ static long download_firmware(struct kim_data_s
 *kim_gdata) 
 
        err = read_local_version(kim_gdata, bts_scr_name);
        if (err != 0) {
-               pr_err("kim: failed to read local ver");
+               ti_st_err("kim: failed to read local ver");
                return err;
        }

       err =

drivers/misc/ti-st/st_kim.c +0 -0
@@ -282,10 +285,11 @@ static long download_firmware(struct
 kim_data_s *kim_gdata) 
                             &kim_gdata->kim_pdev->dev);

       if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) ||
                    (kim_gdata->fw_entry->size == 0))) {
-               pr_err(" request_firmware failed(errno %ld) for %s", err,
-                          bts_scr_name);
+               ti_st_err(" request_firmware failed(errno %ld) for %s", err, +                             bts_scr_name); return -EINVAL;
       }
+
       ptr = (void *)kim_gdata->fw_entry->data;
       len = kim_gdata->fw_entry->size;
       /* bts_header to remove out magic number and

drivers/misc/ti-st/st_kim.c +2 -3
@@ -295,21 +299,21 @@ static long download_firmware(struct
 kim_data_s *kim_gdata) 
        len -= sizeof(struct bts_header);
 
        while (len > 0 && ptr) {
-               pr_debug(" action size %d, type %d ",
-                          ((struct bts_action *)ptr)->size,
-                          ((struct bts_action *)ptr)->type);
+               ti_st_dbg(TI_ST_DBG_KIM, " action size %d, type %d ",
+                                       ((struct bts_action
 *)ptr)->size, +                                       ((struct
 bts_action *)ptr)->type); 
 
                switch (((struct bts_action *)ptr)->type) {

               case ACTION_SEND_COMMAND:       /* action send */
-                       pr_debug("S");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: send command", __func__);
                       action_ptr = &(((struct bts_action *)ptr)->data[0]);
                       if (unlikely
                           (((struct hci_command *)action_ptr)->opcode ==
                            0xFF36)) {
                               /* ignore remote change
                                * baud rate HCI VS command */
-                               pr_warn("change remote baud"
-                                   " rate command in firmware");
+                               ti_st_warn("change remote baud rate command" +                                               " in firmware");
                               skip_change_remote_baud(&ptr, &len); break;
                       }

drivers/misc/ti-st/st_kim.c +0 -0
@@ -323,8 +327,8 @@ static long download_firmware(struct kim_data_s
 *kim_gdata) 

                               wr_room_space =

st_get_uart_wr_room(kim_gdata->core_data);
                               if (wr_room_space < 0) {
-                                       pr_err("Unable to get free "
-                                                       "space info from uart tx buffer"); +
ti_st_err("Unable to get free space " +
"info from uart tx buffer");

release_firmware(kim_gdata->fw_entry);
                                       return wr_room_space; }

drivers/misc/ti-st/st_kim.c +0 -1
@@ -334,7 +338,7 @@ static long download_firmware(struct kim_data_s
 *kim_gdata) 
 
                        /* Timeout happened ? */
                        if (time_after_eq(jiffies, timeout)) {
-                               pr_err("Timeout while waiting for

free " +                               ti_st_err("Timeout while waiting for free "
                                               "free space in uart tx buffer");
                               release_firmware(kim_gdata->fw_entry); return -ETIMEDOUT;

drivers/misc/ti-st/st_kim.c +0 -1
@@ -361,19 +365,19 @@ static long download_firmware(struct
 kim_data_s *kim_gdata) 
                         * and requested command write size
                         */
                        if (err != cmd_size) {
-                               pr_err("Number of bytes written to

uart "
-                                               "tx buffer are not matching with " +                               ti_st_err("Number of bytes written to uart tx " +
"buffer are not matching with "
                                               "requested cmd write size");
                               release_firmware(kim_gdata->fw_entry); return -EIO;
                       }
                       break;
               case ACTION_WAIT_EVENT:  /* wait */
-                       pr_debug("W");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: wait event", __func__);
                       if (!wait_for_completion_timeout (&kim_gdata->kim_rcvd,
msecs_to_jiffies(CMD_RESP_TIME))) { -
pr_err("response timeout during fw download "); + ti_st_err("response timeout during fw download");
                               /* timed out */ release_firmware(kim_gdata->fw_entry); return -ETIMEDOUT;

drivers/misc/ti-st/st_kim.c +0 -0
@@ -381,7 +385,7 @@ static long download_firmware(struct kim_data_s
 *kim_gdata) 
                        INIT_COMPLETION(kim_gdata->kim_rcvd);
                        break;

               case ACTION_DELAY:      /* sleep */
-                       pr_info("sleep command in scr");
+                       ti_st_dbg(TI_ST_DBG_KIM, "%s: sleep command", __func__);
                       action_ptr = &(((struct bts_action *)ptr)->data[0]);
                       mdelay(((struct bts_action_delay *)action_ptr)->msec);
                       break;

drivers/misc/ti-st/st_kim.c +1 -0
@@ -395,6 +399,7 @@ static long download_firmware(struct kim_data_s
 *kim_gdata) 
        }
        /* fw download complete */
        release_firmware(kim_gdata->fw_entry);
+       ti_st_dbg(TI_ST_DBG_KIM, "firmware dld compleated");
        return 0;
  }
@@ -446,7 +451,6 @@ long st_kim_start(void *kim_data)
        struct ti_st_plat_data  *pdata;

       struct kim_data_s       *kim_gdata = (struct kim_data_s *)kim_data;

-       pr_info(" %s", __func__);
       pdata = kim_gdata->kim_pdev->dev.platform_data;

       do {

drivers/misc/ti-st/st_kim.c +3 -4
@@ -463,7 +467,6 @@ long st_kim_start(void *kim_data)
                INIT_COMPLETION(kim_gdata->ldisc_installed);
                /* send notification to UIM */
                kim_gdata->ldisc_install = 1;
-               pr_info("ldisc_install = 1");
                sysfs_notify(&kim_gdata->kim_pdev->dev.kobj,
                                NULL, "install");
                /* wait for ldisc to be installed */
@@ -472,17 +475,17 @@ long st_kim_start(void *kim_data)
                if (!err) {
                        /* ldisc installation timeout,
                         * flush uart, power cycle BT_EN */
-                       pr_err("ldisc installation timeout");
+                       ti_st_err("ldisc installation timeout");
                        err = st_kim_stop(kim_gdata);
                        continue;
                } else {
                        /* ldisc installed now */
-                       pr_info("line discipline installed");
+                       ti_st_dbg(TI_ST_DBG_KIM, "line discipline
 installed"); 
                        err = download_firmware(kim_gdata);
                        if (err != 0) {
                                /* ldisc installed but fw download
 failed, 
                                 * flush uart & power cycle BT_EN */
-                               pr_err("download firmware failed");
+                               ti_st_err("download firmware
 failed"); 

                               err = st_kim_stop(kim_gdata); continue;
                       } else {        /* on success don't retry */

drivers/misc/ti-st/st_kim.c +0 -1
@@ -521,7 +524,6 @@ long st_kim_stop(void *kim_data)
        }
 
        /* send uninstall notification to UIM */
-       pr_info("ldisc_install = 0");
        kim_gdata->ldisc_install = 0;
        sysfs_notify(&kim_gdata->kim_pdev->dev.kobj, NULL, "install");
 
@@ -529,7 +531,7 @@ long st_kim_stop(void *kim_data)
        err = wait_for_completion_timeout(&kim_gdata->ldisc_installed,
                        msecs_to_jiffies(LDISC_TIME));

       if (!err) {             /* timeout */
-               pr_err(" timed out waiting for ldisc to be un-installed"); +               ti_st_err("timed out waiting for ldisc to be un-installed");
               return -ETIMEDOUT;
       }

drivers/misc/ti-st/st_kim.c +2 -2
@@ -578,9 +580,9 @@ static ssize_t store_dev_name(struct device *dev,
                struct device_attribute *attr, const char *buf,
 size_t count) 
  {
        struct kim_data_s *kim_data = dev_get_drvdata(dev);
-       pr_debug("storing dev name >%s<", buf);
+       ti_st_dbg(TI_ST_DBG_KIM, "storing dev name >%s<", buf);
        strncpy(kim_data->dev_name, buf, count);
-       pr_debug("stored dev name >%s<", kim_data->dev_name);
+       ti_st_dbg(TI_ST_DBG_KIM, "stored dev name >%s<",
 kim_data->dev_name); 
        return count;

 }

drivers/misc/ti-st/st_kim.c +2 -2
@@ -588,9 +590,9 @@ static ssize_t store_baud_rate(struct device
 *dev, 
                struct device_attribute *attr, const char *buf,
 size_t count) 
  {
        struct kim_data_s *kim_data = dev_get_drvdata(dev);
-       pr_debug("storing baud rate >%s<", buf);
+       ti_st_dbg(TI_ST_DBG_KIM, "storing baud rate >%s<", buf);
        sscanf(buf, "%ld", &kim_data->baud_rate);
-       pr_debug("stored baud rate >%ld<", kim_data->baud_rate);
+       ti_st_dbg(TI_ST_DBG_KIM, "stored baud rate >%ld<",
 kim_data->baud_rate); 

       return count;
 }
 #endif /* if DEBUG */

drivers/misc/ti-st/st_kim.c +2 -2
@@ -718,14 +720,14 @@ static int kim_probe(struct platform_device
 *pdev) 
 
        kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC);
        if (!kim_gdata) {
-               pr_err("no mem to allocate");
+               ti_st_err("no mem to allocate");
                return -ENOMEM;
        }
        dev_set_drvdata(&pdev->dev, kim_gdata);
 
        status = st_core_init(&kim_gdata->core_data);
        if (status != 0) {
-               pr_err(" ST core init failed");
+               ti_st_err(" ST core init failed");
                return -EIO;
        }

       /* refer to itself */

drivers/misc/ti-st/st_kim.c +0 -1
@@ -735,14 +737,14 @@ static int kim_probe(struct platform_device
 *pdev) 
        kim_gdata->nshutdown = pdata->nshutdown_gpio;
        status = gpio_request(kim_gdata->nshutdown, "kim");
        if (unlikely(status)) {
-               pr_err(" gpio %ld request failed ",

kim_gdata->nshutdown); +               ti_st_err(" gpio %ld request failed ", kim_gdata->nshutdown);
               return status;
       }

       /* Configure nShutdown GPIO as output=0 */ status = gpio_direction_output(kim_gdata->nshutdown, 0); if (unlikely(status)) {
-               pr_err(" unable to configure gpio %ld", kim_gdata->nshutdown); +               ti_st_err("unable to configure gpio %ld", kim_gdata->nshutdown);
               return status;
       }
       /* get reference of pdev for request_firmware

drivers/misc/ti-st/st_kim.c +5 -6
@@ -753,7 +755,7 @@ static int kim_probe(struct platform_device
 *pdev) 
 
        status = sysfs_create_group(&pdev->dev.kobj, &uim_attr_grp);
        if (status) {
-               pr_err("failed to create sysfs entries");
+               ti_st_err("failed to create sysfs entries");
                return status;
        }
@@ -761,20 +763,20 @@ static int kim_probe(struct platform_device
 *pdev) 
        strncpy(kim_gdata->dev_name, pdata->dev_name,
 UART_DEV_NAME_LEN); 
        kim_gdata->flow_cntrl = pdata->flow_cntrl;
        kim_gdata->baud_rate = pdata->baud_rate;
-       pr_info("sysfs entries created\n");
+       ti_st_dbg(TI_ST_DBG_KIM, "sysfs entries created\n");
 
        kim_debugfs_dir = debugfs_create_dir("ti-st", NULL);
        if (IS_ERR(kim_debugfs_dir)) {
-               pr_err(" debugfs entries creation failed ");
+               ti_st_err(" debugfs entries creation failed ");
                kim_debugfs_dir = NULL;
                return -EIO;
        }
 
        debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
-                               kim_gdata, &version_debugfs_fops);
+                                               kim_gdata,
 &version_debugfs_fops); 
        debugfs_create_file("protocols", S_IRUGO, kim_debugfs_dir,
-                               kim_gdata, &list_debugfs_fops);
-       pr_info(" debugfs entries created ");
+                                               kim_gdata,

&list_debugfs_fops); +       ti_st_dbg(TI_ST_DBG_KIM, " debugfs entries created ");
       return 0;
 }

drivers/misc/ti-st/st_kim.c +2 -2
@@ -790,11 +792,11 @@ static int kim_remove(struct platform_device
 *pdev) 
         * nShutdown gpio from the system
         */
        gpio_free(pdata->nshutdown_gpio);
-       pr_info("nshutdown GPIO Freed");
+       ti_st_dbg(TI_ST_DBG_KIM, "nshutdown GPIO Freed");
 
        debugfs_remove_recursive(kim_debugfs_dir);
        sysfs_remove_group(&pdev->dev.kobj, &uim_attr_grp);
-       pr_info("sysfs entries removed");
+       ti_st_dbg(TI_ST_DBG_KIM, "sysfs entries removed");
 
        kim_gdata->kim_pdev = NULL;

       st_core_exit(kim_gdata->core_data);

drivers/misc/ti-st/st_ll.c +5 -4
index 1ff460a..ccdad8b 100644
@@ -24,6 +24,7 @@
  #include <linux/module.h>
  #include <linux/platform_device.h>
  #include <linux/ti_wilink_st.h>
+#include "debug.h"
 
  /**********************************************************************/
  /* internal functions */
@@ -31,7 +32,7 @@ static void send_ll_cmd(struct st_data_s *st_data,
        unsigned char cmd)
  {
 
-       pr_debug("%s: writing %x", __func__, cmd);
+       ti_st_dbg(TI_ST_DBG_HCI_LL, "%s: writing %x", __func__, cmd);
        st_int_write(st_data, &cmd, 1);
        return;
  }
@@ -41,11 +42,11 @@ static void ll_device_want_to_sleep(struct
 st_data_s *st_data) 
        struct kim_data_s       *kim_data;
        struct ti_st_plat_data  *pdata;
 
-       pr_debug("%s", __func__);
+       ti_st_dbg(TI_ST_DBG_HCI_LL, "%s", __func__);
        /* sanity check */
        if (st_data->ll_state != ST_LL_AWAKE)
-               pr_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
-                         "in state %ld", st_data->ll_state);
+               ti_st_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
+                                       "in state %ld",
 st_data->ll_state); 
 

       send_ll_cmd(st_data, LL_SLEEP_ACK);
       /* update state */

drivers/misc/ti-st/st_ll.c +0 -0
@@ -70,15 +71,15 @@ static void ll_device_want_to_wakeup(struct
 st_data_s *st_data) 
                break;

       case ST_LL_ASLEEP_TO_AWAKE:
               /* duplicate wake_ind */
-               pr_err("duplicate wake_ind while waiting for Wake ack"); +               ti_st_err("duplicate wake_ind while waiting for Wake ack");
               break;
       case ST_LL_AWAKE:
               /* duplicate wake_ind */
-               pr_err("duplicate wake_ind already AWAKE");
+               ti_st_err("duplicate wake_ind already AWAKE"); break;
       case ST_LL_AWAKE_TO_ASLEEP:
               /* duplicate wake_ind */
-               pr_err("duplicate wake_ind");
+               ti_st_err("duplicate wake_ind");
               break;
       }
       /* update state */

drivers/misc/ti-st/st_ll.c +1 -2
@@ -116,14 +117,13 @@ void st_ll_wakeup(struct st_data_s *ll)
                ll->ll_state = ST_LL_ASLEEP_TO_AWAKE;
        } else {
                /* don't send the duplicate wake_indication */
-               pr_err(" Chip already AWAKE ");
+               ti_st_err(" Chip already AWAKE ");
        }
  }
 
  /* called when ST Core wants the state */
  unsigned long st_ll_getstate(struct st_data_s *ll)
  {
-       pr_debug(" returning state %ld", ll->ll_state);
        return ll->ll_state;
  }
 
@@ -133,22 +133,22 @@ unsigned long st_ll_sleep_state(struct
 st_data_s *st_data, 
  {
        switch (cmd) {

       case LL_SLEEP_IND:      /* sleep ind */
-               pr_debug("sleep indication recvd");
+               ti_st_dbg(TI_ST_DBG_HCI_LL, "sleep indication recvd");
               ll_device_want_to_sleep(st_data);
               break;
       case LL_SLEEP_ACK:      /* sleep ack */
-               pr_err("sleep ack rcvd: host shouldn't");
+               ti_st_err("sleep ack rcvd: host shouldn't"); break;
       case LL_WAKE_UP_IND:    /* wake ind */
-               pr_debug("wake indication recvd");
+               ti_st_dbg(TI_ST_DBG_HCI_LL, "wake indication recvd"); ll_device_want_to_wakeup(st_data);
               break;
       case LL_WAKE_UP_ACK:    /* wake ack */
-               pr_debug("wake ack rcvd");
+               ti_st_dbg(TI_ST_DBG_HCI_LL, "wake ack rcvd"); st_data->ll_state = ST_LL_AWAKE;
               break;

Quoted 9 lines

       default:
-               pr_err(" unknown input/state ");
+               ti_st_err(" unknown input/state "); return -EINVAL;
       }
       return 0;
--
1.7.4.1

I agree that this driver needs improvements but I don't see any value in adding new macros for existing debugging infrastructure (e.g ti_st_err vs pr_err).

I propose to look for the following issues:
* cleanup pr_debug's, the driver is just too verbose.
* replace pr_err kind of functions with dev_err where appropriate
* fix yoda conditions:
if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4))

thanks,
Daniel.

#3 lore raw
Quoted 6 lines · Pavan
Quoted 5 lines · Daniel Baluta

Adding Greg's new email address.

Quoted 2 lines · On Thu, Mar 15, 2012 at 8:26 PM,  <[email protected]> wrote:

From: Alexandra Sava <[email protected]>

Quoted 8 lines
Quoted 4 lines
Quoted 4 lines

* added new module parameter named debug_mask to control displayed messages verbosity
* the logging mechanism is enabled via CONFIG_TI_ST_DEBUG Kconfig option

Any specific reason you want to have this ? Custom logging ? Also please fix the spelling in the subject line.

The logging for this driver is too verbose, and I thought it would be better to implement a configurable mechanism which can enable/disable the log messages (not only via the global CONFIG_DYNAMIC_DEBUG). So, I think there are two ways:

#4 lore raw
Quoted 12 lines · Alexandra Sava
Quoted 11 lines · Pavan
Quoted 9 lines · Daniel Baluta

Adding Greg's new email address.

Quoted 6 lines · On Thu, Mar 15, 2012 at 8:26 PM,  <[email protected]> wrote:

From: Alexandra Sava <[email protected]>

* added new module parameter named debug_mask to control displayed messages verbosity
* the logging mechanism is enabled via CONFIG_TI_ST_DEBUG Kconfig option

Quoted 8 lines
Quoted 3 lines

Any specific reason you want to have this ? Custom logging ? Also please fix the spelling in the subject line.

The logging for this driver is too verbose, and I thought it would be better to implement a configurable mechanism which can enable/disable the log messages (not only via the global CONFIG_DYNAMIC_DEBUG). So, I think there are two ways:

The logging for this driver is too verbose, and I thought it would be better to implement a configurable mechanism which can enable/disable the log messages (not only via the global CONFIG_DYNAMIC_DEBUG). So, I think there are two ways:
1. keep pr_debug but reduce the amount of messages
2. make the logs configurabile via CONFIG_TI_SI_DEBUG

Alexandra

#5 lore raw
Quoted 22 lines · Alexandra Sava
Quoted 12 lines · Alexandra Sava
Quoted 11 lines · Pavan
Quoted 9 lines · Daniel Baluta

Adding Greg's new email address.

Quoted 6 lines · On Thu, Mar 15, 2012 at 8:26 PM,  <[email protected]> wrote:

From: Alexandra Sava <[email protected]>

* added new module parameter named debug_mask to control displayed messages verbosity
* the logging mechanism is enabled via CONFIG_TI_ST_DEBUG Kconfig option

Quoted 8 lines
Quoted 3 lines

Any specific reason you want to have this ? Custom logging ? Also please fix the spelling in the subject line.

The logging for this driver is too verbose, and I thought it would be better to implement a configurable mechanism which can enable/disable the log messages (not only via the global CONFIG_DYNAMIC_DEBUG). So, I think there are two ways:

Quoted 5 lines

The logging for this driver is too verbose, and I thought it would be better to implement a configurable mechanism which can enable/disable the log messages (not only via the global CONFIG_DYNAMIC_DEBUG). So, I think there are two ways:
1. keep pr_debug but reduce the amount of messages

That's probably the best, you aren't needing almost all of them anymore now that the driver is working.

Quoted 1 line

2. make the logs configurabile via CONFIG_TI_SI_DEBUG

No, don't do this, no one will enable it.

greg k-h

#6 lore raw
In reply to [email protected]

This is what I get now (with no debug) when loading the btwilink module that uses ti-st:

[  129.567382] (stk) :change remote baud rate command in firmware
[  129.573577] (stk) :skipping the wait event of change remote baud

This is:
1. too "verbose" => these 2 prints should belong to debug
2. poorly formated
3. not telling me which driver generated this output
4. not giving me the version of the firmware that was loaded.

To address 2 and 3, please remove the the "(stc)" / "(stk)" prefixes and use instead the quite widespread prefix KBUILD_MODNAME ": "

Am 15.03.2012 19:26, schrieb [email protected]:

Quoted 11 lines

From: Alexandra Sava <[email protected]>

* added new module parameter named debug_mask to control displayed messages verbosity
* the logging mechanism is enabled via CONFIG_TI_ST_DEBUG Kconfig option

---
 drivers/misc/ti-st/Kconfig   |    7 ++
 drivers/misc/ti-st/debug.h   |   34 +++++++++
 drivers/misc/ti-st/st_core.c |  153

+++++++++++++++++++-----------------------

Quoted 10 lines
 drivers/misc/ti-st/st_kim.c  |  126 +++++++++++++++++-----------------
 drivers/misc/ti-st/st_ll.c   |   28 ++++----
 5 files changed, 187 insertions(+), 161 deletions(-)
 create mode 100644 drivers/misc/ti-st/debug.h
drivers/misc/ti-st/Kconfig +0 -0
index abb5de1..6d4e6a3 100644

drivers/misc/ti-st/Kconfig config TI_ST · line 22

Quoted 9 lines
drivers/misc/ti-st/Kconfig +6 -0
@@ -14,4 +14,11 @@ config TI_ST
 	  are returned to relevant protocol drivers based on their
 	  packet types.
 
+if TI_ST
+config TI_ST_DEBUG
+	bool "Enable full debugging output for the Shared transport core driver"
+	depends on TI_ST
+	---help---
+		Debugging support.

We probably do not need this: even though some debug statements might be on the data path, the ARM cores used in ST-enabled setups feature decent branch prediction.

Quoted 8 lines
drivers/misc/ti-st/Kconfig +1 -0
+endif # TI_ST
 endmenu
drivers/misc/ti-st/debug.h new file +0 -0
new file mode 100644
index 0000000..68ffc74

drivers/misc/ti-st/debug.h line 7

Quoted 7 lines
drivers/misc/ti-st/debug.h new file +7 -0
@@ -0,0 +1,34 @@
+#ifndef TI_ST_DEBUG_H
+#define TI_ST_DEBUG_H
+
+enum TI_ST_DEBUG_MASK {
+	TI_ST_DBG_HCI_LL = 0x0001, /* HCI_LL protocol */
+	TI_ST_DBG_KIM = 0x0002, /* GPIO control and firmware download */
+	TI_ST_DBG_CORE = 0x0003, /* ST KIM driver and ST LL driver */

Bitwise OR between the first two.

drivers/misc/ti-st/debug.h line 19

Quoted 12 lines
drivers/misc/ti-st/debug.h new file +12 -0
+	TI_ST_DBG_ALL = 0xffff /* enable all logs */
+};
+
+extern unsigned short debug_mask;
+
+#define ti_st_info(fmt, ...)	\
+	pr_info(fmt, ##__VA_ARGS__);
+#define ti_st_err(fmt, ...)		\
+	pr_err(fmt, ##__VA_ARGS__);
+#define ti_st_warn(fmt, ...)	\
+	pr_warn(fmt, ##__VA_ARGS__);
+

Please use a standard prefix, see above.

drivers/misc/ti-st/debug.h line 24

Quoted 5 lines
drivers/misc/ti-st/debug.h new file +5 -0
+
+#ifdef CONFIG_TI_ST_DEBUG
+#define ti_st_dbg(mask, fmt, ...)                  \
+	({                              \
+		if (debug_mask & mask)                     \

if (unlikely(...)), just in case we're on a data path.

drivers/misc/ti-st/st_core.c static void add_channel_to_table(struct st_data_s

Quoted 38 lines
drivers/misc/ti-st/debug.h new file +10 -0
+			pr_debug(fmt, ##__VA_ARGS__);    \
+	})
+#else
+static inline void ti_st_dbg(enum TI_ST_DEBUG_MASK dbg_mask,
+							 const char *fmt, ...)
+{
+}
+
+#endif
+#endif
drivers/misc/ti-st/st_core.c +3 -1
index 2b62232..245cf31 100644
@@ -1,4 +1,5 @@
 /*
+
  *  Shared Transport Line discipline driver Core
  *	This hooks up ST KIM driver and ST LL driver
  *  Copyright (C) 2009-2010 Texas Instruments
@@ -29,6 +30,7 @@
 #include <linux/skbuff.h>
 
 #include <linux/ti_wilink_st.h>
+#include "debug.h"
 
 /* function pointer pointing to either,
  * st_kim_recv during registration to receive fw download responses
@@ -40,7 +42,7 @@ void (*st_recv) (void*, const unsigned char*, long);
 static void add_channel_to_table(struct st_data_s *st_gdata,
 		struct st_proto_s *new_proto)
 {
-	pr_info("%s: id %d\n", __func__, new_proto->chnl_id);
+	ti_st_dbg(TI_ST_DBG_CORE, "%s: id %d\n", __func__, new_proto->chnl_id);
 	/* list now has the channel id as index itself */
 	st_gdata->list[new_proto->chnl_id] = new_proto;
 	st_gdata->is_registered[new_proto->chnl_id] = true;
@@ -49,7 +51,7 @@ static void add_channel_to_table(struct st_data_s

*st_gdata,

Quoted 29 lines
drivers/misc/ti-st/st_core.c +3 -3
 static void remove_channel_from_table(struct st_data_s *st_gdata,
 		struct st_proto_s *proto)
 {
-	pr_info("%s: id %d\n", __func__, proto->chnl_id);
+	ti_st_dbg(TI_ST_DBG_CORE, "%s: id %d\n", __func__, proto->chnl_id);
 /*	st_gdata->list[proto->chnl_id] = NULL; */
 	st_gdata->is_registered[proto->chnl_id] = false;
 }
@@ -65,7 +67,7 @@ int st_get_uart_wr_room(struct st_data_s *st_gdata)
 {
 	struct tty_struct *tty;
 	if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
-		pr_err("tty unavailable to perform write");
+		ti_st_err("tty unavailable to perform write");
 		return -1;
 	}
 	tty = st_gdata->tty;
@@ -84,7 +86,7 @@ int st_int_write(struct st_data_s *st_gdata,
 {
 	struct tty_struct *tty;
 	if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) {
-		pr_err("tty unavailable to perform write");
+		ti_st_err("tty unavailable to perform write");
 		return -EINVAL;
 	}
 	tty = st_gdata->tty;
@@ -102,12 +104,12 @@ int st_int_write(struct st_data_s *st_gdata,
  */
 void st_send_frame(unsigned char chnl_id, struct st_data_s *st_gdata)

drivers/misc/ti-st/st_core.c int st_int_write(struct st_data_s *st_gdata, · line 113

Quoted 10 lines
drivers/misc/ti-st/st_core.c +2 -2
 {
-	pr_debug(" %s(prot:%d) ", __func__, chnl_id);
+	ti_st_dbg(TI_ST_DBG_CORE, " %s(prot:%d) ", __func__, chnl_id);
 
 	if (unlikely
 	    (st_gdata == NULL || st_gdata->rx_skb == NULL
 	     || st_gdata->is_registered[chnl_id] == false)) {
-		pr_err("chnl_id %d not registered, no data to send?",
+		ti_st_err("chnl_id %d not registered, no data to send?",
 			   chnl_id);

Here there's no whitespace at the beginning of the format string...

drivers/misc/ti-st/st_core.c void st_send_frame(unsigned char chnl_id, struct

Quoted 3 lines
drivers/misc/ti-st/st_core.c +0 -0
 		kfree_skb(st_gdata->rx_skb);
 		return;
@@ -122,12 +124,12 @@ void st_send_frame(unsigned char chnl_id, struct

st_data_s *st_gdata)

drivers/misc/ti-st/st_core.c void st_send_frame(unsigned char chnl_id, struct st_data_s *st_gdata) · line 127

Quoted 5 lines
drivers/misc/ti-st/st_core.c +1 -1
 			(st_gdata->list[chnl_id]->recv
 			(st_gdata->list[chnl_id]->priv_data, st_gdata->rx_skb)
 			     != 0)) {
-			pr_err(" proto stack %d's ->recv failed", chnl_id);
+			ti_st_err(" proto stack %d's ->recv failed", chnl_id);

... but here the whitespace is there. IMHO, this kind of whitespace should be removed.

drivers/misc/ti-st/st_core.c void st_send_frame(unsigned char chnl_id, struct

Quoted 10 lines
drivers/misc/ti-st/st_core.c +1 -1
 			kfree_skb(st_gdata->rx_skb);
 			return;
 		}
 	} else {
-		pr_err(" proto stack %d's ->recv null", chnl_id);
+		ti_st_err(" proto stack %d's ->recv null", chnl_id);
 		kfree_skb(st_gdata->rx_skb);
 	}
 	return;
@@ -143,14 +145,15 @@ void st_send_frame(unsigned char chnl_id, struct

st_data_s *st_gdata)

drivers/misc/ti-st/st_core.c static inline int st_check_data_len(struct

Quoted 18 lines
drivers/misc/ti-st/st_core.c +3 -2
 void st_reg_complete(struct st_data_s *st_gdata, char err)
 {
 	unsigned char i = 0;
-	pr_info(" %s ", __func__);
+
 	for (i = 0; i < ST_MAX_CHANNELS; i++) {
 		if (likely(st_gdata != NULL &&
 			st_gdata->is_registered[i] == true &&
 				st_gdata->list[i]->reg_complete_cb != NULL)) {
 			st_gdata->list[i]->reg_complete_cb
 				(st_gdata->list[i]->priv_data, err);
-			pr_info("protocol %d's cb sent %d\n", i, err);
+			ti_st_dbg(TI_ST_DBG_KIM, "protocol %d's cb "
+						"sent %d\n", i, err);
 			if (err) { /* cleanup registered protocol */
 				st_gdata->protos_registered--;
 				st_gdata->is_registered[i] = false;
@@ -164,8 +167,6 @@ static inline int st_check_data_len(struct

st_data_s *st_gdata,

drivers/misc/ti-st/st_core.c static inline int st_check_data_len(struct

Quoted 9 lines
drivers/misc/ti-st/st_core.c +0 -2
 {
 	int room = skb_tailroom(st_gdata->rx_skb);
 
-	pr_debug("len %d room %d", len, room);
-
 	if (!len) {
 		/* Received packet has only packet header and
 		 * has zero length payload. So, ask ST CORE to
@@ -177,7 +178,7 @@ static inline int st_check_data_len(struct

st_data_s *st_gdata,

drivers/misc/ti-st/st_core.c static inline int st_check_data_len(struct

Quoted 9 lines
drivers/misc/ti-st/st_core.c +1 -1
 		/* Received packet's payload length is larger.
 		 * We can't accommodate it in created skb.
 		 */
-		pr_err("Data length is too large len %d room %d", len,
+		ti_st_err("Data length is too large len %d room %d", len,
 			   room);
 		kfree_skb(st_gdata->rx_skb);
 	} else {
@@ -201,7 +202,7 @@ static inline int st_check_data_len(struct

st_data_s *st_gdata,

drivers/misc/ti-st/st_core.c struct sk_buff *st_int_dequeue(struct st_data_s

Quoted 122 lines
drivers/misc/ti-st/st_core.c +17 -24
 /**
  * st_wakeup_ack - internal function for action when wake-up ack
- *	received
+ * received
  */
 static inline void st_wakeup_ack(struct st_data_s *st_gdata,
 	unsigned char cmd)
@@ -244,15 +245,14 @@ void st_int_recv(void *disc_data,
 	unsigned long flags;
 
 	ptr = (char *)data;
-	/* tty_receive sent null ? */
 	if (unlikely(ptr == NULL) || (st_gdata == NULL)) {
-		pr_err(" received null from TTY ");
+		ti_st_err(" received null from TTY ");
 		return;
 	}
 
-	pr_debug("count %ld rx_state %ld"
-		   "rx_count %ld", count, st_gdata->rx_state,
-		   st_gdata->rx_count);
+	ti_st_dbg(TI_ST_DBG_CORE, "%s: count %ld rx_state %ld"
+		"rx_count %ld", __func__, count, st_gdata->rx_state,
+		st_gdata->rx_count);
 
 	spin_lock_irqsave(&st_gdata->lock, flags);
 	/* Decode received bytes here */
@@ -271,7 +271,7 @@ void st_int_recv(void *disc_data,
 			switch (st_gdata->rx_state) {
 			/* Waiting for complete packet ? */
 			case ST_W4_DATA:
-				pr_debug("Complete pkt received");
+				ti_st_dbg(TI_ST_DBG_CORE, "Complete pkt received");
 				/* Ask ST CORE to forward
 				 * the packet to protocol driver */
 				st_send_frame(st_gdata->rx_chnl, st_gdata);
@@ -285,32 +285,28 @@ void st_int_recv(void *disc_data,
 				plen =
 				&st_gdata->rx_skb->data
 				[proto->offset_len_in_hdr];
-				pr_debug("plen pointing to %x\n", *plen);
 				if (proto->len_size == 1)/* 1 byte len field */
 					payload_len = *(unsigned char *)plen;
 				else if (proto->len_size == 2)
 					payload_len =
 					__le16_to_cpu(*(unsigned short *)plen);
 				else
-					pr_info("%s: invalid length "
-					"for id %d\n",
-					__func__, proto->chnl_id);
+					ti_st_dbg(TI_ST_DBG_CORE, "%s: invalid length"
+					"for id %d\n", __func__, proto->chnl_id);
+
 				st_check_data_len(st_gdata, proto->chnl_id,
 						payload_len);
-				pr_debug("off %d, pay len %d\n",
-					proto->offset_len_in_hdr, payload_len);
 				continue;
-			}	/* end of switch rx_state */
+			}
 		}
 
-		/* end of if rx_count */
 		/* Check first byte of packet and identify module
 		 * owner (BT/FM/GPS) */
 		switch (*ptr) {
 		case LL_SLEEP_IND:
 		case LL_SLEEP_ACK:
 		case LL_WAKE_UP_IND:
-			pr_debug("PM packet");
+			ti_st_dbg(TI_ST_DBG_CORE, "PM packet");
 			/* this takes appropriate action based on
 			 * sleep state received --
 			 */
@@ -327,8 +323,7 @@ void st_int_recv(void *disc_data,
 			count--;
 			continue;
 		case LL_WAKE_UP_ACK:
-			pr_debug("PM packet");
-
+			ti_st_dbg(TI_ST_DBG_CORE, "PM packet");
 			spin_unlock_irqrestore(&st_gdata->lock, flags);
 			/* wake up ack received */
 			st_wakeup_ack(st_gdata, *ptr);
@@ -341,10 +336,9 @@ void st_int_recv(void *disc_data,
 		default:
 			type = *ptr;
 			if (st_gdata->list[type] == NULL) {
-				pr_err("chip/interface misbehavior dropping"
+				ti_st_err("chip/interface misbehavior dropping"
 					" frame starting with 0x%02x", type);
 				goto done;
-
 			}
 			st_gdata->rx_skb = alloc_skb(
 					st_gdata->list[type]->max_frame_size,
@@ -352,19 +346,19 @@ void st_int_recv(void *disc_data,
 			skb_reserve(st_gdata->rx_skb,
 					st_gdata->list[type]->reserve);
 			/* next 2 required for BT only */
-			st_gdata->rx_skb->cb[0] = type; /*pkt_type*/
-			st_gdata->rx_skb->cb[1] = 0; /*incoming*/
+			st_gdata->rx_skb->cb[0] = type; /* pkt_type */
+			st_gdata->rx_skb->cb[1] = 0; /* incoming */
 			st_gdata->rx_chnl = *ptr;
 			st_gdata->rx_state = ST_W4_HEADER;
 			st_gdata->rx_count = st_gdata->list[type]->hdr_len;
-			pr_debug("rx_count %ld\n", st_gdata->rx_count);
+			ti_st_dbg(TI_ST_DBG_CORE, "%s: rx_count %ld\n", __func__,
+						st_gdata->rx_count);
 		};
 		ptr++;
 		count--;
 	}
 done:
 	spin_unlock_irqrestore(&st_gdata->lock, flags);
-	pr_debug("done %s", __func__);
 	return;
 }
 
@@ -378,7 +372,6 @@ struct sk_buff *st_int_dequeue(struct st_data_s

*st_gdata)

drivers/misc/ti-st/st_core.c void st_int_enqueue(struct st_data_s *st_gdata,

Quoted 8 lines
drivers/misc/ti-st/st_core.c +0 -1
 {
 	struct sk_buff *returning_skb;
 
-	pr_debug("%s", __func__);
 	if (st_gdata->tx_skb != NULL) {
 		returning_skb = st_gdata->tx_skb;
 		st_gdata->tx_skb = NULL;
@@ -400,19 +393,18 @@ void st_int_enqueue(struct st_data_s *st_gdata,

struct sk_buff *skb)

drivers/misc/ti-st/st_core.c void st_int_enqueue(struct st_data_s *st_gdata,

Quoted 22 lines
drivers/misc/ti-st/st_core.c +2 -3
 {
 	unsigned long flags = 0;
 
-	pr_debug("%s", __func__);
 	spin_lock_irqsave(&st_gdata->lock, flags);
 
 	switch (st_ll_getstate(st_gdata)) {
 	case ST_LL_AWAKE:
-		pr_debug("ST LL is AWAKE, sending normally");
+		ti_st_dbg(TI_ST_DBG_CORE, "ST LL is AWAKE, sending normally");
 		skb_queue_tail(&st_gdata->txq, skb);
 		break;
 	case ST_LL_ASLEEP_TO_AWAKE:
 		skb_queue_tail(&st_gdata->tx_waitq, skb);
 		break;
 	case ST_LL_AWAKE_TO_ASLEEP:
-		pr_err("ST LL is illegal state(%ld),"
+		ti_st_err("ST LL is illegal state(%ld),"
 			   "purging received skb.", st_ll_getstate(st_gdata));
 		kfree_skb(skb);
 		break;
@@ -421,14 +413,13 @@ void st_int_enqueue(struct st_data_s *st_gdata,

struct sk_buff *skb)

drivers/misc/ti-st/st_core.c void kim_st_list_protocols(struct st_data_s

Quoted 29 lines
drivers/misc/ti-st/st_core.c +3 -4
 		st_ll_wakeup(st_gdata);
 		break;
 	default:
-		pr_err("ST LL is illegal state(%ld),"
+		ti_st_err("ST LL is illegal state(%ld),"
 			   "purging received skb.", st_ll_getstate(st_gdata));
 		kfree_skb(skb);
 		break;
 	}
 
 	spin_unlock_irqrestore(&st_gdata->lock, flags);
-	pr_debug("done %s", __func__);
 	return;
 }
 
@@ -442,10 +433,10 @@ void st_tx_wakeup(struct st_data_s *st_data)
 {
 	struct sk_buff *skb;
 	unsigned long flags;	/* for irq save flags */
-	pr_debug("%s", __func__);
+
 	/* check for sending & set flag sending here */
 	if (test_and_set_bit(ST_TX_SENDING, &st_data->tx_state)) {
-		pr_debug("ST already sending");
+		ti_st_dbg(TI_ST_DBG_CORE, "ST already sending");
 		/* keep sending */
 		set_bit(ST_TX_WAKEUP, &st_data->tx_state);
 		return;
@@ -499,25 +490,25 @@ void kim_st_list_protocols(struct st_data_s

*st_gdata, void *buf)

Quoted 182 lines
drivers/misc/ti-st/st_core.c +22 -26
  */
 long st_register(struct st_proto_s *new_proto)
 {
-	struct st_data_s	*st_gdata;
+	struct st_data_s *st_gdata;
 	long err = 0;
 	unsigned long flags = 0;
 
 	st_kim_ref(&st_gdata, 0);
-	pr_info("%s(%d) ", __func__, new_proto->chnl_id);
+	ti_st_dbg(TI_ST_DBG_CORE, "%s(%d) ", __func__, new_proto->chnl_id);
 	if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL
 	    || new_proto->reg_complete_cb == NULL) {
-		pr_err("gdata/new_proto/recv or reg_complete_cb not ready");
+		ti_st_err("gdata/new_proto/recv or reg_complete_cb not ready");
 		return -EINVAL;
 	}
 
 	if (new_proto->chnl_id >= ST_MAX_CHANNELS) {
-		pr_err("chnl_id %d not supported", new_proto->chnl_id);
+		ti_st_err("chnl_id %d not supported", new_proto->chnl_id);
 		return -EPROTONOSUPPORT;
 	}
 
 	if (st_gdata->is_registered[new_proto->chnl_id] == true) {
-		pr_err("chnl_id %d already registered", new_proto->chnl_id);
+		ti_st_err("chnl_id %d already registered", new_proto->chnl_id);
 		return -EALREADY;
 	}
 
@@ -525,7 +516,8 @@ long st_register(struct st_proto_s *new_proto)
 	spin_lock_irqsave(&st_gdata->lock, flags);
 
 	if (test_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state)) {
-		pr_info(" ST_REG_IN_PROGRESS:%d ", new_proto->chnl_id);
+		ti_st_dbg(TI_ST_DBG_CORE, " ST_REG_IN_PROGRESS:%d ",
+				  new_proto->chnl_id);
 		/* fw download in progress */
 
 		add_channel_to_table(st_gdata, new_proto);
@@ -536,7 +528,8 @@ long st_register(struct st_proto_s *new_proto)
 		spin_unlock_irqrestore(&st_gdata->lock, flags);
 		return -EINPROGRESS;
 	} else if (st_gdata->protos_registered == ST_EMPTY) {
-		pr_info(" chnl_id list empty :%d ", new_proto->chnl_id);
+		ti_st_dbg(TI_ST_DBG_CORE, " chnl_id list empty :%d ",
+				  new_proto->chnl_id);
 		set_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
 		st_recv = st_kim_recv;
 
@@ -554,7 +547,7 @@ long st_register(struct st_proto_s *new_proto)
 			clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
 			if ((st_gdata->protos_registered != ST_EMPTY) &&
 			    (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-				pr_err(" KIM failure complete callback ");
+				ti_st_err(" KIM failure complete callback ");
 				st_reg_complete(st_gdata, err);
 				clear_bit(ST_REG_PENDING, &st_gdata->st_state);
 			}
@@ -566,12 +559,12 @@ long st_register(struct st_proto_s *new_proto)
 		clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state);
 		st_recv = st_int_recv;
 
-		/* this is where all pending registration
+		/* this is where all pending registrations
 		 * are signalled to be complete by calling callback functions
 		 */
 		if ((st_gdata->protos_registered != ST_EMPTY) &&
 		    (test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-			pr_debug(" call reg complete callback ");
+			ti_st_dbg(TI_ST_DBG_CORE, " call reg complete callback ");
 			st_reg_complete(st_gdata, 0);
 		}
 		clear_bit(ST_REG_PENDING, &st_gdata->st_state);
@@ -580,7 +573,7 @@ long st_register(struct st_proto_s *new_proto)
 		 * since the above check is old
 		 */
 		if (st_gdata->is_registered[new_proto->chnl_id] == true) {
-			pr_err(" proto %d already registered ",
+			ti_st_err(" proto %d already registered ",
 				   new_proto->chnl_id);
 			spin_unlock_irqrestore(&st_gdata->lock, flags);
 			return -EALREADY;
@@ -602,7 +595,6 @@ long st_register(struct st_proto_s *new_proto)
 		spin_unlock_irqrestore(&st_gdata->lock, flags);
 		return err;
 	}
-	pr_debug("done %s(%d) ", __func__, new_proto->chnl_id);
 }
 EXPORT_SYMBOL_GPL(st_register);
 
@@ -615,18 +607,18 @@ long st_unregister(struct st_proto_s *proto)
 	unsigned long flags = 0;
 	struct st_data_s	*st_gdata;
 
-	pr_debug("%s: %d ", __func__, proto->chnl_id);
+	ti_st_dbg(TI_ST_DBG_CORE, "%s: %d ", __func__, proto->chnl_id);
 
 	st_kim_ref(&st_gdata, 0);
-	if (!st_gdata || proto->chnl_id >= ST_MAX_CHANNELS) {
-		pr_err(" chnl_id %d not supported", proto->chnl_id);
+	if (!st_gdata || !proto || proto->chnl_id >= ST_MAX_CHANNELS) {
+		ti_st_err(" chnl_id %d not supported", proto->chnl_id);
 		return -EPROTONOSUPPORT;
 	}
 
 	spin_lock_irqsave(&st_gdata->lock, flags);
 
 	if (st_gdata->is_registered[proto->chnl_id] == false) {
-		pr_err(" chnl_id %d not registered", proto->chnl_id);
+		ti_st_err(" chnl_id %d not registered", proto->chnl_id);
 		spin_unlock_irqrestore(&st_gdata->lock, flags);
 		return -EPROTONOSUPPORT;
 	}
@@ -641,7 +633,7 @@ long st_unregister(struct st_proto_s *proto)
 
 	if ((st_gdata->protos_registered == ST_EMPTY) &&
 	    (!test_bit(ST_REG_PENDING, &st_gdata->st_state))) {
-		pr_info(" all chnl_ids unregistered ");
+		ti_st_dbg(TI_ST_DBG_CORE, " all chnl_ids unregistered ");
 
 		/* stop traffic on tty */
 		if (st_gdata->tty) {
@@ -669,11 +661,11 @@ long st_write(struct sk_buff *skb)
 	st_kim_ref(&st_gdata, 0);
 	if (unlikely(skb == NULL || st_gdata == NULL
 		|| st_gdata->tty == NULL)) {
-		pr_err("data/tty unavailable to perform write");
+		ti_st_err("data/tty unavailable to perform write");
 		return -EINVAL;
 	}
 
-	pr_debug("%d to be written", skb->len);
+	ti_st_dbg(TI_ST_DBG_CORE, "%d to be written", skb->len);
 	len = skb->len;
 
 	/* st_ll to decide where to enqueue the skb */
@@ -696,7 +688,6 @@ static int st_tty_open(struct tty_struct *tty)
 {
 	int err = 0;
 	struct st_data_s *st_gdata;
-	pr_info("%s ", __func__);
 
 	st_kim_ref(&st_gdata, 0);
 	st_gdata->tty = tty;
@@ -705,8 +696,7 @@ static int st_tty_open(struct tty_struct *tty)
 	/* don't do an wakeup for now */
 	clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 
-	/* mem already allocated
-	 */
+	/* mem already allocated */
 	tty->receive_room = 65536;
 	/* Flush any pending characters in the driver and discipline. */
 	tty_ldisc_flush(tty);
@@ -716,7 +706,6 @@ static int st_tty_open(struct tty_struct *tty)
 	 * installation of N_TI_WL ldisc is complete
 	 */
 	st_kim_complete(st_gdata->kim_data);
-	pr_debug("done %s", __func__);
 	return err;
 }
 
@@ -726,8 +715,6 @@ static void st_tty_close(struct tty_struct *tty)
 	unsigned long flags = 0;
 	struct	st_data_s *st_gdata = tty->disc_data;
 
-	pr_info("%s ", __func__);
-
 	/* TODO:
 	 * if a protocol has been registered & line discipline
 	 * un-installed for some reason - what should be done ?
@@ -735,7 +722,7 @@ static void st_tty_close(struct tty_struct *tty)
 	spin_lock_irqsave(&st_gdata->lock, flags);
 	for (i = ST_BT; i < ST_MAX_CHANNELS; i++) {
 		if (st_gdata->is_registered[i] == true)
-			pr_err("%d not un-registered", i);
+			ti_st_dbg(TI_ST_DBG_CORE, "%d not un-registered", i);
 		st_gdata->list[i] = NULL;
 		st_gdata->is_registered[i] = false;
 	}

drivers/misc/ti-st/st_core.c static void st_tty_close(struct tty_struct *tty) · line 753

Quoted 8 lines
drivers/misc/ti-st/st_core.c +0 -2
@@ -761,8 +748,6 @@ static void st_tty_close(struct tty_struct *tty)
 	kfree_skb(st_gdata->rx_skb);
 	st_gdata->rx_skb = NULL;
 	spin_unlock_irqrestore(&st_gdata->lock, flags);
-
-	pr_debug("%s: done ", __func__);
 }
 
 static void st_tty_receive(struct tty_struct *tty, const unsigned

char *data,

drivers/misc/ti-st/st_core.c static void st_tty_receive(struct tty_struct *tty,

Quoted 1 line
drivers/misc/ti-st/st_core.c +0 -0
@@ -778,7 +763,6 @@ static void st_tty_receive(struct tty_struct *tty,

const unsigned char *data,

drivers/misc/ti-st/st_core.c static void st_tty_receive(struct tty_struct *tty,

Quoted 8 lines
drivers/misc/ti-st/st_core.c +0 -1
 	 * to KIM for validation
 	 */
 	st_recv(tty->disc_data, data, count);
-	pr_debug("done %s", __func__);
 }
 
 /* wake-up function called in from the TTY layer
@@ -787,7 +771,7 @@ static void st_tty_receive(struct tty_struct *tty,

const unsigned char *data,

drivers/misc/ti-st/st_kim.c static struct platform_device

Quoted 96 lines
drivers/misc/ti-st/st_core.c +10 -11
 static void st_tty_wakeup(struct tty_struct *tty)
 {
 	struct	st_data_s *st_gdata = tty->disc_data;
-	pr_debug("%s ", __func__);
+
 	/* don't do an wakeup for now */
 	clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 
@@ -798,7 +782,6 @@ static void st_tty_wakeup(struct tty_struct *tty)
 static void st_tty_flush_buffer(struct tty_struct *tty)
 {
 	struct	st_data_s *st_gdata = tty->disc_data;
-	pr_debug("%s ", __func__);
 
 	kfree_skb(st_gdata->tx_skb);
 	st_gdata->tx_skb = NULL;
@@ -826,18 +809,18 @@ int st_core_init(struct st_data_s **core_data)
 
 	err = tty_register_ldisc(N_TI_WL, &st_ldisc_ops);
 	if (err) {
-		pr_err("error registering %d line discipline %ld",
-			   N_TI_WL, err);
+		ti_st_err("error registering %d line discipline %ld",
+					N_TI_WL, err);
 		return err;
 	}
-	pr_debug("registered n_shared line discipline");
+	ti_st_dbg(TI_ST_DBG_CORE, "registered n_shared line discipline");
 
 	st_gdata = kzalloc(sizeof(struct st_data_s), GFP_KERNEL);
 	if (!st_gdata) {
-		pr_err("memory allocation failed");
+		ti_st_err("memory allocation failed");
 		err = tty_unregister_ldisc(N_TI_WL);
 		if (err)
-			pr_err("unable to un-register ldisc %ld", err);
+			ti_st_err("unable to un-register ldisc %ld", err);
 		err = -ENOMEM;
 		return err;
 	}
@@ -853,11 +836,11 @@ int st_core_init(struct st_data_s **core_data)
 
 	err = st_ll_init(st_gdata);
 	if (err) {
-		pr_err("error during st_ll initialization(%ld)", err);
+		ti_st_err("error during st_ll initialization(%ld)", err);
 		kfree(st_gdata);
 		err = tty_unregister_ldisc(N_TI_WL);
 		if (err)
-			pr_err("unable to un-register ldisc");
+			ti_st_err("unable to un-register ldisc");
 		return err;
 	}
 	*core_data = st_gdata;
@@ -870,7 +853,7 @@ void st_core_exit(struct st_data_s *st_gdata)
 	/* internal module cleanup */
 	err = st_ll_deinit(st_gdata);
 	if (err)
-		pr_err("error during deinit of ST LL %ld", err);
+		ti_st_err("error during deinit of ST LL %ld", err);
 
 	if (st_gdata != NULL) {
 		/* Free ST Tx Qs and skbs */
@@ -881,7 +864,7 @@ void st_core_exit(struct st_data_s *st_gdata)
 		/* TTY ldisc cleanup */
 		err = tty_unregister_ldisc(N_TI_WL);
 		if (err)
-			pr_err("unable to un-register ldisc %ld", err);
+			ti_st_err("unable to un-register ldisc %ld", err);
 		/* free the global data pointer */
 		kfree(st_gdata);
 	}
drivers/misc/ti-st/st_kim.c +5 -0
index a7a861c..f6f6c30 100644
@@ -32,6 +32,7 @@
 #include <linux/sched.h>
 #include <linux/sysfs.h>
 #include <linux/tty.h>
+#include "debug.h"
 
 #include <linux/skbuff.h>
 #include <linux/ti_wilink_st.h>
@@ -41,6 +42,10 @@
 #define MAX_ST_DEVICES	3	/* Imagine 1 on each UART for now */
 static struct platform_device *st_kim_devices[MAX_ST_DEVICES];
 
+/* if CONFIG_TI_ST_DEBUG is defined, enable all logs by default */
+unsigned short debug_mask = 0xffff;
+module_param(debug_mask, ushort, 0644);
+
 /**********************************************************************/
 /* internal functions */
 
@@ -54,7 +59,9 @@ static struct platform_device

*st_kim_devices[MAX_ST_DEVICES];

drivers/misc/ti-st/st_kim.c void validate_firmware_response(struct kim_data_s

Quoted 11 lines
drivers/misc/ti-st/st_kim.c +3 -1
  */
 static struct platform_device *st_get_plat_device(int id)
 {
-	return st_kim_devices[id];
+	if (id < MAX_ST_DEVICES)
+		return st_kim_devices[id];
+	return NULL;
 }
 
 /**
@@ -67,8 +74,8 @@ void validate_firmware_response(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static inline int kim_check_data_len(struct

Quoted 11 lines
drivers/misc/ti-st/st_kim.c +2 -2
 {
 	struct sk_buff *skb = kim_gdata->rx_skb;
 	if (unlikely(skb->data[5] != 0)) {
-		pr_err("no proper response during fw download");
-		pr_err("data6 %x", skb->data[5]);
+		ti_st_err("no proper response during fw download");
+		ti_st_err("response num: %x", skb->data[5]);
 		kfree_skb(skb);
 		return;		/* keep waiting for the proper response */
 	}
@@ -84,7 +91,7 @@ static inline int kim_check_data_len(struct

kim_data_s *kim_gdata, int len)

drivers/misc/ti-st/st_kim.c static inline int kim_check_data_len(struct

Quoted 9 lines
drivers/misc/ti-st/st_kim.c +1 -1
 {
 	register int room = skb_tailroom(kim_gdata->rx_skb);
 
-	pr_debug("len %d room %d", len, room);
+	ti_st_dbg(TI_ST_DBG_KIM, "%s: len %d room %d", __func__, len, room);
 
 	if (!len) {
 		validate_firmware_response(kim_gdata);
@@ -92,8 +99,7 @@ static inline int kim_check_data_len(struct

kim_data_s *kim_gdata, int len)

drivers/misc/ti-st/st_kim.c static long read_local_version(struct kim_data_s

Quoted 73 lines
drivers/misc/ti-st/st_kim.c +8 -11
 		/* Received packet's payload length is larger.
 		 * We can't accommodate it in created skb.
 		 */
-		pr_err("Data length is too large len %d room %d", len,
-			   room);
+		ti_st_err("Data length is too large len %d room %d", len, room);
 		kfree_skb(kim_gdata->rx_skb);
 	} else {
 		/* Packet header has non-zero payload length and
@@ -126,11 +132,10 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
 	int len = 0, type = 0;
 	unsigned char *plen;
 
-	pr_debug("%s", __func__);
 	/* Decode received bytes here */
 	ptr = data;
 	if (unlikely(ptr == NULL)) {
-		pr_err(" received null from TTY ");
+		ti_st_err(" received null from TTY ");
 		return;
 	}
 
@@ -149,7 +154,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
 			switch (kim_gdata->rx_state) {
 				/* Waiting for complete packet ? */
 			case ST_W4_DATA:
-				pr_debug("Complete pkt received");
+				ti_st_dbg(TI_ST_DBG_KIM, "Complete pkt received");
 				validate_firmware_response(kim_gdata);
 				kim_gdata->rx_state = ST_W4_PACKET_TYPE;
 				kim_gdata->rx_skb = NULL;
@@ -158,11 +163,11 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
 			case ST_W4_HEADER:
 				plen =
 				(unsigned char *)&kim_gdata->rx_skb->data[1];
-				pr_debug("event hdr: plen 0x%02x\n", *plen);
+				ti_st_dbg(TI_ST_DBG_KIM, "event hdr: plen 0x%02x\n", *plen);
 				kim_check_data_len(kim_gdata, *plen);
 				continue;
-			}	/* end of switch */
-		}		/* end of if rx_state */
+			}
+		}
 		switch (*ptr) {
 			/* Bluetooth event packet? */
 		case 0x04:
@@ -171,7 +176,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
 			type = *ptr;
 			break;
 		default:
-			pr_info("unknown packet");
+			ti_st_dbg(TI_ST_DBG_KIM, "%s: unknown packet", __func__);
 			ptr++;
 			count--;
 			continue;
@@ -181,7 +186,7 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
 		kim_gdata->rx_skb =
 			alloc_skb(1024+8, GFP_ATOMIC);
 		if (!kim_gdata->rx_skb) {
-			pr_err("can't allocate mem for new packet");
+			ti_st_err("can't allocate mem for new packet");
 			kim_gdata->rx_state = ST_W4_PACKET_TYPE;
 			kim_gdata->rx_count = 0;
 			return;
@@ -189,7 +194,6 @@ void kim_int_recv(struct kim_data_s *kim_gdata,
 		skb_reserve(kim_gdata->rx_skb, 8);
 		kim_gdata->rx_skb->cb[0] = 4;
 		kim_gdata->rx_skb->cb[1] = 0;
-
 	}
 	return;
 }
@@ -199,17 +203,15 @@ static long read_local_version(struct kim_data_s

*kim_gdata, char *bts_scr_name)

drivers/misc/ti-st/st_kim.c static long read_local_version(struct kim_data_s

Quoted 20 lines
drivers/misc/ti-st/st_kim.c +2 -4
 	unsigned short version = 0, chip = 0, min_ver = 0, maj_ver = 0;
 	const char read_ver_cmd[] = { 0x01, 0x01, 0x10, 0x00 };
 
-	pr_debug("%s", __func__);
-
 	INIT_COMPLETION(kim_gdata->kim_rcvd);
 	if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) {
-		pr_err("kim: couldn't write 4 bytes");
+		ti_st_err("kim: couldn't write 4 bytes");
 		return -EIO;
 	}
 
 	if (!wait_for_completion_timeout
 	    (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
-		pr_err(" waiting for ver info- timed out ");
+		ti_st_err(" waiting for ver info - timed out ");
 		return -ETIMEDOUT;
 	}
 	INIT_COMPLETION(kim_gdata->kim_rcvd);
@@ -232,7 +234,8 @@ static long read_local_version(struct kim_data_s

*kim_gdata, char *bts_scr_name)

drivers/misc/ti-st/st_kim.c void skip_change_remote_baud(unsigned char

Quoted 10 lines
drivers/misc/ti-st/st_kim.c +2 -1
 	kim_gdata->version.maj_ver = maj_ver;
 	kim_gdata->version.min_ver = min_ver;
 
-	pr_info("%s", bts_scr_name);
+	ti_st_dbg(TI_ST_DBG_KIM, "local_version - %s", bts_scr_name);
+
 	return 0;
 }
 
@@ -245,14 +248,14 @@ void skip_change_remote_baud(unsigned char

**ptr, long *len)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 17 lines
drivers/misc/ti-st/st_kim.c +2 -2
 		((struct bts_action *) cur_action)->size;
 
 	if (((struct bts_action *) nxt_action)->type != ACTION_WAIT_EVENT) {
-		pr_err("invalid action after change remote baud command");
+		ti_st_err("invalid action after change remote baud command");
 	} else {
 		*ptr = *ptr + sizeof(struct bts_action) +
 			((struct bts_action *)cur_action)->size;
 		*len = *len - (sizeof(struct bts_action) +
 				((struct bts_action *)cur_action)->size);
 		/* warn user on not commenting these in firmware */
-		pr_warn("skipping the wait event of change remote baud");
+		ti_st_warn("skipping the wait event of change remote baud");
 	}
 }
 
@@ -274,7 +277,7 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 9 lines
drivers/misc/ti-st/st_kim.c +1 -1
 	err = read_local_version(kim_gdata, bts_scr_name);
 	if (err != 0) {
-		pr_err("kim: failed to read local ver");
+		ti_st_err("kim: failed to read local ver");
 		return err;
 	}
 	err =
@@ -282,10 +285,11 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 14 lines
drivers/misc/ti-st/st_kim.c +3 -2
 			     &kim_gdata->kim_pdev->dev);
 	if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) ||
 		     (kim_gdata->fw_entry->size == 0))) {
-		pr_err(" request_firmware failed(errno %ld) for %s", err,
-			   bts_scr_name);
+		ti_st_err(" request_firmware failed(errno %ld) for %s", err,
+			      bts_scr_name);
 		return -EINVAL;
 	}
+
 	ptr = (void *)kim_gdata->fw_entry->data;
 	len = kim_gdata->fw_entry->size;
 	/* bts_header to remove out magic number and
@@ -295,21 +299,21 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 28 lines
drivers/misc/ti-st/st_kim.c +6 -6
 	len -= sizeof(struct bts_header);
 
 	while (len > 0 && ptr) {
-		pr_debug(" action size %d, type %d ",
-			   ((struct bts_action *)ptr)->size,
-			   ((struct bts_action *)ptr)->type);
+		ti_st_dbg(TI_ST_DBG_KIM, " action size %d, type %d ",
+					((struct bts_action *)ptr)->size,
+					((struct bts_action *)ptr)->type);
 
 		switch (((struct bts_action *)ptr)->type) {
 		case ACTION_SEND_COMMAND:	/* action send */
-			pr_debug("S");
+			ti_st_dbg(TI_ST_DBG_KIM, "%s: send command", __func__);
 			action_ptr = &(((struct bts_action *)ptr)->data[0]);
 			if (unlikely
 			    (((struct hci_command *)action_ptr)->opcode ==
 			     0xFF36)) {
 				/* ignore remote change
 				 * baud rate HCI VS command */
-				pr_warn("change remote baud"
-				    " rate command in firmware");
+				ti_st_warn("change remote baud rate command"
+						" in firmware");
 				skip_change_remote_baud(&ptr, &len);
 				break;
 			}
@@ -323,8 +327,8 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 11 lines
drivers/misc/ti-st/st_kim.c +2 -2
 				wr_room_space =
 					st_get_uart_wr_room(kim_gdata->core_data);
 				if (wr_room_space < 0) {
-					pr_err("Unable to get free "
-							"space info from uart tx buffer");
+					ti_st_err("Unable to get free space "
+						"info from uart tx buffer");
 					release_firmware(kim_gdata->fw_entry);
 					return wr_room_space;
 				}
@@ -334,7 +338,7 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 9 lines
drivers/misc/ti-st/st_kim.c +1 -1
 			/* Timeout happened ? */
 			if (time_after_eq(jiffies, timeout)) {
-				pr_err("Timeout while waiting for free "
+				ti_st_err("Timeout while waiting for free "
 						"free space in uart tx buffer");
 				release_firmware(kim_gdata->fw_entry);
 				return -ETIMEDOUT;
@@ -361,19 +365,19 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 24 lines
drivers/misc/ti-st/st_kim.c +4 -4
 			 * and requested command write size
 			 */
 			if (err != cmd_size) {
-				pr_err("Number of bytes written to uart "
-						"tx buffer are not matching with "
+				ti_st_err("Number of bytes written to uart tx "
+						"buffer are not matching with "
 						"requested cmd write size");
 				release_firmware(kim_gdata->fw_entry);
 				return -EIO;
 			}
 			break;
 		case ACTION_WAIT_EVENT:  /* wait */
-			pr_debug("W");
+			ti_st_dbg(TI_ST_DBG_KIM, "%s: wait event", __func__);
 			if (!wait_for_completion_timeout
 					(&kim_gdata->kim_rcvd,
 					 msecs_to_jiffies(CMD_RESP_TIME))) {
-				pr_err("response timeout during fw download ");
+				ti_st_err("response timeout during fw download");
 				/* timed out */
 				release_firmware(kim_gdata->fw_entry);
 				return -ETIMEDOUT;
@@ -381,7 +385,7 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_kim.c static long download_firmware(struct kim_data_s

Quoted 9 lines
drivers/misc/ti-st/st_kim.c +1 -1
 			INIT_COMPLETION(kim_gdata->kim_rcvd);
 			break;
 		case ACTION_DELAY:	/* sleep */
-			pr_info("sleep command in scr");
+			ti_st_dbg(TI_ST_DBG_KIM, "%s: sleep command", __func__);
 			action_ptr = &(((struct bts_action *)ptr)->data[0]);
 			mdelay(((struct bts_action_delay *)action_ptr)->msec);
 			break;
@@ -395,6 +399,7 @@ static long download_firmware(struct kim_data_s

*kim_gdata)

drivers/misc/ti-st/st_ll.c static void ll_device_want_to_sleep(struct

Quoted 190 lines
drivers/misc/ti-st/st_kim.c +21 -23
 	}
 	/* fw download complete */
 	release_firmware(kim_gdata->fw_entry);
+	ti_st_dbg(TI_ST_DBG_KIM, "firmware dld compleated");
 	return 0;
 }
 
@@ -446,7 +451,6 @@ long st_kim_start(void *kim_data)
 	struct ti_st_plat_data	*pdata;
 	struct kim_data_s	*kim_gdata = (struct kim_data_s *)kim_data;
 
-	pr_info(" %s", __func__);
 	pdata = kim_gdata->kim_pdev->dev.platform_data;
 
 	do {
@@ -463,7 +467,6 @@ long st_kim_start(void *kim_data)
 		INIT_COMPLETION(kim_gdata->ldisc_installed);
 		/* send notification to UIM */
 		kim_gdata->ldisc_install = 1;
-		pr_info("ldisc_install = 1");
 		sysfs_notify(&kim_gdata->kim_pdev->dev.kobj,
 				NULL, "install");
 		/* wait for ldisc to be installed */
@@ -472,17 +475,17 @@ long st_kim_start(void *kim_data)
 		if (!err) {
 			/* ldisc installation timeout,
 			 * flush uart, power cycle BT_EN */
-			pr_err("ldisc installation timeout");
+			ti_st_err("ldisc installation timeout");
 			err = st_kim_stop(kim_gdata);
 			continue;
 		} else {
 			/* ldisc installed now */
-			pr_info("line discipline installed");
+			ti_st_dbg(TI_ST_DBG_KIM, "line discipline installed");
 			err = download_firmware(kim_gdata);
 			if (err != 0) {
 				/* ldisc installed but fw download failed,
 				 * flush uart & power cycle BT_EN */
-				pr_err("download firmware failed");
+				ti_st_err("download firmware failed");
 				err = st_kim_stop(kim_gdata);
 				continue;
 			} else {	/* on success don't retry */
@@ -521,7 +524,6 @@ long st_kim_stop(void *kim_data)
 	}
 
 	/* send uninstall notification to UIM */
-	pr_info("ldisc_install = 0");
 	kim_gdata->ldisc_install = 0;
 	sysfs_notify(&kim_gdata->kim_pdev->dev.kobj, NULL, "install");
 
@@ -529,7 +531,7 @@ long st_kim_stop(void *kim_data)
 	err = wait_for_completion_timeout(&kim_gdata->ldisc_installed,
 			msecs_to_jiffies(LDISC_TIME));
 	if (!err) {		/* timeout */
-		pr_err(" timed out waiting for ldisc to be un-installed");
+		ti_st_err("timed out waiting for ldisc to be un-installed");
 		return -ETIMEDOUT;
 	}
 
@@ -578,9 +580,9 @@ static ssize_t store_dev_name(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t count)
 {
 	struct kim_data_s *kim_data = dev_get_drvdata(dev);
-	pr_debug("storing dev name >%s<", buf);
+	ti_st_dbg(TI_ST_DBG_KIM, "storing dev name >%s<", buf);
 	strncpy(kim_data->dev_name, buf, count);
-	pr_debug("stored dev name >%s<", kim_data->dev_name);
+	ti_st_dbg(TI_ST_DBG_KIM, "stored dev name >%s<", kim_data->dev_name);
 	return count;
 }
 
@@ -588,9 +590,9 @@ static ssize_t store_baud_rate(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t count)
 {
 	struct kim_data_s *kim_data = dev_get_drvdata(dev);
-	pr_debug("storing baud rate >%s<", buf);
+	ti_st_dbg(TI_ST_DBG_KIM, "storing baud rate >%s<", buf);
 	sscanf(buf, "%ld", &kim_data->baud_rate);
-	pr_debug("stored baud rate >%ld<", kim_data->baud_rate);
+	ti_st_dbg(TI_ST_DBG_KIM, "stored baud rate >%ld<", kim_data->baud_rate);
 	return count;
 }
 #endif	/* if DEBUG */
@@ -718,14 +720,14 @@ static int kim_probe(struct platform_device *pdev)
 
 	kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC);
 	if (!kim_gdata) {
-		pr_err("no mem to allocate");
+		ti_st_err("no mem to allocate");
 		return -ENOMEM;
 	}
 	dev_set_drvdata(&pdev->dev, kim_gdata);
 
 	status = st_core_init(&kim_gdata->core_data);
 	if (status != 0) {
-		pr_err(" ST core init failed");
+		ti_st_err(" ST core init failed");
 		return -EIO;
 	}
 	/* refer to itself */
@@ -735,14 +737,14 @@ static int kim_probe(struct platform_device *pdev)
 	kim_gdata->nshutdown = pdata->nshutdown_gpio;
 	status = gpio_request(kim_gdata->nshutdown, "kim");
 	if (unlikely(status)) {
-		pr_err(" gpio %ld request failed ", kim_gdata->nshutdown);
+		ti_st_err(" gpio %ld request failed ", kim_gdata->nshutdown);
 		return status;
 	}
 
 	/* Configure nShutdown GPIO as output=0 */
 	status = gpio_direction_output(kim_gdata->nshutdown, 0);
 	if (unlikely(status)) {
-		pr_err(" unable to configure gpio %ld", kim_gdata->nshutdown);
+		ti_st_err("unable to configure gpio %ld", kim_gdata->nshutdown);
 		return status;
 	}
 	/* get reference of pdev for request_firmware
@@ -753,7 +755,7 @@ static int kim_probe(struct platform_device *pdev)
 
 	status = sysfs_create_group(&pdev->dev.kobj, &uim_attr_grp);
 	if (status) {
-		pr_err("failed to create sysfs entries");
+		ti_st_err("failed to create sysfs entries");
 		return status;
 	}
 
@@ -761,20 +763,20 @@ static int kim_probe(struct platform_device *pdev)
 	strncpy(kim_gdata->dev_name, pdata->dev_name, UART_DEV_NAME_LEN);
 	kim_gdata->flow_cntrl = pdata->flow_cntrl;
 	kim_gdata->baud_rate = pdata->baud_rate;
-	pr_info("sysfs entries created\n");
+	ti_st_dbg(TI_ST_DBG_KIM, "sysfs entries created\n");
 
 	kim_debugfs_dir = debugfs_create_dir("ti-st", NULL);
 	if (IS_ERR(kim_debugfs_dir)) {
-		pr_err(" debugfs entries creation failed ");
+		ti_st_err(" debugfs entries creation failed ");
 		kim_debugfs_dir = NULL;
 		return -EIO;
 	}
 
 	debugfs_create_file("version", S_IRUGO, kim_debugfs_dir,
-				kim_gdata, &version_debugfs_fops);
+						kim_gdata, &version_debugfs_fops);
 	debugfs_create_file("protocols", S_IRUGO, kim_debugfs_dir,
-				kim_gdata, &list_debugfs_fops);
-	pr_info(" debugfs entries created ");
+						kim_gdata, &list_debugfs_fops);
+	ti_st_dbg(TI_ST_DBG_KIM, " debugfs entries created ");
 	return 0;
 }
 
@@ -790,11 +792,11 @@ static int kim_remove(struct platform_device *pdev)
 	 * nShutdown gpio from the system
 	 */
 	gpio_free(pdata->nshutdown_gpio);
-	pr_info("nshutdown GPIO Freed");
+	ti_st_dbg(TI_ST_DBG_KIM, "nshutdown GPIO Freed");
 
 	debugfs_remove_recursive(kim_debugfs_dir);
 	sysfs_remove_group(&pdev->dev.kobj, &uim_attr_grp);
-	pr_info("sysfs entries removed");
+	ti_st_dbg(TI_ST_DBG_KIM, "sysfs entries removed");
 
 	kim_gdata->kim_pdev = NULL;
 	st_core_exit(kim_gdata->core_data);
drivers/misc/ti-st/st_ll.c +2 -1
index 1ff460a..ccdad8b 100644
@@ -24,6 +24,7 @@
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/ti_wilink_st.h>
+#include "debug.h"
 
 /**********************************************************************/
 /* internal functions */
@@ -31,7 +32,7 @@ static void send_ll_cmd(struct st_data_s *st_data,
 	unsigned char cmd)
 {
 
-	pr_debug("%s: writing %x", __func__, cmd);
+	ti_st_dbg(TI_ST_DBG_HCI_LL, "%s: writing %x", __func__, cmd);
 	st_int_write(st_data, &cmd, 1);
 	return;
 }
@@ -41,11 +42,11 @@ static void ll_device_want_to_sleep(struct

st_data_s *st_data)

drivers/misc/ti-st/st_ll.c static void ll_device_want_to_wakeup(struct

Quoted 15 lines
drivers/misc/ti-st/st_ll.c +3 -3
 	struct kim_data_s	*kim_data;
 	struct ti_st_plat_data	*pdata;
 
-	pr_debug("%s", __func__);
+	ti_st_dbg(TI_ST_DBG_HCI_LL, "%s", __func__);
 	/* sanity check */
 	if (st_data->ll_state != ST_LL_AWAKE)
-		pr_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
-			  "in state %ld", st_data->ll_state);
+		ti_st_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND"
+					"in state %ld", st_data->ll_state);
 
 	send_ll_cmd(st_data, LL_SLEEP_ACK);
 	/* update state */
@@ -70,15 +71,15 @@ static void ll_device_want_to_wakeup(struct

st_data_s *st_data)

drivers/misc/ti-st/st_ll.c unsigned long st_ll_sleep_state(struct st_data_s

Quoted 35 lines
drivers/misc/ti-st/st_ll.c +4 -5
 		break;
 	case ST_LL_ASLEEP_TO_AWAKE:
 		/* duplicate wake_ind */
-		pr_err("duplicate wake_ind while waiting for Wake ack");
+		ti_st_err("duplicate wake_ind while waiting for Wake ack");
 		break;
 	case ST_LL_AWAKE:
 		/* duplicate wake_ind */
-		pr_err("duplicate wake_ind already AWAKE");
+		ti_st_err("duplicate wake_ind already AWAKE");
 		break;
 	case ST_LL_AWAKE_TO_ASLEEP:
 		/* duplicate wake_ind */
-		pr_err("duplicate wake_ind");
+		ti_st_err("duplicate wake_ind");
 		break;
 	}
 	/* update state */
@@ -116,14 +117,13 @@ void st_ll_wakeup(struct st_data_s *ll)
 		ll->ll_state = ST_LL_ASLEEP_TO_AWAKE;
 	} else {
 		/* don't send the duplicate wake_indication */
-		pr_err(" Chip already AWAKE ");
+		ti_st_err(" Chip already AWAKE ");
 	}
 }
 
 /* called when ST Core wants the state */
 unsigned long st_ll_getstate(struct st_data_s *ll)
 {
-	pr_debug(" returning state %ld", ll->ll_state);
 	return ll->ll_state;
 }
 
@@ -133,22 +133,22 @@ unsigned long st_ll_sleep_state(struct st_data_s

*st_data,

Quoted 27 lines
drivers/misc/ti-st/st_ll.c +5 -5
 {
 	switch (cmd) {
 	case LL_SLEEP_IND:	/* sleep ind */
-		pr_debug("sleep indication recvd");
+		ti_st_dbg(TI_ST_DBG_HCI_LL, "sleep indication recvd");
 		ll_device_want_to_sleep(st_data);
 		break;
 	case LL_SLEEP_ACK:	/* sleep ack */
-		pr_err("sleep ack rcvd: host shouldn't");
+		ti_st_err("sleep ack rcvd: host shouldn't");
 		break;
 	case LL_WAKE_UP_IND:	/* wake ind */
-		pr_debug("wake indication recvd");
+		ti_st_dbg(TI_ST_DBG_HCI_LL, "wake indication recvd");
 		ll_device_want_to_wakeup(st_data);
 		break;
 	case LL_WAKE_UP_ACK:	/* wake ack */
-		pr_debug("wake ack rcvd");
+		ti_st_dbg(TI_ST_DBG_HCI_LL, "wake ack rcvd");
 		st_data->ll_state = ST_LL_AWAKE;
 		break;
 	default:
-		pr_err(" unknown input/state ");
+		ti_st_err(" unknown input/state ");
 		return -EINVAL;
 	}
 	return 0;
maintainer
#7 lore raw
Quoted 7 lines · Mircea Gherzan

This is what I get now (with no debug) when loading the btwilink module that uses ti-st:

[  129.567382] (stk) :change remote baud rate command in firmware
[  129.573577] (stk) :skipping the wait event of change remote baud
Quoted 8 lines

This is:
1. too "verbose" => these 2 prints should belong to debug
2. poorly formated
3. not telling me which driver generated this output
4. not giving me the version of the firmware that was loaded.

To address 2 and 3, please remove the the "(stc)" / "(stk)" prefixes and use instead the quite widespread prefix KBUILD_MODNAME ": "

No, just use the proper dev_*() functions instead, it will tell you exactly what driver and device emitted the message, that is what it is there for.

thanks,

greg k-h

#8 lore raw
Quoted 12 lines · Greg KH
Quoted 11 lines · Mircea Gherzan

This is what I get now (with no debug) when loading the btwilink module that uses ti-st:

[  129.567382] (stk) :change remote baud rate command in firmware
[  129.573577] (stk) :skipping the wait event of change remote baud

This is:
1. too "verbose" => these 2 prints should belong to debug
2. poorly formated
3. not telling me which driver generated this output
4. not giving me the version of the firmware that was loaded.
To address 2 and 3, please remove the the "(stc)" / "(stk)" prefixes and use instead the quite widespread prefix KBUILD_MODNAME ": "

Quoted 3 lines

No, just use the proper dev_*() functions instead, it will tell you exactly what driver and device emitted the message, that is what it is there for.

I generally concur though there might be instances where no struct device * is available and pr_<level> is a good alternative for those cases.

maintainer
#9 lore raw
Quoted 13 lines · Joe Perches
Quoted 12 lines · Greg KH
Quoted 11 lines · Mircea Gherzan

This is what I get now (with no debug) when loading the btwilink module that uses ti-st:

[  129.567382] (stk) :change remote baud rate command in firmware
[  129.573577] (stk) :skipping the wait event of change remote baud

This is:
1. too "verbose" => these 2 prints should belong to debug
2. poorly formated
3. not telling me which driver generated this output
4. not giving me the version of the firmware that was loaded.
To address 2 and 3, please remove the the "(stc)" / "(stk)" prefixes and use instead the quite widespread prefix KBUILD_MODNAME ": "

Quoted 7 lines
Quoted 3 lines

No, just use the proper dev_*() functions instead, it will tell you exactly what driver and device emitted the message, that is what it is there for.

I generally concur though there might be instances where no struct device * is available and pr_<level> is a good alternative for those cases.

I agree.