Commit a8884e3415c29c58a5875d54c109c4a7fcaa6fb4
Committed by
Paul Mundt
1 parent
7abc404a5a
Exists in
master
and in
7 other branches
sh: Fix up the shared IRQ demuxer's control bit testing logic.
Correct the interrupt handler in sh4 serial device, return the correct value and check for what is anabled in the SCSCR register. The sh7722 is broken just sending a break using minicom. Signed-off-by: Michael Trimarchi <trimarchimichael@yahoo.it> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Showing 2 changed files with 13 additions and 11 deletions Side-by-side Diff
drivers/serial/sh-sci.c
... | ... | @@ -797,26 +797,27 @@ |
797 | 797 | |
798 | 798 | static irqreturn_t sci_mpxed_interrupt(int irq, void *ptr) |
799 | 799 | { |
800 | - unsigned short ssr_status, scr_status; | |
801 | - struct uart_port *port = ptr; | |
800 | + unsigned short ssr_status, scr_status; | |
801 | + struct uart_port *port = ptr; | |
802 | + irqreturn_t ret = IRQ_NONE; | |
802 | 803 | |
803 | 804 | ssr_status = sci_in(port,SCxSR); |
804 | 805 | scr_status = sci_in(port,SCSCR); |
805 | 806 | |
806 | 807 | /* Tx Interrupt */ |
807 | - if ((ssr_status & 0x0020) && (scr_status & 0x0080)) | |
808 | - sci_tx_interrupt(irq, ptr); | |
808 | + if ((ssr_status & 0x0020) && (scr_status & SCI_CTRL_FLAGS_TIE)) | |
809 | + ret = sci_tx_interrupt(irq, ptr); | |
809 | 810 | /* Rx Interrupt */ |
810 | - if ((ssr_status & 0x0002) && (scr_status & 0x0040)) | |
811 | - sci_rx_interrupt(irq, ptr); | |
811 | + if ((ssr_status & 0x0002) && (scr_status & SCI_CTRL_FLAGS_RIE)) | |
812 | + ret = sci_rx_interrupt(irq, ptr); | |
812 | 813 | /* Error Interrupt */ |
813 | - if ((ssr_status & 0x0080) && (scr_status & 0x0400)) | |
814 | - sci_er_interrupt(irq, ptr); | |
814 | + if ((ssr_status & 0x0080) && (scr_status & SCI_CTRL_FLAGS_REIE)) | |
815 | + ret = sci_er_interrupt(irq, ptr); | |
815 | 816 | /* Break Interrupt */ |
816 | - if ((ssr_status & 0x0010) && (scr_status & 0x0200)) | |
817 | - sci_br_interrupt(irq, ptr); | |
817 | + if ((ssr_status & 0x0010) && (scr_status & SCI_CTRL_FLAGS_REIE)) | |
818 | + ret = sci_br_interrupt(irq, ptr); | |
818 | 819 | |
819 | - return IRQ_HANDLED; | |
820 | + return ret; | |
820 | 821 | } |
821 | 822 | |
822 | 823 | #if defined(CONFIG_CPU_FREQ) && defined(CONFIG_HAVE_CLK) |
drivers/serial/sh-sci.h
... | ... | @@ -166,6 +166,7 @@ |
166 | 166 | #if defined(CONFIG_CPU_SUBTYPE_SH7750) || \ |
167 | 167 | defined(CONFIG_CPU_SUBTYPE_SH7091) || \ |
168 | 168 | defined(CONFIG_CPU_SUBTYPE_SH7750R) || \ |
169 | + defined(CONFIG_CPU_SUBTYPE_SH7722) || \ | |
169 | 170 | defined(CONFIG_CPU_SUBTYPE_SH7750S) || \ |
170 | 171 | defined(CONFIG_CPU_SUBTYPE_SH7751) || \ |
171 | 172 | defined(CONFIG_CPU_SUBTYPE_SH7751R) || \ |