summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2002-12-27 19:11:52 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2002-12-27 19:11:52 -0800
commit3bcf19ecb7d5a598707cde92fadce9f2594fb1bd (patch)
tree1e6c8069b7d2ae40b43e6799e956079538b56020
parent205ec15678310b8c6ff55ba08b3b9b946066c3cd (diff)
[PATCH] Mac/m68k VIA updates
Mac/m68k VIA updates (from Ray Knight in 2.4.x) - PowerBooks and early Macs use different bits for nubus. - Add loglevel macros to printk.
-rw-r--r--arch/m68k/mac/via.c74
1 files changed, 55 insertions, 19 deletions
diff --git a/arch/m68k/mac/via.c b/arch/m68k/mac/via.c
index 4c453339112b..53b448deb37a 100644
--- a/arch/m68k/mac/via.c
+++ b/arch/m68k/mac/via.c
@@ -137,15 +137,15 @@ void __init via_init(void)
panic("UNKNOWN VIA TYPE");
}
- printk("VIA1 at %p is a 6522 or clone\n", via1);
+ printk(KERN_INFO "VIA1 at %p is a 6522 or clone\n", via1);
- printk("VIA2 at %p is ", via2);
+ printk(KERN_INFO "VIA2 at %p is ", via2);
if (rbv_present) {
- printk("an RBV\n");
+ printk(KERN_INFO "an RBV\n");
} else if (oss_present) {
- printk("an OSS\n");
+ printk(KERN_INFO "an OSS\n");
} else {
- printk("a 6522 or clone\n");
+ printk(KERN_INFO "a 6522 or clone\n");
}
#ifdef DEBUG_VIA
@@ -291,22 +291,22 @@ void __init via_register_interrupts(void)
void via_debug_dump(void)
{
- printk("VIA1: DDRA = 0x%02X DDRB = 0x%02X ACR = 0x%02X\n",
+ printk(KERN_DEBUG "VIA1: DDRA = 0x%02X DDRB = 0x%02X ACR = 0x%02X\n",
(uint) via1[vDirA], (uint) via1[vDirB], (uint) via1[vACR]);
- printk(" PCR = 0x%02X IFR = 0x%02X IER = 0x%02X\n",
+ printk(KERN_DEBUG " PCR = 0x%02X IFR = 0x%02X IER = 0x%02X\n",
(uint) via1[vPCR], (uint) via1[vIFR], (uint) via1[vIER]);
if (oss_present) {
- printk("VIA2: <OSS>\n");
+ printk(KERN_DEBUG "VIA2: <OSS>\n");
} else if (rbv_present) {
- printk("VIA2: IFR = 0x%02X IER = 0x%02X\n",
+ printk(KERN_DEBUG "VIA2: IFR = 0x%02X IER = 0x%02X\n",
(uint) via2[rIFR], (uint) via2[rIER]);
- printk(" SIFR = 0x%02X SIER = 0x%02X\n",
+ printk(KERN_DEBUG " SIFR = 0x%02X SIER = 0x%02X\n",
(uint) via2[rSIFR], (uint) via2[rSIER]);
} else {
- printk("VIA2: DDRA = 0x%02X DDRB = 0x%02X ACR = 0x%02X\n",
+ printk(KERN_DEBUG "VIA2: DDRA = 0x%02X DDRB = 0x%02X ACR = 0x%02X\n",
(uint) via2[vDirA], (uint) via2[vDirB],
(uint) via2[vACR]);
- printk(" PCR = 0x%02X IFR = 0x%02X IER = 0x%02X\n",
+ printk(KERN_DEBUG " PCR = 0x%02X IFR = 0x%02X IER = 0x%02X\n",
(uint) via2[vPCR],
(uint) via2[vIFR], (uint) via2[vIER]);
}
@@ -374,7 +374,10 @@ void __init via_nubus_init(void)
if (!rbv_present) {
/* set the line to be an output on non-RBV machines */
- via2[vDirB] |= 0x02;
+ if ((macintosh_config->adb_type != MAC_ADB_PB1) &&
+ (macintosh_config->adb_type != MAC_ADB_PB2)) {
+ via2[vDirB] |= 0x02;
+ }
}
/* this seems to be an ADB bit on PMU machines */
@@ -390,8 +393,23 @@ void __init via_nubus_init(void)
via2[rSIER] = 0x7F;
via2[rSIER] = nubus_active | 0x80;
} else {
- via2[vBufA] = 0xFF;
- via2[vDirA] = ~nubus_active;
+ /* These are ADB bits on PMU */
+ if ((macintosh_config->adb_type != MAC_ADB_PB1) &&
+ (macintosh_config->adb_type != MAC_ADB_PB2)) {
+ switch(macintosh_config->ident)
+ {
+ case MAC_MODEL_II:
+ case MAC_MODEL_IIX:
+ case MAC_MODEL_IICX:
+ case MAC_MODEL_SE30:
+ via2[vBufA] |= 0x3F;
+ via2[vDirA] = ~nubus_active | 0xc0;
+ break;
+ default:
+ via2[vBufA] = 0xFF;
+ via2[vDirA] = ~nubus_active;
+ }
+ }
}
}
@@ -481,7 +499,7 @@ void via_irq_enable(int irq) {
int irq_bit = 1 << irq_idx;
#ifdef DEBUG_IRQUSE
- printk("via_irq_enable(%d)\n", irq);
+ printk(KERN_DEBUG "via_irq_enable(%d)\n", irq);
#endif
if (irq_src == 1) {
@@ -508,7 +526,21 @@ void via_irq_enable(int irq) {
via2[rSIER] = IER_SET_BIT(irq_idx);
} else {
/* Make sure the bit is an input, to enable the irq */
- via2[vDirA] &= ~irq_bit;
+ /* But not on PowerBooks, that's ADB... */
+ if ((macintosh_config->adb_type != MAC_ADB_PB1) &&
+ (macintosh_config->adb_type != MAC_ADB_PB2)) {
+ switch(macintosh_config->ident)
+ {
+ case MAC_MODEL_II:
+ case MAC_MODEL_IIX:
+ case MAC_MODEL_IICX:
+ case MAC_MODEL_SE30:
+ via2[vDirA] &= (~irq_bit | 0xc0);
+ break;
+ default:
+ via2[vDirA] &= ~irq_bit;
+ }
+ }
}
nubus_active |= irq_bit;
}
@@ -520,7 +552,7 @@ void via_irq_disable(int irq) {
int irq_bit = 1 << irq_idx;
#ifdef DEBUG_IRQUSE
- printk("via_irq_disable(%d)\n", irq);
+ printk(KERN_DEBUG "via_irq_disable(%d)\n", irq);
#endif
if (irq_src == 1) {
@@ -533,7 +565,11 @@ void via_irq_disable(int irq) {
via2[rSIER] = IER_CLR_BIT(irq_idx);
} else {
/* disable the nubus irq by changing dir to output */
- via2[vDirA] |= irq_bit;
+ /* except on PMU */
+ if ((macintosh_config->adb_type != MAC_ADB_PB1) &&
+ (macintosh_config->adb_type != MAC_ADB_PB2)) {
+ via2[vDirA] |= irq_bit;
+ }
}
nubus_active &= ~irq_bit;
}