Commit graph

271 commits

Author SHA1 Message Date
Linus Torvalds
0dd52d0df0 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: add driver for Atmel AT42QT2160 Sensor Chip
  Input: max7359 - use threaded IRQs
  Input: add driver for Maxim MAX7359 key switch controller
  Input: add driver for ADP5588 QWERTY I2C Keypad
  Input: add touchscreen driver for MELFAS MCS-5000 controller
  Input: add driver for OpenCores Keyboard Controller
  Input: dm355evm_keys - remove dm355evm_keys_hardirq
  Input: synaptics_i2c - switch to using __cancel_delayed_work()
  Input: ad7879 - add support for AD7889
  Input: atkbd - rely on input core to restore state on resume
  Input: add generic suspend and resume for input devices
  Input: libps2 - additional locking for i8042 ports
2009-09-23 15:39:36 -07:00
Linus Torvalds
433c24ed7f Merge git://git.infradead.org/battery-2.6
* git://git.infradead.org/battery-2.6:
  power_supply: Add driver for the PMU on WM831x PMICs
  ds2760_battery: Fix integer overflow for time_to_empty_now
  wm97xx_battery: Convert to dev_pm_ops
  wm97xx_battery: Use irq to detect charger state
  wm97xx_battery: Use platform_data
  wm97xx-core: Pass platform_data to battery
  ds2760_battery: implement set_charged() feature
  power_supply: get_by_name and set_charged functionality
  power_supply: EXPORT_SYMBOL cleanups
  ds2760_battery: add current_accum module parameter
  ds2760_battery: handle full_active_uAh == 0 case correctly
  ds2760_battery: add rated_capacity module parameter
  ds2760_battery: export more features
  ds2760_battery: delay power supply registration
  wm8350_power: Implement charge type property
  power_supply: Add a charge_type property, and use it for olpc driver
  olpc_battery: Add an 'error' sysfs device that displays raw errors
  Revert "power: remove POWER_SUPPLY_PROP_CAPACITY_LEVEL"
2009-09-23 10:11:08 -07:00
Anton Vorontsov
e0626e3844 spi: prefix modalias with "spi:"
This makes it consistent with other buses (platform, i2c, vio, ...).  I'm
not sure why we use the prefixes, but there must be a reason.

This was easy enough to do it, and I did it.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Grant Likely <grant.likely@secretlab.ca>
Cc: Jean Delvare <khali@linux-fr.org>
Cc: Ben Dooks <ben-linux@fluff.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Dmitry Torokhov <dtor@mail.ru>
Cc: Samuel Ortiz <sameo@openedhand.com>
Cc: "John W. Linville" <linville@tuxdriver.com>
Acked-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-09-23 07:39:43 -07:00
Anton Vorontsov
f056878332 Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
	drivers/power/wm97xx_battery.c
2009-09-23 03:49:27 +04:00
Joonyoung Shim
38e783b381 Input: add touchscreen driver for MELFAS MCS-5000 controller
The MELPAS MCS-5000 is the touchscreen controller. The overview of this
controller can see at the following website:

http://www.melfas.com/product/product01.asp?k_r=eng_

This driver is tested on s3c6410 NCP board and supports only the i2c
interface.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-09-17 23:24:03 -07:00
Michael Hennerich
36fb252778 Input: ad7879 - add support for AD7889
The AD7889 is a new part but 100% software compatible with the AD7879, so
add it to the id_table and help text.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-09-17 23:24:00 -07:00
Daniel Ribeiro
0387e107d6 input: PCAP2 based touchscreen driver
Touchscreen driver for the PCAP2 multi function device used in
Motorola EZX smartphones.

Signed-off-by: Daniel Ribeiro <drwyrm@gmail.com>
Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
Signed-off-by: Antonio Ospite <ospite@studenti.unina.it>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
2009-09-17 09:47:12 +02:00
Linus Torvalds
133309a89e Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (52 commits)
  Input: bcm5974 - silence uninitialized variables warnings
  Input: wistron_btns - add keymap for AOpen 1557
  Input: psmouse - use boolean type
  Input: i8042 - use platform_driver_probe
  Input: i8042 - use boolean type where it makes sense
  Input: i8042 - try disabling and re-enabling AUX port at close
  Input: pxa27x_keypad - allow modifying keymap from userspace
  Input: sunkbd - fix formatting
  Input: i8042 - bypass AUX IRQ delivery test on laptops
  Input: wacom_w8001 - simplify querying logic
  Input: atkbd - allow setting force-release bitmap via sysfs
  Input: w90p910_keypad - move a dereference below a NULL test
  Input: add twl4030_keypad driver
  Input: matrix-keypad - add function to build device keymap
  Input: tosakbd - fix cleaning up KEY_STROBEs after error
  Input: joydev - validate axis/button maps before clobbering current ones
  Input: xpad - add USB ID for the drumkit controller from Rock Band
  Input: w90p910_keypad - rename driver name to match platform
  Input: add new driver for Sentelic Finger Sensing Pad
  Input: psmouse - allow defining read-only attributes
  ...
2009-09-14 17:56:51 -07:00
Russell King
87d721ad7a Merge branch 'master' into devel 2009-09-12 12:04:37 +01:00
Marek Vasut
32bb0e0c77 wm97xx-core: Pass platform_data to battery
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Acked-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
2009-09-04 20:11:17 +04:00
Dmitry Torokhov
41c372dcad Input: wacom_w8001 - simplify querying logic
There is no need for locking when we send query and start commands
to the touchscreen since there is no concurrency.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-09-03 20:38:37 -07:00
wanzongshun
35c9221acb ARM: 5682/1: Add cpu.c and dev.c and modify some files of w90p910 platform
Add the cpu.c and dev.c and modify w90p910 platform
to apply to use the common API(provided by cpu.c and dev.c)
at the same time, I renamed all w90x900 to nuc900 in every
c file of w90x900 platform and touchscreen's driver name.

Signed-off-by: Wan ZongShun <mcuos.com@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2009-09-02 11:22:23 +01:00
Dmitry Torokhov
4b61bb575b Merge commit 'v2.6.31-rc8' into next 2009-08-27 22:00:20 -07:00
Pavel Revak
9b2fb2da4e Input: ucb1400_ts - enable interrupt unconditionally
Sometimes, when using the touchscreen, it stops working till next restart
and the following message is printed:

	ucb1400: unexpected IE_STATUS = 0x0

The following patch retriggers the touchscreen interrupt unconditionally.
This prevents hanging of the touchscreen in case of bogus interrupt
occurence.

Signed-off-by: Pavel Revak <palo@bielyvlk.sk>
Acked-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-08-21 00:54:13 -07:00
Marek Vasut
1700f5fde8 Input: ucb1400_ts - enable ADC Filter
This patch enables ADC filtering on UCB1400 codec by default. The
benefit from this change is mostly on some Colibri boards where
the ADCSYNC pin of the UCB1400 codec isn't connected causing the
touchscreen to jitter very badly. This change has no visible
effect on boards where the ADCSYNC pin is connected.

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Tested-by: Palo Revak <palo@bielyvlk.sk>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-08-21 00:53:12 -07:00
Daniel Mack
25a70e38cd Input: eeti_ts - allow active high irq lines
This adds a struct eeti_ts_platform_data which currently holds only one
value to specify the interrupt polarity.

The driver has a fallback if no platform data is passed in via the
i2c_board_info, so no regression is caused.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-08-12 01:09:50 -07:00
Dmitry Torokhov
dd0d5443da Input: serio - don't use serio->write() directly
We have a nice wrapper for that.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-08-05 00:43:43 -07:00
Richard Röjfors
cf5f439b48 Input: tsc2007 - check if I2C communication works during probe
Check the result when sending the power down command to the controller.

Signed-off-by: Richard Röjfors <richard.rojfors.ext@mocean-labs.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-08-04 22:35:49 -07:00
Dmitry Torokhov
d570e9ef84 Input: tsc2007 - make get_pendown_state platform callback optional
In cases when get_pendown_state callback is not available have
the driver to fallback on pressure calculation to determine if
the pen is up.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-08-04 22:35:34 -07:00
Florian Echtler
9e3b25837a Input: usbtouchscreen - add support for e2i touchscreen controller
This patch adds support for the e2i touchscreen controller used in the
Mimo 740 (and probably in other e2i touchscreen products). Tested on
Mimo 740.

Signed-off-by: Florian Echtler <floe@butterbrot.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-27 21:16:44 -07:00
Richard Röjfors
703490ff7e Input: tsc2007 - do not read coordinates during probe
Don't read coordinates during probe of the driver, just power down
the controller and wait for interrupts.

Signed-off-by: Richard Röjfors<richard.rojfors.ext@mocean-labs.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-26 11:21:03 -07:00
Richard Röjfors
cad065fd1e Input: tsc2007 - make init/exit platform hw callbacks optional
Make init_platform_hw and exit_platform_hw callbacks optional since
they are not needed on all platforms.

Signed-off-by: Richard Röjfors <richard.rojfors.ext@mocean-labs.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-26 11:21:00 -07:00
Dmitry Torokhov
141586bc57 Input: tsc2007 - properly shut off interrupts/delayed work
Properly shut off interrupts/delayed work by free-ing IRQ first
and then ensuring that enable/disable is balanced. Also add
__devinit/__devexit markings, restore poll delay/period scheduling
logic, make sure we call exit_platform_hw() method when probe
fails.

Tested-by: Richard Röjfors <richard.rojfors.ext@mocean-labs.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-26 11:20:57 -07:00
Richard Röjfors
75fba3b05d Input: tsc2007 - remove HR timer
Since it's not allowed to do synchronous I2C in the HR timer callback
context we have to switch to using the global workqueue. The work is
scheduled every 1ms when polling rather than 5 us.

Signed-off-by: Richard Röjfors <richard.rojfors.ext@mocean-labs.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-26 11:20:55 -07:00
Marek Vasut
99fde513f5 Input: wm97xx - add possibility to control the GPIO_STATUS shift
This patch allows tweaking the behaviour of GPIO_STATUS register
shift quirk that's in wm97xx-core. The problem with GPIO_STATUS
register being shifted by one doesn't appear on all hardware it
seems and causes problems with accelerated touchscreen drivers on
Palm hardware. Therefore an accelerated touchscreen driver can select
if the shift is/isn't happening on the hardware.

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-20 22:30:33 -07:00
Marek Vasut
b833306feb Input: wm97xx - add Palm support to Mainstone accelerated touch
This patch refactors the Mainstone accelerated touch code a little and
adds support for interrupt driven touchscreen on Palm LifeDrive, TX and
Tungsten T5.

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-20 22:30:23 -07:00
Wan ZongShun
b7788c5ff9 Input: w90p910_ts - use clk API
Now that clk API is available on ARM we can use it in the driver.

Signed-off-by: Wan ZongShun <mcuos.com@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-12 22:19:39 -07:00
Hans J. Koch
f9c2273694 Input: ucb1400_ts - fix a misleading function name
The driver for UCB1400 touchscreen controllers contains a function named
ucb1400_ts_pen_down(), but it returns 0 if the pen is down and 1 if it's up.
This causes confusion, especially since it's used as a boolean truth value
later in the code. This patch renames it.

Signed-off-by: Hans J. Koch <hjk@linutronix.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-12 22:19:26 -07:00
Jim Persson
f7370699fb Input: usbtouchscreen - support for JASTEC/DigiTech DTR-02U USB touch controllers
Add support for the JASTEC/DigiTech DTR-02U USB touch screen
controllers.

Signed-off-by: Jim Persson <jim-linux@nurd.se>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-07 22:48:45 -07:00
Julia Lawall
72398e4b1a Input: use resource_size when allocating resources
Use the function resource_size, which reduces the chance of
introducing off-by-one errors in calculating the resource size.

The semantic patch that makes this change is as follows:
(http://www.emn.fr/x-info/coccinelle/)

// <smpl>
@@
struct resource *res;
@@

- (res->end - res->start) + 1
+ resource_size(res)
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-07-07 22:48:14 -07:00
Michael Roth
c57c0a2a0d Input: ads7846 - pin change interrupt support
Some SoCs support only pin change interrupts on GPIO pins used as irq
lines.

The ads7846 core is not affected from the additional irqs on the rising
edge because the code accounts touch bounce anyway by kicking in a timer
and disabling the irq after the first request and reenabling the irq after
a timeout when there is no longer pen down detected.

Signed-off-by: Michael Roth <mroth@nessie.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-06-11 02:07:25 -07:00
Wan ZongShun
7e3f73754e Input: add support for touchscreen on W90P910 ARM platform
The touchscreen works in two modes, wait trigger mode and auto-semi
mode. The device starts in wait trigger mode and waits until pressure
is detected, then device sets WT_INT bit and raises an interrupt.
The driver should put the device into auto-semi mode and prepare for
reading first X and then Y coordinates. When coordinate data is ready
the driver sets ADC_INT bit and raises interrupt again.

[dtor@mail.ru: various cleanups]
Signed-off-by: Wan ZongShun <mcuos.com@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-06-11 02:03:39 -07:00
Dmitry Torokhov
4894e4aca8 Merge commit 'v2.6.30' into next 2009-06-11 01:58:01 -07:00
Manuel Traut
346a850e3c Input: usb1400_ts - fix access to "device data" in resume function
platform_data != driver_data

driver data is actually the "correct" place of the struct however it is
not placed there due to the need of the ac97 struct. This is broken since
d9105c2b01 aka "[ARM] 5184/1: Split ucb1400_ts into core and touchscreen"

Signed-off-by: Manuel Traut <manut@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-05-27 06:24:41 -07:00
Daniel Mack
10494dce0b Input: add driver for EETI touchpanels
This patch adds a driver for EETI's I2C connected touchscreens.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Tested-by: Sven Neumann <s.neumann@raumfeld.com>
Acked-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-05-19 19:25:35 -07:00
Michael Roth
b58895f8b1 Input: ads7846 - more detailed model name in sysfs
Signed-off-by: Michael Roth <mroth@nessie.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-05-19 19:25:27 -07:00
Michael Roth
86579a4ccc Input: ads7846 - support swapping x and y axes
Signed-off-by: Michael Roth <mroth@nessie.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-05-19 19:24:54 -07:00
Kwangwoo Lee
78f7f36711 Input: tsc2007 - make sure platform provides get_pendown_state()
The platform codes must provide get_pendown_state() for the driver
to work properly.

Signed-off-by: Kwangwoo Lee <kwangwoo.lee@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-05-15 19:23:54 -07:00
Thierry Reding
705a76d2d2 Input: tsc2007 - fix locking in hrtimer handler
Now that hrtimers are always running in hard irq context we can't
unconditionally enable interrupts at the end of the timer function.

Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Signed-off-by: Kwangwoo Lee <kwangwoo.lee@gmail.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-05-11 15:35:48 -07:00
Dmitry Torokhov
d585a021c0 Merge commit 'v2.6.30-rc5' into next 2009-05-08 18:29:27 -07:00
Greg Kroah-Hartman
84e5b0d00f Input: wm97xx - do not access dev->driver_data directly
In the near future, the driver core is going to not allow direct access
to the driver_data pointer in struct device.  Instead, the functions
dev_get_drvdata() and dev_set_drvdata() should be used.  These functions
have been around since the beginning, so are backwards compatible with
all older kernel versions.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-05-01 06:49:15 -07:00
Hans-Christian Egtvedt
864fe73c31 Input: add wm97xx accelerated driver for Atmel microprocessors
This patch adds an accelerated driver for Atmel AVR32 AT32AP700X
microprocessors. It uses interrupts on the channel B in the AC97
controller. Thus, offloading the work queue in the wm97xx-ts driver.

The driver has been tested with Atmel AVR32 AT32AP7000 and Wolfson
WM9712 codec.

The driver can also be easily modified to support Atmel AT91 devices, as
AT91 and AVR32 share the same AC97C module.

[Fixed leak of atmel_wm97xx when probe fails. -- broonie]
[dtor@mail.ru: do not report ABS_PRESSURE events when not measuring pressure]
Signed-off-by: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-18 19:13:34 -07:00
Ben Nizette
3deb649e65 Input: ucb1400 - use disable_irq_nosync() in irq handler
disable_irq() waits for all running handlers to complete before
returning.  As such, if it's used to disable an interrupt from
that interrupt's handler it will deadlock.  This replaces the
dangerous instances with the _nosync() variant which doesn't have
this problem.

Signed-off-by: Ben Nizette <bn@niasdigital.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-17 20:42:06 -07:00
Ben Nizette
29fa98bd9b Input: tsc2007 - use disable_irq_nosync() in irq handler
disable_irq() waits for all running handlers to complete before
returning.  As such, if it's used to disable an interrupt from
that interrupt's handler it will deadlock.  This replaces the
dangerous instances with the _nosync() variant which doesn't have
this problem.

Signed-off-by: Ben Nizette <bn@niasdigital.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-17 20:42:00 -07:00
Dmitry Torokhov
0c387ec88a Merge branch 'next' into for-linus 2009-04-16 08:51:52 -07:00
Ben Nizette
3f3e7c6e13 Input: ads7846 - fix unsafe disable_irq
The use of disable_irq inside the handler for the interrupt being
disabled has always been dangerous.  disable_irq should wait for that
handler to complete before returning -> deadlock.

For some reason this wasn't actually the case until 3aa551c9b was merged
but since this time, the ads7846 driver has deadlocked the system on
first interrupt.

Convert the driver to use the handler-safe _nosync variant.

Signed-off-by: Ben Nizette <bn@niasdigital.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-15 19:02:46 -07:00
Jiri Slaby
180deb5088 Input: mainstone-wm97xx - fix condition in pen_up
The loop body was never executed, because the condition is
always false. Convert to for with more obvious condition.

Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-15 09:04:10 -07:00
Michael Hennerich
0bc69ce692 Input: ad7877, ad7879 - remove depreciated IRQF_SAMPLE_RANDOM flag
This patch removes depreciated IRQF_SAMPLE_RANDOM flags from
ad7877 and ad7879 touchscreen drivers.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-15 08:58:22 -07:00
Eric Miao
7f6d5ff22b Input: da9034-ts - make pen {down,up} events more reliable
PEN_{UP/DOWN} events are expected to be available soon after stopping
TSI auto measurement, but this is found not always be true. Work around
this by adding delay and simulating such an event (according to pen down
status bit).

Signed-off-by: Bin Yang <bin.yang@marvell.com>
Signed-off-by: Eric Miao <eric.miao@marvell.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-15 08:58:22 -07:00
Eric Miao
93ff27c66d Input: da9034-ts - add Bin Yang as co-author of the driver
Bin did a lot of work on this driver, without his help, this driver
will not be possible.

Signed-off-by: Bin Yang <bin.yang@marvell.com>
Signed-off-by: Eric Miao <eric.miao@marvell.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
2009-04-15 08:58:21 -07:00