Hi Pavel,

I am in the process of porting Linux 2.6.11.5 to the
Helio PDA (MIPS R3912 based) and if I remember
correctly it is using a UCB1x00 (or Toshiba clone).
Please could you make sure your patches will work
across arch. Now I have my kernel up and running (well
mainly falling :-() my next task is to get write the
frame buffer driver and then look at the UCB1x00 as I
need it for sound and touch screen. So in a day or two
I will start to try to integrate your work into my
kernel.

Best Regards,

Mark

--- Pavel Machek <[EMAIL PROTECTED]> wrote:

> These are small ucb1x00-ts cleanups, as suggested by
> Vojtech, Dmitri
> and the lists.
> 
> Signed-off-by: Pavel Machek <[EMAIL PROTECTED]>
> 
> Cleanups suggested by Dmitri, Vojtech and lists.
> 
> ---
> commit 79c98a2279c45098d102ba69ecf940c00da3dfee
> tree f15a3d27de9a84694f4588374a5e383938866a54
> parent 080578bff89927c0f5aeddd588bc2f5f7373f232
> author <[EMAIL PROTECTED](none)> Tue, 26 Jul 2005 09:44:33
> +0200
> committer <[EMAIL PROTECTED](none)> Tue, 26 Jul 2005
> 09:44:33 +0200
> 
>  drivers/misc/ucb1x00-ts.c |   87
> ++++++++++++---------------------------------
>  1 files changed, 23 insertions(+), 64 deletions(-)
> 
> diff --git a/drivers/misc/ucb1x00-ts.c
> b/drivers/misc/ucb1x00-ts.c
> --- a/drivers/misc/ucb1x00-ts.c
> +++ b/drivers/misc/ucb1x00-ts.c
> @@ -1,7 +1,8 @@
>  /*
> - *  linux/drivers/misc/ucb1x00-ts.c
> + *  Touchscreen driver for UCB1x00-based
> touchscreens
>   *
>   *  Copyright (C) 2001 Russell King, All Rights
> Reserved.
> + *  Copyright (C) 2005 Pavel Machek
>   *
>   * This program is free software; you can
> redistribute it and/or modify
>   * it under the terms of the GNU General Public
> License version 2 as
> @@ -30,6 +31,7 @@
>  #include <linux/device.h>
>  #include <linux/suspend.h>
>  #include <linux/slab.h>
> +#include <linux/kthread.h>
>  
>  #include <asm/dma.h>
>  #include <asm/semaphore.h>
> @@ -42,10 +44,7 @@ struct ucb1x00_ts {
>       struct ucb1x00          *ucb;
>  
>       wait_queue_head_t       irq_wait;
> -     struct semaphore        sem;
> -     struct completion       init_exit;
>       struct task_struct      *rtask;
> -     int                     use_count;
>       u16                     x_res;
>       u16                     y_res;
>  
> @@ -55,20 +54,6 @@ struct ucb1x00_ts {
>  
>  static int adcsync;
>  
> -static inline void ucb1x00_ts_evt_add(struct
> ucb1x00_ts *ts, u16 pressure, u16 x, u16 y)
> -{
> -     input_report_abs(&ts->idev, ABS_X, x);
> -     input_report_abs(&ts->idev, ABS_Y, y);
> -     input_report_abs(&ts->idev, ABS_PRESSURE,
> pressure);
> -     input_sync(&ts->idev);
> -}
> -
> -static inline void ucb1x00_ts_event_release(struct
> ucb1x00_ts *ts)
> -{
> -     input_report_abs(&ts->idev, ABS_PRESSURE, 0);
> -     input_sync(&ts->idev);
> -}
> -
>  /*
>   * Switch to interrupt mode.
>   */
> @@ -176,12 +161,6 @@ static int ucb1x00_thread(void
> *_ts)
>       DECLARE_WAITQUEUE(wait, tsk);
>       int valid;
>  
> -     ts->rtask = tsk;
> -
> -     daemonize("ktsd");
> -     /* only want to receive SIGKILL */
> -     allow_signal(SIGKILL);
> -
>       /*
>        * We could run as a real-time thread.  However,
> thus far
>        * this doesn't seem to be necessary.
> @@ -189,12 +168,10 @@ static int ucb1x00_thread(void
> *_ts)
>  //   tsk->policy = SCHED_FIFO;
>  //   tsk->rt_priority = 1;
>  
> -     complete(&ts->init_exit);
> -
>       valid = 0;
>  
>       add_wait_queue(&ts->irq_wait, &wait);
> -     for (;;) {
> +     while (!kthread_should_stop()) {
>               unsigned int x, y, p, val;
>               signed long timeout;
>  
> @@ -212,10 +189,7 @@ static int ucb1x00_thread(void
> *_ts)
>               ucb1x00_ts_mode_int(ts);
>               ucb1x00_adc_disable(ts->ucb);
>  
> -             set_task_state(tsk, TASK_UNINTERRUPTIBLE);
> -             schedule_timeout(HZ / 100);
> -             if (signal_pending(tsk))
> -                     break;
> +             msleep(10);
>  
>               ucb1x00_enable(ts->ucb);
>               val = ucb1x00_reg_read(ts->ucb, UCB_TS_CR);
> @@ -231,7 +205,8 @@ static int ucb1x00_thread(void
> *_ts)
>                        * spit out a "pen off" sample here.
>                        */
>                       if (valid) {
> -                             ucb1x00_ts_event_release(ts);
> +                             input_report_abs(&ts->idev, ABS_PRESSURE, 0);
> +                             input_sync(&ts->idev);
>                               valid = 0;
>                       }
>  
> @@ -245,7 +220,10 @@ static int ucb1x00_thread(void
> *_ts)
>                        * to do any filtering they please.
>                        */
>                       if (!ts->restart) {
> -                             ucb1x00_ts_evt_add(ts, p, x, y);
> +                             input_report_abs(&ts->idev, ABS_X, x);
> +                             input_report_abs(&ts->idev, ABS_Y, y);
> +                             input_report_abs(&ts->idev, ABS_PRESSURE, p);
> +                             input_sync(&ts->idev);
>                               valid = 1;
>                       }
>  
> @@ -256,14 +234,12 @@ static int ucb1x00_thread(void
> *_ts)
>               try_to_freeze();
>  
>               schedule_timeout(timeout);
> -             if (signal_pending(tsk))
> -                     break;
>       }
>  
>       remove_wait_queue(&ts->irq_wait, &wait);
>  
>       ts->rtask = NULL;
> -     complete_and_exit(&ts->init_exit, 0);
> +     return 0;
>  }
>  
>  /*
> @@ -282,14 +258,7 @@ static int
> ucb1x00_ts_open(struct input_
>       struct ucb1x00_ts *ts = (struct ucb1x00_ts *)idev;
>       int ret = 0;
>  
> -     if (down_interruptible(&ts->sem))
> -             return -EINTR;
> -
> -     if (ts->use_count++ != 0)
> -             goto out;
> -
> -     if (ts->rtask)
> -             panic("ucb1x00: rtask running?");
> +     BUG_ON(ts->rtask);
>  
>       init_waitqueue_head(&ts->irq_wait);
>       ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX,
> ucb1x00_ts_irq, ts);
> @@ -305,19 +274,16 @@ static int
> ucb1x00_ts_open(struct input_
>       ts->y_res = ucb1x00_ts_read_yres(ts);
>       ucb1x00_adc_disable(ts->ucb);
>  
> -     init_completion(&ts->init_exit);
> -     ret = kernel_thread(ucb1x00_thread, ts,
> CLONE_KERNEL);
> -     if (ret >= 0) {
> -             wait_for_completion(&ts->init_exit);
> +     ts->rtask = kthread_run(ucb1x00_thread, ts,
> "ktsd");
> +     if (!IS_ERR(ts->rtask)) {
>               ret = 0;
>       } else {
>               ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
> +             ts->rtask = NULL;
> 
=== message truncated ===



                
___________________________________________________________ 
How much free photo storage do you get? Store your holiday 
snaps for FREE with Yahoo! Photos http://uk.photos.yahoo.com
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to