Skip to content

Commit 5ae2f66

Browse files
morimotodavem330
authored andcommitted
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 <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 6ee400a commit 5ae2f66

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

drivers/net/irda/sh_irda.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev)
635635

636636
ret = sh_irda_set_baudrate(self, speed);
637637
if (ret < 0)
638-
return ret;
638+
goto sh_irda_hard_xmit_end;
639639

640640
self->tx_buff.len = 0;
641641
if (skb->len) {
@@ -652,11 +652,21 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev)
652652

653653
sh_irda_write(self, IRTFLR, self->tx_buff.len);
654654
sh_irda_write(self, IRTCTR, ARMOD | TE);
655-
}
655+
} else
656+
goto sh_irda_hard_xmit_end;
656657

657658
dev_kfree_skb(skb);
658659

659660
return 0;
661+
662+
sh_irda_hard_xmit_end:
663+
sh_irda_set_baudrate(self, 9600);
664+
netif_wake_queue(self->ndev);
665+
sh_irda_rcv_ctrl(self, 1);
666+
dev_kfree_skb(skb);
667+
668+
return ret;
669+
660670
}
661671

662672
static int sh_irda_ioctl(struct net_device *ndev, struct ifreq *ifreq, int cmd)

0 commit comments

Comments
 (0)