From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Heiko Schocher <hs@denx.de>
Cc: linux-input@vger.kernel.org
Subject: Re: HowTo write a driver for 2 multiplexed PS/2 ports over 1 UART?
Date: Sat, 18 Apr 2009 16:46:00 -0700 [thread overview]
Message-ID: <20090418234559.GD32346@dtor-d630.eng.vmware.com> (raw)
In-Reply-To: <49E6CEAA.9060608@denx.de>
Hi Heiko,
On Thu, Apr 16, 2009 at 08:22:34AM +0200, Heiko Schocher wrote:
> Hello,
>
> I maybe get a projekt, where I have 2 PS/2 ports (a keyboard and a mousse)
> connected to one UART and the multiplexing is done by a PIC.
>
> I searched in actual 2.6 Kernel sources for such a solution, but
> couln;t find one. Overlooked I something?
>
> For 2.4er Kernel there was such a driver, see
>
> http://git.denx.de/?p=linuxppc_2_4_devel.git;a=blob;f=drivers/char/ps2mult.c
>
> but, I think, this is no longer portable to 2.6.
>
> So, thats why I am here and want to ask the experts how to solve
> this problem in a mainline acceptable way, before I make a hack,
> that never has a chance to go in mainline.
>
> Some suggestions from me (maybe they are all bad)
>
> I looked in drivers/input/serio/serio.c and could think of adding
> the multiplexing in serio_interrupt(), and call serio_driver specific
> serio->drv->interrupt functions, when I know, which byte come from
> which device. But, if I see it right, I can only add one "struct
> serio_driver *drv;" driver to one serio port, so it is not possible
> to handle 2 or more devices over one serio port :-(
> Maybe we enhance this too ... ?
>
> Or I make a combinated (keyboard/mousse) driver which uses one
> serio port ... but I think thats a bad idea, also no idea, in which
> directory i have to add such a driver.
>
> So I think it would nice to have the possibility to add more than
> one serio_driver to a serio_port and add a "multiplexer" layer ...
> but I am new to the input layer, so I ask the experts.
>
> Hopefully I just missed something in actual code, and there is
> better/easier way? ;-)
>
You need to create 2 serio ports in your driver and have it send data
into appropriate port, depending on what device it came from. If you
take a look at i8042 driver it does exactly that. We have 1 serio port
for keyboard and eithe 1 or 4 AUX serio ports. In i8042_interrupt we
check the status bit to figure to which serio port incoming byte should
be routed and act accordingly.
Hope this helps.
--
Dmitry
next prev parent reply other threads:[~2009-04-18 23:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-16 5:54 [PATCH 3/9] omap-keypad: Use disable_irq_nosync() from within irq handlers Ben Nizette
2009-04-16 6:22 ` HowTo write a driver for 2 multiplexed PS/2 ports over 1 UART? Heiko Schocher
2009-04-18 23:46 ` Dmitry Torokhov [this message]
2009-04-19 10:04 ` Heiko Schocher
2009-04-20 0:48 ` Dmitry Torokhov
2009-04-20 4:45 ` Heiko Schocher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090418234559.GD32346@dtor-d630.eng.vmware.com \
--to=dmitry.torokhov@gmail.com \
--cc=hs@denx.de \
--cc=linux-input@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).