*/\r
static u32 curTrans_mode; /* SIR, MIR, FIR */\r
static u32 curTrans_speed; /* 2.4kbps, 9.6kbps,..., 4Mbps */\r
-static u32 curTrans_way; /* idle, send, receive, auto-multi-receive, multi-receive, multi-send */\r
+static u32 curTrans_way; /* idle, send, receive, mir-receive, mir-send, fir-receive, fir-send, auto-multi-receive, multi-receive, multi-send */\r
static u16 curFIT; /* FIT2,1,0 in PWR/FIT register */\r
\r
/*---------------------------------------------------------------------------\r
case BU92725GUW_IDLE:\r
break;\r
case BU92725GUW_REV:\r
- if (mode != BU92725GUW_SIR)\r
- curTrans_way = BU92725GUW_AUTO_MULTI_REV;\r
+ if (mode == BU92725GUW_MIR)\r
+ curTrans_way = BU92725GUW_MIR_REV;\r
+ else if (mode == BU92725GUW_FIR)\r
+ //curTrans_way = BU92725GUW_AUTO_MULTI_REV;\r
//curTrans_way = BU92725GUW_MULTI_REV;\r
+ curTrans_way = BU92725GUW_FIR_REV;\r
break;\r
case BU92725GUW_SEND:\r
- if (mode != BU92725GUW_SIR)\r
- curTrans_way = BU92725GUW_MULTI_SEND;\r
+ if (mode == BU92725GUW_MIR)\r
+ curTrans_way = BU92725GUW_MIR_SEND;\r
+ else if (mode == BU92725GUW_FIR)\r
+ //curTrans_way = BU92725GUW_MULTI_SEND;\r
+ curTrans_way = BU92725GUW_FIR_SEND;\r
break;\r
- case BU92725GUW_AUTO_MULTI_REV:\r
+ case BU92725GUW_MIR_REV:\r
if (mode == BU92725GUW_SIR)\r
curTrans_way = BU92725GUW_REV;\r
+ else if (mode == BU92725GUW_FIR)\r
+ //curTrans_way = BU92725GUW_AUTO_MULTI_REV;\r
+ //curTrans_way = BU92725GUW_MULTI_REV;\r
+ curTrans_way = BU92725GUW_FIR_REV;\r
+ break;\r
+ case BU92725GUW_MIR_SEND:\r
+ if (mode == BU92725GUW_SIR)\r
+ curTrans_way = BU92725GUW_SEND;\r
+ else if (mode == BU92725GUW_FIR)\r
+ //curTrans_way = BU92725GUW_MULTI_SEND;\r
+ curTrans_way = BU92725GUW_FIR_SEND;\r
break;\r
- case BU92725GUW_MULTI_REV: //not used now\r
+ case BU92725GUW_FIR_REV:\r
+ case BU92725GUW_AUTO_MULTI_REV:\r
+ case BU92725GUW_MULTI_REV:\r
if (mode == BU92725GUW_SIR)\r
curTrans_way = BU92725GUW_REV;\r
+ else if (mode == BU92725GUW_MIR)\r
+ curTrans_way = BU92725GUW_MIR_REV;\r
break;\r
+ case BU92725GUW_FIR_SEND:\r
case BU92725GUW_MULTI_SEND:\r
if (mode == BU92725GUW_SIR)\r
curTrans_way = BU92725GUW_SEND;\r
+ else if (mode == BU92725GUW_MIR)\r
+ curTrans_way = BU92725GUW_MIR_SEND;\r
break;\r
}\r
\r
*/\r
if (mode == BU92725GUW_SIR)\r
BU92725GUW_set_trans_way(BU92725GUW_SEND);\r
+ else if (mode == BU92725GUW_MIR)\r
+ BU92725GUW_set_trans_way(BU92725GUW_MIR_SEND);\r
else\r
- BU92725GUW_set_trans_way(BU92725GUW_MULTI_SEND);\r
-\r
+ //BU92725GUW_set_trans_way(BU92725GUW_MULTI_SEND);\r
+ BU92725GUW_set_trans_way(BU92725GUW_FIR_SEND);\r
//BU92725GUW_clr_fifo();\r
\r
return 0;\r
\r
if (curTrans_mode == BU92725GUW_SIR)\r
BU92725GUW_set_trans_way(BU92725GUW_REV);\r
+ else if (curTrans_mode == BU92725GUW_MIR)\r
+ BU92725GUW_set_trans_way(BU92725GUW_MIR_REV);\r
else\r
- BU92725GUW_set_trans_way(BU92725GUW_AUTO_MULTI_REV);\r
+ //BU92725GUW_set_trans_way(BU92725GUW_AUTO_MULTI_REV);\r
//BU92725GUW_set_trans_way(BU92725GUW_MULTI_REV);\r
+ BU92725GUW_set_trans_way(BU92725GUW_FIR_REV);\r
}\r
\r
int irda_hw_get_mode(void)\r
{\r
return curTrans_way;\r
- \r
+#if 0 \r
u16 val = 0;\r
val = BU92725GUW_READ_REG(REG_TRCR_ADDR);\r
RK29IR_DBG("line %d: enter %s, REG_TRCR_ADDR = 0x%x\n", __LINE__, __FUNCTION__, val);\r
\r
return (val& (REG_TRCR_TX_EN | REG_TRCR_RX_EN));\r
+#endif\r
}\r
\r
/*\r
RK29IR_DBG("line %d: enter %s\n", __LINE__, __FUNCTION__);\r
\r
/* get data count from FLV or FLVII */\r
- if (curTrans_way == BU92725GUW_REV)\r
+ if ((curTrans_way == BU92725GUW_REV) || (curTrans_way == BU92725GUW_MIR_REV)\r
+ || (curTrans_way == BU92725GUW_FIR_REV))\r
len = BU92725GUW_READ_REG(REG_FLV_ADDR);\r
else\r
len = BU92725GUW_READ_REG(REG_FLVII_ADDR);\r
}\r
\r
/* restart receive mode under SIR */\r
- if (curTrans_way == BU92725GUW_REV) {\r
+ if ((curTrans_way == BU92725GUW_REV) || (curTrans_way == BU92725GUW_MIR_REV)\r
+ || (curTrans_way == BU92725GUW_FIR_REV)){\r
BU92725GUW_WRITE_REG(REG_TRCR_ADDR, 0x0000);\r
BU92725GUW_WRITE_REG(REG_TRCR_ADDR, REG_TRCR_RX_EN);\r
}\r
BU92725GUW_WRITE_REG(REG_FTLV_ADDR, len);\r
\r
/* set TRCR:TX_EN under normal send mode */\r
- if (curTrans_way == BU92725GUW_SEND) {//SIR\r
+ if ((curTrans_way == BU92725GUW_SEND) || (curTrans_way == BU92725GUW_MIR_SEND)\r
+ || (curTrans_way == BU92725GUW_FIR_SEND)) {\r
BU92725GUW_WRITE_REG(REG_TRCR_ADDR, REG_TRCR_TX_EN);\r
}\r
\r
val = 0x0000;\r
break;\r
case BU92725GUW_REV:\r
+ case BU92725GUW_MIR_REV: \r
+ case BU92725GUW_FIR_REV:\r
val = REG_TRCR_RX_EN;\r
break;\r
- case BU92725GUW_SEND:\r
- val = 0x0000;\r
- break;\r
case BU92725GUW_AUTO_MULTI_REV:\r
val = REG_TRCR_RX_EN | REG_TRCR_AUTO_FLV_CP;\r
break;\r
- case BU92725GUW_MULTI_REV: //not used\r
- val = REG_TRCR_RX_EN | REG_TRCR_RX_CON;\r
+ case BU92725GUW_MULTI_REV: \r
+ val = REG_TRCR_RX_EN | REG_TRCR_RX_CON;//FIR\r
break;\r
+ case BU92725GUW_SEND:\r
+ case BU92725GUW_MIR_SEND:\r
+ case BU92725GUW_FIR_SEND:\r
+ val = 0x0000;\r
+ break; \r
case BU92725GUW_MULTI_SEND:\r
val = REG_TRCR_TX_CON;\r
break;\r
case BU92725GUW_REV: /* SIR use */\r
val = REG_INT_EOFRX | REG_INT_TO | REG_INT_OE | REG_INT_FE; //IER1, 2, 5, 7\r
break;\r
-\r
- case BU92725GUW_SEND: /* SIR use */\r
- val = REG_INT_TXE; //IER3\r
+ \r
+ case BU92725GUW_MIR_REV: /* MIR use */\r
+ val = REG_INT_STFRX | REG_INT_TO | REG_INT_OE | REG_INT_EOF \r
+ | REG_INT_AC | REG_INT_DECE; //IER1,2, 5, 6, 7\r
break;\r
-\r
+ \r
+ case BU92725GUW_FIR_REV: /* FIR use */\r
+ val = REG_INT_STFRX | REG_INT_TO | REG_INT_CRC | REG_INT_OE | REG_INT_EOF \r
+ | REG_INT_AC | REG_INT_DECE; //IER1,2, 4, 5, 6, 7\r
+ break;\r
+ \r
case BU92725GUW_MULTI_REV: /* not used */\r
val = REG_INT_STFRX | REG_INT_TO | REG_INT_CRC | REG_INT_OE | REG_INT_EOF | REG_INT_AC | REG_INT_DECE | \r
REG_INT_RDOE | REG_INT_DEX | REG_INT_RDUE; //IER1,2, 4, 5, 6, 7, 8, 9, 10\r
break;\r
-\r
+ \r
case BU92725GUW_AUTO_MULTI_REV: /* M/FIR use */\r
val = REG_INT_TO | REG_INT_CRC | REG_INT_OE | REG_INT_EOF | REG_INT_AC | REG_INT_DECE | \r
REG_INT_RDOE | REG_INT_DEX | REG_INT_RDE; //IER2, 4, 5, 6, 7, 8, 9, 12\r
break;\r
+ \r
+ case BU92725GUW_SEND: /* SIR use */\r
+ val = REG_INT_TXE; //IER3\r
+ break;\r
+ \r
+ case BU92725GUW_MIR_SEND:\r
+ case BU92725GUW_FIR_SEND:\r
+ val = REG_INT_TXE | REG_INT_TO; //IER2, 3\r
+ break; \r
\r
case BU92725GUW_MULTI_SEND: /* M/FIR use */\r
val = REG_INT_TO | REG_INT_TXE | REG_INT_WRE; //IER2, 3, 11\r
}\r
BU92725GUW_WRITE_REG(REG_IER_ADDR, val);\r
RK29IR_DBG("REG_IER_ADDR: 0x%x\n", val);\r
+ \r
}\r
\r
\r
};\r
\r
#define IS_FIR(si) ((si)->speed >= 4000000)\r
-static int max_rate = 115200;\r
+static int max_rate = 4000000;\r
#define IRDA_FRAME_SIZE_LIMIT BU92725GUW_FIFO_SIZE\r
\r
#define RK29_MAX_RXLEN 2047\r
\r
si->speed = speed;\r
\r
- irda_hw_set_speed(speed);\r
- \r
+ //irda_hw_set_speed(speed);\r
+ irda_hw_set_speed(1152000);//MIR\r
rk29_irda_rx_alloc(si);\r
\r
local_irq_restore(flags);\r
\r
//disable_irq(dev->irq);\r
\r
- /* EIR 1, 3, 11, 12 */\r
+ /* EIR 1, 3, 11, 12 \r
irda_setptn |= irq_src & (REG_INT_EOFRX | REG_INT_TXE | REG_INT_WRE | REG_INT_RDE |\r
REG_INT_CRC | REG_INT_OE | REG_INT_FE | REG_INT_AC | \r
- REG_INT_DECE | REG_INT_RDOE | REG_INT_DEX) ;\r
+ REG_INT_DECE | REG_INT_RDOE | REG_INT_DEX) ;*/\r
+ irda_setptn = irq_src;\r
\r
/* error */\r
if (irq_src & (REG_INT_TO| REG_INT_CRC | REG_INT_OE | REG_INT_FE | \r
if (IS_FIR(si)) //FIR\r
{\r
RK29IR_DBG("[%s][%d]: FIR\n",__FUNCTION__,__LINE__);\r
- if(irda_hw_get_mode() == BU92725GUW_AUTO_MULTI_REV) {//rx\r
+ if(irda_hw_get_mode() == BU92725GUW_MIR_REV) {//rx\r
struct sk_buff *skb = si->rxskb;\r
RK29IR_DBG("[%s][%d]: rx\n",__FUNCTION__,__LINE__);\r
if (irda_setptn & (REG_INT_FE | REG_INT_OE | REG_INT_CRC | REG_INT_DECE)) {\r
dev->stats.rx_errors++;\r
}\r
}\r
- if ((irda_setptn & (FRM_EVT_RX_EOFRX | FRM_EVT_RX_RDE | REG_INT_EOF))) {\r
+ if (irda_setptn & FRM_EVT_RX_EOFRX) {\r
tmp_len = BU92725GUW_get_data(skb->data+skb->len);\r
skb->len += tmp_len; \r
}\r
- if (irda_setptn & (REG_INT_EOF | FRM_EVT_RX_EOFRX)) { \r
+ if (irda_setptn & REG_INT_EOF) { \r
RK29IR_DBG("[%s][%d]: report data:\n",__FUNCTION__,__LINE__);\r
si->rxskb = NULL;\r
RK29IR_DATA_DBG("[%s][%d]: fir report data:\n",__FUNCTION__,__LINE__);\r
netif_rx(skb);\r
} \r
}\r
- else if (irda_hw_get_mode() == BU92725GUW_MULTI_SEND) {//tx\r
+ else if (irda_hw_get_mode() == BU92725GUW_MIR_SEND) {//tx\r
struct sk_buff *skb = si->txskb; \r
si->txskb = NULL;\r
RK29IR_DBG("[%s][%d]: tx\n",__FUNCTION__,__LINE__);\r
- if (irda_setptn & (FRM_EVT_TX_TXE | FRM_EVT_TX_WRE)) {\r
+ if (irda_setptn & FRM_EVT_TX_TXE) {\r
/*\r
* Do we need to change speed? Note that we're lazy\r
* here - we don't free the old rxskb. We don't need\r
dev->trans_start = jiffies;\r
BU92725GUW_send_data(si->tx_buff.data, si->tx_buff.len, NULL, 0);\r
si->tx_buff.len = 0;\r
-\r
} \r
else {\r
unsigned long mtt = irda_get_mtt(skb);\r
si->txskb = skb;\r
\r
- irda_hw_tx_enable_irq(BU92725GUW_FIR);\r
+ irda_hw_tx_enable_irq(BU92725GUW_MIR);\r
\r
RK29IR_DATA_DBG("[%d][%s], fir transmit data:\n", __LINE__, __FUNCTION__);\r
for (i=0;i<skb->len;i++) {\r