Re: [RESEND][PATCH] input: Added TSC2003

From: Kwangwoo Lee
Date: Thu Jun 18 2009 - 20:50:21 EST


Hi,

On Tue, Jun 16, 2009 at 5:16 PM, Thierry
Reding<thierry.reding@xxxxxxxxxxxxxxxxx> wrote:
> [Cc'ing Kwangwoo Lee]
>
> * Richard Röjfors wrote:
>> On 09-06-16 08.20, Thierry Reding wrote:
>> >>>>
>> >>> Meaning? I think I2C transaction can sleep.
>> >> Yes that's what it means, and that's bad in a HR timer callback.
>> >
>> > Note that my patch to the tsc2007 to support the tsc2003 exactly fixes this
>> > problem. It moves the actual I2C transfers into a workqueue, so no sleeping
>> > functions are called from the hrtimer callback.
>>
>> Ah good! The IRQ is disabled no sync too.
>> We actually don't have the possibility to implement a pen down state callback,
>> so I need to modify the code slightly to work even without one. (but not be
>> as accurate when the callback is not available)
>>
>> Your patch where it schedules work rather than calling the I2C function directly
>> isn't in mainline.
>> I saw a patch where you added the work scheduling, and a later patch where you
>> fixed some spinlock stuff, have you resent the patch for the work scheduling?
>
> I think there were still some issues with that patch. Kwangwoo Lee was the
> last to comment. This is from the previous thread:
>
>> On Tue, May 12, 2009 at 12:41 AM, Dmitry Torokhov
>> <dmitry.torokhov@xxxxxxxxx> wrote:
>> > On Mon, May 11, 2009 at 08:38:09AM -0700, Dmitry Torokhov wrote:
>> >> Hi,
>> >> On Mon, May 11, 2009 at 08:44:00PM +0900, Kwangwoo Lee wrote:
>> >> > From d5de0d22109de7564f9bf1df688acbe6b18f41db Mon Sep 17 00:00:00 2001
>> >> > From: Kwangwoo Lee <kwangwoo.lee@xxxxxxxxx>
>> >> > Date: Mon, 11 May 2009 20:05:50 +0900
>> >> > Subject: [PATCH 2/2] Input: tsc2007: do I2C transfers in non-interrupt
>> >> > context.
>> >> >
>> >> > This patch enhances pointer movements much smoother.
>> >> > The original patch is written by Thierry.
>> >> >
>> >> > --- a/drivers/input/touchscreen/tsc2007.c
>> >> > +++ b/drivers/input/touchscreen/tsc2007.c
>> >> > @@ -70,6 +70,7 @@ struct ts_event {
>> >> >  struct tsc2007 {
>> >> >     struct input_dev        *input;
>> >> >     char                    phys[32];
>> >> > +   struct work_struct      work;
>> >>
>> >> Every time I see a work_struct in a driver and don't see
>> >> cancel_work_sync() anywhere I know there are issues...
>> >>
>>
>> Thanks for your comment. I also missed that thing, sorry.
>>
>> > Also, why do we need to chain irq->timer->work now? Surely we can bypass
>> > the timer if we have to read in process context.
>>
>> It's good point. I'll check again.
>> Thanks.
>
> So perhaps some more work is required to get this mainlined.

Sorry for my late reply.

I think that the driver need to be fixed to send i2c command
asynchronously (if possible)
or replace hrtimer with delayed workqueue as Dmitry pointed out above.

Hmm.. I'm going to move to the other company, so I do not have the
testing environment anymore.
I can see the emails from the list, but can anyone else follow up the
driver, please?

Thanks.

--
Kwangwoo Lee <kwangwoo.lee@xxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/