提交 5ae2f66f 编写于 作者: K Kuninori Morimoto 提交者: David S. Miller

net/irda/sh_irda: return to RX mode when TX error

sh_irda can not use RX/TX in same time,
but this driver didn't return to RX mode when TX error occurred.
This patch care xmit error case to solve this issue.
Signed-off-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 6ee400aa
...@@ -635,7 +635,7 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev) ...@@ -635,7 +635,7 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev)
ret = sh_irda_set_baudrate(self, speed); ret = sh_irda_set_baudrate(self, speed);
if (ret < 0) if (ret < 0)
return ret; goto sh_irda_hard_xmit_end;
self->tx_buff.len = 0; self->tx_buff.len = 0;
if (skb->len) { if (skb->len) {
...@@ -652,11 +652,21 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev) ...@@ -652,11 +652,21 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev)
sh_irda_write(self, IRTFLR, self->tx_buff.len); sh_irda_write(self, IRTFLR, self->tx_buff.len);
sh_irda_write(self, IRTCTR, ARMOD | TE); sh_irda_write(self, IRTCTR, ARMOD | TE);
} } else
goto sh_irda_hard_xmit_end;
dev_kfree_skb(skb); dev_kfree_skb(skb);
return 0; return 0;
sh_irda_hard_xmit_end:
sh_irda_set_baudrate(self, 9600);
netif_wake_queue(self->ndev);
sh_irda_rcv_ctrl(self, 1);
dev_kfree_skb(skb);
return ret;
} }
static int sh_irda_ioctl(struct net_device *ndev, struct ifreq *ifreq, int cmd) static int sh_irda_ioctl(struct net_device *ndev, struct ifreq *ifreq, int cmd)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册