Re: HowTo write a driver for 2 multiplexed PS/2 ports over 1 UART?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux