新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 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. }

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 眉山市| 郴州市| 澄江县| 缙云县| 晋江市| 淮安市| 康马县| 万年县| 岚皋县| 虎林市| 梧州市| 宾阳县| 肇东市| 鄂伦春自治旗| 靖远县| 清徐县| 阳泉市| 禄劝| 临洮县| 青海省| 新乡市| 长葛市| 多伦县| 崇左市| 河源市| 井冈山市| 南宫市| 新丰县| 民和| 仁化县| 玛纳斯县| 武汉市| 迁安市| 崇义县| 阜新| 阳泉市| 杭州市| 句容市| 上饶市| 栾川县| 固始县|