static void ep93xxuart_disable_clocks(struct uart_port *port) { unsigned int uiSysDevCfg; /* * Disable the clocks to this UART in CSC_syscon * - Read DEVCFG * - AND to clear the correct uart enable bit * - Set the lock register * - Write back to DEVCFG */ uiSysDevCfg = inl(SYSCON_DEVCFG); switch ((unsigned long)port->mapbase) { case EP93XX_UART1_PHYS_BASE: uiSysDevCfg &= ~((unsigned int)SYSCON_DEVCFG_U1EN); break; case EP93XX_UART2_PHYS_BASE: uiSysDevCfg &= ~((unsigned int)SYSCON_DEVCFG_U2EN); break; case EP93XX_UART3_PHYS_BASE: uiSysDevCfg &= ~((unsigned int)SYSCON_DEVCFG_U3EN); break; } SysconSetLocked( SYSCON_DEVCFG, uiSysDevCfg ); }
static void ep93xx_sir_open(dongle_t *self, struct qos_info *qos) { unsigned int uiTemp; DPRINTK("----------------\n ep93xx_sir_open \n-----------------\n"); /* * Set UART2 to be an IrDA interface */ uiTemp = inl(SYSCON_DEVCFG); SysconSetLocked(SYSCON_DEVCFG, (uiTemp | SYSCON_DEVCFG_IonU2) ); /* * Set the pulse width. */ //uiTemp = inl(UART2ILPR); outl( 3, UART2ILPR ); /* * Set SIREN bit in UART2 - this enables the SIR encoder/decoder. */ uiTemp = inl(UART2CR); outl( (uiTemp | AMBA_UARTCR_SIREN), UART2CR ); /* * Enable Ir in SIR mode. */ /* Write the reg twice because of the IrDA errata. */ outl( IrEnable_EN_SIR, IrEnable ); outl( IrEnable_EN_SIR, IrEnable ); MOD_INC_USE_COUNT; }
static int __init ep93xx_init(void) { #ifndef CONFIG_MACH_IPD unsigned int uiTemp; int SSP_Handle; /* * Enable halt mode. */ uiTemp = inl(SYSCON_DEVCFG) | SYSCON_DEVCFG_SHena; SysconSetLocked(SYSCON_DEVCFG, uiTemp); /* * Set the bus priority. */ outl(BMAR_PRIORD_02, SYSCON_BMAR); /* * Get the hostname from the SPI FLASH if it has been programmed. */ SSP_Handle = SSPDriver->Open(SERIAL_FLASH, 0); if(SSP_Handle != -1) { SSPDriver->Read( SSP_Handle, 0x1000, &uiTemp ); if (uiTemp == 0x43414d45) { SSPDriver->Read( SSP_Handle, 0x1010, &uiTemp ); system_utsname.nodename[0] = uiTemp & 255; system_utsname.nodename[1] = (uiTemp >> 8) & 255; system_utsname.nodename[2] = (uiTemp >> 16) & 255; system_utsname.nodename[3] = uiTemp >> 24; SSPDriver->Read( SSP_Handle, 0x1014, &uiTemp ); system_utsname.nodename[4] = uiTemp & 255; system_utsname.nodename[5] = (uiTemp >> 8) & 255; system_utsname.nodename[6] = (uiTemp >> 16) & 255; system_utsname.nodename[7] = uiTemp >> 24; SSPDriver->Read( SSP_Handle, 0x1018, &uiTemp ); system_utsname.nodename[8] = uiTemp & 255; system_utsname.nodename[9] = (uiTemp >> 8) & 255; system_utsname.nodename[10] = (uiTemp >> 16) & 255; system_utsname.nodename[11] = uiTemp >> 24; SSPDriver->Read( SSP_Handle, 0x101c, &uiTemp ); system_utsname.nodename[12] = uiTemp & 255; system_utsname.nodename[13] = (uiTemp >> 8) & 255; system_utsname.nodename[14] = (uiTemp >> 16) & 255; system_utsname.nodename[15] = uiTemp >> 24; system_utsname.nodename[16] = 0; }
static void ep93xx_sir_close(dongle_t *self) { unsigned int uiTemp; DPRINTK("----------------\n ep93xx_sir_close \n-----------------\n"); /* * Disable Ir. */ /* for now, don't write irda regs due to errata. */ //outl( IrEnable_EN_NONE, IrEnable ); /* * Set UART2 to be an UART */ uiTemp = inl( SYSCON_DEVCFG ); SysconSetLocked(SYSCON_DEVCFG, (uiTemp & ~(SYSCON_DEVCFG_IonU2)) ); MOD_DEC_USE_COUNT; }