方块块 發表於 2023-6-10 00:00:00

linux 触摸屏驱动编写

<p>
        早在诺基亚手机还比较流行的时候,那时候触摸屏用的还不多。但是随着触摸屏手机、即智能手机的流行,触摸屏基本成了手机的标配。所以,今天可以看看触摸屏驱动在linux上是如何进行的。</p>
<p>
        1、驱动目录</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_314952">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">drivers/input</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        2、看看这个目录的Makefile如何设计</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_788525">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">obj-$(CONFIG_INPUT)   += input-core.o </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain plain">input-core-y := input.o input-compat.o input-mt.o ff-core.o </code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain spaces"> </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain plain">obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        3、除了input-core.o这个文件外,只需要看touchscreen目录就可以了</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_865660">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">config TOUCHSCREEN_S3C2410 </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">tristate "Samsung S3C2410/generic touchscreen input driver" </code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">depends on ARCH_S3C24XX || SAMSUNG_DEV_TS </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">depends on S3C_ADC </code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">help </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Say Y here if you have the s3c2410 touchscreen. </code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain spaces"> </code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">If unsure, say N. </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="plain spaces"> </code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">To compile this driver as a module, choose M here: the </code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">module will be called s3c2410_ts.</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        4、看懂了Kconfig之后,再阅读Makefile,注意S3C_ADC宏可以参考arch/arm/plat-samsung/adc.c</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_628308">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">obj-$(CONFIG_TOUCHSCREEN_S3C2410)  += s3c2410_ts.o</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        5、继续阅读s3c2410_ts.c文件</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_112723">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp keyword bold">static</code> <code class="cpp keyword bold">const</code> <code class="cpp keyword bold">struct</code> <code class="cpp plain">platform_device_id s3cts_driver_ids[] = { </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">{ </code><code class="cpp string">"s3c2410-ts"</code><code class="cpp plain">, 0 }, </code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">{ </code><code class="cpp string">"s3c2440-ts"</code><code class="cpp plain">, 0 }, </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">{ </code><code class="cpp string">"s3c64xx-ts"</code><code class="cpp plain">, FEAT_PEN_IRQ }, </code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">{ } </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp plain">}; </code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp plain">MODULE_DEVICE_TABLE(platform, s3cts_driver_ids); </code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="cpp spaces"> </code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="cpp keyword bold">static</code> <code class="cpp keyword bold">struct</code> <code class="cpp plain">platform_driver s3c_ts_driver = { </code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">.driver     = { </code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="cpp spaces">    </code><code class="cpp plain">.name  = </code><code class="cpp string">"samsung-ts"</code><code class="cpp plain">, </code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="cpp preprocessor">#ifdef CONFIG_PM </code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="cpp spaces">    </code><code class="cpp plain">.pm = &amp;s3c_ts_pmops, </code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="cpp preprocessor">#endif </code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">}, </code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">.id_table  = s3cts_driver_ids, </code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">.probe   = s3c2410ts_probe, </code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">.</code><code class="cpp functions bold">remove</code>   <code class="cpp plain">= s3c2410ts_remove, </code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="cpp plain">}; </code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="cpp plain">module_platform_driver(s3c_ts_driver); </code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        6、根据probe函数,看看有什么需要注意的内容</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_392348">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp plain">ts.client = s3c_adc_register(pdev, s3c24xx_ts_select, </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp spaces">         </code><code class="cpp plain">s3c24xx_ts_conversion, 1); </code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="cpp keyword bold">if</code> <code class="cpp plain">(IS_ERR(ts.client)) { </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">dev_err(dev, </code><code class="cpp string">"failed to register adc client\n"</code><code class="cpp plain">); </code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="cpp spaces">  </code><code class="cpp plain">ret = PTR_ERR(ts.client); </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="cpp spaces">  </code><code class="cpp keyword bold">goto</code> <code class="cpp plain">err_iomap; </code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="cpp plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        7、接着,查看是否有中断函数被注册</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightercpp" id="highlighter_185600">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="cpp plain">ret = request_irq(ts.irq_tc, stylus_irq, 0, </code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="cpp spaces">     </code><code class="cpp string">"s3c2410_ts_pen"</code><code class="cpp plain">, ts.input);</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        8、最后</p>
<p>
        很明显,触摸屏驱动本质上还是由TOUCHSCREEN_S3C2410和S3C_ADC两个macro一起完成的。</p>
<p>
        以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。</p>
<p>
        原文链接:https://blog.csdn.net/feixiaoxing/article/details/79885954</p>
頁: [1]
查看完整版本: linux 触摸屏驱动编写