Ejemplo n.º 1
0
void __init chip_clocksource_init(unsigned int base)
{

	struct clocksource *cs = &clocksource_timer;
	clksrc_base = base;
#if USE_GLOBAL_TIMER
	PERI_W(GT_CONTROL,0x1); //Enable

	//calculate the value of mult    //cycle= ( time(ns) *mult ) >> shift
	cs->mult = clocksource_khz2mult(GLB_TIMER_FREQ_KHZ, cs->shift);//PERICLK = CPUCLK/2
#else
	/* setup timer 1 as free-running clocksource */
	//make sure timer 1 is disable
	CLRREG16(clksrc_base, TIMER_ENABLE);

	//set max period
	OUTREG16(clksrc_base+(0x2<<2),0xffff);
	OUTREG16(clksrc_base+(0x3<<2),0xffff);

	//enable timer 1
	SETREG16(clksrc_base, TIMER_ENABLE);

		// TODO: need to double check
	//calculate the value of mult    //cycle= ( time(ns) *mult ) >> shift
	cs->mult = clocksource_khz2mult(GLB_TIMER_FREQ_KHZ, cs->shift);  //Mstar timer =>12Mhz,
#endif

	clocksource_register(cs);
}
Ejemplo n.º 2
0
void 
ACAudioHWContext::HWEnableOutputChannel(BOOL fEnable)
{
    DEBUGMSG(ZONE_AC,(L"AC: HWEnableOutputChannel (%x)\r\n", fEnable));

    // enable or disable the transmitter
    if (fEnable)
    {
        SETREG16(&m_pMCBSPRegisters->usMCBSP_SPCR2, MCBSP_XRST | MCBSP_GRST | MCBSP_FRST);
    }
    else
    {
        CLRREG16(&m_pMCBSPRegisters->usMCBSP_SPCR2, MCBSP_XRST);
    }
}
Ejemplo n.º 3
0
void 
ACAudioHWContext::HWEnableInputChannel(BOOL fEnable)
{
    DEBUGMSG(ZONE_AC,(L"AC: HWEnableInputChannel (%x)\r\n", 1));

    // enable or disable the receiver
    if (fEnable)
    {
        SETREG16(&m_pMCBSPRegisters->usMCBSP_SPCR1, MCBSP_RRST);
    }
    else
    {
        CLRREG16(&m_pMCBSPRegisters->usMCBSP_SPCR1, MCBSP_RRST);
    }
}
Ejemplo n.º 4
0
static irqreturn_t chip_timer_interrupt(int irq, void *dev_id)
{

    unsigned short tmp;
    timer_tick();

    //stop timer
    CLRREG16(chip_BASE_REG_TIMER0_PA, TIMER_TRIG);
    //set interval
    //interval = (CLOCK_TICK_RATE / HZ);
    OUTREG16(chip_BASE_REG_TIMER0_PA + ADDR_TIMER_MAX_LOW, (interval &0xffff));
    OUTREG16(chip_BASE_REG_TIMER0_PA + ADDR_TIMER_MAX_HIGH, (interval >>16));

    //trig timer0
    SETREG16(chip_BASE_REG_TIMER0_PA, TIMER_TRIG);

    return IRQ_HANDLED;
}
Ejemplo n.º 5
0
VOID 
ACAudioHWContext::SetCodecPower(BOOL fPowerOn)
{
    DEBUGMSG(ZONE_AC, (L"+ACAudioHWContext::SetCodecPower(%x)\r\n", fPowerOn));

    // power on or off the BSP and CODEC
    if (fPowerOn)
    {
        CLRREG16(&m_pMCBSPRegisters->usMCBSP_PCR, MCBSP_IDLEEN);
        TSC2101Write(m_hSPI, TSC2101_AUDCTRL_POWER, CPC_SP1PWDN | CPC_SP2PWDN);
    }
    else
    {
        TSC2101Write(m_hSPI, TSC2101_AUDCTRL_POWER, CPC_MBIAS_HND | CPC_MBIAS_HED | CPC_ASTPWD |
                    CPC_SP1PWDN | CPC_SP2PWDN | CPC_DAPWDN | CPC_ADPWDN | CPC_VGPWDN |
                    CPC_COPWDN | CPC_LSPWDN);
        SETREG16(&m_pMCBSPRegisters->usMCBSP_PCR, MCBSP_IDLEEN);
    }
}
Ejemplo n.º 6
0
void GOP_Setmode(int Screen,int Panel_Width,int  Panel_Height,U32  FB_Start_Addr )
{



// 1. GOP Hardware initail (need to check Chip top colok)
// 2. GOP fetch framebuffer information
// 3. GOP Display Setting
// 4. Initial Mux for Select GOP and Sclaer(MApi_XC_ip_sel_for_gop)



    U32 FB_add = FB_Start_Addr;
    U16 FB_WIDTH=Panel_Width;
    U16 FB_HEIGHT=Panel_Height;

    U16 DISPLAY_Format=ARGB8888;
    U16 FB_Bytes_Per_Pixel=4;

    U16 u16FrameBuffer_HSize=FB_WIDTH;//LCD_PANEL_WIDTH;
    U16 u16FrameBuffer_VSize= FB_HEIGHT;//mdrvgop_Get_Panel_Height();//mdrvgop_Get_Panel_HeightYRES;//LCD_PANEL_HEIGHT;
    U16 u16FrameBuffer_Bytes_Per_Pixel=FB_Bytes_Per_Pixel;

    U16 u16DispImage_HStart=0;
    U16 u16DispImage_HSize=FB_WIDTH;
    U16 u16DispImage_HEnd=u16DispImage_HStart+u16DispImage_HSize;

    U16 u16DispImage_VStart=000;
    U16 u16DispImage_VSize=FB_HEIGHT;
    U16 u16DispImage_VEnd=u16DispImage_VStart+u16DispImage_VSize;

    U32 s32BuffAddr=0;
    U32 u32TempVal=0;
    U16 MIU_BUS=0x04;

    U16 GOP_block_0=GOP_BANK_G0_0;
    U16 GOP_block_1=GOP_BANK_G0_1;
    U8 RColor=0xFF;
    U8 GColor=0xFF;
    U8 BColor=0xFF;

    FB_add = (U32)ms_mem_bus_to_MIU(FB_add);

    MIU_BUS= GOP_MIU_BUS(MIU_BUS);


    GOPDBG ("GOP_Setmode Screen is %x.\r\n",Screen);

    if (Screen == 0)
    {
        GOP_block_0=GOP_BANK_G0_0;
        GOP_block_1=GOP_BANK_G0_1;
    }
    else if (Screen == 1)
    {
        GOP_block_0=GOP_BANK_G1_0;
        GOP_block_1=GOP_BANK_G1_1;
    }

    GOPDBG ("GOP_Setmode: LCD_PANEL_WIDTH = [%d] \r\n",Panel_Width);
    GOPDBG ("GOP_Setmode: LCD_PANEL_HEIGHT = [%d] \r\n",Panel_Height);
    GOPDBG ("GOP_Setmode: FB_WIDTH = [%d] \r\n",FB_WIDTH);
    GOPDBG ("GOP_Setmode: FB_HEIGHT = [%d] \r\n",FB_HEIGHT);
    GOPDBG ("GOP_Setmode: FB_add = [%x] \r\n",FB_add);
    GOPDBG ("GOP_Setmode: FB_Start_Addr = [%x] \r\n",FB_Start_Addr);

    // GOP Global seting ; destination, Hsync
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_7F,GOP_block_0); // Change to bank GOP2G_0

    //enlarge the gop dma bandwidth & priority, make sure gop can always access mem when kernel calls dma_alloc_coherent
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_19,0xC7F0);

    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_00,GOP_SOFT_RESET|GOP_FIELD_INV); //
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_00,GWIN_display_mode_progress|GOP_HS_MASK|GOP_ALPHA_INV); // PerPixel alpha 0x3F, RGB8888, enable               
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_01,GOP_DST_OP|GOP_REGDMA_INTERVAL_START|GOP_REGDMA_INTERVAL_END);


    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_02,GOP_BLINK_DISABLE);


    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_0F,GOP_HSYNC_PIPE_DLY);//Hsync input pipe delay

	OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_24,((0x0000|(GColor<<2)|(GColor>>3))|(0x0000|(BColor<<3)|(BColor>>2))));
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_25,(0x0000|(RColor<<3)|(RColor>>2)));


 //  GOP : Display Area global seting

    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_30,Panel_Width >>1); // Stretch Window H size (unit:2 pixel)
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_31,Panel_Height); // Stretch window V size
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_32,GOP_STRETCH_HST); // Stretch Window H coordinate
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_34,GOP_STRETCH_VST); // Stretch Window V coordinate
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_35,GOP_STRETCH_HRATIO); // Stretch H ratio
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_36,GOP_STRETCH_VRATIO); // Stretch V ratio
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_38,GOP_STRETCH_HINI); // Stretch H start value
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_39,GOP_STRETCH_VINI); // Stretch V start value



    //1  GOP fetch framebuffer information




    // 1.0 framebuffer Data format
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_7F,GOP_block_1); // Change to bank GOP2G_1
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_00,DISPLAY_Format|GOP0_GWin0_Enable|GOP_PIXEL_ALPHA_EN);


    // 1.1 framebuffer starting address
    s32BuffAddr = FB_add;
    s32BuffAddr=s32BuffAddr&0xFFFFFFFF;
    s32BuffAddr=s32BuffAddr>>MIU_BUS; // 128-bit unit = 16 bytes


    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_01,(s32BuffAddr&0xFFFF)); // Ring block start Low address 0x21:16
    s32BuffAddr=s32BuffAddr>>0x10;
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_02,(s32BuffAddr&0xFFFF)); // Ring block start Hi address 0x22:6, page number

    // 1.2 framebuffer Pitch
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_09,(u16FrameBuffer_HSize*u16FrameBuffer_Bytes_Per_Pixel)>>MIU_BUS); // Ring block 0 line size

    // 1.4 framebuffer Size
    u32TempVal=(u16FrameBuffer_HSize*u16FrameBuffer_VSize*u16FrameBuffer_Bytes_Per_Pixel)>>MIU_BUS;
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_10,u32TempVal&0xFFFF);
    u32TempVal=u32TempVal>>0x10;
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_11,u32TempVal);

    // 1.5 frame buffer V start offset  (line)
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_0C,0);
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_0D,0);

    // 1.6 frame buffer H start offset  (pixel)
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_0E,0);


    //2  GOP Display Setting

    // 2.3 GWIN display area in panel : : H Start postion and end information
    u32TempVal=(u16DispImage_HStart*u16FrameBuffer_Bytes_Per_Pixel)>>MIU_BUS;
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_04,u32TempVal); // H start
    u32TempVal=(u16DispImage_HEnd*u16FrameBuffer_Bytes_Per_Pixel)>>MIU_BUS;
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_05,u32TempVal); // H end

    // 2.4 GWIN  display area in panel : V Start postion and end information
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_06,u16DispImage_VStart); // V start line
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_08,u16DispImage_VEnd); // V end line


    // 2: Display Area setting in Panel

    CLRREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_7E,GOP_GOPG0_MUX_MASK);
    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_7E,GOP_Layer1_Sel_GOP_Null|GOP_Layer0_Sel_GOP0);

    OUTREG16(mdrv_BASE_REG_GOP_PA+REG_GOP_7F,GOP_BANK_all_bank_double_buffer|GOP_BANK_DOUBLE_WR); // Double Buffer Write

    GOPDBG ("GOP_Setmode: out \r\n");
}