aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input
Commit message (Collapse)AuthorAge
* Merge branch 'for-linus' of ↵Linus Torvalds2010-01-15
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: sentelic - fix left/right horizontal scroll mapping Input: pmouse - move Sentelic probe down the list Input: add compat support for sysfs and /proc capabilities output Input: i8042 - add Dritek quirk for Acer Aspire 5610. Input: xbox - do not use GFP_KERNEL under spinlock Input: psmouse - fix Synaptics detection when protocol is disabled Input: bcm5974 - report ABS_MT events Input: davinci_keyscan - add device_enable method to platform data Input: evdev - be less aggressive about sending SIGIO notifies Input: atkbd - fix canceling event_work in disconnect Input: serio - fix potential deadlock when unbinding drivers Input: gf2k - fix &&/|| confusion in gf2k_connect()
| * Input: sentelic - fix left/right horizontal scroll mappingTai-hwa Liang2010-01-13
| | | | | | | | | | Signed-off-by: Tai-hwa Liang <avatar@sentelic.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: pmouse - move Sentelic probe down the listTai-hwa Liang2010-01-13
| | | | | | | | | | | | | | | | | | | | | | | | | | Sentelic probes confuse IBM trackpoints so they stop responding to TP_READ_ID command. See: http://bugzilla.kernel.org/show_bug.cgi?id=14970 Let's move FSP detection lower so it is probed after trackpoint and others, just before we strat probing for Intellimouse Explorer. Signed-off-by: Tai-hwa Liang <avatar@sentelic.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: add compat support for sysfs and /proc capabilities outputDmitry Torokhov2010-01-12
| | | | | | | | | | | | | | | | | | | | | | | | Input core displays capabilities bitmasks in form of one or more longs printed in hex form and separated by spaces. Unfortunately it does not work well for 32-bit applications running on 64-bit kernels since applications expect that number is "worth" only 32 bits when kernel advances by 64 bits. Fix that by ensuring that output produced for compat tasks uses 32-bit units. Reported-and-tested-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: i8042 - add Dritek quirk for Acer Aspire 5610.Elliott Sales de Andrade2010-01-11
| | | | | | | | | | Signed-off-by: Elliott Sales de Andrade <quantum.analyst@gmail.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: xbox - do not use GFP_KERNEL under spinlockDmitry Torokhov2010-01-10
| | | | | | | | | | | | | | | | xbox_play_effect() is called while holding dev->event_lock with interrupts disabled and thus may not use GFP_KERNEL when submitting urbs. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: psmouse - fix Synaptics detection when protocol is disabledDaniel Drake2010-01-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For configurations where Synaptics hardware is present but the Synaptics extensions support is not compiled in, the mouse is reprobed and a new device is allocated on every suspend/resume. During probe, psmouse_switch_protocol() calls psmouse_extensions() with set_properties=1. This calls the dummy synaptics_init() which returns an error code, instructing us not to use the synaptics extensions. During resume, psmouse_reconnect() calls psmouse_extensions() with set_properties=0, in which case call to synaptics_init() is bypassed and PSMOUSE_SYNAPTICS is returned. Since the result is different from previous attempt psmouse_reconnect() fails and full re-probe happens. Fix this by tweaking the set_properties=0 codepath in psmouse_extensions() to be more careful about offering PSMOUSE_SYNAPTICS extensions. Signed-off-by: Daniel Drake <dsd@laptop.org> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: bcm5974 - report ABS_MT eventsHenrik Rydberg2010-01-06
| | | | | | | | | | | | | | | | | | Make bcm5974 report raw multi-touch (MT) data in the form of ABS_MT events. [dtor@mail.ru: get rid of module option, always report all events] Signed-off-by: Henrik Rydberg <rydberg@euromail.se> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: davinci_keyscan - add device_enable method to platform dataMiguel Aguilar2010-01-06
| | | | | | | | | | | | | | | | | | | | Add a function pointer in the platform data of the DaVinci Keyscan driver called device_enable, in order to perform board specific actions when the device is initialized, like setup the PINMUX configuration. Signed-off-by: Miguel Aguilar <miguel.aguilar@ridgerun.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: evdev - be less aggressive about sending SIGIO notifiesAdam Jackson2010-01-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When using realtime signals, we'll enqueue one signal for every event. This is unfortunate, because (for example) keyboard presses are three events: key, msc scancode, and syn. They'll be enqueued fast enough in kernel space that all three events will be ready to read by the time userspace runs, so the first invocation of the signal handler will read all three events, but then the second two invocations still have to run to do no work. Instead, only send the SIGIO notification on syn events. This is a slight abuse of SIGIO semantics, in principle it ought to fire as soon as any events are readable. But it matches evdev semantics, which is more important since SIGIO is rather vaguely defined to begin with. Signed-off-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: atkbd - fix canceling event_work in disconnectDmitry Torokhov2010-01-06
| | | | | | | | | | | | | | | | We need to first unregister input device and only then cancel event work since events can arrive (and cause event work to get scheduled again) until input_unregister_device() returns. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: serio - fix potential deadlock when unbinding driversEric W. Biederman2010-01-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sysfs_remove_group() waits for sysfs attributes to be removed, therefore we do not need to worry about driver-specific attributes being accessed after driver has been detached from the device. In fact, attempts to take serio->drv_mutex in attribute methods may lead to the following deadlock: sysfs_read_file() fill_read_buffer() sysfs_get_active_two() psmouse_attr_show_helper() serio_pin_driver() serio_disconnect_driver() mutex_lock(&serio->drv_mutex); <--------> mutex_lock(&serio_drv_mutex); psmouse_disconnect() sysfs_remove_group(... psmouse_attr_group); .... sysfs_deactivate(); wait_for_completion(); Fix this by removing calls to serio_[un]pin_driver() and functions themselves and using driver-private mutexes to serialize access to attribute's set() methods that may change device state. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: gf2k - fix &&/|| confusion in gf2k_connect()Roel Kluin2010-01-01
| | | | | | | | | | | | | | This always evaluates to true. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
* | Merge branch 'for-linus' of ↵Linus Torvalds2009-12-31
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: iforce - wait for command completion when closing the device Input: twl4030-pwrbutton - switch to using threaded IRQ Input: twl4030_keypad - switch to using threaded IRQ Input: lifebook - add CONFIG_DMI dependency Input: wistron - fix test for CONFIG_PM Input: psmouse - fix compile warning in hgpk module Input: matrix-keypad - handle cases when GPIOs can't be wakeup sources Input: iforce - fix oops on device disconnect Input: ff-memless - add notion of direction to for rumble effects Input: ff-memless - another fix for signed to unsigned overflow Input: ff-memless - start playing FF effects immediately Input: serio - do not mark kseriod freezable anymore Input: speed up suspend/shutdown for PS/2 mice and keyboards
| * Input: iforce - wait for command completion when closing the deviceDmitry Torokhov2009-12-30
| | | | | | | | | | | | | | | | We need to wait for the command to disable FF effects to complete before continuing with closing the device. Tested-by: Johannes Ebke <johannes.ebke@physik.uni-muenchen.de> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: twl4030-pwrbutton - switch to using threaded IRQFelipe Balbi2009-12-30
| | | | | | | | | | Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: twl4030_keypad - switch to using threaded IRQFelipe Balbi2009-12-30
| | | | | | | | | | Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: lifebook - add CONFIG_DMI dependencyDmitry Torokhov2009-12-30
| | | | | | | | | | | | | | | | Lifebook protocol can only be activated if we find known DMI signature. It is useles without DMI. Reported-by: Rakib Mullick <rakib.mullick@gmail.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: wistron - fix test for CONFIG_PMRakib Mullick2009-12-30
| | | | | | | | | | | | | | | | | | This should fix the following compile warning: drivers/input/misc/wistron_btns.c:1331:5: warning: "CONFIG_PM" is not defined Signed-off-by: Rakib Mullick <rakib.mullick@gmail.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: psmouse - fix compile warning in hgpk moduleRené Bolldorf2009-12-30
| | | | | | | | | | | | The variable 'dev' is unused in function 'hgpk_register'. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: matrix-keypad - handle cases when GPIOs can't be wakeup sourcesDmitry Torokhov2009-12-25
| | | | | | | | | | | | | | | | | | | | | | | | | | On certain boards not all GPIOs may be used as wakeup sources, in which case some of enable_irq_wake() calls will fail. On resume calling disable_irq_wake() will warn about unbalanced IRQ wake disable. Solve this by checking whether enable_irq_wake() succeeded or not and no not call disable_irq_wake() for these GPIOs/IRQs that have not been enabled. Reported-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: iforce - fix oops on device disconnectDmitry Torokhov2009-12-25
| | | | | | | | | | | | | | | | Do not try to free iforce device when we closing input device; disconnect is the only place where it should be deleted. Reported-by: Johannes Ebke <johannes.ebke@physik.uni-muenchen.de> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: ff-memless - add notion of direction to for rumble effectsJari Vanhala2009-12-25
| | | | | | | | | | | | | | | | | | This adds simple direction calculation when combining effects. It's useful to decide motor direction for rumble (vibrator). Signed-off-by: Jari Vanhala <ext-jari.vanhala@nokia.com> Acked-by: Anssi Hannula <anssi.hannula@iki.fi> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: ff-memless - another fix for signed to unsigned overflowDmitry Torokhov2009-12-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The commit 9e68177ef93b2f34eee5a1e1707bceef4b9ba69c changed 'gain' from signed to unsigned to fix an issue with rumble effect calculation, however it introduced problems when calculating constant effects. Having 'gain' being unsigned int was an unfortunate choice since it dominates all implicit type conversions causing everything to be treated as unsigned int. Let's change it back to signed int and simply add proper casts to rumble effect calculations. Reported-by: Gary Stein <lordcnidarian@gmail.com> Acked-by: Anssi Hannula <anssi.hannula@iki.fi> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: ff-memless - start playing FF effects immediatelyJari Vanhala2009-12-25
| | | | | | | | | | | | | | | | | | Instead of waiting for the next timer tick to start playing an effect do it immediately. This mostly helps systems using low HZ setting. Signed-off-by: Jari Vanhala <ext-jari.vanhala@nokia.com> Acked-by: Anssi Hannula <anssi.hannula@iki.fi> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: serio - do not mark kseriod freezable anymoreDmitry Torokhov2009-12-25
| | | | | | | | | | | | | | | | | | | | | | | | We used to make kseriod freezable to prevent unnecessary attempts at resuming keyboard and mouse before taking hibernation image when suspend and hibernation were sharing PM operations. Now that they are separated and we don't risk resuming during 'thaw' we don't need to freeze kseriod anymore. This will allow us to start resetting mouse and keyboard a bit earlier, before rest of the userspace comes back up. Acked-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: speed up suspend/shutdown for PS/2 mice and keyboardsDmitry Torokhov2009-12-25
| | | | | | | | | | | | | | | | | | Instead of doing full-blown reset while suspending or shutting down the box use lighter form of reset that should take less time. Tested-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
* | Merge branch 'for-linus' of ↵Linus Torvalds2009-12-16
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: (22 commits) Input: ALPS - add interleaved protocol support (Dell E6x00 series) Input: keyboard - don't override beep with a bell Input: altera_ps2 - fix test of unsigned in altera_ps2_probe() Input: add mc13783 touchscreen driver Input: ep93xx_keypad - update driver to new core support Input: wacom - separate pen from express keys on Graphire Input: wacom - add defines for data packet report IDs Input: wacom - add support for new LCD tablets Input: wacom - add defines for packet lengths of various devices Input: wacom - ensure the device is initialized properly upon resume Input: at32psif - do not sleep in atomic context Input: i8042 - add Gigabyte M1022M to the noloop list Input: i8042 - allow installing platform filters for incoming data Input: i8042 - fix locking in interrupt routine Input: ALPS - do not set REL_X/REL_Y capabilities on the touchpad Input: document use of input_event() function Input: sa1111ps2 - annotate probe() and remove() methods Input: ambakmi - annotate probe() and remove() methods Input: gscps2 - fix probe() and remove() annotations Input: altera_ps2 - add annotations to probe and remove methods ...
| * Input: ALPS - add interleaved protocol support (Dell E6x00 series)Sebastian Kapfer2009-12-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Properly handle version of the protocol where standard PS/2 packets from trackpoint are stuffed into middle (byte 3-6) of the standard ALPS packets when both the touchpad and trackpoint are used together. The patch is based on work done by Matthew Chapman and additional research done by David Kubicek and Erik Osterholm: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/296610 Many thanks to David Kubicek for his efforts in researching fine points of this new version of the protocol, especially interaction between pad and stick in these models. Signed-off-by: Sebastian Kapfer <sebastian_kapfer@gmx.net> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: altera_ps2 - fix test of unsigned in altera_ps2_probe()Roel Kluin2009-12-15
| | | | | | | | | | | | | | ps2if->irq is unsigned so the test does not work. Signed-off-by: Roel Kluin <roel.kluin@gmail.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: add mc13783 touchscreen driverSascha Hauer2009-12-15
| | | | | | | | | | | | | | | | | | | | This driver provides support for the touchscreen interface integrated into the Freescale MC13783. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Acked-by: Luotao Fu <l.fu@pengutronix.de> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Input: ep93xx_keypad - update driver to new core supportH Hartley Sweeten2009-12-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This driver was merged before the ep93xx core support was added for the keypad clock and acquiring/releasing the necessary gpio's. Now that the proper support is in the ep93xx core this driver needs to be updated to work correctly. Summary of changes: 1) Remove some unused members from the platform data. 2) Remove the custom KEY macro and use the ones available in <linux/input/matrix_keypad.h> 3) Remove the keypad_{readl/writel} macros and just use __raw_{readl/writel} directly. 4) Update the clk_set_rate() call to work with the core support. 5) Cleanup the probe routine and remove some unneeded messages. 6) Use the ep93xx core functions to acquire and release the gpio's. 7) Fix the clk_get() call to get the keypad clock. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * Merge commit 'linus' into nextDmitry Torokhov2009-12-15
| |\
| * | Input: wacom - separate pen from express keys on GraphirePing Cheng2009-12-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | Since Graphire/Bamboo devices report pen and expresskeys in the same data packet, we need to send a input_sync event to separate pen data from expresskeys for X11 driver to process them properly. Signed-off-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: wacom - add defines for data packet report IDsPing Cheng2009-12-15
| | | | | | | | | | | | | | | Signed-off-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: wacom - add support for new LCD tabletsPing Cheng2009-12-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds support for the foolowing Wacom devices: - 0x9F - a single touch only LCD tablet; - 0xE2 - a two finger touch only LCD tablet; - 0xE3 - a two finger touch, penabled LCD tablet. Signed-off-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: wacom - add defines for packet lengths of various devicesPing Cheng2009-12-15
| | | | | | | | | | | | | | | Signed-off-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: wacom - ensure the device is initialized properly upon resumePing Cheng2009-12-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | Call wacom_query_tablet_data() from wacom_resume() so the device will be switched to Wacom mode upon resume. Devices that require this are: regular tablets and two finger touch devices. Signed-off-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: at32psif - do not sleep in atomic contextDmitry Torokhov2009-12-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | We can't use msleep() while holding a spinlock, moreower serio's write() method is supposed to be useable from inettrupt context. Let's do what i8042 does and poll the status register every 50 us (with udelay). Reported-by: Marjan Fojkar <marjan@pajkc.eu> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: i8042 - add Gigabyte M1022M to the noloop listDmitry Torokhov2009-12-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Gigabyte netbook model M1022M requires i8042.noloop, otherwise AUX port will not detected and the touchpad will not work. Unfortunately chassis type in DMI set to "Other" and thus generic laptop entry does not fire on it. Reported-by: Darryl Bond <dbond@nrggos.com.au> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: i8042 - allow installing platform filters for incoming dataMatthew Garrett2009-12-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some hardware (such as Dell laptops) signal a variety of events through the i8042 controller, even if these don't map to keyboard events. Add support for drivers to filter the i8042 event stream in order to respond to these events and (if appropriate) block them from entering the input stream. Signed-off-by: Matthew Garrett <mjg@redhat.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: i8042 - fix locking in interrupt routineDmitry Torokhov2009-12-12
| | | | | | | | | | | | | | | | | | | | | | | | We need to protect not only i8042 status and data register from concurrent access from IRQ 1 and 12 but the rest of the shared state as well, so let's move release of i8042_lock in i8042_interrupt() a little bit further down. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: ALPS - do not set REL_X/REL_Y capabilities on the touchpadDmitry Torokhov2009-12-12
| | | | | | | | | | | | | | | | | | | | | Relative events are only reported via secondary device therefore device associated with the touchpad should not advertise these capabilities. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: document use of input_event() functionDmitry Torokhov2009-12-12
| | | | | | | | | | | | | | | Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: sa1111ps2 - annotate probe() and remove() methodsDmitry Torokhov2009-12-12
| | | | | | | | | | | | | | | | | | | | | Also fix annotation of ps2_test() - it can'be __init since it is called from __devinit code. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: ambakmi - annotate probe() and remove() methodsDmitry Torokhov2009-12-12
| | | | | | | | | | | | Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: gscps2 - fix probe() and remove() annotationsDmitry Torokhov2009-12-12
| | | | | | | | | | | | Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: altera_ps2 - add annotations to probe and remove methodsDmitry Torokhov2009-12-12
| | | | | | | | | | | | | | | | | | | | | Mark altera_ps2_probe() as __devinit and altera_ps2_remove() as __devexit so that they can be discarded when not needed. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: hil-mlc - use del_timer_sync() when unloading the driverDmitry Torokhov2009-12-12
| | | | | | | | | | | | | | | | | | | | | | | | del_timer() does not wait for the timer to finish running before returning and therefore is technically not safe. Also make sure to enable tasklet before kicking timer that will schedule it. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
| * | Input: serio - set owner in driver structuresDmitry Torokhov2009-12-12
| | | | | | | | | | | | | | | | | | | | | Setting up owner field ensures that driver core creates symlink from the driver to a module implementing this driver. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>