patch-2.4.14 linux/arch/arm/mach-sa1100/simpad.c
Next file: linux/arch/arm/mach-sa1100/sleep.S
Previous file: linux/arch/arm/mach-sa1100/pm.c
Back to the patch index
Back to the overall index
- Lines: 181
- Date:
Thu Oct 25 13:53:46 2001
- Orig file:
v2.4.13/linux/arch/arm/mach-sa1100/simpad.c
- Orig date:
Mon Aug 27 12:41:38 2001
diff -u --recursive --new-file v2.4.13/linux/arch/arm/mach-sa1100/simpad.c linux/arch/arm/mach-sa1100/simpad.c
@@ -8,6 +8,8 @@
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/tty.h>
+#include <linux/proc_fs.h>
+#include <linux/string.h>
#include <asm/hardware.h>
#include <asm/setup.h>
@@ -15,32 +17,46 @@
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/serial_sa1100.h>
+#include <linux/serial_core.h>
#include "generic.h"
-void init_simpad_cs3()
+long cs3_shadow;
+
+static int __init simpad_init(void)
+{
+ PSPR = 0xc0008000;
+ GPDR &= ~GPIO_GPIO0;
+ cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON |
+ ENABLE_5V | RESET_SIMCARD);
+ *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
+ return 0;
+}
+
+__initcall(simpad_init);
+
+long get_cs3_shadow()
{
- cs3_shadow =(DISPLAY_ON | RS232_ON | PCMCIA_BUFF_DIS | RESET_SIMCARD);
- printk("\nCall CS3 init:%x\n",cs3_shadow);
- *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
- cs3_shadow =(DISPLAY_ON| RS232_ON |RESET_SIMCARD);
+ return cs3_shadow;
}
-void PCMCIA_setbit(int value)
+void set_cs3_bit(int value)
{
- cs3_shadow |= value;
+ cs3_shadow |= value;
+ *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
}
-void PCMCIA_clearbit(int value)
+void clear_cs3_bit(int value)
{
- cs3_shadow &= ~value;
+ cs3_shadow &= ~value;
+ *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
}
static void __init
fixup_simpad(struct machine_desc *desc, struct param_struct *params,
char **cmdline, struct meminfo *mi)
{
-#ifdef CONFIG_SA1100_SIMPAD_64MB
+#ifdef CONFIG_SA1100_SIMPAD_DRAM_64MB /* DRAM */
SET_BANK( 0, 0xc0000000, 64*1024*1024 );
#else
SET_BANK( 0, 0xc0000000, 32*1024*1024 );
@@ -48,27 +64,109 @@
mi->nr_banks = 1;
ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
setup_ramdisk( 1, 0, 0, 8192 );
- setup_initrd( __phys_to_virt(0xc0800000), 8*1024*1024 );
+ setup_initrd( __phys_to_virt(0xc0800000), 4*1024*1024 );
}
static struct map_desc simpad_io_desc[] __initdata = {
- /* virtual physical length domain r w c b */
- { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 }, /* Flash bank 0, neccessary for mtd */
- { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */
+ /* virtual physical length domain r w c b */
+ { 0xe8000000, 0x00000000, 0x02000000, DOMAIN_IO, 1, 1, 0, 0 },
+ { 0xf2800000, 0x4b800000, 0x00800000, DOMAIN_IO, 1, 1, 0, 0 }, /* MQ200 */
{ 0xf1000000, 0x18000000, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* Paules CS3, write only */
LAST_DESC
};
+
+static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate)
+{
+ if (port->mapbase == (u_int)&Ser1UTCR0) {
+ if (state)
+ clear_cs3_bit(RS232_ON);
+ else
+ set_cs3_bit(RS232_ON);
+ }
+}
+
+static struct sa1100_port_fns simpad_port_fns __initdata = {
+ pm: simpad_uart_pm,
+};
+
static void __init simpad_map_io(void)
{
sa1100_map_io();
iotable_init(simpad_io_desc);
+#ifndef CONFIG_SERIAL_SA1100_OLD
+ //It is only possible to register 3 UART in serial_sa1100.c
sa1100_register_uart(0, 3);
- sa1100_register_uart(1, 1);
+ sa1100_register_uart(1, 1);
+#endif
+}
+
+#ifdef CONFIG_PROC_FS
+
+static char* name[]={
+ "VCC_5V_EN",
+ "VCC_3V_EN",
+ "EN1",
+ "EN0",
+ "DISPLAY_ON",
+ "PCMCIA_BUFF_DIS",
+ "MQ_RESET",
+ "PCMCIA_RESET",
+ "DECT_POWER_ON",
+ "IRDA_SD",
+ "RS232_ON",
+ "SD_MEDIAQ",
+ "LED2_ON",
+ "IRDA_MODE",
+ "ENABLE_5V",
+ "RESET_SIMCARD"
+};
+
+static int proc_cs3_read(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ char *p = page;
+ int len, i;
+
+ p += sprintf(p, "Chipselect3 : %x\n", cs3_shadow);
+ for (i = 0; i <= 15; i++) {
+ if(cs3_shadow & (1<<i)) {
+ p += sprintf(p, "%s\t: TRUE \n",name[i]);
+ } else
+ p += sprintf(p, "%s\t: FALSE \n",name[i]);
+ }
+ len = (p - page) - off;
+ if (len < 0)
+ len = 0;
+
+ *eof = (len <= count) ? 1 : 0;
+ *start = page + off;
+
+ return len;
}
+
+
+static struct proc_dir_entry *proc_cs3;
+
+static int __init cs3_init(void)
+{
+ proc_cs3 = create_proc_entry("cs3", 0, 0);
+ if (proc_cs3)
+ proc_cs3->read_proc = proc_cs3_read;
+ return 0;
+}
+
+static int __exit cs3_exit(void)
+{
+ if (proc_cs3)
+ remove_proc_entry( "cs3", 0);
+ return 0;
+}
+__initcall(cs3_init);
+#endif // CONFIG_PROC_FS
MACHINE_START(SIMPAD, "Simpad")
MAINTAINER("Juergen Messerer")
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)