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_AUTO_MULTI_REV;\r
//curTrans_way = BU92725GUW_MULTI_REV;\r
- curTrans_way = BU92725GUW_FIR_REV;\r
+ //curTrans_way = BU92725GUW_FIR_REV;\r
break;\r
case BU92725GUW_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
+ curTrans_way = BU92725GUW_MULTI_SEND;\r
+ //curTrans_way = BU92725GUW_FIR_SEND;\r
break;\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_AUTO_MULTI_REV;\r
//curTrans_way = BU92725GUW_MULTI_REV;\r
- curTrans_way = BU92725GUW_FIR_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
+ curTrans_way = BU92725GUW_MULTI_SEND;\r
+ //curTrans_way = BU92725GUW_FIR_SEND;\r
break;\r
case BU92725GUW_FIR_REV:\r
case BU92725GUW_AUTO_MULTI_REV:\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
- BU92725GUW_set_trans_way(BU92725GUW_FIR_SEND);\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
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
+ //BU92725GUW_set_trans_way(BU92725GUW_FIR_REV);\r
}\r
\r
int irda_hw_get_mode(void)\r
\r
RK29IR_DBG("line %d: enter %s\n", __LINE__, __FUNCTION__);\r
\r
+ if (curTrans_way == BU92725GUW_MULTI_REV) {\r
+ BU92725GUW_WRITE_REG(REG_TRCR_ADDR, REG_TRCR_FLV_CP|REG_TRCR_RX_CON|REG_TRCR_RX_EN);\r
+ }\r
+\r
/* get data count from FLV or FLVII */\r
if ((curTrans_way == BU92725GUW_REV) || (curTrans_way == BU92725GUW_MIR_REV)\r
|| (curTrans_way == BU92725GUW_FIR_REV))\r
val = BU92725GUW_READ_REG(REG_TRCR_ADDR);\r
}\r
}\r
+ \r
+ /* TRCR */\r
+ switch (curTrans_way) {\r
+ case BU92725GUW_IDLE:\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_AUTO_MULTI_REV:\r
+ val = REG_TRCR_RX_EN | REG_TRCR_AUTO_FLV_CP;\r
+ break;\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
+ }\r
+ BU92725GUW_WRITE_REG(REG_TRCR_ADDR, val);\r
+ RK29IR_DBG("REG_TRCR_ADDR: 0x%x\n", val);\r
\r
/* IER */\r
switch (curTrans_way) {\r
break;\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
+ 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
+ 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
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
+ 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
break;\r
}\r
BU92725GUW_WRITE_REG(REG_IER_ADDR, val);\r
- RK29IR_DBG("REG_IER_ADDR: 0x%x\n", val);\r
- \r
- /* TRCR */\r
- switch (curTrans_way) {\r
- case BU92725GUW_IDLE:\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_AUTO_MULTI_REV:\r
- val = REG_TRCR_RX_EN | REG_TRCR_AUTO_FLV_CP;\r
- break;\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
- }\r
- BU92725GUW_WRITE_REG(REG_TRCR_ADDR, val);\r
- RK29IR_DBG("REG_TRCR_ADDR: 0x%x\n", val);\r
- \r
+ RK29IR_DBG("REG_IER_ADDR: 0x%x\n", val); \r
}\r
\r
+void BU92725GUW_dump_register(void)\r
+{\r
+ printk("bu92725 register value:\n");\r
+ printk("MCR: 0x%x\n", BU92725GUW_READ_REG(REG_MCR_ADDR));\r
+ printk("FIT: 0x%x\n", BU92725GUW_READ_REG(REG_PWR_FIT_ADDR));\r
+ printk("TRCR: 0x%x\n", BU92725GUW_READ_REG(REG_TRCR_ADDR));\r
+ printk("IER: 0x%x\n", BU92725GUW_READ_REG(REG_IER_ADDR));\r
+}\r
\r
\r
\r
si->speed = speed;\r
\r
- //irda_hw_set_speed(speed);\r
- irda_hw_set_speed(1152000);//MIR\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
//disable_irq(dev->irq);\r
\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
+ 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
irda_setptn = irq_src;\r
\r
/* error */\r
- if (irq_src & (REG_INT_TO| REG_INT_CRC | REG_INT_OE | REG_INT_FE | \r
- REG_INT_AC | REG_INT_DECE | REG_INT_RDOE | REG_INT_DEX)) {\r
+ if (irq_src & (REG_INT_TO| REG_INT_CRC | REG_INT_OE | REG_INT_FE\r
+ | REG_INT_AC | REG_INT_DECE | REG_INT_RDOE | REG_INT_DEX)) {\r
RK29IR_DBG("[%s][%d]: do err\n",__FUNCTION__,__LINE__);\r
+ //BU92725GUW_dump_register();\r
BU92725GUW_clr_fifo();\r
BU92725GUW_reset();\r
}\r
if (IS_FIR(si)) //FIR\r
{\r
RK29IR_DBG("[%s][%d]: FIR\n",__FUNCTION__,__LINE__);\r
- if(irda_hw_get_mode() == BU92725GUW_MIR_REV) {//rx\r
+ if(irda_hw_get_mode() == BU92725GUW_AUTO_MULTI_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) {\r
+ if (irda_setptn & (FRM_EVT_RX_EOFRX | FRM_EVT_RX_RDE)) {\r
tmp_len = BU92725GUW_get_data(skb->data+skb->len);\r
skb->len += tmp_len; \r
}\r
netif_rx(skb);\r
} \r
}\r
- else if (irda_hw_get_mode() == BU92725GUW_MIR_SEND) {//tx\r
+ else if (irda_hw_get_mode() == BU92725GUW_MULTI_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) {\r
+ if (irda_setptn & (FRM_EVT_TX_TXE | FRM_EVT_TX_WRE)) {\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
unsigned long mtt = irda_get_mtt(skb);\r
si->txskb = skb;\r
\r
- irda_hw_tx_enable_irq(BU92725GUW_MIR);\r
+ irda_hw_tx_enable_irq(BU92725GUW_FIR);\r
\r
RK29IR_DATA_DBG("[%d][%s], fir transmit data:\n", __LINE__, __FUNCTION__);\r
for (i=0;i<skb->len;i++) {\r
\r
static void rk29_irda_fir_test(struct work_struct *work)\r
{\r
- char send_data[4] = {0,0,0,0};\r
+ char send_data[4] = {1,0,1,0};\r
irda_hw_tx_enable_irq(BU92725GUW_FIR);\r
\r
BU92725GUW_send_data(send_data, 4, NULL, 0);\r