17 Feb, 2007

1 commit

  • - hrtimers did not use the hrtimer_restart enum and relied on the implict
    int representation. Fix the prototypes and the functions using the enums.
    - Use seperate name spaces for the enumerations
    - Convert hrtimer_restart macro to inline function
    - Add comments

    No functional changes.

    [akpm@osdl.org: fix input driver]
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Ingo Molnar
    Cc: john stultz
    Cc: Roman Zippel
    Cc: Dmitry Torokhov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     

18 Jan, 2007

6 commits

  • - Hook up to hwmon
    * show sensor attributes only if hwmon is present
    * ... and the board's reference voltage is known
    * otherwise be just a touchscreen
    - Report voltages per hwmon convention
    * measure in millivolts
    * voltages are named in[0-8]_input (ugh)
    * for 7846 chips, properly range-adjust vBATT/in1_input

    Battery measurements help during recharge monitoring. On OSK/Mistral,
    the measured voltage agreed with a multimeter to several decimal places.

    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    David Brownell
     
  • We can't depend on the pressure value to determine when the pen was
    lifted, so use the GPIO line state instead. This also helps with
    chips (like ads7843) that don't have pressure sensors.

    Signed-off-by: Imre Deak
    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • Talk to ADS7846 chip using SPI mode 1, which is what the chip
    supports: writes on falling clock edge, reads on rising.

    Signed-off-by: Imre Deak
    Signed-off-by: Tony Lindgren
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • Use hrtimer instead of the normal timer, since it provides better
    sampling resolution. This will:

    - avoid a problem where we have a 1 jiffy poll period and
    dynamic tick on
    - utilize high resolution HW clocks when they are added to
    the hrtimer framework

    Signed-off-by: Imre Deak
    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • On some LCDs leaving the Vref on provides much better readings.

    Signed-off-by: Jarkko Oikarinen
    Signed-off-by: Imre Deak
    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • Some LCDs like the LS041Y3 require a customized filtering
    logic for reliable readings, so make the filtering function
    replacable through platform specific hooks.

    Signed-off-by: Imre Deak
    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     

08 Dec, 2006

2 commits


03 Nov, 2006

1 commit


05 Oct, 2006

1 commit

  • Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
    of passing regs around manually through all ~1800 interrupt handlers in the
    Linux kernel.

    The regs pointer is used in few places, but it potentially costs both stack
    space and code to pass it around. On the FRV arch, removing the regs parameter
    from all the genirq function results in a 20% speed up of the IRQ exit path
    (ie: from leaving timer_interrupt() to leaving do_IRQ()).

    Where appropriate, an arch may override the generic storage facility and do
    something different with the variable. On FRV, for instance, the address is
    maintained in GR28 at all times inside the kernel as part of general exception
    handling.

    Having looked over the code, it appears that the parameter may be handed down
    through up to twenty or so layers of functions. Consider a USB character
    device attached to a USB hub, attached to a USB controller that posts its
    interrupts through a cascaded auxiliary interrupt controller. A character
    device driver may want to pass regs to the sysrq handler through the input
    layer which adds another few layers of parameter passing.

    I've build this code with allyesconfig for x86_64 and i386. I've runtested the
    main part of the code on FRV and i386, though I can't test most of the drivers.
    I've also done partial conversion for powerpc and MIPS - these at least compile
    with minimal configurations.

    This will affect all archs. Mostly the changes should be relatively easy.
    Take do_IRQ(), store the regs pointer at the beginning, saving the old one:

    struct pt_regs *old_regs = set_irq_regs(regs);

    And put the old one back at the end:

    set_irq_regs(old_regs);

    Don't pass regs through to generic_handle_irq() or __do_IRQ().

    In timer_interrupt(), this sort of change will be necessary:

    - update_process_times(user_mode(regs));
    - profile_tick(CPU_PROFILING, regs);
    + update_process_times(user_mode(get_irq_regs()));
    + profile_tick(CPU_PROFILING);

    I'd like to move update_process_times()'s use of get_irq_regs() into itself,
    except that i386, alone of the archs, uses something other than user_mode().

    Some notes on the interrupt handling in the drivers:

    (*) input_dev() is now gone entirely. The regs pointer is no longer stored in
    the input_dev struct.

    (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking. It does
    something different depending on whether it's been supplied with a regs
    pointer or not.

    (*) Various IRQ handler function pointers have been moved to type
    irq_handler_t.

    Signed-Off-By: David Howells
    (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)

    David Howells
     

03 Jul, 2006

1 commit


26 Jun, 2006

1 commit


27 May, 2006

1 commit

  • This improves accuracy of the touchscreen and hwmon sensor readings,
    addressing an issue noted by Imre Deak: there's an extra bit written before
    the sample (12 bits) gets written out.

    It also catches up to various comments, and makes the /proc/interrupts
    entry sensible again.

    Signed-off-by: David Brownell
    Cc: Imre Deak
    Cc: Jean Delvare
    Cc: Dmitry Torokhov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     

26 Apr, 2006

2 commits

  • Providing more accurate coordinates for thumb press requires additional
    steps in the filtering logic:

    - Ignore samples found invalid by the debouncing logic, or the ones that
    have out of bound pressure value.
    - Add a parameter to repeat debouncing, so that more then two consecutive
    good readings are required for a valid sample.

    Signed-off-by: Imre Deak
    Acked-by: Juha Yrjola
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • X touchscreen drivers that don't interpret the designated pen up message
    assume a pen up event from a pressure value 0. For these we generate a
    pressure 0 message along with the pen up message.

    Signed-off-by: Imre Deak
    Acked-by: Juha Yrjola
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     

12 Apr, 2006

6 commits

  • The pen down IRQ will toggle during each X,Y,Z measurement cycle.
    Even though the IRQ is disabled it will be latched and delivered
    when after enable_irq. Thus in the IRQ handler we must avoid
    starting a new measurement cycle when such an "unwanted" IRQ happens.
    Add a get_pendown_state platform function, which will probably
    determine this by reading the current GPIO level of the pen IRQ pin.

    Move the IRQ reenabling from the SPI RX function to the timer. After
    the last power down message the pen IRQ pin is still active for a
    while and get_pendown_state would report incorrectly a pen down state.

    When suspending we should check the ts->pending flag instead of
    ts->pendown, since the timer can be pending regardless of ts->pendown.
    Also if ts->pending is set we can be sure that the timer is running,
    so no need to rearm it. Similarly if ts->pending is not set we can
    be sure that the IRQ is enabled (and the timer is not).

    Signed-off-by: Imre Deak
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • - Add disable attribute to support device locking mode where
    unintentional touch event shouldn't wake up the system;
    - Update comments;
    - Add missing spin_lock_init;
    - Do device resume with the lock held;
    - Do cleanup calls / free memory in the reverse order of initialization.

    Signed-off-by: Imre Deak
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • Sometimes a polling loop had a hard time changing state without
    pre-emption enabled. Use msleep instead, it's better anyway.

    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Juha Yrjola
     
  • Some touchscreens seem to oscillate heavily for a while after touching
    the screen.  Implement support for sampling the screen until we get two
    consecutive values that are close enough.

    Signed-off-by: Imre Deak
    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • Submit a seperate request for powering down the ADC in ads7846,
    doing it after the last read request. Otherwise some of the read
    values are incorrect.

    Signed-off-by: Imre Deak
    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     
  • It's handy for userspace diagnostics to see the pen down status, to
    see whether the touchscreen is "stuck" (shortcircuited).

    Signed-off-by: Imre Deak
    Signed-off-by: Juha Yrjola
    Signed-off-by: David Brownell
    Signed-off-by: Dmitry Torokhov

    Imre Deak
     

27 Mar, 2006

1 commit

  • drivers/input/touchscreen/ads7846.c: In function `ads7846_read12_ser':
    drivers/input/touchscreen/ads7846.c:207: warning: implicit declaration of function `disable_irq'
    drivers/input/touchscreen/ads7846.c:209: warning: implicit declaration of function `enable_irq'

    Cc: Dmitry Torokhov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

26 Mar, 2006

1 commit

  • sparc32:

    drivers/input/touchscreen/ads7846.c: In function `ads7846_read12_ser':
    drivers/input/touchscreen/ads7846.c:206: warning: implicit declaration of function `disable_irq'
    drivers/input/touchscreen/ads7846.c:208: warning: implicit declaration of function `enable_irq'

    Cc: Dmitry Torokhov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

15 Feb, 2006

2 commits


19 Jan, 2006

1 commit


14 Jan, 2006

3 commits

  • This makes the SPI core and its users access transfers in the SPI message
    structure as linked list not as an array, as discussed on LKML.

    From: David Brownell

    Updates including doc, bugfixes to the list code, add
    spi_message_add_tail(). Plus, initialize things _before_ grabbing the
    locks in some cases (in case it grows more expensive). This also merges
    some bitbang updates of mine that didn't yet make it into the mm tree.

    Signed-off-by: Vitaly Wool
    Signed-off-by: Dmitry Pervushin
    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    Vitaly Wool
     
  • This updates the ads7864 driver to use the new "spi_driver" struct, and
    includes some minor unrelated cleanup.

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    David Brownell
     
  • This is a driver for the ADS7846 touchscreen sensor, derived from
    the corgi_ts and omap_ts drivers. Key differences from those two:

    - Uses the new SPI framework (minimalist version)
    - abstracts board-specific touchscreen info
    - Sysfs attributes for the temperature and voltage sensors
    - Uses fewer ARM-specific IRQ primitives

    The temperature and voltage sensors show up in sysfs like this:

    $ pwd
    /sys/devices/platform/omap-uwire/spi2.0
    $ ls
    bus@ input:event0@ power/ temp1 vbatt
    driver@ modalias temp0 vaux
    $ cat modalias
    ads7846
    $ cat temp0
    991
    $ cat temp1
    1177
    $

    So far only basic testing has been done. There's a fair amount of hardware
    that uses this sensor, and which also runs Linux, which should eventually
    be able to use this driver.

    One portability note may be of special interest. It turns out that not all
    SPI controllers are happy issuing requests that do things like "write 8 bit
    command, read 12 bit response". Most of them seem happy to handle various
    word sizes, so the issue isn't "12 bit response" but rather "different rx
    and tx write sizes", despite that being a common MicroWire convention. So
    this version of the driver no longer reads 12 bit native-endian words; it
    reads 16-bit big-endian responses, then byteswaps them and shifts the
    results to discard the noise.

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Greg Kroah-Hartman

    David Brownell