原创 敦泰电容屏芯片FT5X06 IIC参考驱动(2)

2012-4-18 10:33 2909 15 16 分类: 消费电子

 

  
static void ft5x0x_ts_pen_irq_work(struct work_struct *work)  
{  
    int ret = -1;  
  
    ret = ft5x0x_read_data();  
    if (ret == 0)  
        ft5x0x_report_value();  
}  
  
static interrupt_r ft5x0x_ts_interrupt(int irq, void *dev_id)  
{  
    struct ft5x0x_ts_data *ft5x0x_ts = dev_id;  
  
    if (!work_pending(&ft5x0x_ts->pen_irq_work))  
        queue_work(ft5x0x_ts->ts_workqueue, &ft5x0x_ts->pen_irq_work);  
  
    return IRQ_HANDLED;  
}  
  
#ifdef CONFIG_HAS_EARLYSUSPEND  
static void ft5x0x_ts_suspend(struct early_suspend *handler)  
{  
    struct ft5x0x_ts_data *ft5x0x_ts;  
  
    ts = container_of(handler, struct ft5x0x_ts_data, early_suspend);  
    disable_irq(this_client->irq);  
    cancel_workqueue(ft5x0x_ts->pen_irq_work);  
    flush_workqueue(ft5x0x_ts->ts_workqueue);  
  
    ft5x0x_write_reg(FT5X0X_REG_PMODE, PMODE_MONITOR);  
  
    printk("[FST] %s\n", __func__);  
}  
  
static void ft5x0x_ts_resume(struct early_suspend *handler)  
{  
    ventana_touchscreen_reset();  
  
    enable_irq(this_client->irq);  
      
    ft5x0x_write_reg(FT5X0X_REG_PMODE, PMODE_ACTIVE);  
      
    printk("[FST] %s\n", __func__);  
}  
#endif  
  
static int ft5x0x_ts_probe(struct i2c_client *client, const struct i2c_device_id, *id)  
{     
    int err = 0;  
    struct ft5x0x_ts_data *ft5x0x_ts;  
    struct input_dev *input_dev;  
  
    if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {  
        err = -ENODEV;  
        goto exit_i2c_check_functionality;  
    }  
      
    ft5x0x_ts = kzalloc(sizeof(ft5x0x_ts_data), GPL_KERNEL);  
    if (!ft5x0x_ts) {  
        err = -ENOMEM;  
        goto exit_alloc_data;  
    }  
  
    this_client = client;  
  
    i2c_set_clientdata(client, ft5x0x_ts);  
  
    INIT_WORK(&ft5x0x_ts->pen_event_work, ft5x0x_ts_pen_irq_work);  
  
    ft5x0x_ts->ts_workqueue = create_siglethread_workqueue(dev_name(&client->dev));  
  
    if (!ft5x0x_ts->ts_workqueue) {  
        err = -ESRCH;  
        goto exit_create_siglethread;  
    }  
  
    err = request_irq(client->irq, ft5x0x_ts_interrupt, IRQF_TRIGGER_FALLING, "ft5x0x-irq", ft5x0x_ts);  
    if (err < 0) {  
        dev_err(&client->dev, "ft5x0x_ts_probe: request irq failed\n");  
        goto exit_irq_request;  
    }  
  
    disable_irq(this_client-irq);  
  
    input_dev = input_allocate_device();  
    if (!input_dev) {  
        err = -ENOMEM;  
        dev_err(&client-dev, "ft5x0x_ts_probe: failed alloc input device\n");  
    }  
  
    ft5x0x_ts->input_dev = input_dev;  
  
    input_dev->name = FT5X0X_NAME;  
  
    set_bit(EV_ABS, input_dev->evbit);  
    set_bit(EV_KEY, input_dev->evbit);  
    set_bit(BTN_TOUCH, input_dev->keybit);  
  
#ifdef FT5X0X_MULTI_TOUCH  
    set_bit(ABS_MT_TOUCH_MAJOR, input_dev->absbit);  
    set_bit(ABS_MT_POSITION_X, input_dev->absbit);  
    set_bit(ABS_MT_POSITION_Y, input_dev->absbit);  
    set_bit(ABS_MT_WIDTH_MAJOR, input_dev->absbit);  
  
    input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0, SCREEN_MAX_X, 0, 0);  
    input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0, SCREEN_MAX_Y, 0, 0);  
    input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, PRESS_MAX, 0, 0);  
    input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, 200, 0, 0);  
#else  
    set_bit(ABS_X, input_dev->absbit);  
    set_bit(ABS_Y, input_dev->absbit);  
    set_bit(ABS_PRESSURE, input_dev->absbit);  
    set_bit(BTN_TOUCH, input_dev->keybit);  
  
    input_set_abs_params(input_dev, ABS_X, 0, SCREEN_MAX_X, 0, 0);  
    input_set_abs_params(input_dev, ABS_Y, 0, SCREEN_MAX_Y, 0, 0);  
    input_set_abs_params(input_dev, ABS_PRESSURE, 0, PRESS_MAX, 0 , 0);  
  
    err = input_register_device(input_dev);  
    if (err) {  
        dev_err(&client->dev, "ft5x0x_ts_probe: failed to register input device: %s\n",   
                dev_name(&client->dev));  
        goto exit_input_register_device;  
    }  
#endif  
  
#ifdef CONFIG_HAS_EARLYSUSPEND  
    ft5x0x_ts->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;  
    ft5x0x_ts->early_suspend.suspend = ft5x0x_ts_suspend;  
    ft5x0x_ts->early_suspend.resume = ft5x0x_ts_resume;  
    register_early_suspend(ft5x0x_ts->early_suspend);  
#endif  
    msleep(50);  
  
    //Get some register information  
    uc_reg_value = ft5x0x_read_fw_ver();  
    printk("[FST] Firmware version = 0x%sx\n", uc_reg_value);  
  
    //Auto calibration  
    err = ft5x0x_write_reg(CALIBRATION_REG, 0x00);  
    if (err)  
        printk("[FST] Auto calibration failed.\n");  
    else  
        printk("[FST] Auto calibration successfully.\n");  
    //Config the run mode of TPM, reg - 0xa7 : auto calibration - 0x04  
    ft5x0x_write_reg(FT5X0X_REG_STATE, 0x00);  
    printk("[FST] Auto calibration during running.\n");  
  
    enable_irq(this_client->irq);  
  
    return 0;  
  
exit_input_register_device:  
    input_free_device(input_dev);  
  
exit_alloc_data:  
    free_irq(client->irq, ft5x0x_ts);  
  
exit_irq_request:  
  
exit_create_siglethread:  
    i2c_set_clientdata(client, NULL);  
  
exit_alloc_data:  
  
exit_i2c_check_functionality:  
    return err;  
  
}  
 

 

文章评论1条评论)

登录后参与讨论

用户1057999 2015-11-23 11:55

市面上不好找的参考资料
相关推荐阅读
用户1648697 2014-06-29 12:47
新思轮专业提供新思synaptics触控解决方案
深圳市新思轮半导体科技有限公司是一家专业提供新思(Synaptics)电容屏触控解决方案的品牌代理商,配有多年资深电容屏触控行业的销售团队与技术支持团队,能依据您需要提供从方案选型、设计、量产全程...
用户1648697 2014-06-09 15:17
适用于医疗、POS机、工控等行业的高通方案智能核心板介绍
        CB01核心板是新思轮代理的一款集成度高、尺寸小、可扩展性强、低功耗、高性能的ARM核心模块,精简的外形、强大的功能、丰富的外设接口使其成为车载系统、智能家居、行业PDA、工业数字...
用户1648697 2014-05-05 10:41
新思最高效率的量产测试及烧录工具
  TP TESTER触摸屏在线测试设备  设备特点:简化测试、方便作业、专业规范,提高效率,缩短交期,降低成本,创造价值。  A、测试设备:   配备:5V电源、U...
用户1648697 2013-10-17 11:53
synaptics 新突思电子首次高调参加2013深圳全触展
  Synaptics中国区总经理Tina表示全触展是本年度重点也是首次参加国内触摸屏展会,全触展也是经过多年观察和了解起是专业针对触控领域的一个年度盛会,由于首次出展,今年将重点展示触控IC...
用户1648697 2013-10-09 13:28
新思Synaptics产品列表
新思Synaptics产品列表   产品 封装 封装尺寸 (mm) 通道数 支持尺寸 ...
用户1648697 2013-09-18 19:38
新思Synapics新增最具实力代理商---深圳市新思轮半导体科技有限公司
新思轮是一家专业的芯片代理商和方案提供商。公司成立于2013年,总部设在深圳,在上海设有Office。 目前,新思轮市场销售人员占40%,技术支持人员占30%,且市场销售与技术人员都是具有多年电子...
我要评论
1
15
关闭 站长推荐上一条 /2 下一条