<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>i.MX Processors中的主题 Synaptics RMI4 Multitouch PAD</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/Synaptics-RMI4-Multitouch-PAD/m-p/203877#M11494</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV class="wiki-content"&gt;&lt;DIV class="panel"&gt;&lt;DIV class="panelContent"&gt;&lt;DIV&gt;&lt;UL&gt;&lt;LI&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3 id="toc-hId-1448164930"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-Connection" name="SynapticsRMI4MultitouchPAD-Connection" target="_blank"&gt;&lt;/A&gt;Connection&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;NOTE: nINT is an active-low open-drain pin for which the host must supply an external pull-up resistor.&lt;DIV class="panel code"&gt;&lt;DIV class="panelContent codeContent"&gt;&lt;PRE class="code-java"&gt;DISP2_DAT9        ---&amp;gt;  Touch_nINT DISPB2_SER_CLK    ---&amp;gt;  Touch_I2C_DAT DISPB2_SER_DIO    ---&amp;gt;  Touch_I2C_CLK EIM_A16           ---&amp;gt;  Touch_nRST1 &lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3 id="toc-hId--1103992031"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-TouchPADregister." name="SynapticsRMI4MultitouchPAD-TouchPADregister." target="_blank"&gt;&lt;/A&gt;Touch PAD register.&lt;/H3&gt;&lt;P&gt;Part of register map, that we need concern.&lt;/P&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 6&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 5&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 4&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 3&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 2&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 1&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0014&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Interrupt status&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Abs0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Button&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Status&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Flash&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0015&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Button data&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Left&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 6&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 5&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 4&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 3 - Bit 2&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 1 - Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0016&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Finger State&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Finger State 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Finger State 0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7 - Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0017&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D X position (11:4) Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0018&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y position (11:4) Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001B&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Z Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001C&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D X position (11:4) Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001D&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y position (11:4) Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0020&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Z Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7 - Bit 4&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 3 - Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0019&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y/X position(3:0) Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y Position [3:0]&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X Position [3:0]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001A&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Wy/Wx Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wy&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wx&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001E&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y/X position(3:0) Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y Position [3:0]&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X Position [3:0]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001F&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Wy/Wx Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wy&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wx&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H3 id="toc-hId-638818304"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-Gettouchsample." name="SynapticsRMI4MultitouchPAD-Gettouchsample." target="_blank"&gt;&lt;/A&gt;Get touch sample.&lt;/H3&gt;&lt;DIV class="panel code"&gt;&lt;DIV class="panelContent codeContent"&gt;&lt;PRE class="code-java"&gt;  I2CReadForTimes(0x2c,0x14,buf,0x11); &lt;SPAN class="code-comment"&gt;// read out register value from register addr 0x14. &lt;/SPAN&gt;  ts_sample-&amp;gt;int_state = buf[0] &amp;amp; 0xF; &lt;SPAN class="code-comment"&gt;// save interrupt status &lt;/SPAN&gt;  ts_sample-&amp;gt;button_data = buf[1] &amp;amp; 0x01; &lt;SPAN class="code-comment"&gt;// save button_data &lt;/SPAN&gt;     &lt;SPAN class="code-keyword"&gt;switch&lt;/SPAN&gt;(buf[0x2] &amp;amp; 0xf) &lt;SPAN class="code-comment"&gt;// 2D Finger State &lt;/SPAN&gt;  {     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x0:  ts_sample-&amp;gt;contact_resistance = 0;   &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x01:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x02:  &lt;SPAN class="code-comment"&gt;// bit0-1 is Finger 0 state &lt;/SPAN&gt;      ts_sample-&amp;gt;contact_resistance = 1;   ts_sample-&amp;gt;x_position = (((buf[3]&amp;lt;&amp;lt;4))|(buf[5]&amp;amp;0xf));      ts_sample-&amp;gt;y_position = (((buf[4])&amp;lt;&amp;lt;4)|((buf[5]&amp;amp;0xf0)&amp;gt;&amp;gt;4));  &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x04:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x08: &lt;SPAN class="code-comment"&gt;// bit2-3 is Finger 1 state &lt;/SPAN&gt;       ts_sample-&amp;gt;contact_resistance = 1;   ts_sample-&amp;gt;x_position = (((buf[8]&amp;lt;&amp;lt;4))|(buf[10]&amp;amp;0xf));     ts_sample-&amp;gt;y_position = (((buf[9])&amp;lt;&amp;lt;4)|((buf[10]&amp;amp;0xf0)&amp;gt;&amp;gt;4));         &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x05:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x06:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x09:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x0a: &lt;SPAN class="code-comment"&gt;// Finger 0 and Finger 1 press at same time &lt;/SPAN&gt;     ts_sample-&amp;gt;contact_resistance = 2;   ts_sample-&amp;gt;x_position = (((buf[3]&amp;lt;&amp;lt;4))|(buf[5]&amp;amp;0xf));      ts_sample-&amp;gt;y_position = (((buf[4])&amp;lt;&amp;lt;4)|((buf[5]&amp;amp;0xf0)&amp;gt;&amp;gt;4));          ts_sample-&amp;gt;x2_position = (((buf[8]&amp;lt;&amp;lt;4))|(buf[10]&amp;amp;0xf));    ts_sample-&amp;gt;y2_position = (((buf[9])&amp;lt;&amp;lt;4)|((buf[10]&amp;amp;0xf0)&amp;gt;&amp;gt;4));                &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;      &lt;SPAN class="code-keyword"&gt;default&lt;/SPAN&gt; :       printk(&lt;SPAN class="code-quote"&gt;"fail buf[0x16] = %d \n"&lt;/SPAN&gt;,buf[2]); &lt;SPAN class="code-comment"&gt;// report real finger state value &lt;/SPAN&gt;   &lt;SPAN class="code-keyword"&gt;return&lt;/SPAN&gt; -1;   }   &lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3 id="toc-hId--1913338657"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-Transfertoscreenpixelrelateposition.Weuse480x800forexample" name="SynapticsRMI4MultitouchPAD-Transfertoscreenpixelrelateposition.Weuse480x800forexample" target="_blank"&gt;&lt;/A&gt;Transfer to screen pixel relate position. We use 480x800 for example&lt;/H3&gt;&lt;DIV class="panel code"&gt;&lt;DIV class="panelContent codeContent"&gt;&lt;PRE class="code-java"&gt;  &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt;(ts_sample.int_state &amp;amp; 0x08) { &lt;SPAN class="code-comment"&gt;// touch screen abs &lt;/SPAN&gt;    &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (ts_sample.contact_resistance &amp;lt; 2) {       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (ts_sample.x_position == 0 &amp;amp;&amp;amp; ts_sample.y_position == 0 &amp;amp;&amp;amp;    ts_sample.contact_resistance == 0) {    x = last_x;     y = last_y;       }       &lt;SPAN class="code-keyword"&gt;else&lt;/SPAN&gt;       {&lt;SPAN class="code-comment"&gt;// transfer to screen relate position &lt;/SPAN&gt;        x = ts_sample.x_position * 480 / 1894;          y = 799 - ts_sample.y_position * 800 / 3245;       }       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (x != last_x) {         input_report_abs(mxc_inputdev, ABS_X, x);       last_x = x;       }       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (y != last_y) {  input_report_abs(mxc_inputdev, ABS_Y, y);       last_y = y;       }       /* report pressure */       input_report_abs(mxc_inputdev, ABS_PRESSURE, ts_sample.contact_resistance);       /* report the BTN_TOUCH */       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (ts_sample.contact_resistance != last_press)       {      input_event(mxc_inputdev, EV_KEY,BTN_TOUCH, ts_sample.contact_resistance);       }     }     input_sync(mxc_inputdev);     last_press = ts_sample.contact_resistance;   }   &lt;SPAN class="code-keyword"&gt;else&lt;/SPAN&gt; &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt;(ts_sample.int_state &amp;amp; 0x04)  &lt;SPAN class="code-comment"&gt;// button input &lt;/SPAN&gt;  {     input_report_key(input_button,KEY_MENU,ts_sample.button_data);   } &lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="pageSection" id="labels-section"&gt;&lt;DIV class="section-header" id="default-labels-header"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 19 Jan 2012 03:10:00 GMT</pubDate>
    <dc:creator>MarkDing</dc:creator>
    <dc:date>2012-01-19T03:10:00Z</dc:date>
    <item>
      <title>Synaptics RMI4 Multitouch PAD</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Synaptics-RMI4-Multitouch-PAD/m-p/203877#M11494</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV class="wiki-content"&gt;&lt;DIV class="panel"&gt;&lt;DIV class="panelContent"&gt;&lt;DIV&gt;&lt;UL&gt;&lt;LI&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3 id="toc-hId-1448164930"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-Connection" name="SynapticsRMI4MultitouchPAD-Connection" target="_blank"&gt;&lt;/A&gt;Connection&lt;/H3&gt;&lt;UL&gt;&lt;LI&gt;NOTE: nINT is an active-low open-drain pin for which the host must supply an external pull-up resistor.&lt;DIV class="panel code"&gt;&lt;DIV class="panelContent codeContent"&gt;&lt;PRE class="code-java"&gt;DISP2_DAT9        ---&amp;gt;  Touch_nINT DISPB2_SER_CLK    ---&amp;gt;  Touch_I2C_DAT DISPB2_SER_DIO    ---&amp;gt;  Touch_I2C_CLK EIM_A16           ---&amp;gt;  Touch_nRST1 &lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;H3 id="toc-hId--1103992031"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-TouchPADregister." name="SynapticsRMI4MultitouchPAD-TouchPADregister." target="_blank"&gt;&lt;/A&gt;Touch PAD register.&lt;/H3&gt;&lt;P&gt;Part of register map, that we need concern.&lt;/P&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 6&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 5&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 4&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 3&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 2&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 1&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0014&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Interrupt status&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Abs0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Button&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Status&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Flash&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0015&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Button data&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Left&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 6&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 5&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 4&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 3 - Bit 2&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 1 - Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0016&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Finger State&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Finger State 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Finger State 0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7 - Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0017&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D X position (11:4) Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0018&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y position (11:4) Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001B&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Z Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001C&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D X position (11:4) Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001D&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y position (11:4) Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y position [11:4]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0020&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Z Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Z&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV class="table-wrap"&gt;&lt;TABLE class="confluenceTable"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH class="confluenceTh"&gt;Addr&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Name&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 7 - Bit 4&lt;/TH&gt;&lt;TH class="confluenceTh"&gt;Bit 3 - Bit 0&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x0019&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y/X position(3:0) Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y Position [3:0]&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X Position [3:0]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001A&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Wy/Wx Finger 0&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wy&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wx&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001E&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Y/X position(3:0) Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Y Position [3:0]&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;X Position [3:0]&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="confluenceTd"&gt;0x001F&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;2D Wy/Wx Finger 1&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wy&lt;/TD&gt;&lt;TD class="confluenceTd"&gt;Wx&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;H3 id="toc-hId-638818304"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-Gettouchsample." name="SynapticsRMI4MultitouchPAD-Gettouchsample." target="_blank"&gt;&lt;/A&gt;Get touch sample.&lt;/H3&gt;&lt;DIV class="panel code"&gt;&lt;DIV class="panelContent codeContent"&gt;&lt;PRE class="code-java"&gt;  I2CReadForTimes(0x2c,0x14,buf,0x11); &lt;SPAN class="code-comment"&gt;// read out register value from register addr 0x14. &lt;/SPAN&gt;  ts_sample-&amp;gt;int_state = buf[0] &amp;amp; 0xF; &lt;SPAN class="code-comment"&gt;// save interrupt status &lt;/SPAN&gt;  ts_sample-&amp;gt;button_data = buf[1] &amp;amp; 0x01; &lt;SPAN class="code-comment"&gt;// save button_data &lt;/SPAN&gt;     &lt;SPAN class="code-keyword"&gt;switch&lt;/SPAN&gt;(buf[0x2] &amp;amp; 0xf) &lt;SPAN class="code-comment"&gt;// 2D Finger State &lt;/SPAN&gt;  {     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x0:  ts_sample-&amp;gt;contact_resistance = 0;   &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x01:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x02:  &lt;SPAN class="code-comment"&gt;// bit0-1 is Finger 0 state &lt;/SPAN&gt;      ts_sample-&amp;gt;contact_resistance = 1;   ts_sample-&amp;gt;x_position = (((buf[3]&amp;lt;&amp;lt;4))|(buf[5]&amp;amp;0xf));      ts_sample-&amp;gt;y_position = (((buf[4])&amp;lt;&amp;lt;4)|((buf[5]&amp;amp;0xf0)&amp;gt;&amp;gt;4));  &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x04:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x08: &lt;SPAN class="code-comment"&gt;// bit2-3 is Finger 1 state &lt;/SPAN&gt;       ts_sample-&amp;gt;contact_resistance = 1;   ts_sample-&amp;gt;x_position = (((buf[8]&amp;lt;&amp;lt;4))|(buf[10]&amp;amp;0xf));     ts_sample-&amp;gt;y_position = (((buf[9])&amp;lt;&amp;lt;4)|((buf[10]&amp;amp;0xf0)&amp;gt;&amp;gt;4));         &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x05:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x06:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x09:     &lt;SPAN class="code-keyword"&gt;case&lt;/SPAN&gt; 0x0a: &lt;SPAN class="code-comment"&gt;// Finger 0 and Finger 1 press at same time &lt;/SPAN&gt;     ts_sample-&amp;gt;contact_resistance = 2;   ts_sample-&amp;gt;x_position = (((buf[3]&amp;lt;&amp;lt;4))|(buf[5]&amp;amp;0xf));      ts_sample-&amp;gt;y_position = (((buf[4])&amp;lt;&amp;lt;4)|((buf[5]&amp;amp;0xf0)&amp;gt;&amp;gt;4));          ts_sample-&amp;gt;x2_position = (((buf[8]&amp;lt;&amp;lt;4))|(buf[10]&amp;amp;0xf));    ts_sample-&amp;gt;y2_position = (((buf[9])&amp;lt;&amp;lt;4)|((buf[10]&amp;amp;0xf0)&amp;gt;&amp;gt;4));                &lt;SPAN class="code-keyword"&gt;break&lt;/SPAN&gt;;      &lt;SPAN class="code-keyword"&gt;default&lt;/SPAN&gt; :       printk(&lt;SPAN class="code-quote"&gt;"fail buf[0x16] = %d \n"&lt;/SPAN&gt;,buf[2]); &lt;SPAN class="code-comment"&gt;// report real finger state value &lt;/SPAN&gt;   &lt;SPAN class="code-keyword"&gt;return&lt;/SPAN&gt; -1;   }   &lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;H3 id="toc-hId--1913338657"&gt;&lt;A id="SynapticsRMI4MultitouchPAD-Transfertoscreenpixelrelateposition.Weuse480x800forexample" name="SynapticsRMI4MultitouchPAD-Transfertoscreenpixelrelateposition.Weuse480x800forexample" target="_blank"&gt;&lt;/A&gt;Transfer to screen pixel relate position. We use 480x800 for example&lt;/H3&gt;&lt;DIV class="panel code"&gt;&lt;DIV class="panelContent codeContent"&gt;&lt;PRE class="code-java"&gt;  &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt;(ts_sample.int_state &amp;amp; 0x08) { &lt;SPAN class="code-comment"&gt;// touch screen abs &lt;/SPAN&gt;    &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (ts_sample.contact_resistance &amp;lt; 2) {       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (ts_sample.x_position == 0 &amp;amp;&amp;amp; ts_sample.y_position == 0 &amp;amp;&amp;amp;    ts_sample.contact_resistance == 0) {    x = last_x;     y = last_y;       }       &lt;SPAN class="code-keyword"&gt;else&lt;/SPAN&gt;       {&lt;SPAN class="code-comment"&gt;// transfer to screen relate position &lt;/SPAN&gt;        x = ts_sample.x_position * 480 / 1894;          y = 799 - ts_sample.y_position * 800 / 3245;       }       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (x != last_x) {         input_report_abs(mxc_inputdev, ABS_X, x);       last_x = x;       }       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (y != last_y) {  input_report_abs(mxc_inputdev, ABS_Y, y);       last_y = y;       }       /* report pressure */       input_report_abs(mxc_inputdev, ABS_PRESSURE, ts_sample.contact_resistance);       /* report the BTN_TOUCH */       &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt; (ts_sample.contact_resistance != last_press)       {      input_event(mxc_inputdev, EV_KEY,BTN_TOUCH, ts_sample.contact_resistance);       }     }     input_sync(mxc_inputdev);     last_press = ts_sample.contact_resistance;   }   &lt;SPAN class="code-keyword"&gt;else&lt;/SPAN&gt; &lt;SPAN class="code-keyword"&gt;if&lt;/SPAN&gt;(ts_sample.int_state &amp;amp; 0x04)  &lt;SPAN class="code-comment"&gt;// button input &lt;/SPAN&gt;  {     input_report_key(input_button,KEY_MENU,ts_sample.button_data);   } &lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class="pageSection" id="labels-section"&gt;&lt;DIV class="section-header" id="default-labels-header"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jan 2012 03:10:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Synaptics-RMI4-Multitouch-PAD/m-p/203877#M11494</guid>
      <dc:creator>MarkDing</dc:creator>
      <dc:date>2012-01-19T03:10:00Z</dc:date>
    </item>
    <item>
      <title>Re: Synaptics RMI4 Multitouch PAD</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Synaptics-RMI4-Multitouch-PAD/m-p/203878#M11495</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/MarkDing"&gt;MarkDing&lt;/A&gt;‌ Hi Mark,&lt;/P&gt;&lt;P&gt;I'm bringing up RMI4 Synaptics S3351 touch driver, but I have issue that the IC was configured by RMI4 driver but never detect any touch (no interrupt in attention signal, and reading touch status F12 shows no touches).&amp;nbsp;&lt;/P&gt;&lt;P&gt;Do you have any guess on my issue?&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you &amp;amp; happy new year.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Jan 2020 13:52:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Synaptics-RMI4-Multitouch-PAD/m-p/203878#M11495</guid>
      <dc:creator>LinhNguyen</dc:creator>
      <dc:date>2020-01-01T13:52:14Z</dc:date>
    </item>
  </channel>
</rss>

