/* touch panel probe */ static int tpd_probe(struct platform_device *pdev) { int touch_type = 1; // 0:R-touch, 1: Cap-touch int i=0; TPD_DMESG("enter %s, %d\n", __FUNCTION__, __LINE__); /* Select R-Touch */ // if(g_tpd_drv == NULL||tpd_load_status == 0) #if 0 if(g_tpd_drv == NULL) { g_tpd_drv = &tpd_driver_list[0]; /* touch_type:0: r-touch, 1: C-touch */ touch_type = 0; TPD_DMESG("Generic touch panel driver\n"); } #ifdef CONFIG_HAS_EARLYSUSPEND MTK_TS_early_suspend_handler.suspend = g_tpd_drv->suspend; MTK_TS_early_suspend_handler.resume = g_tpd_drv->resume; register_early_suspend(&MTK_TS_early_suspend_handler); #endif #endif if (misc_register(&tpd_misc_device)) { printk("mtk_tpd: tpd_misc_device register failed\n"); } if((tpd=(struct tpd_device*)kmalloc(sizeof(struct tpd_device), GFP_KERNEL))==NULL) return -ENOMEM; memset(tpd, 0, sizeof(struct tpd_device)); /* allocate input device */ if((tpd->dev=input_allocate_device())==NULL) { kfree(tpd); return -ENOMEM; } //TPD_RES_X = simple_strtoul(LCM_WIDTH, NULL, 0); //TPD_RES_Y = simple_strtoul(LCM_HEIGHT, NULL, 0); TPD_RES_X = DISP_GetScreenWidth(); TPD_RES_Y = DISP_GetScreenHeight(); printk("mtk_tpd: TPD_RES_X = %d, TPD_RES_Y = %d\n", TPD_RES_X, TPD_RES_Y); tpd_mode = TPD_MODE_NORMAL; tpd_mode_axis = 0; tpd_mode_min = TPD_RES_Y/2; tpd_mode_max = TPD_RES_Y; tpd_mode_keypad_tolerance = TPD_RES_X*TPD_RES_X/1600; /* struct input_dev dev initialization and registration */ tpd->dev->name = TPD_DEVICE; set_bit(EV_ABS, tpd->dev->evbit); set_bit(EV_KEY, tpd->dev->evbit); set_bit(ABS_X, tpd->dev->absbit); set_bit(ABS_Y, tpd->dev->absbit); set_bit(ABS_PRESSURE, tpd->dev->absbit); set_bit(BTN_TOUCH, tpd->dev->keybit); set_bit(INPUT_PROP_DIRECT, tpd->dev->propbit); #if 1 for(i = 1; i < TP_DRV_MAX_COUNT; i++) { /* add tpd driver into list */ if(tpd_driver_list[i].tpd_device_name != NULL) { tpd_driver_list[i].tpd_local_init(); //msleep(1); if(tpd_load_status ==1) { TPD_DMESG("[mtk-tpd]tpd_probe, tpd_driver_name=%s\n", tpd_driver_list[i].tpd_device_name); g_tpd_drv = &tpd_driver_list[i]; break; } } } if(g_tpd_drv == NULL) { if(tpd_driver_list[0].tpd_device_name != NULL) { g_tpd_drv = &tpd_driver_list[0]; /* touch_type:0: r-touch, 1: C-touch */ touch_type = 0; g_tpd_drv->tpd_local_init(); TPD_DMESG("[mtk-tpd]Generic touch panel driver\n"); } else { TPD_DMESG("[mtk-tpd]cap touch and Generic touch both are not loaded!!\n"); return 0; } } #ifdef CONFIG_HAS_EARLYSUSPEND MTK_TS_early_suspend_handler.suspend = g_tpd_drv->suspend; MTK_TS_early_suspend_handler.resume = g_tpd_drv->resume; register_early_suspend(&MTK_TS_early_suspend_handler); #endif #endif //#ifdef TPD_TYPE_CAPACITIVE /* TPD_TYPE_CAPACITIVE handle */ if(touch_type == 1){ set_bit(ABS_MT_TRACKING_ID, tpd->dev->absbit); set_bit(ABS_MT_TOUCH_MAJOR, tpd->dev->absbit); set_bit(ABS_MT_TOUCH_MINOR, tpd->dev->absbit); set_bit(ABS_MT_POSITION_X, tpd->dev->absbit); set_bit(ABS_MT_POSITION_Y, tpd->dev->absbit); #if 0 // linux kernel update from 2.6.35 --> 3.0 tpd->dev->absmax[ABS_MT_POSITION_X] = TPD_RES_X; tpd->dev->absmin[ABS_MT_POSITION_X] = 0; tpd->dev->absmax[ABS_MT_POSITION_Y] = TPD_RES_Y; tpd->dev->absmin[ABS_MT_POSITION_Y] = 0; tpd->dev->absmax[ABS_MT_TOUCH_MAJOR] = 100; tpd->dev->absmin[ABS_MT_TOUCH_MINOR] = 0; #else input_set_abs_params(tpd->dev, ABS_MT_POSITION_X, 0, TPD_RES_X, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_POSITION_Y, 0, TPD_RES_Y, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MAJOR, 0, 100, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MINOR, 0, 100, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_PRESSURE, 0, 255, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_WIDTH_MAJOR, 0, 15, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_WIDTH_MINOR, 0, 15, 0, 0); #endif TPD_DMESG("Cap touch panel driver\n"); } //#endif #if 0 //linux kernel update from 2.6.35 --> 3.0 tpd->dev->absmax[ABS_X] = TPD_RES_X; tpd->dev->absmin[ABS_X] = 0; tpd->dev->absmax[ABS_Y] = TPD_RES_Y; tpd->dev->absmin[ABS_Y] = 0; tpd->dev->absmax[ABS_PRESSURE] = 255; tpd->dev->absmin[ABS_PRESSURE] = 0; #else input_set_abs_params(tpd->dev, ABS_X, 0, TPD_RES_X, 0, 0); input_set_abs_params(tpd->dev, ABS_Y, 0, TPD_RES_Y, 0, 0); input_abs_set_res(tpd->dev, ABS_X, TPD_RES_X); input_abs_set_res(tpd->dev, ABS_Y, TPD_RES_Y); input_set_abs_params(tpd->dev, ABS_PRESSURE, 0, 255, 0, 0); #endif if(input_register_device(tpd->dev)) TPD_DMESG("input_register_device failed.(tpd)\n"); else tpd_register_flag = 1; /* init R-Touch */ #if 0 if(touch_type == 0) { g_tpd_drv->tpd_local_init(); } #endif if(g_tpd_drv->tpd_have_button) { tpd_button_init(); } if (g_tpd_drv->attrs.num) tpd_create_attributes(&pdev->dev, &g_tpd_drv->attrs); #if defined(TARGET_S4) synaptics_init_sysfs (); #else if(SEL_SYSFS == 1) { synaptics_init_sysfs (); } else if(SEL_SYSFS == 2) { LU201x_init_sysfs (); } #endif return 0; }
/* touch panel probe */ static int tpd_probe(struct platform_device *pdev) { int touch_type = 1; // 0:R-touch, 1: Cap-touch int i=0; TPD_DMESG("enter %s, %d\n", __FUNCTION__, __LINE__); /* Select R-Touch */ // if(g_tpd_drv == NULL||tpd_load_status == 0) #if 0 if(g_tpd_drv == NULL) { g_tpd_drv = &tpd_driver_list[0]; /* touch_type:0: r-touch, 1: C-touch */ touch_type = 0; TPD_DMESG("Generic touch panel driver\n"); } #ifdef CONFIG_HAS_EARLYSUSPEND MTK_TS_early_suspend_handler.suspend = g_tpd_drv->suspend; MTK_TS_early_suspend_handler.resume = g_tpd_drv->resume; register_early_suspend(&MTK_TS_early_suspend_handler); #endif #endif /*Begin lenovo-sw wengjun1 add for tp info struct. 2014-1-15*/ tpd_info_t = (struct tpd_version_info*)kmalloc(sizeof(struct tpd_version_info), GFP_KERNEL); /*End lenovo-sw wengjun1 add for tp info struct. 2014-1-15*/ if (misc_register(&tpd_misc_device)) { printk("mtk_tpd: tpd_misc_device register failed\n"); } if((tpd=(struct tpd_device*)kmalloc(sizeof(struct tpd_device), GFP_KERNEL))==NULL) return -ENOMEM; memset(tpd, 0, sizeof(struct tpd_device)); /* allocate input device */ if((tpd->dev=input_allocate_device())==NULL) { kfree(tpd); return -ENOMEM; } //TPD_RES_X = simple_strtoul(LCM_WIDTH, NULL, 0); //TPD_RES_Y = simple_strtoul(LCM_HEIGHT, NULL, 0); TPD_RES_X = DISP_GetScreenWidth(); TPD_RES_Y = DISP_GetScreenHeight(); printk("mtk_tpd: TPD_RES_X = %d, TPD_RES_Y = %d\n", TPD_RES_X, TPD_RES_Y); tpd_mode = TPD_MODE_NORMAL; tpd_mode_axis = 0; tpd_mode_min = TPD_RES_Y/2; tpd_mode_max = TPD_RES_Y; tpd_mode_keypad_tolerance = TPD_RES_X*TPD_RES_X/1600; /* struct input_dev dev initialization and registration */ tpd->dev->name = TPD_DEVICE; set_bit(EV_ABS, tpd->dev->evbit); set_bit(EV_KEY, tpd->dev->evbit); /*Lenovo-sw wengjun1 remove unused attributes*/ #ifndef LENOVO_TP_OPTIMIZED set_bit(ABS_X, tpd->dev->absbit); set_bit(ABS_Y, tpd->dev->absbit); set_bit(ABS_PRESSURE, tpd->dev->absbit); set_bit(BTN_TOUCH, tpd->dev->keybit); #endif /*Lenovo-sw remove end*/ set_bit(INPUT_PROP_DIRECT, tpd->dev->propbit); #if 1 for(i = 1; i < TP_DRV_MAX_COUNT; i++) { /* add tpd driver into list */ if(tpd_driver_list[i].tpd_device_name != NULL) { tpd_driver_list[i].tpd_local_init(); //msleep(1); if(tpd_load_status ==1) { TPD_DMESG("[mtk-tpd]tpd_probe, tpd_driver_name=%s\n", tpd_driver_list[i].tpd_device_name); g_tpd_drv = &tpd_driver_list[i]; break; } } } if(g_tpd_drv == NULL) { if(tpd_driver_list[0].tpd_device_name != NULL) { g_tpd_drv = &tpd_driver_list[0]; /* touch_type:0: r-touch, 1: C-touch */ touch_type = 0; g_tpd_drv->tpd_local_init(); TPD_DMESG("[mtk-tpd]Generic touch panel driver\n"); } else { TPD_DMESG("[mtk-tpd]cap touch and Generic touch both are not loaded!!\n"); return 0; } } #ifdef CONFIG_HAS_EARLYSUSPEND MTK_TS_early_suspend_handler.suspend = g_tpd_drv->suspend; MTK_TS_early_suspend_handler.resume = g_tpd_drv->resume; //liangzhiqiang add for tp wakeup if(lct_tp_early_suspend == 0) { MTK_TS_early_suspend_handler.level = EARLY_SUSPEND_LEVEL_DISABLE_FB+10; } register_early_suspend(&MTK_TS_early_suspend_handler); #endif #endif //#ifdef TPD_TYPE_CAPACITIVE /* TPD_TYPE_CAPACITIVE handle */ if(touch_type == 1){ set_bit(ABS_MT_TRACKING_ID, tpd->dev->absbit); set_bit(ABS_MT_TOUCH_MAJOR, tpd->dev->absbit); /*Lenovo-sw wengjun1 remove unused attributes*/ #ifndef LENOVO_TP_OPTIMIZED set_bit(ABS_MT_TOUCH_MINOR, tpd->dev->absbit); #endif /*Lenovo-sw remove end*/ set_bit(ABS_MT_POSITION_X, tpd->dev->absbit); set_bit(ABS_MT_POSITION_Y, tpd->dev->absbit); #if 0 // linux kernel update from 2.6.35 --> 3.0 tpd->dev->absmax[ABS_MT_POSITION_X] = TPD_RES_X; tpd->dev->absmin[ABS_MT_POSITION_X] = 0; tpd->dev->absmax[ABS_MT_POSITION_Y] = TPD_RES_Y; tpd->dev->absmin[ABS_MT_POSITION_Y] = 0; tpd->dev->absmax[ABS_MT_TOUCH_MAJOR] = 100; tpd->dev->absmin[ABS_MT_TOUCH_MINOR] = 0; #else input_set_abs_params(tpd->dev, ABS_MT_POSITION_X, 0, TPD_RES_X, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_POSITION_Y, 0, TPD_RES_Y, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MAJOR, 0, 100, 0, 0); /*Lenovo-sw wengjun1 remove unused attributes*/ #ifndef LENOVO_TP_OPTIMIZED input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MINOR, 0, 100, 0, 0); #endif /*Lenovo-sw remove end*/ #endif TPD_DMESG("Cap touch panel driver\n"); } //#endif #if 0 //linux kernel update from 2.6.35 --> 3.0 tpd->dev->absmax[ABS_X] = TPD_RES_X; tpd->dev->absmin[ABS_X] = 0; tpd->dev->absmax[ABS_Y] = TPD_RES_Y; tpd->dev->absmin[ABS_Y] = 0; tpd->dev->absmax[ABS_PRESSURE] = 255; tpd->dev->absmin[ABS_PRESSURE] = 0; #else /*Lenovo-sw wengjun1 remove unused attributes*/ #ifndef LENOVO_TP_OPTIMIZED input_set_abs_params(tpd->dev, ABS_X, 0, TPD_RES_X, 0, 0); input_set_abs_params(tpd->dev, ABS_Y, 0, TPD_RES_Y, 0, 0); input_abs_set_res(tpd->dev, ABS_X, TPD_RES_X); input_abs_set_res(tpd->dev, ABS_Y, TPD_RES_Y); input_set_abs_params(tpd->dev, ABS_PRESSURE, 0, 255, 0, 0); #endif /*Lenovo-sw remove end*/ #endif if(input_register_device(tpd->dev)) TPD_DMESG("input_register_device failed.(tpd)\n"); else tpd_register_flag = 1; /* init R-Touch */ #if 0 if(touch_type == 0) { g_tpd_drv->tpd_local_init(); } #endif //lenovo-wengjun1 #if 1 //defined(LENOVO_PRODUCT_DEVICE==S960) //#if(LENOVO_PRODUCT_DEVICE == 920) //if(g_tpd_drv->tpd_have_button) #else if(g_tpd_drv->tpd_have_button) #endif { tpd_button_init(); } if (g_tpd_drv->attrs.num) tpd_create_attributes(&pdev->dev, &g_tpd_drv->attrs); #if 1 if(device_create_file(&pdev->dev, &dev_attr_tpd_fw_version)) { TPD_DMESG("create fw_version file error--Liu\n"); } if(device_create_file(&pdev->dev, &dev_attr_tpd_fw_vendor_info)) { TPD_DMESG("create touch_info file error--Liu\n"); } if(device_create_file(&pdev->dev, &dev_attr_tpd_fw_chip_info)) { TPD_DMESG("create touch_info file error--Liu\n"); } #endif return 0; }
/* touch panel probe */ static int tpd_probe(struct platform_device *pdev) { int touch_type = 1; /* 0:R-touch, 1: Cap-touch */ int i = 0; TPD_DMESG("enter %s, %d\n", __func__, __LINE__); /* Select R-Touch */ /* if(g_tpd_drv == NULL||tpd_load_status == 0) */ #if 0 if (g_tpd_drv == NULL) { g_tpd_drv = &tpd_driver_list[0]; /* touch_type:0: r-touch, 1: C-touch */ touch_type = 0; TPD_DMESG("Generic touch panel driver\n"); } #ifdef CONFIG_HAS_EARLYSUSPEND MTK_TS_early_suspend_handler.suspend = g_tpd_drv->suspend; MTK_TS_early_suspend_handler.resume = g_tpd_drv->resume; register_early_suspend(&MTK_TS_early_suspend_handler); #endif #endif if (misc_register(&tpd_misc_device)) { printk("mtk_tpd: tpd_misc_device register failed\n"); } if ((tpd = (struct tpd_device *)kmalloc(sizeof(struct tpd_device), GFP_KERNEL)) == NULL) return -ENOMEM; memset(tpd, 0, sizeof(struct tpd_device)); /* allocate input device */ if ((tpd->dev = input_allocate_device()) == NULL) { kfree(tpd); return -ENOMEM; } /* TPD_RES_X = simple_strtoul(LCM_WIDTH, NULL, 0); */ /* TPD_RES_Y = simple_strtoul(LCM_HEIGHT, NULL, 0); */ #ifdef CONFIG_MTK_LCM_PHYSICAL_ROTATION if(0 == strncmp(CONFIG_MTK_LCM_PHYSICAL_ROTATION, "90", 2) || 0 == strncmp(CONFIG_MTK_LCM_PHYSICAL_ROTATION, "270", 3)) { TPD_RES_Y = DISP_GetScreenWidth(); TPD_RES_X = DISP_GetScreenHeight(); } else #endif { #ifdef CONFIG_CUSTOM_LCM_X #ifndef CONFIG_MTK_FPGA TPD_RES_X = DISP_GetScreenWidth(); TPD_RES_Y = DISP_GetScreenHeight(); #endif #else TPD_RES_X = simple_strtoul(CONFIG_LCM_WIDTH, NULL, 0); TPD_RES_Y = simple_strtoul(CONFIG_LCM_HEIGHT, NULL, 0); #endif } printk("mtk_tpd: TPD_RES_X = %d, TPD_RES_Y = %d\n", TPD_RES_X, TPD_RES_Y); tpd_mode = TPD_MODE_NORMAL; tpd_mode_axis = 0; tpd_mode_min = TPD_RES_Y / 2; tpd_mode_max = TPD_RES_Y; tpd_mode_keypad_tolerance = TPD_RES_X * TPD_RES_X / 1600; /* struct input_dev dev initialization and registration */ tpd->dev->name = TPD_DEVICE; set_bit(EV_ABS, tpd->dev->evbit); set_bit(EV_KEY, tpd->dev->evbit); set_bit(ABS_X, tpd->dev->absbit); set_bit(ABS_Y, tpd->dev->absbit); set_bit(ABS_PRESSURE, tpd->dev->absbit); #if !defined(CONFIG_MTK_S3320) && !defined(CONFIG_MTK_S3320_47) && !defined(CONFIG_MTK_S3320_50) && !defined(CONFIG_MTK_MIT200) && !defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S3528) && !defined(CONFIG_MTK_S7020) set_bit(BTN_TOUCH, tpd->dev->keybit); #endif /* CONFIG_MTK_S3320 */ set_bit(INPUT_PROP_DIRECT, tpd->dev->propbit); /* save dev for regulator_get() before tpd_local_init() */ tpd->tpd_dev = &pdev->dev; #if 1 for (i = 1; i < TP_DRV_MAX_COUNT; i++) { /* add tpd driver into list */ if (tpd_driver_list[i].tpd_device_name != NULL) { tpd_driver_list[i].tpd_local_init(); /* msleep(1); */ if (tpd_load_status == 1) { TPD_DMESG("[mtk-tpd]tpd_probe, tpd_driver_name=%s\n", tpd_driver_list[i].tpd_device_name); g_tpd_drv = &tpd_driver_list[i]; break; } } } if (g_tpd_drv == NULL) { if (tpd_driver_list[0].tpd_device_name != NULL) { g_tpd_drv = &tpd_driver_list[0]; /* touch_type:0: r-touch, 1: C-touch */ touch_type = 0; g_tpd_drv->tpd_local_init(); TPD_DMESG("[mtk-tpd]Generic touch panel driver\n"); } else { TPD_DMESG("[mtk-tpd]cap touch and Generic touch both are not loaded!!\n"); return 0; } } #ifdef CONFIG_HAS_EARLYSUSPEND #ifndef CONFIG_MTK_FPGA MTK_TS_early_suspend_handler.suspend = g_tpd_drv->suspend; MTK_TS_early_suspend_handler.resume = g_tpd_drv->resume; #ifdef CONFIG_EARLYSUSPEND register_early_suspend(&MTK_TS_early_suspend_handler); #endif #endif #endif #endif /* #ifdef TPD_TYPE_CAPACITIVE */ /* TPD_TYPE_CAPACITIVE handle */ if (touch_type == 1) { set_bit(ABS_MT_TRACKING_ID, tpd->dev->absbit); set_bit(ABS_MT_TOUCH_MAJOR, tpd->dev->absbit); set_bit(ABS_MT_TOUCH_MINOR, tpd->dev->absbit); set_bit(ABS_MT_POSITION_X, tpd->dev->absbit); set_bit(ABS_MT_POSITION_Y, tpd->dev->absbit); #if 0 /* linux kernel update from 2.6.35 --> 3.0 */ tpd->dev->absmax[ABS_MT_POSITION_X] = TPD_RES_X; tpd->dev->absmin[ABS_MT_POSITION_X] = 0; tpd->dev->absmax[ABS_MT_POSITION_Y] = TPD_RES_Y; tpd->dev->absmin[ABS_MT_POSITION_Y] = 0; tpd->dev->absmax[ABS_MT_TOUCH_MAJOR] = 100; tpd->dev->absmin[ABS_MT_TOUCH_MINOR] = 0; #else input_set_abs_params(tpd->dev, ABS_MT_POSITION_X, 0, TPD_RES_X, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_POSITION_Y, 0, TPD_RES_Y, 0, 0); #if defined(CONFIG_MTK_S3320) || defined(CONFIG_MTK_S3320_47) || defined(CONFIG_MTK_S3320_50) || defined(CONFIG_MTK_MIT200) || defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S3528) || defined(CONFIG_MTK_S7020) input_set_abs_params(tpd->dev, ABS_MT_PRESSURE, 0, 255, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_WIDTH_MAJOR, 0, 15, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_WIDTH_MINOR, 0, 15, 0, 0); input_mt_init_slots(tpd->dev, 10, 0); #else input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MAJOR, 0, 100, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MINOR, 0, 100, 0, 0); #endif /* CONFIG_MTK_S3320 */ #endif TPD_DMESG("Cap touch panel driver\n"); } /* #endif */ #if 0 /* linux kernel update from 2.6.35 --> 3.0 */ tpd->dev->absmax[ABS_X] = TPD_RES_X; tpd->dev->absmin[ABS_X] = 0; tpd->dev->absmax[ABS_Y] = TPD_RES_Y; tpd->dev->absmin[ABS_Y] = 0; tpd->dev->absmax[ABS_PRESSURE] = 255; tpd->dev->absmin[ABS_PRESSURE] = 0; #else input_set_abs_params(tpd->dev, ABS_X, 0, TPD_RES_X, 0, 0); input_set_abs_params(tpd->dev, ABS_Y, 0, TPD_RES_Y, 0, 0); input_abs_set_res(tpd->dev, ABS_X, TPD_RES_X); input_abs_set_res(tpd->dev, ABS_Y, TPD_RES_Y); input_set_abs_params(tpd->dev, ABS_PRESSURE, 0, 255, 0, 0); input_set_abs_params(tpd->dev, ABS_MT_TRACKING_ID, 0, 10, 0, 0); #endif if (input_register_device(tpd->dev)) TPD_DMESG("input_register_device failed.(tpd)\n"); else tpd_register_flag = 1; /* init R-Touch */ #if 0 if (touch_type == 0) { g_tpd_drv->tpd_local_init(); } #endif if (g_tpd_drv->tpd_have_button) { tpd_button_init(); } if (g_tpd_drv->attrs.num) tpd_create_attributes(&pdev->dev, &g_tpd_drv->attrs); return 0; }