Commit a8884e3415c29c58a5875d54c109c4a7fcaa6fb4

Authored by Michael Trimarchi
Committed by Paul Mundt
1 parent 7abc404a5a

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) || \