linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christopher Heiny <cheiny@synaptics.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Linux Input <linux-input@vger.kernel.org>,
	Andrew Duggan <aduggan@synaptics.com>,
	Vincent Huang <vincent.huang@tw.synaptics.com>,
	Vivian Ly <vly@synaptics.com>,
	Daniel Rosenberg <daniel.rosenberg@synaptics.com>,
	Jean Delvare <khali@linux-fr.org>,
	Joerie de Gram <j.de.gram@gmail.com>,
	Linus Walleij <linus.walleij@stericsson.com>,
	Benjamin Tissoires <benjamin.tissoires@redhat.com>
Subject: Re: [PATCH] input synaptics-rmi4: PDT scan cleanup
Date: Fri, 10 Jan 2014 13:50:20 -0800	[thread overview]
Message-ID: <52D06B1C.1090403@synaptics.com> (raw)
In-Reply-To: <1754181.lppeTWGTml@dtor-d630.eng.vmware.com>

On 01/10/2014 12:31 PM, Dmitry Torokhov wrote:
> On Friday, January 10, 2014 12:23:15 PM Christopher Heiny wrote:
>> >On 01/07/2014 12:33 PM, Christopher Heiny wrote:
>>> > >Eliminates copy-paste code that handled scans of the Page Descriptor
>>> > >Table,
>>> > >replacing it with a single PDT scan routine that invokes a callback
>>> > >function. The scan routine is not static so that it can be used by the
>>> > >firmware update code (under development, not yet submitted).
>>> > >
>>> > >Updated the copyright dates while we were at it.
>> >
>> >Hi Dmitry,
>> >
>> >Could you apply this or provide some feedback on it?  We've got a
>> >pending patch that depends on it, and that pending work will bring the
>> >driver back to a working (if not necessarily beautiful) state.  I don't
>> >want to submit it if this change isn't satisfactory, though.
 >
> Speaking of the devil. I was just thinking about it and I wanted to ask
> you to send me an example of how it is used as I can;t make my mind about
> it.
>
> In general it is OK to submit a few patches at a time even if they are
> depend on each other - it gives me better context (as long as there
> aren't 80 of those so that I down in them ;) ).
>
> Thanks.

No problem!

Currently the rmi_driver.c iterates over the PDT twice during probe():

1) find F01 and reset the ASIC;
2) create and initialize the function devices & count the number of 
interrupt sources.

followed by

3) a loop over the function devices allocating each one's interrupt 
related bitmasks.

Unfortunately, depending on how the function drivers are loaded, a 
function driver might access the device's and the function device's 
bitmasks before step (3) is complete.  This causes all kinds of 
unintended consequences, none of which are amusing.

We considered fixing this by splitting the function device creation and 
initialization, like so:

1) first to find F01 and reset the ASIC;
2) count the number of interrupt sources and create the function devices

followed by

3) a loop over the function devices to allocate their interrupt related 
bitmasks and initialize the function devices

However, this led to function device setup being in two different 
places, which obscured the code and could lead to bugs if someone added 
new code in the wrong place (initialization instead of creation, or vice 
versa).

The PDT scan loops have a lot of redundant boilerplate and were quite 
large compared to the core code that was being iterated, obscuring just 
what the loop was supposed to be doing.  We found it clearer to 
implement a single PDT scan routine, and put the logic for the different 
step in callbacks.  Plus it eliminated the maintenance headaches of 
three (or more, see reflash, below) copy-paste PDT scan loops.

The pending patch (I'll send that right after this note) changes 
rmi_driver.c the order to scan the PDT 3 times:

1) first to find F01 and reset the ASIC;
2) count the number of interrupt sources
3) create and initialize the function devices

Similar logic applies in the reflash code, which has rescan the PDT 
after forcing the touch sensor firmware into bootloader mode (the 
bootloader might have a different register map, unfortunately).  Once we 
had the scan+callback routine in rmi_driver.c, it only made sense for 
the reflash library to use that as well.

				Thanks,
					Chris

  reply	other threads:[~2014-01-10 21:50 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-07 20:33 [PATCH] input synaptics-rmi4: PDT scan cleanup Christopher Heiny
2014-01-10 20:23 ` Christopher Heiny
2014-01-10 20:31   ` Dmitry Torokhov
2014-01-10 21:50     ` Christopher Heiny [this message]
2014-01-21 19:33       ` Christopher Heiny
2014-01-22  6:50 ` Dmitry Torokhov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52D06B1C.1090403@synaptics.com \
    --to=cheiny@synaptics.com \
    --cc=aduggan@synaptics.com \
    --cc=benjamin.tissoires@redhat.com \
    --cc=daniel.rosenberg@synaptics.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=j.de.gram@gmail.com \
    --cc=khali@linux-fr.org \
    --cc=linus.walleij@stericsson.com \
    --cc=linux-input@vger.kernel.org \
    --cc=vincent.huang@tw.synaptics.com \
    --cc=vly@synaptics.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).