BU92747_IRDA_DBG("line %d, enter %s \n", __LINE__, __FUNCTION__);\r
irq_src = irda_hw_get_irqsrc();\r
printk("[%s][%d], 0x%x\n",__FUNCTION__,__LINE__, irq_src);\r
+\r
+ /* error */\r
+ if (irq_src & (REG_INT_CRC | REG_INT_OE | REG_INT_FE\r
+ | REG_INT_AC | REG_INT_DECE | REG_INT_RDOE | REG_INT_DEX)) {\r
+ printk("[%s][%d]: do err\n", __FUNCTION__, __LINE__);\r
+ //BU92725GUW_dump_register();\r
+ BU92725GUW_clr_fifo();\r
+ BU92725GUW_reset();\r
+ if ((BU92725GUW_SEND==irda_hw_get_mode())\r
+ || (BU92725GUW_MULTI_SEND==irda_hw_get_mode())) {\r
+ s->tx_empty = 1;\r
+ }\r
+ }\r
\r
if (irq_src & (REG_INT_DRX | FRM_EVT_RX_EOFRX | FRM_EVT_RX_RDE)) {\r
len = bu92747_irda_do_rx(s);\r
}\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
- BU92747_IRDA_DBG("[%s][%d]: do err\n", __FUNCTION__, __LINE__);\r
+ if (irq_src & REG_INT_TO) {\r
+ BU92747_IRDA_DBG("[%s][%d]: do timeout err\n", __FUNCTION__, __LINE__);\r
//BU92725GUW_dump_register();\r
BU92725GUW_clr_fifo();\r
BU92725GUW_reset();\r
s->tx_empty = 1;\r
}\r
}\r
- \r
+\r
return IRQ_HANDLED;\r
}\r
\r
spin_lock(&s->data_lock);\r
if (get_frame_length(f, &len) != 0) {\r
printk("line %d: FIR data not ready......\n", __LINE__);\r
+ len = 0;\r
//atomic_set(&(s->data_ready), 0);\r
}\r
spin_unlock(&s->data_lock);\r
switch (cmd) {\r
case TTYIR_GETLENGTH:\r
len = bu92747_get_frame_length(s);\r
- if (len > 0) {\r
+ if (len >= 0) {\r
if (copy_to_user(argp, &len, sizeof(len)))\r
ret = -EFAULT;\r
}\r