//---------------------------FIH_F0X_misty
static int Q7x27_kybd_probe(struct platform_device *pdev)
{
	struct Q7x27_kybd_platform_data *setup_data;
	int rc = -ENOMEM;

/* FIH, PeterKCTseng, @20090520 { */
/* The active type of input pin   */
#if ACTIVE_MODE_ENABLE // Peter, Debug
    g_HWID = FIH_READ_HWID_FROM_SMEM();
    g_ORIGHWID = FIH_READ_ORIG_HWID_FROM_SMEM();
#endif
/* } FIH, PeterKCTseng, @20090520 */

    //FIH_debug_log
    fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"Q7x27_kybd_probe\n");
    //printk(KERN_INFO "FIH: enter Q7x27_kybd_probe()\n");
	rd = kzalloc(sizeof(struct Q7x27_kybd_record), GFP_KERNEL);
	if (!rd) {
		//printk(KERN_ERR "i2ckybd_record memory allocation failed!!\n");
		fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"kybd_record memory allocation failed!!\n");
		return rc;
	}

	setup_data 		    = pdev->dev.platform_data;
	//+++++++++++++++++++++++++++FIH_F0X_misty
	//printk(KERN_ERR "++++++++++++++++++++++++add init_wakeup\n");
	device_init_wakeup(&pdev->dev, 1);
	//printk(KERN_ERR "---------------------add init_wakeup\n");
	//------------------------------FIH_F0X_misty
/* FIH, PeterKCTseng, @20090520 { */
/* The active type of input pin   */
#if ACTIVE_MODE_ENABLE // Peter, Debug
    
     if (g_HWID >= CMCS_RTP_PR1) {
		//printk(KERN_ERR "FIH: CMCS_RTP_PR1, g_HWID= %d \n", g_HWID);
		fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: CMCS_RTP_PR1, g_HWID= %d\n", g_HWID);
        rd->active.volup_pin_actype     = ACTIVE_HIGH;
        rd->active.voldn_pin_actype     = ACTIVE_HIGH;
        rd->active.hook_sw_pin_actype   = ACTIVE_LOW;

    }          
    else {
        // target board undefined 
		//printk(KERN_ERR "target borad can not be recognized!! \n");
		fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"target borad can not be recognized!!\n");

    }  
#endif
/* } FIH, PeterKCTseng, @20090520 */

#if VOLUME_KEY_ENABLE // Peter, Debug
	rd->volup_pin		= setup_data->volup_pin;
	rd->voldn_pin		= setup_data->voldn_pin;
#endif


#if SWITCH_KEY_ENABLE // Peter, Debug
	rd->hook_sw_pin     = setup_data->hook_sw_pin;

/* FIH, PeterKCTseng, @20090603 { */
	rd->bHookSWIRQEnabled = false; //FIH, KarenLiao, @20100520: FM6.B-706: Set initial value of HookSWIRQEnabled to false to fix calling enable_irq_wake() without headset.
/* } FIH, PeterKCTseng, @20090603 */
#endif


	//Initialize GPIO
	rc = Q7x27_kybd_config_gpio(rd);
	if (rc)
		goto failexit1;


#if VOLUME_KEY_ENABLE // Peter, Debug
	INIT_WORK(&rd->kybd_volkey1, Q7x27_kybd_volkey1);
    INIT_WORK(&rd->kybd_volkey2, Q7x27_kybd_volkey2);
#endif


#if SWITCH_KEY_ENABLE // Peter, Debug
	INIT_WORK(&rd->hook_switchkey, Q7x27_hook_switchkey);


//  msm_mic_en_proc(true);

#endif

    KeySetup();

    /* FIH, Debbie, 2010/01/05 { */
    /* modify for key definition of OTA update*/
    if(fih_read_kpd_from_smem())
    {
    	   EnableKeyInt = 1;
    }
    /* FIH, Debbie, 2010/01/05 } */
#if 0//misty +++
    printk(KERN_INFO "FIH: enter 7\n");    
	rc = Q7x27_kybd_irqsetup(rd);
    printk(KERN_INFO "FIH: enter 8\n");        
	if (rc)
		goto failexit2;

	rc = testfor_keybd();
    printk(KERN_INFO "FIH: enter 9\n");    
	if (rc)
		goto failexit2;
	
	rd->kybd_connected = 1;
#endif//misty ---
/* FIH, SimonSSChang, 2009/09/04 { */
/* [FXX_CR], change keypad suspend/resume function
to earlysuspend */
#ifdef CONFIG_FIH_FXX
#ifdef CONFIG_HAS_EARLYSUSPEND
    rd->Q7x27_kybd_early_suspend_desc.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN - 10;
	rd->Q7x27_kybd_early_suspend_desc.suspend = Q7x27_kybd_early_suspend;
	rd->Q7x27_kybd_early_suspend_desc.resume = Q7x27_kybd_late_resume;
    //printk(KERN_INFO "Keypad register_early_suspend()\n");
    fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"Keypad register_early_suspend()\n");
	register_early_suspend(&rd->Q7x27_kybd_early_suspend_desc);
    rd->pdev = pdev;
#endif
#endif
/* } FIH, SimonSSChang, 2009/09/04 */

    //FIH_debug_log
    //printk(KERN_INFO "FIH: out Q7x27_kybd_probe()\n");
    return 0;
#if 0//misty+++
 failexit2:
    //FIH_debug_log#if CAMERA_KEY_ENABLE // Peter, Debug

    printk(KERN_INFO "FIH: error out failexit2\n");
    
	free_irq(MSM_GPIO_TO_INT(rd->key_1_pin), rd);
	free_irq(MSM_GPIO_TO_INT(rd->key_2_pin), rd);

#if VOLUME_KEY_ENABLE // Peter, Debug
	free_irq(MSM_GPIO_TO_INT(rd->volup_pin), rd);
	free_irq(MSM_GPIO_TO_INT(rd->voldn_pin), rd);
#endif

#if CAMERA_KEY_ENABLE // Peter, Debug
	free_irq(MSM_GPIO_TO_INT(rd->cam_sw_t_pin), rd);
	free_irq(MSM_GPIO_TO_INT(rd->cam_sw_f_pin), rd);
#endif

#if SWITCH_KEY_ENABLE // Peter, Debug
	free_irq(MSM_GPIO_TO_INT(rd->hook_sw_pin), rd);
#endif

/* FIH, PeterKCTseng, @20090527 { */
/* add center key                 */
#if CENTER_KEY_ENABLE // Peter, Debug
	free_irq(MSM_GPIO_TO_INT(rd->center_pin), rd);
#endif
/* } FIH, PeterKCTseng, @20090527 */

#endif//misty----
 failexit1:
    //FIH_debug_log
    //printk(KERN_INFO "FIH: error out failexit1\n");
    fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: error out failexit1\n");
	Q7x27_kybd_release_gpio(rd);
	kfree(rd);

    //FIH_debug_log
    //printk(KERN_INFO "FIH: error out Q7x27_kybd_probe()\n");
    return 0;
    
	return rc;
}
Exemple #2
0
void mdp_hw_init(void)
{
	int i;

/* { FIH, ChandlerKang, chandler_boot_lcdc, 09/9/24 */
#ifdef CONFIG_FIH_FXX    
	int id;
	int mddi_type=0;
	
    id=FIH_READ_HWID_FROM_SMEM();
    
    if( (CMCS_CTP_PR1 <= id && id < CMCS_7627_EVB1 ) || (CMCS_7627_PR1 <= id) ) {
        mddi_type=1;
        printk( KERN_INFO "mdp_hw_init():  MDDI panel, default way !!\n");
    }else{
        printk( KERN_INFO "mdp_hw_init():  RGB panel, skip mdp power on!!\n");
    }
#endif    
    //mddi_type=1;//chandler_porting: workaround for porting
/* } FIH, ChandlerKang, 09/9/24 */

	/* MDP cmd block enable */
	//chandler_boot_lcdc
	if(mddi_type){
        mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
	}

	/* debug interface write access */
	outpdw(MDP_BASE + 0x60, 1);

	outp32(MDP_INTR_ENABLE, MDP_ANY_INTR_MASK);
	outp32(MDP_EBI2_PORTMAP_MODE, 0x3);
	outpdw(MDP_CMD_DEBUG_ACCESS_BASE + 0x01f8, 0x0);
	outpdw(MDP_CMD_DEBUG_ACCESS_BASE + 0x01fc, 0x0);
	outpdw(MDP_BASE + 0x60, 0x1);
	mdp_load_lut_param();

	/*
	 * clear up unused fg/main registers
	 */
	/* comp.plane 2&3 ystride */
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0120, 0x0);
	/* unpacked pattern */
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x012c, 0x0);
	/* unpacked pattern */
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0130, 0x0);
	/* unpacked pattern */
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0134, 0x0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0158, 0x0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x15c, 0x0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0160, 0x0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0170, 0x0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0174, 0x0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x017c, 0x0);

	/* comp.plane 2 */
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0114, 0x0);
	/* comp.plane 3 */
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0118, 0x0);

	/* clear up unused bg registers */
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x01c8, 0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x01d0, 0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x01dc, 0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x01e0, 0);
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x01e4, 0);

#ifndef CONFIG_FB_MSM_MDP22
    //chandler_boot_lcdc
    if(mddi_type){
	MDP_OUTP(MDP_BASE + 0xE0000, 0);
    }else{
        MDP_OUTP(MDP_BASE + 0xE0000, 1);
    }
	
	MDP_OUTP(MDP_BASE + 0x100, 0xffffffff);
	MDP_OUTP(MDP_BASE + 0x90070, 0);
	MDP_OUTP(MDP_BASE + 0x94010, 1);
	MDP_OUTP(MDP_BASE + 0x9401c, 2);
#endif

	/*
	 * limit vector
	 * pre gets applied before color matrix conversion
	 * post is after ccs
	 */
	writel(mdp_plv[0], MDP_CSC_PRE_LV1n(0));
	writel(mdp_plv[1], MDP_CSC_PRE_LV1n(1));
	writel(mdp_plv[2], MDP_CSC_PRE_LV1n(2));
	writel(mdp_plv[3], MDP_CSC_PRE_LV1n(3));

#ifdef CONFIG_FB_MSM_MDP31
	writel(mdp_plv[2], MDP_CSC_PRE_LV1n(4));
	writel(mdp_plv[3], MDP_CSC_PRE_LV1n(5));

	writel(0, MDP_CSC_POST_LV1n(0));
	writel(0xff, MDP_CSC_POST_LV1n(1));
	writel(0, MDP_CSC_POST_LV1n(2));
	writel(0xff, MDP_CSC_POST_LV1n(3));
	writel(0, MDP_CSC_POST_LV1n(4));
	writel(0xff, MDP_CSC_POST_LV1n(5));

	writel(0, MDP_CSC_PRE_LV2n(0));
	writel(0xff, MDP_CSC_PRE_LV2n(1));
	writel(0, MDP_CSC_PRE_LV2n(2));
	writel(0xff, MDP_CSC_PRE_LV2n(3));
	writel(0, MDP_CSC_PRE_LV2n(4));
	writel(0xff, MDP_CSC_PRE_LV2n(5));

	writel(mdp_plv[0], MDP_CSC_POST_LV2n(0));
	writel(mdp_plv[1], MDP_CSC_POST_LV2n(1));
	writel(mdp_plv[2], MDP_CSC_POST_LV2n(2));
	writel(mdp_plv[3], MDP_CSC_POST_LV2n(3));
	writel(mdp_plv[2], MDP_CSC_POST_LV2n(4));
	writel(mdp_plv[3], MDP_CSC_POST_LV2n(5));
#endif

	/* primary forward matrix */
	for (i = 0; i < MDP_CCS_SIZE; i++)
		writel(mdp_ccs_rgb2yuv.ccs[i], MDP_CSC_PFMVn(i));

#ifdef CONFIG_FB_MSM_MDP31
	for (i = 0; i < MDP_BV_SIZE; i++)
		writel(mdp_ccs_rgb2yuv.bv[i], MDP_CSC_POST_BV2n(i));

	writel(0, MDP_CSC_PRE_BV2n(0));
	writel(0, MDP_CSC_PRE_BV2n(1));
	writel(0, MDP_CSC_PRE_BV2n(2));
#endif
	/* primary reverse matrix */
	for (i = 0; i < MDP_CCS_SIZE; i++)
		writel(mdp_ccs_yuv2rgb.ccs[i], MDP_CSC_PRMVn(i));

	for (i = 0; i < MDP_BV_SIZE; i++)
		writel(mdp_ccs_yuv2rgb.bv[i], MDP_CSC_PRE_BV1n(i));

#ifdef CONFIG_FB_MSM_MDP31
	writel(0, MDP_CSC_POST_BV1n(0));
	writel(0, MDP_CSC_POST_BV1n(1));
	writel(0, MDP_CSC_POST_BV1n(2));

	outpdw(MDP_BASE + 0x30010, 0x03e0);
	outpdw(MDP_BASE + 0x30014, 0x0360);
	outpdw(MDP_BASE + 0x30018, 0x0120);
	outpdw(MDP_BASE + 0x3001c, 0x0140);
#endif
	mdp_init_scale_table();

#ifndef CONFIG_FB_MSM_MDP31
	MDP_OUTP(MDP_CMD_DEBUG_ACCESS_BASE + 0x0104,
		 ((16 << 6) << 16) | (16) << 6);
#endif

	/* MDP cmd block disable */
	//chandler_boot_lcdc
	if(mddi_type){
    	mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
    }
}
Exemple #3
0
/* cm3602_init: init cm3602 driver
 * Its major is the same as misc and the minor is randomly assigned.
 * */
static int __init cm3602_init(void)
{
	int ret, rc;
	struct proc_dir_entry *entry; 	

	//use misc major number plus random minor number, and init device
	/*
	ret = misc_register(&cm3602_alsps_dev);
	if (ret){
		printk(KERN_WARNING "CM3602 ALSPS Unable to register misc device.\n");
		return ret;
	}
	*/
	ret = platform_driver_register(&ALSPS_driver);
	entry = create_proc_entry("driver/cm3602_alsps", 0, NULL);
	if (entry)
		entry->proc_fops = &cm3602_proc_ops;

	rc = gpio_request(CM3602_EN_GPIO, "alsps_enable");
	if (rc){
		return -EIO;
	}

	HWID = FIH_READ_HWID_FROM_SMEM();
	if (!((HWID >= CMCS_RTP_PR2) && ((HWID <= CMCS_RTP_MP3)))){
		
	rc = gpio_tlmm_config(GPIO_CFG(CM3602_EN_GPIO, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
	if (rc) {
		return -EIO;
	}	
	gpio_direction_output(CM3602_EN_GPIO, 1);
	gpio_free(CM3602_EN_GPIO);
#ifndef DISABLE_PROXIMITY
//FIH, HenryJuang 2009/11/11 ++
/* Enable Proximaty wake source.*/
	if (HWID == CMCS_HW_VER_EVB1)
		cm3602_irq = MSM_GPIO_TO_INT(CM3602_EVB1_PS_GPIO_OUT);
	else
		cm3602_irq = MSM_GPIO_TO_INT(CM3602_PR1_PS_GPIO_OUT);
/* FIH, Henry Juang, 2009/11/20 ++*/
/* [FXX_CR], Add for proximity driver to turn on/off BL and TP. */
	ret = request_irq( cm3602_irq, &cm3602_isr, IRQF_TRIGGER_RISING |IRQF_TRIGGER_FALLING , "CM3602", NULL );
/* FIH, Henry Juang, 2009/11/20 --*/
	
	disable_irq(cm3602_irq);
	#endif
	}
	#ifndef DISABLE_PROXIMITY
	flag_cm3602_irq=0;
	isCM3602Suspend=0;
//FIH, HenryJuang 2009/11/11 --
	
	rc = gpio_tlmm_config(GPIO_CFG(CM3602_PS_GPIO, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
	if (rc) {
		return -EIO;
	}
	
	if (HWID == CMCS_HW_VER_EVB1)
	{
		rc = gpio_tlmm_config(GPIO_CFG(CM3602_EVB1_PS_GPIO_OUT, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN/*GPIO_CFG_NO_PULL*/, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
		if (rc) {
			return -EIO;
		}
	}
	else
	{
		rc = gpio_tlmm_config(GPIO_CFG(CM3602_PR1_PS_GPIO_OUT, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN/*GPIO_CFG_NO_PULL*/, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
		if (rc) {
			return -EIO;
		}
	}

	rc = gpio_request(CM3602_PS_GPIO, "alsps_prox");
	if (rc){
		return -EIO;
	}
	gpio_direction_output(CM3602_PS_GPIO, 0);

	rc = gpio_request(CM3602_EN_GPIO, "alsps_ena");
	if (rc){
		return -EIO;
	}

//FIH, HenryJuang 2009/11/11 ++
/* Enable Proximaty wake source.*/
	
	gpio_direction_output(CM3602_PS_GPIO, 1);

	if (HWID == CMCS_HW_VER_EVB1)
		gpio_request(CM3602_EVB1_PS_GPIO_OUT,"alsps_ps");
	else
		gpio_request(CM3602_PR1_PS_GPIO_OUT,"alsps_ps");
//FIH, HenryJuang 2009/11/11 --
/* Enable Proximaty wake source.*/
	if (HWID == CMCS_HW_VER_EVB1)
		gpio_direction_input(CM3602_EVB1_PS_GPIO_OUT);
	else
		gpio_direction_input(CM3602_PR1_PS_GPIO_OUT);
#endif
	return 0;
}