//---------------------------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; }
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); } }
/* 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; }