static void __init simpad_map_io(void) { sa1100_map_io(); iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc)); cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); __simpad_write_cs3(); sa1100_register_uart_fns(&simpad_port_fns); sa1100_register_uart(0, 3); sa1100_register_uart(1, 1); GAFR |= GPIO_UART_TXD | GPIO_UART_RXD; GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15; GPDR &= ~GPIO_UART_RXD; PPAR |= PPAR_UPR; PWER = PWER_GPIO0| PWER_RTC; PGSR = 0x818; PCFR = 0; PSDR = 0; }
static void __init simpad_map_io(void) { sa1100_map_io(); iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc)); /* Initialize CS3 */ cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON | ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON); __simpad_write_cs3(); /* Spinlocks not yet initialized */ sa1100_register_uart_fns(&simpad_port_fns); sa1100_register_uart(0, 3); /* serial interface */ sa1100_register_uart(1, 1); /* DECT */ // Reassign UART 1 pins GAFR |= GPIO_UART_TXD | GPIO_UART_RXD; GPDR |= GPIO_UART_TXD | GPIO_LDD13 | GPIO_LDD15; GPDR &= ~GPIO_UART_RXD; PPAR |= PPAR_UPR; /* * Set up registers for sleep mode. */ PWER = PWER_GPIO0| PWER_RTC; PGSR = 0x818; PCFR = 0; PSDR = 0; }
void simpad_clear_cs3_bit(int value) { unsigned long flags; spin_lock_irqsave(&cs3_lock, flags); cs3_shadow &= ~value; __simpad_write_cs3(); spin_unlock_irqrestore(&cs3_lock, flags); }
static void simpad_power_off(void) { local_irq_disable(); cs3_shadow = SD_MEDIAQ; __simpad_write_cs3(); PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); PWER = GFER = GRER = PWER_GPIO0; PSPR = 0; PGSR = 0; PMCR = PMCR_SF; while(1); local_irq_enable(); }
static void simpad_power_off(void) { local_irq_disable(); cs3_shadow = SD_MEDIAQ; __simpad_write_cs3(); /* Bypass spinlock here */ /* disable internal oscillator, float CS lines */ PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS); /* enable wake-up on GPIO0 */ PWER = GFER = GRER = PWER_GPIO0; /* * set scratchpad to zero, just in case it is used as a * restart address by the bootloader. */ PSPR = 0; PGSR = 0; /* enter sleep mode */ PMCR = PMCR_SF; while(1); local_irq_enable(); /* we won't ever call it */ }