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: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6ee400aafb
commit
5ae2f66fe4
1 changed files with 12 additions and 2 deletions
|
@ -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);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
goto sh_irda_hard_xmit_end;
|
||||
|
||||
self->tx_buff.len = 0;
|
||||
if (skb->len) {
|
||||
|
@ -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, IRTCTR, ARMOD | TE);
|
||||
}
|
||||
} else
|
||||
goto sh_irda_hard_xmit_end;
|
||||
|
||||
dev_kfree_skb(skb);
|
||||
|
||||
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)
|
||||
|
|
Loading…
Reference in a new issue