Example #1
0
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;
}