X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Farm%2Fmach-footbridge%2Fnetwinder-hw.c;h=1e1dfd79f4feb583b7d1018f83a884813bc26d36;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=c81775b1a42d5834de73cdebe3f3bab607219a88;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/arch/arm/mach-footbridge/netwinder-hw.c b/arch/arm/mach-footbridge/netwinder-hw.c index c81775b1a..1e1dfd79f 100644 --- a/arch/arm/mach-footbridge/netwinder-hw.c +++ b/arch/arm/mach-footbridge/netwinder-hw.c @@ -12,9 +12,15 @@ #include #include +#include #include #include #include +#include + +#include + +#include "common.h" #define IRDA_IO_BASE 0x180 #define GP1_IO_BASE 0x338 @@ -52,7 +58,7 @@ static inline void wb977_ww(int reg, int val) outb(reg, 0x370); outb(val >> 8, 0x371); outb(reg + 1, 0x370); - outb(val, 0x371); + outb(val & 255, 0x371); } #define wb977_device_select(dev) wb977_wb(0x07, dev) @@ -62,7 +68,7 @@ static inline void wb977_ww(int reg, int val) /* * This is a lock for accessing ports GP1_IO_BASE and GP2_IO_BASE */ -spinlock_t gpio_lock = SPIN_LOCK_UNLOCKED; +DEFINE_SPINLOCK(gpio_lock); static unsigned int current_gpio_op; static unsigned int current_gpio_io; @@ -482,7 +488,7 @@ static inline void rwa010_waveartist_init(int base, int irq, int dma) WRITE_RWA(7, 0); dprintk("WaveArtist base: "); - WRITE_RWA(0x61, base); + WRITE_RWA(0x61, base & 255); i = inb(0x203); WRITE_RWA(0x60, base >> 8); @@ -504,7 +510,7 @@ static inline void rwa010_soundblaster_init(int sb_base, int al_base, int irq, i WRITE_RWA(7, 1); dprintk("SoundBlaster base: "); - WRITE_RWA(0x61, sb_base); + WRITE_RWA(0x61, sb_base & 255); i = inb(0x203); WRITE_RWA(0x60, sb_base >> 8); @@ -519,7 +525,7 @@ static inline void rwa010_soundblaster_init(int sb_base, int al_base, int irq, i dprintk("%d (%d)\n", inb(0x203), dma); dprintk("AdLib base: "); - WRITE_RWA(0x63, al_base); + WRITE_RWA(0x63, al_base & 255); i = inb(0x203); WRITE_RWA(0x62, al_base >> 8); @@ -618,3 +624,37 @@ static int __init nw_hw_init(void) } __initcall(nw_hw_init); + +/* + * Older NeTTroms either do not provide a parameters + * page, or they don't supply correct information in + * the parameter page. + */ +static void __init +fixup_netwinder(struct machine_desc *desc, struct tag *tags, + char **cmdline, struct meminfo *mi) +{ +#ifdef CONFIG_ISAPNP + extern int isapnp_disable; + + /* + * We must not use the kernels ISAPnP code + * on the NetWinder - it will reset the settings + * for the WaveArtist chip and render it inoperable. + */ + isapnp_disable = 1; +#endif +} + +MACHINE_START(NETWINDER, "Rebel-NetWinder") + MAINTAINER("Russell King/Rebel.com") + BOOT_MEM(0x00000000, DC21285_ARMCSR_BASE, 0xfe000000) + BOOT_PARAMS(0x00000100) + VIDEO(0x000a0000, 0x000bffff) + DISABLE_PARPORT(0) + DISABLE_PARPORT(2) + FIXUP(fixup_netwinder) + MAPIO(footbridge_map_io) + INITIRQ(footbridge_init_irq) + .timer = &isa_timer, +MACHINE_END