<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > S5PV210(TQ210)學習筆記——觸摸屏驅動編寫

          S5PV210(TQ210)學習筆記——觸摸屏驅動編寫

          作者: 時間:2016-11-28 來源:網絡 收藏
        1. config_info[62]=480>>8;
        2. config_info[61]=480&0xff;
        3. config_info[64]=800>>8;
        4. config_info[63]=800&0xff;
        5. ret=i2c_write_bytes(client,config_info,sizeof(config_info)/sizeof(config_info[0]));
        6. if(ret<0){
        7. printk(KERN_ERR"GT811Sendconfigfailed!");
        8. returnret;
        9. }
        10. return0;
        11. }
        12. staticirqreturn_tgt811_int_handler(intirq,void*devid){
        13. disable_irq_nosync(this_client->irq);
        14. queue_work(wq,&work);
        15. returnIRQ_RETVAL(IRQ_HANDLED);
        16. }
        17. staticvoidts_work_func(structwork_struct*work){
        18. intret;
        19. unsignedcharpoint_data[19]={0x07,0x21,0};
        20. unsignedshortinput_x=0;
        21. unsignedshortinput_y=0;
        22. unsignedshortinput_p=0;
        23. ret=i2c_read_bytes(this_client,point_data,sizeof(point_data)/sizeof(point_data[0]));
        24. if(ret<=0){
        25. printk("Failed");
        26. return;
        27. }
        28. if(point_data[2]&0x1){
        29. status=1;
        30. input_y=479-((point_data[4]<<8)|point_data[5]);
        31. input_x=799-((point_data[6]<<8)|point_data[7]);
        32. input_p=point_data[8];
        33. printk("stat:%d,x:%d,y:%d,p:%d",point_data[2],input_x,input_y,
        34. input_p);
        35. }
        36. elseif(status){
        37. status=0;
        38. printk("up");
        39. }
        40. enable_irq(this_client->irq);
        41. }
        42. staticintts_probe(structi2c_client*client,conststructi2c_device_id*id){
        43. intretry,ret;
        44. chartest_data;
        45. printk("ts_probe");
        46. test_data=0;
        47. gt811_rst=S5PV210_GPD0(3);
        48. gt811_int=S5PV210_GPH1(6);
        49. gpio_request(gt811_rst,"reset");
        50. gpio_request(gt811_rst,"tsint");
        51. if(!i2c_check_functionality(client->adapter,I2C_FUNC_I2C))
        52. {
        53. dev_err(&client->dev,"MusthaveI2C_FUNC_I2C.");
        54. return-ENODEV;
        55. }
        56. s3c_gpio_setpull(gt811_rst,S3C_GPIO_PULL_UP);
        57. for(retry=0;retry<5;retry++)
        58. {
        59. gpio_direction_output(gt811_rst,0);
        60. msleep(1);
        61. gpio_direction_input(gt811_rst);
        62. msleep(100);
        63. ret=i2c_write_bytes(client,&test_data,1);
        64. if(ret>0)
        65. break;
        66. dev_info(&client->dev,"GT811I2CTESTFAILED!PleasechecktheHARDWAREconnect");
        67. }
        68. if(ret<=0)
        69. {
        70. dev_err(&client->dev,"Warnning:I2CcommunicationmightbeERROR!");
        71. return-ENODEV;
        72. }
        73. for(retry=0;retry!=5;++retry){
        74. ret=ts_init_panel(client);
        75. if(ret!=0){
        76. continue;
        77. }
        78. else{
        79. break;
        80. }
        81. }
        82. if(ret!=0){
        83. printk("GT811Configuefailed!");
        84. return-ENODEV;
        85. }
        86. this_client=client;
        87. ts_input=input_allocate_device();
        88. if(IS_ERR(ts_input)){
        89. printk("GT811allocatetsinputdevicefailed!");
        90. return-ENOMEM;
        91. }
        92. ts_input->evbit[0]=BIT_MASK(EV_SYN)|BIT_MASK(EV_KEY)|BIT_MASK(EV_ABS);
        93. ts_input->keybit[BIT_WORD(BTN_TOUCH)]=BIT_MASK(BTN_TOUCH);
        94. ts_input->absbit[0]=BIT(ABS_X)|BIT(ABS_Y)|BIT(ABS_PRESSURE);
        95. input_set_abs_params(ts_input,ABS_Y,0,799,0,0);
        96. input_set_abs_params(ts_input,ABS_X,0,479,0,0);
        97. input_set_abs_params(ts_input,ABS_PRESSURE,0,255,0,0);
        98. ts_input->name="tq210-ts";
        99. ts_input->phys="input/ts";
        100. ts_input->id.bustype=BUS_I2C;
        101. ts_input->id.product=0xBEEF;
        102. ts_input->id.vendor=0xDEAD;
        103. ret=input_register_device(ts_input);
        104. if(ret<0){
        105. printk("Unableregister%sinputdevice!",ts_input->name);
        106. input_free_device(ts_input);
        107. return-ENOMEM;
        108. }
        109. client->irq=IRQ_EINT(14);
        110. s3c_gpio_setpull(gt811_int,S3C_GPIO_PULL_UP);
        111. if(request_irq(IRQ_EINT(14),gt811_int_handler,IRQF_TRIGGER_FALLING,"gt811-int",NULL)<0){
        112. printk("Requestirqforgt811failed!");
        113. input_unregister_device(ts_input);
        114. input_free_device(ts_input);
        115. return-ENOMEM;
        116. }
        117. wq=create_workqueue("ts_handle_thread");
        118. if(wq==NULL){
        119. printk(KERN_ALERT"creteworkqueuefailed!");
        120. input_unregister_device(ts_input);
        121. input_free_device(ts_input);
        122. free_irq(IRQ_EINT(14),NULL);
        123. return-ENOMEM;
        124. }
        125. INIT_WORK(&work,ts_work_func);
        126. return0;
        127. }
        128. staticintts_remove(structi2c_client*client){
        129. free_irq(IRQ_EINT(14),NULL);
        130. enable_irq(client->irq);
        131. flush_workqueue(wq);
        132. destroy_workqueue(wq);
        133. input_unregister_device(ts_input);
        134. input_free_device(ts_input);
        135. gpio_free(gt811_rst);
        136. gpio_free(gt811_int);
        137. return0;
        138. }

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();