Re: [PATCH 2/5] Input: zinitix - do not ignore non-moving fingers
Dmitry Torokhov <[email protected]> Fri, 24 Jul 2026 12:24:01 -0700
| Newsgroups | org.kernel.vger.linux-samsung-soc,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-input,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Hi Kaustabh, On Fri, Jul 24, 2026 at 12:54:04AM +0530, Kaustabh Chakraborty wrote: > With the ZT7548 touchscreen present in the Galaxy J6, multitouch does not > work reliably. This is due to the fact that the driver reports fingers > only when their state is changed, so it's either placed against the > scren, moved, or drawn away from the screen. > > The function which is responsible for this is zinitix_report_finger(). > This function is called from the IRQ handler, under the following > condition: > > if (p->sub_status & SUB_BIT_EXIST) > zinitix_report_finger(bt541, i, p); > > This implies and ensures that every valid finger must have the > SUB_BIT_EXIST flag. > > However, at the beginning of the function, it refuses to recognize any > finger if it has none of SUB_BIT_UP | SUB_BIT_DOWN | SUB_BIT_MOVE. This > excludes fingers in reports which do not move from the position since > the previous interrupt. Add SUB_BIT_EXIST to the list of valid bits. This makes the check basically a no-op as SUB_BIT_EXIST would always be set when we reach this function. It may very well be that we want to delete this check altogether, or maybe we need to add SUB_BIT_UPDATE and SUB_BIT_WAIT. I am curious what status bits you see when this condition (original) triggers for you... > > Signed-off-by: Kaustabh Chakraborty <[email protected]> > --- > drivers/input/touchscreen/zinitix.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/input/touchscreen/zinitix.c b/drivers/input/touchscreen/zinitix.c > index 3421b8ffb19b..fdcb80f52c91 100644 > --- a/drivers/input/touchscreen/zinitix.c > +++ b/drivers/input/touchscreen/zinitix.c > @@ -406,7 +406,7 @@ static void zinitix_report_finger(struct bt541_ts_data *bt541, int slot, > u16 x, y; > > if (unlikely(!(p->sub_status & > - (SUB_BIT_UP | SUB_BIT_DOWN | SUB_BIT_MOVE)))) { > + (SUB_BIT_EXIST | SUB_BIT_UP | SUB_BIT_DOWN | SUB_BIT_MOVE)))) { > dev_dbg(&bt541->client->dev, "unknown finger event %#02x\n", > p->sub_status); > return; > Thanks. -- Dmitry