void hisi_mclk_config(struct hisi_sensor_ctrl_t *s_ctrl,
	struct sensor_power_setting *power_setting, int state)
{
	int sensor_index;

	cam_debug("%s enter.state:%d", __func__, state);
	if (SENSOR_INDEX_INVALID != power_setting->sensor_index) {
		sensor_index = power_setting->sensor_index;
	} else {
		sensor_index = s_ctrl->sensor->sensor_info->sensor_index;
	}

	if (is_fpga_board())
		return;

	if (POWER_ON == state) {
		/* mclk */
		if (CAMERA_SENSOR_PRIMARY == sensor_index) {
			SETREG8(REG_ISP_CLK_DIVIDER, 0x44);
		} else {
			SETREG8(REG_ISP_CLK_DIVIDER, 0x44);
		}
	} else {
		//SETREG8(REG_ISP_CLK_DIVIDER, 0);
	}

	if (0 != power_setting->delay) {
		camdrv_msleep(power_setting->delay);
	}

	return;
}
Пример #2
0
int serial_init (void)
{
	serial_setgpio();

	OUTREG8( (DEBUG_UART_BASE + UART_UIER_OFFSET), 0 );
	CLRREG8( (DEBUG_UART_BASE + UART_UFCR_OFFSET), UFCR_UME );	
	CLRREG8( (DEBUG_UART_BASE + UART_UISR_OFFSET), (UISR_RCVEIR|UISR_XMITIR) );
	SETREG8( (DEBUG_UART_BASE + UART_ULCR_OFFSET), (ULCR_WLS_8BITS|ULCR_SBLS_1BIT) );
	serial_setbrg();
	SETREG8( (DEBUG_UART_BASE + UART_UFCR_OFFSET), (UFCR_FME | UFCR_RFRT | UFCR_TFRT | UFCR_UME | UFCR_RDTR_15) );

	return 0;
}
Пример #3
0
//------------------------------------------------------------------------------
//
//  Function:  BSPIntrActiveIrq
//
//  This function is called from interrupt handler to give BSP chance to 
//  translate IRQ in case of secondary interrupt controller.
//
UINT32 BSPIntrActiveIrq(UINT32 irq)
{
    UINT8 data;
    UINT32 doneIrq;

    OALMSG(OAL_INTR&&OAL_VERBOSE, (L"+BSPIntrActiveIrq(%d)\r\n", irq));

    switch(irq)
    {
    case IRQ_GPIO:
        // Check whether alarm happen
        if(OALRTCAlarmIntrHandler() == FALSE) {
            irq = OAL_INTR_IRQ_UNDEFINED;
        }
        // Acknowledge GPIO interrupt
        OUTREG32(&g_pVRC5477Regs->GIUINSTAT, 0xffffffff);
        // Re-enable IRQ_GPIO interrupt on VRC5477
        doneIrq = IRQ_GPIO;
        OALIntrDoneIrqs(1, &doneIrq);
        break;
    case IRQ_INTC:
        // Read PIC1 interrupt
        OUTREG8(&g_pPIC1Regs->ctrl, 0x0E);
        data = INREG8(&g_pPIC1Regs->data) & 0x07;
        if (data != 2) {
            irq = IRQ_PIC_0 + data;
            SETREG8(&g_pPIC1Regs->mask, 1 << data);
        } else {
            // Read PIC2 interrupt
            OUTREG8(&g_pPIC2Regs->ctrl, 0x0E);
            data = INREG8(&g_pPIC2Regs->data) & 0x07;
            irq = IRQ_PIC_8 + data;
            SETREG8(&g_pPIC2Regs->mask, 1 << data);
            // End interrupt on PIC2
            OUTREG8(&g_pPIC2Regs->ctrl, 0x20);
        }
        // End interrupt on PIC1
        OUTREG8(&g_pPIC1Regs->ctrl, 0x20);

        // Re-enable IRQ_INTC interrupt on VRC5477
        doneIrq = IRQ_INTC;
        OALIntrDoneIrqs(1, &doneIrq);
        break;
    }

    OALMSG(OAL_INTR&&OAL_VERBOSE, (L"-BSPIntrActiveIrq(%d)\r\n", irq));
    return irq;
}
Пример #4
0
static UINT32 opTASI(v60_state *cpustate)
{
	UINT8 appb;
	cpustate->modadd = cpustate->PC + 1;
	cpustate->moddim = 0;

	// Load the address of the operand
	cpustate->amlength1 = ReadAMAddress(cpustate);

	// Load UINT8 from the address
	if (cpustate->amflag)
		appb = (UINT8)cpustate->reg[cpustate->amout & 0x1F];
	else
		appb = cpustate->program->read_byte(cpustate->amout);

	// Set the flags for SUB appb, FF
	SUBB(appb, 0xff);

	// Write FF in the operand
	if (cpustate->amflag)
		SETREG8(cpustate->reg[cpustate->amout & 0x1F], 0xFF);
	else
		cpustate->program->write_byte(cpustate->amout, 0xFF);

	return cpustate->amlength1 + 1;
}
Пример #5
0
UINT32 opTASI(void)
{
	UINT8 appb;
	modAdd=PC + 1;
	modDim=0;

	/* Load the address of the operand */
	amLength1=ReadAMAddress();

	/* Load UINT8 from the address */
	if (amFlag)
		appb=(UINT8)v60.reg[amOut&0x1F];
	else
		appb=MemRead8(amOut);

	/* Set the flags for SUB appb,FF */
	SUBB(appb, 0xff);

	/* Write FF in the operand */
	if (amFlag)
		SETREG8(v60.reg[amOut&0x1F], 0xFF);
	else
		MemWrite8(amOut,0xFF);

	return amLength1 + 1;
}
Пример #6
0
void serial_setbrg (void)
{	
	unsigned short UART_DIVISOR_LATCH = DEVICE_CLOCK / 16 / DEBUG_UART_BAUDRATE;
	SETREG8( (DEBUG_UART_BASE + UART_ULCR_OFFSET), ULCR_DLAB );	
	OUTREG8( (DEBUG_UART_BASE + UART_UDLLR_OFFSET), UART_DIVISOR_LATCH & 0xFF );
	OUTREG8( (DEBUG_UART_BASE + UART_UDLHR_OFFSET), (UART_DIVISOR_LATCH >> 8) & 0xFF );
	CLRREG8( (DEBUG_UART_BASE + UART_ULCR_OFFSET), ULCR_DLAB );
}
Пример #7
0
void hw_reset(void)
{
	printf("hw_reset\n");
	OUTREG16(A_WDT_TCSR, WDT_CLK_EXTAL);
	SETREG16(A_WDT_TCSR, WDT_CLK_PRESCALE_CLK1024);
	OUTREG16(A_WDT_TDR, 3);
	OUTREG16(A_WDT_TCNT, 0);
	SETREG8(A_WDT_TCER, WDT_ENABLE);
	while (1);
}
Пример #8
0
//------------------------------------------------------------------------------
//
//  Function:  BSPIntrDisableIrq
//
//  This function is called from OALIntrDisableIrq to disable interrupt on
//  secondary interrupt controller.
//
UINT32 BSPIntrDisableIrq(UINT32 irq)
{
    OALMSG(OAL_INTR&&OAL_VERBOSE, (L"+BSPIntrDisableIrq(%d)\r\n", irq));

    // Secondary IRQ are using IRQ_GPIO16 and above
    if (irq < IRQ_PIC_0) goto cleanUp;

    // Disable interrupt on appropriate PIC
    if (irq < IRQ_PIC_8) {
        SETREG8(&g_pPIC1Regs->mask, 1 << (irq - IRQ_PIC_0));
    } else {
        SETREG8(&g_pPIC2Regs->mask, 1 << (irq - IRQ_PIC_8));
    }            

    // We are done....
    irq = OAL_INTR_IRQ_UNDEFINED;
    
cleanUp:
    OALMSG(OAL_INTR&&OAL_VERBOSE, (L"-BSPIntrDisableIrq(irq = %d\r\n", irq));
    return irq;
}
Пример #9
0
static UINT32 am3Register(void)
{
	switch (modDim)
	{
	case 0:
		SETREG8(v60.reg[modVal&0x1F], modWriteValB);
		break;
	case 1:
		SETREG16(v60.reg[modVal&0x1F], modWriteValH);
		break;
	case 2:
		v60.reg[modVal&0x1F] = modWriteValW;
		break;
	}

	return 1;
}
Пример #10
0
static UINT32 am3Register(v60_state *cpustate)
{
    switch (cpustate->moddim)
    {
    case 0:
        SETREG8(cpustate->reg[cpustate->modval & 0x1F], cpustate->modwritevalb);
        break;
    case 1:
        SETREG16(cpustate->reg[cpustate->modval & 0x1F], cpustate->modwritevalh);
        break;
    case 2:
        cpustate->reg[cpustate->modval & 0x1F] = cpustate->modwritevalw;
        break;
    }

    return 1;
}
Пример #11
0
static UINT32 opDECB(v60_state *cpustate) /* TRUSTED */
{
	UINT8 appb;
	cpustate->modadd = cpustate->PC + 1;
	cpustate->moddim = 0;

	cpustate->amlength1 = ReadAMAddress(cpustate);

	if (cpustate->amflag)
		appb = (UINT8)cpustate->reg[cpustate->amout];
	else
		appb = cpustate->program->read_byte(cpustate->amout);

	SUBB(appb, 1);

	if (cpustate->amflag)
		SETREG8(cpustate->reg[cpustate->amout], appb);
	else
		cpustate->program->write_byte(cpustate->amout, appb);

	return cpustate->amlength1 + 1;
}
Пример #12
0
UINT32 opDECB(void) /* TRUSTED */
{
	UINT8 appb;
	modAdd=PC+1;
	modDim=0;

	amLength1=ReadAMAddress();

	if (amFlag)
		appb=(UINT8)v60.reg[amOut];
	else
		appb=MemRead8(amOut);

	SUBB(appb, 1);

	if (amFlag)
		SETREG8(v60.reg[amOut], appb);
	else
		MemWrite8(amOut, appb);

	return amLength1+1;
}
void mini_ispv1_hw_3a_switch(u8 on)
{
	u8 win_top_h,win_top_l;
	u8 win_left_h,win_left_l;
	u8 win_height;
	u8 win_width;
	u32 data_count = 0;
#if 0
	u8 hdr_movie_on = 0;
#endif

    print_info(" %s on = %d",__func__,on);

    if(on == HW_3A_ON)
    {
    #if 0
		if (mini_this_ispdata->sensor->sensor_hdr_movie.set_hdr_movie_switch)
		{
			hdr_movie_on = mini_this_ispdata->sensor->sensor_hdr_movie.get_hdr_movie_switch();
			if(hdr_movie_on)
			GETREG16(REG_ROI_MEM_WIDTH_3A,data_count);
		}
	#endif
		data_count = data_count + mini_hw_3a_data.data_count;
		SETREG16(REG_ROI_MEM_WIDTH_3A,data_count);
		win_top_l = mini_hw_3a_data.ae_param.ae_win_top;
		win_top_h = mini_hw_3a_data.ae_param.ae_win_top >> 8;

		win_left_l = mini_hw_3a_data.ae_param.ae_win_left;
		win_left_h = mini_hw_3a_data.ae_param.ae_win_left >> 8;

		win_height = mini_hw_3a_data.ae_param.ae_win_height;

		win_width = mini_hw_3a_data.ae_param.ae_win_width;

		SETREG8(HW_3A_HIST_SHIFT_REG,mini_hw_3a_data.ae_param.ae_hist_shift);//r_hist_shift
		SETREG8(HW_3A_MEAN_SHIFT_REG,mini_hw_3a_data.ae_param.ae_mean_shift);//r_mean_shift
		//aec agc awb:hist&mean
		SETREG8(HW_3A_WIN_TOP_REG_H,win_top_h);//r_window_top[11:8]
		SETREG8(HW_3A_WIN_TOP_REG_L,win_top_l);//r_window_top[7:0]
		SETREG8(HW_3A_WIN_LEFT_REG_H,win_left_h);//r_window_left[12:8]
		SETREG8(HW_3A_WIN_LEFT_REG_L,win_left_l);//r_window_left[7:0]
		SETREG8(HW_3A_WIN_HEIGHT_REG,win_height);//r_window_height
		SETREG8(HW_3A_WIN_WIDTH_REG,win_width);//r_window_width
		SETREG8(HW_3A_BLC_ENABLE_REG, mini_hw_3a_data.blc_enable); //BLC enable
		SETREG8(HW_3A_AECAGC_MODEL, mini_hw_3a_data.ae_param.ae_win_model);//aec agc &awb mode 0:16x16;1:8x8

		SETREG8(HW_3A_AF_ENABLE_REG, mini_hw_3a_data.af_param.af_enable); //AF stat enable

		SETREG8(HW_3A_AECAGC_ENABLE, mini_hw_3a_data.ae_param.ae_enable); //AEC&AGC&AWB stat enable

		SETREG8(HW_3A_ROI_ENABLE_REG,0x4);
		//SETREG8(HW_3A_FRAME_CTRL_REG,0x05);//ROI smode enable, dual source enable

		/* HW_3A_FRAME_CTRL_REG:bit[0 ] ROI smode enable, dual source enable*/
		SETREG8(HW_3A_FRAME_CTRL_REG,GETREG8(HW_3A_FRAME_CTRL_REG) | SHIFT_BIT_0);
		
		/*HW_3A_ENABLE bit[7][6]:gamma&tonemapping combined , bit[1]:3A  enalbe */
		SETREG8(HW_3A_ENABLE, GETREG8(HW_3A_ENABLE) |SHIFT_BIT_1);
		
		//SETREG8(HW_3A_RAM_ACCESS_ENABLE, 0x8);

    }
    else
    {