int tsp_reset( void ) { int ret=1; #if defined(__TOUCH_DEBUG__) printk("[TSP] %s, %d\n", __func__, __LINE__ ); #endif if (ts_global->use_irq) { disable_irq(ts_global->client->irq); } touch_ctrl_regulator(0); gpio_direction_output( TSP_SCL , 0 ); gpio_direction_output( TSP_SDA , 0 ); //gpio_direction_output( TSP_INT , 0 ); msleep(200); gpio_direction_output( TSP_SCL , 1 ); gpio_direction_output( TSP_SDA , 1 ); //gpio_direction_output( TSP_INT , 1 ); touch_ctrl_regulator(1); msleep(10); enable_irq(ts_global->client->irq); return ret; }
int tsp_reset( void ) { int ret=1; printk("[TSP] %s+\n", __func__ ); if (ts_global->use_irq) { disable_irq(ts_global->client->irq); } touch_ctrl_regulator(0); gpio_direction_output( TSP_SCL , 0 ); gpio_direction_output( TSP_SDA , 0 ); //gpio_direction_output( TSP_INT , 0 ); msleep( 5 ); gpio_direction_output( TSP_SCL , 1 ); gpio_direction_output( TSP_SDA , 1 ); //gpio_direction_output( TSP_INT , 1 ); touch_ctrl_regulator(1); msleep(10); enable_irq(ts_global->client->irq); return ret; }
static int synaptics_ts_suspend(struct i2c_client *client, pm_message_t mesg) { int ret; struct synaptics_ts_data *ts = i2c_get_clientdata(client); printk("[TSP] %s+\n", __func__ ); if (ts->use_irq) { disable_irq(client->irq); } gpio_direction_output( TSP_SCL , 0 ); gpio_direction_output( TSP_SDA , 0 ); //gpio_direction_output( TSP_INT , 0 ); ret = cancel_work_sync(&ts->work); if (ret && ts->use_irq) /* if work was pending disable-count is now 2 */ { enable_irq(client->irq); } msleep(20); touch_ctrl_regulator(TOUCH_OFF); printk("[TSP] %s-\n", __func__ ); return 0; }
static int synaptics_ts_resume(struct i2c_client *client) { int ret; struct synaptics_ts_data *ts = i2c_get_clientdata(client); uint8_t i2c_addr = 0x07; uint8_t buf[1]; printk("[TSP] %s+\n", __func__ ); if(now_tst200_update_luisa == 0) { gpio_direction_output( TSP_SCL , 1 ); gpio_direction_output( TSP_SDA , 1 ); //gpio_direction_output( TSP_INT , 1 ); gpio_direction_input(TSP_INT); bcm_gpio_pull_up_down_enable(TSP_INT, false); touch_ctrl_regulator(TOUCH_ON); msleep(100); prev_wdog_val = -1; if(touch_present == 1) hrtimer_start(&ts->timer, ktime_set(2, 0), HRTIMER_MODE_REL); enable_irq(client->irq); } printk("[TSP] %s-\n", __func__ ); return 0; }
static int synaptics_ts_suspend(struct i2c_client *client, pm_message_t mesg) { struct synaptics_ts_data *ts = i2c_get_clientdata(client); touch_ctrl_regulator(TOUCH_OFF); printk("[TSP] %s+\n", __func__ ); if (ts->use_irq) { disable_irq(client->irq); } printk("[TSP] %s-\n", __func__ ); return 0; }
static int synaptics_ts_suspend(struct i2c_client *client, pm_message_t mesg) { int ret; struct synaptics_ts_data *ts = i2c_get_clientdata(client); printk("[TSP] %s+\n", __func__ ); if(now_tst200_update_luisa == 0) { if (ts->use_irq) { disable_irq(client->irq); } if(touch_present == 1) hrtimer_cancel(&ts->timer); gpio_direction_output( TSP_INT , 0 ); gpio_direction_output( TSP_SCL , 0 ); gpio_direction_output( TSP_SDA , 0 ); bcm_gpio_pull_up(TSP_INT, false); bcm_gpio_pull_up_down_enable(TSP_INT, true); #if USE_THREADED_IRQ #else ret = cancel_work_sync(&ts->work); if (ret && ts->use_irq) /* if work was pending disable-count is now 2 */ { enable_irq(client->irq); } #endif msleep(20); touch_ctrl_regulator(TOUCH_OFF); if(g_touch_info_press == 1) { TSP_forced_release_forkey(ts); } } printk("[TSP] %s-\n", __func__ ); return 0; }
static int synaptics_ts_resume(struct i2c_client *client) { int ret; struct synaptics_ts_data *ts = i2c_get_clientdata(client); uint8_t i2c_addr = 0x1D; uint8_t buf[1]; #if 0//power_contol needs if (ts->power) { ret = ts->power(1); if (ret < 0) printk(KERN_ERR "synaptics_ts_resume power on failed\n"); } #endif //synaptics_init_panel(ts); touch_ctrl_regulator(TOUCH_ON); while (ts->use_irq) { msleep(20); ret = tsp_i2c_read( i2c_addr, buf, sizeof(buf)); if (ret <= 0) { printk("[TSP] %d : i2c_transfer failed\n", __LINE__); } else if ( buf[0] == 0 ) { continue; } else { printk("[TSP] %s:%d, ver SW=%x\n", __func__,__LINE__, buf[0] ); enable_irq(client->irq); break; } msleep(20); } printk("[TSP] %s-\n", __func__ ); return 0; }
static int synaptics_ts_resume(struct i2c_client *client) { int ret; struct synaptics_ts_data *ts = i2c_get_clientdata(client); uint8_t i2c_addr = 0x07; uint8_t buf[1]; printk("[TSP] %s+\n", __func__ ); gpio_direction_output( TSP_SCL , 1 ); gpio_direction_output( TSP_SDA , 1 ); //gpio_direction_output( TSP_INT , 1 ); touch_ctrl_regulator(TOUCH_ON); msleep(100); enable_irq(client->irq); printk("[TSP] %s-\n", __func__ ); return 0; }
static int synaptics_ts_probe( struct i2c_client *client, const struct i2c_device_id *id) { struct synaptics_ts_data *ts; uint8_t i2c_addr = 0x1B; uint8_t buf[3], buf_tmp[3]={0,0,0}; uint8_t addr[1]; int i, ret; #if defined (CONFIG_TOUCHSCREEN_MMS128_TASSCOOPER) printk("[TSP][Synaptics][%s] %s\n", __func__,"Called"); if(Is_MMS128_Connected()== 1) { printk("[TSP][Synaptics][%s] %s\n", __func__,"Melfas already detected !!"); return -ENXIO; } #endif printk("[TSP] %s, %d\n", __func__, __LINE__ ); touch_ctrl_regulator(TOUCH_ON); msleep(100); touch_ctrl_regulator(TOUCH_OFF); msleep(200); touch_ctrl_regulator(TOUCH_ON); msleep(100); ts = kzalloc(sizeof(*ts), GFP_KERNEL); if (ts == NULL) { ret = -ENOMEM; goto err_alloc_data_failed; } #if USE_THREADED_IRQ #else INIT_WORK(&ts->work, synaptics_ts_work_func); #endif ts->client = client; i2c_set_clientdata(client, ts); ts_global = ts; tsp_irq=client->irq; #if defined (CONFIG_TOUCHSCREEN_MMS128_TASSCOOPER) ret = synaptics_ts_check(); if (ret <= 0) { i2c_release_client(client); touch_ctrl_regulator(TOUCH_OFF); ret = -ENXIO; goto err_input_dev_alloc_failed; } #else /* Check point - i2c check - start */ //ret = tsp_i2c_read( 0x1B, buf_tmp, sizeof(buf_tmp)); for (i = 0; i < 1; i++) { printk("[TSP] %s, %d, send\n", __func__, __LINE__ ); addr[0] = 0x1B; //address ret = i2c_master_send(ts_global->client, addr, 1); if (ret >= 0) { printk("[TSP] %s, %d, receive\n", __func__, __LINE__ ); ret = i2c_master_recv(ts_global->client, buf_tmp, 3); if (ret >= 0) break; // i2c success } printk("[TSP] %s, %d, fail\n", __func__, __LINE__ ); } touch_vendor_id = buf_tmp[0]; touch_hw_ver = buf_tmp[1]; touch_sw_ver = buf_tmp[2]; printk("[TSP] %s:%d, ver tsp=%x, HW=%x, SW=%x\n", __func__,__LINE__, touch_vendor_id, touch_hw_ver, touch_sw_ver); #endif HW_ver = touch_hw_ver; if (ret <= 0) { printk("[TSP] %s, ln:%d, Failed to register TSP!!!\n\tcheck the i2c line!!!, ret=%d\n", __func__,__LINE__, ret); goto err_check_functionality_failed; } /* Check point - i2c check - end */ ts->input_dev = input_allocate_device(); if (ts->input_dev == NULL) { ret = -ENOMEM; printk(KERN_ERR "synaptics_ts_probe: Failed to allocate input device\n"); goto err_input_dev_alloc_failed; } ts->input_dev->name = "synaptics-rmi-touchscreen"; ts->input_dev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); ts->input_dev->keybit[BIT_WORD(KEY_POWER)] |= BIT_MASK(KEY_POWER); set_bit(BTN_TOUCH, ts->input_dev->keybit); set_bit(EV_ABS, ts->input_dev->evbit); ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, MAX_X, 0, 0); input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, MAX_Y, 0, 0); input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); set_bit(EV_SYN, ts->input_dev->evbit); set_bit(EV_KEY, ts->input_dev->evbit); /* ts->input_dev->name = ts->keypad_info->name; */ ret = input_register_device(ts->input_dev); if (ret) { printk(KERN_ERR "synaptics_ts_probe: Unable to register %s input device\n", ts->input_dev->name); goto err_input_register_device_failed; } printk("[TSP] %s, irq=%d\n", __func__, client->irq ); if (client->irq) { #if USE_THREADED_IRQ ret = request_threaded_irq(client->irq, synaptics_ts_irq_handler, synaptics_ts_work_func, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, client->name, ts); #else ret = request_irq(client->irq, synaptics_ts_irq_handler, IRQF_TRIGGER_FALLING, client->name, ts); #endif if (ret == 0) ts->use_irq = 1; else dev_err(&client->dev, "request_irq failed\n"); } if (!ts->use_irq) { hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); ts->timer.function = synaptics_ts_timer_func; hrtimer_start(&ts->timer, ktime_set(1, 0), HRTIMER_MODE_REL); } #if 1 #ifdef CONFIG_HAS_EARLYSUSPEND ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; ts->early_suspend.suspend = synaptics_ts_early_suspend; ts->early_suspend.resume = synaptics_ts_late_resume; register_early_suspend(&ts->early_suspend); #endif #endif printk(KERN_INFO "synaptics_ts_probe: Start touchscreen %s in %s mode\n", ts->input_dev->name, ts->use_irq ? "interrupt" : "polling"); /* sys fs */ touch_class = class_create(THIS_MODULE, "touch"); if (IS_ERR(touch_class)) pr_err("Failed to create class(touch)!\n"); firmware_dev = device_create(touch_class, NULL, 0, NULL, "firmware"); if (IS_ERR(firmware_dev)) pr_err("Failed to create device(firmware)!\n"); if (device_create_file(firmware_dev, &dev_attr_firmware) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_firmware.attr.name); if (device_create_file(firmware_dev, &dev_attr_firmware_ret) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_firmware_ret.attr.name); /* sys fs */ #if 0 if(buf_tmp[0]<HEX_HW_VER){ //Firmware Update firm_update(); }else if((buf_tmp[1]<HEX_SW_VER)||((buf_tmp[1]&0xF0)==0xF0)||(buf_tmp[1]==0)){ printk("[TSP] firm_update START!!, ln=%d\n",__LINE__); firm_update(); }else{ printk("[TSP] Firmware Version is Up-to-date.\n"); } #endif return 0; err_input_register_device_failed: input_free_device(ts->input_dev); err_input_dev_alloc_failed: kfree(ts); err_alloc_data_failed: err_check_functionality_failed: return ret; }
static int synaptics_ts_probe( struct i2c_client *client, const struct i2c_device_id *id) { struct synaptics_ts_data *ts; int ret = 0; uint8_t i2c_addr = 0x05; uint8_t buf[3]; int ret_temp=0; uint8_t buf_temp[3]; uint8_t i2c_addr_temp = 0x02; printk("[TSP] %s, %d\n", __func__, __LINE__ ); touch_ctrl_regulator(TOUCH_ON); msleep(100); ts = kzalloc(sizeof(*ts), GFP_KERNEL); if (ts == NULL) { ret = -ENOMEM; goto err_alloc_data_failed; } INIT_WORK(&ts->work, synaptics_ts_work_func); ts->client = client; i2c_set_clientdata(client, ts); ts_global = ts; /* Check point - i2c check - start */ ret = tsp_i2c_read( i2c_addr, buf, sizeof(buf)); if (ret <= 0) { printk(KERN_ERR "i2c_transfer failed\n"); ret = tsp_i2c_read( i2c_addr, buf, sizeof(buf)); if (ret <= 0) { printk("[TSP] %s, ln:%d, Failed to register TSP!!!\n\tcheck the i2c line!!!, ret=%d\n", __func__,__LINE__, ret); goto err_check_functionality_failed; } } /* Check point - i2c check - end */ ts->input_dev = input_allocate_device(); if (ts->input_dev == NULL) { ret = -ENOMEM; printk(KERN_ERR "synaptics_ts_probe: Failed to allocate input device\n"); goto err_input_dev_alloc_failed; } ts->input_dev->name = "synaptics-rmi-touchscreen"; set_bit(EV_SYN, ts->input_dev->evbit); set_bit(EV_KEY, ts->input_dev->evbit); set_bit(BTN_TOUCH, ts->input_dev->keybit); set_bit(EV_ABS, ts->input_dev->evbit); printk(KERN_INFO "synaptics_ts_probe: max_x: 240, max_y: 320\n"); input_set_abs_params(ts->input_dev, ABS_X, 0, MAX_X, 0, 0); input_set_abs_params(ts->input_dev, ABS_Y, 0, MAX_Y, 0, 0); input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 255, 0, 0); input_set_abs_params(ts->input_dev, ABS_TOOL_WIDTH, 0, 15, 0, 0); /* ts->input_dev->name = ts->keypad_info->name; */ ret = input_register_device(ts->input_dev); if (ret) { printk(KERN_ERR "synaptics_ts_probe: Unable to register %s input device\n", ts->input_dev->name); goto err_input_register_device_failed; } printk("[TSP] %s, irq=%d\n", __func__, client->irq ); if (client->irq) { ret = request_irq(client->irq, synaptics_ts_irq_handler,/* IRQF_TRIGGER_RISING |*/ IRQF_TRIGGER_FALLING , client->name, ts); if (ret == 0) ts->use_irq = 1; else dev_err(&client->dev, "request_irq failed\n"); } // hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); // ts->timer.function = synaptics_ts_timer_func; #ifdef CONFIG_HAS_EARLYSUSPEND ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1; ts->early_suspend.suspend = synaptics_ts_early_suspend; ts->early_suspend.resume = synaptics_ts_late_resume; register_early_suspend(&ts->early_suspend); #endif printk(KERN_INFO "synaptics_ts_probe: Start touchscreen %s in %s mode\n", ts->input_dev->name, ts->use_irq ? "interrupt" : "polling"); /* sys fs */ touch_class = class_create(THIS_MODULE, "touch"); if (IS_ERR(touch_class)) pr_err("Failed to create class(touch)!\n"); firmware_dev = device_create(touch_class, NULL, 0, NULL, "firmware"); if (IS_ERR(firmware_dev)) pr_err("Failed to create device(firmware)!\n"); if (device_create_file(firmware_dev, &dev_attr_firmware) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_firmware.attr.name); if (device_create_file(firmware_dev, &dev_attr_firmware_ret) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_firmware_ret.attr.name); /* sys fs */ /* Check point - Firmware */ printk("[TSP] %s, ver CY=%x\n", __func__ , buf[0] ); printk("[TSP] %s, ver HW=%x\n", __func__ , buf[1] ); printk("[TSP] %s, ver SW=%x\n", __func__ , buf[2] ); HW_ver = buf[1]; printk(KERN_INFO "synaptics_ts_probe: Manufacturer ID: %x, HW ver=%d\n", buf[0], HW_ver); /* Check point - Firmware */ ret_temp = tsp_i2c_read( i2c_addr_temp, buf_temp, sizeof(buf_temp)); if (ret_temp <= 0) { printk("[TSP] i2c failed : ret=%d, ln=%d\n",ret_temp, __LINE__); goto err_check_functionality_failed; } return 0; err_input_register_device_failed: input_free_device(ts->input_dev); err_input_dev_alloc_failed: kfree(ts); err_alloc_data_failed: err_check_functionality_failed: return ret; }
static int synaptics_ts_probe( struct i2c_client *client, const struct i2c_device_id *id) { struct synaptics_ts_data *ts; int i, ret = 0; uint8_t i2c_addr = 0; uint8_t addr[1]; uint8_t buf[11] = {0,}; int ret_temp=0; uint8_t buf_temp[3]; //uint8_t i2c_addr_temp = 0x02; printk("[TSP] %s, %d\n", __func__, __LINE__ ); touch_ctrl_regulator(TOUCH_ON); msleep(100); touch_ctrl_regulator(TOUCH_OFF); msleep(200); touch_ctrl_regulator(TOUCH_ON); msleep(100); ts = kzalloc(sizeof(*ts), GFP_KERNEL); if (ts == NULL) { ret = -ENOMEM; goto err_alloc_data_failed; } #if USE_THREADED_IRQ #else INIT_WORK(&ts->work, synaptics_ts_work_func); #endif INIT_WORK(&ts->work_timer, check_ic_work_func); ts->client = client; i2c_set_clientdata(client, ts); ts_global = ts; ts->input_dev = input_allocate_device(); if (ts->input_dev == NULL) { ret = -ENOMEM; printk(KERN_ERR "synaptics_ts_probe: Failed to allocate input device\n"); goto err_input_dev_alloc_failed; } ts->input_dev->name = "sec_touchscreen"; ts->input_dev->evbit[0] = BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); ts->input_dev->keybit[BIT_WORD(KEY_POWER)] |= BIT_MASK(KEY_POWER); set_bit(BTN_TOUCH, ts->input_dev->keybit); set_bit(EV_ABS, ts->input_dev->evbit); ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_ABS) | BIT_MASK(EV_KEY); printk(KERN_INFO "synaptics_ts_probe: max_x: 240, max_y: 320\n"); input_set_abs_params(ts->input_dev, ABS_X, 0, MAX_X, 0, 0); input_set_abs_params(ts->input_dev, ABS_Y, 0, MAX_Y, 0, 0); input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 255, 0, 0); input_set_abs_params(ts->input_dev, ABS_TOOL_WIDTH, 0, 15, 0, 0); set_bit(EV_SYN, ts->input_dev->evbit); set_bit(EV_KEY, ts->input_dev->evbit); hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); ts->timer.function = synaptics_watchdog_timer_func; /* Check point - i2c check - start */ //ret = tsp_i2c_read( i2c_addr, buf, sizeof(buf)); for (i = 0; i < 1; i++) { printk("[TSP] %s, %d, send\n", __func__, __LINE__ ); addr[0] = ADDR_TSP_VENDER_ID; //address ret = i2c_master_send(ts_global->client, addr, 1); if (ret >= 0) { printk("[TSP] %s, %d, receive\n", __func__, __LINE__ ); ret = i2c_master_recv(ts_global->client, buf, 3); if (ret >= 0) break; // i2c success } printk("[TSP] %s, %d, fail\n", __func__, __LINE__ ); } touch_vendor_id = buf[0]; touch_hw_ver = buf[1]; touch_sw_ver = buf[2]; printk("[TSP] %s:%d, ver tsp=%x, HW=%x, SW=%x\n", __func__,__LINE__, touch_vendor_id, touch_hw_ver, touch_sw_ver); HW_ver = touch_hw_ver; if(ret >= 0) { touch_present = 1; hrtimer_start(&ts->timer, ktime_set(2, 0), HRTIMER_MODE_REL); } else//if(ret < 0) { printk(KERN_ERR "i2c_transfer failed\n"); printk("[TSP] %s, ln:%d, Failed to register TSP!!!\n\tcheck the i2c line!!!, ret=%d\n", __func__,__LINE__, ret); goto err_check_functionality_failed; } /* Check point - i2c check - end */ /* ts->input_dev->name = ts->keypad_info->name; */ ret = input_register_device(ts->input_dev); if (ret) { printk(KERN_ERR "synaptics_ts_probe: Unable to register %s input device\n", ts->input_dev->name); goto err_input_register_device_failed; } printk("[TSP] %s, irq=%d\n", __func__, client->irq ); if (client->irq) { #if USE_THREADED_IRQ ret = request_threaded_irq(client->irq, synaptics_ts_irq_handler, synaptics_ts_work_func, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, client->name, ts); #else ret = request_irq(client->irq, synaptics_ts_irq_handler,/* IRQF_TRIGGER_RISING |*/ IRQF_TRIGGER_FALLING , client->name, ts); #endif if (ret == 0) ts->use_irq = 1; else dev_err(&client->dev, "request_irq failed\n"); } // hrtimer_init(&ts->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); // ts->timer.function = synaptics_ts_timer_func; #ifdef CONFIG_HAS_EARLYSUSPEND ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN+1; ts->early_suspend.suspend = synaptics_ts_early_suspend; ts->early_suspend.resume = synaptics_ts_late_resume; register_early_suspend(&ts->early_suspend); #endif printk(KERN_INFO "synaptics_ts_probe: Start touchscreen %s in %s mode\n", ts->input_dev->name, ts->use_irq ? "interrupt" : "polling"); /* sys fs */ touch_class = class_create(THIS_MODULE, "touch"); if (IS_ERR(touch_class)) pr_err("Failed to create class(touch)!\n"); firmware_dev = device_create(touch_class, NULL, 0, NULL, "firmware"); if (IS_ERR(firmware_dev)) pr_err("Failed to create device(firmware)!\n"); if (device_create_file(firmware_dev, &dev_attr_firmware) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_firmware.attr.name); if (device_create_file(firmware_dev, &dev_attr_firmware_ret) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_firmware_ret.attr.name); if (device_create_file(firmware_dev, &dev_attr_raw) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_raw.attr.name); if (device_create_file(firmware_dev, &dev_attr_raw_enable) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_raw_enable.attr.name); if (device_create_file(firmware_dev, &dev_attr_raw_disable) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_raw_disable.attr.name); if (device_create_file(firmware_dev, &dev_attr_rawdata_read) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_rawdata_read.attr.name); if (device_create_file(firmware_dev, &dev_attr_difference_read) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_difference_read.attr.name); if (device_create_file(firmware_dev, &dev_attr_raw_value) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_raw_value.attr.name); if (device_create_file(firmware_dev, &dev_attr_touch15test_enable) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_touch15test_enable.attr.name); if (device_create_file(firmware_dev, &dev_attr_touch15test_disable) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_touch15test_disable.attr.name); /* sys fs */ #if 0//SET_DOWNLOAD_BY_GPIO #if 0 if (/*(touch_vendor_id == TSP_VENDER_ID)&&*/( touch_hw_ver == TSP_HW_VER1)&&(touch_sw_ver < TSP_SW_VER1)) { printk("[TSP] Firmware update start!!\n" ); now_tst200_update_luisa = 1; firm_update(); now_tst200_update_luisa = 0; } else if (/*(touch_vendor_id == TSP_VENDER_ID)&&*/( touch_hw_ver == TSP_HW_VER2)&&(touch_sw_ver < TSP_SW_VER2)) { printk("[TSP] Firmware update start!!\n" ); now_tst200_update_luisa = 1; firm_update(); now_tst200_update_luisa = 0; } #endif { HW_ver = 0x03; printk("[TSP] Firmware update start!!\n" ); now_tst200_update_luisa = 1; firm_update(); now_tst200_update_luisa = 0; } #endif // SET_DOWNLOAD_BY_GPIO return 0; err_input_register_device_failed: input_free_device(ts->input_dev); err_input_dev_alloc_failed: kfree(ts); err_alloc_data_failed: err_check_functionality_failed: return ret; }