summaryrefslogtreecommitdiffstats
path: root/arch/m68k/mac/config.c
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2011-10-24 01:11:18 +1100
committerGeert Uytterhoeven <geert@linux-m68k.org>2011-12-10 19:52:47 +0100
commitda3fb3c9aaa357421ade92910303af82340c2ff5 (patch)
tree707a75995ef4638355229e096e4cdad32c5c9246 /arch/m68k/mac/config.c
parentc4af5da7f24ff1bf60db2d6ff3e9d9bd912ca47a (diff)
downloadlinux-stable-da3fb3c9aaa357421ade92910303af82340c2ff5.tar.gz
linux-stable-da3fb3c9aaa357421ade92910303af82340c2ff5.tar.bz2
linux-stable-da3fb3c9aaa357421ade92910303af82340c2ff5.zip
m68k/mac: oss irq fixes
The IOP driver calls into the OSS driver to enable its IRQ. This undesirable coupling between drivers only exists because the OSS driver doesn't correctly handle all of its machspec IRQs. Fix OSS handling of enable/disable for VIA1 IRQs (8 thru 15) which includes MAC_IRQ_ADB. Back when I implemented pmac_zilog support I redefined IRQ_MAC_SCC incorrectly. Change this to a machspec IRQ so that it works on OSS. Clean up the unused OSS audio IRQ and OSS_IRQLEV_* cruft that only confuses things. Fix the OSS description in macints.c and remove an obsolete comment. Don't enable the VIA1 irq before registering the handler. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Diffstat (limited to 'arch/m68k/mac/config.c')
-rw-r--r--arch/m68k/mac/config.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c
index 12e564c62957..101a8b7e2d52 100644
--- a/arch/m68k/mac/config.c
+++ b/arch/m68k/mac/config.c
@@ -893,8 +893,14 @@ static void __init mac_identify(void)
scc_b_rsrcs[1].start = scc_b_rsrcs[1].end = IRQ_MAC_SCC_B;
break;
default:
- scc_a_rsrcs[1].start = scc_a_rsrcs[1].end = IRQ_MAC_SCC;
- scc_b_rsrcs[1].start = scc_b_rsrcs[1].end = IRQ_MAC_SCC;
+ /* On non-PSC machines, the serial ports share an IRQ. */
+ if (macintosh_config->ident == MAC_MODEL_IIFX) {
+ scc_a_rsrcs[1].start = scc_a_rsrcs[1].end = IRQ_MAC_SCC;
+ scc_b_rsrcs[1].start = scc_b_rsrcs[1].end = IRQ_MAC_SCC;
+ } else {
+ scc_a_rsrcs[1].start = scc_a_rsrcs[1].end = IRQ_AUTO_4;
+ scc_b_rsrcs[1].start = scc_b_rsrcs[1].end = IRQ_AUTO_4;
+ }
break;
}