1/* 2 * linux/arch/arm/kernel/oldlatches.c 3 * 4 * Copyright (C) David Alan Gilbert 1995/1996,2000 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * Support for the latches on the old Archimedes which control the floppy, 11 * hard disc and printer 12 */ 13#include <linux/module.h> 14#include <linux/kernel.h> 15#include <linux/init.h> 16#include <linux/sched.h> 17 18#include <asm/io.h> 19#include <asm/hardware.h> 20#include <asm/mach-types.h> 21#include <asm/arch/oldlatches.h> 22 23static unsigned char latch_a_copy; 24static unsigned char latch_b_copy; 25 26/* newval=(oldval & ~mask)|newdata */ 27void oldlatch_aupdate(unsigned char mask,unsigned char newdata) 28{ 29 if (machine_is_archimedes()) { 30 unsigned long flags; 31 32 local_save_flags(flags); 33 latch_a_copy = (latch_a_copy & ~mask) | newdata; 34 __raw_writeb(latch_a_copy, LATCHA_BASE); 35 local_restore_flags(flags); 36 37 printk("Latch: A = 0x%02x\n", latch_a_copy); 38 } else 39 BUG(); 40} 41 42 43/* newval=(oldval & ~mask)|newdata */ 44void oldlatch_bupdate(unsigned char mask,unsigned char newdata) 45{ 46 if (machine_is_archimedes()) { 47 unsigned long flags; 48 49 local_save_flags(flags); 50 latch_b_copy = (latch_b_copy & ~mask) | newdata; 51 __raw_writeb(latch_b_copy, LATCHB_BASE); 52 local_restore_flags(flags); 53 54 printk("Latch: B = 0x%02x\n", latch_b_copy); 55 } else 56 BUG(); 57} 58 59static int __init oldlatch_init(void) 60{ 61 if (machine_is_archimedes()) { 62 oldlatch_aupdate(0xff, 0xff); 63 /* Thats no FDC reset...*/ 64 oldlatch_bupdate(0xff, LATCHB_FDCRESET); 65 } 66 return 0; 67} 68 69__initcall(oldlatch_init); 70 71EXPORT_SYMBOL(oldlatch_aupdate); 72EXPORT_SYMBOL(oldlatch_bupdate); 73