Skip to contentSkip to conversation

kernel driver for rs232 serial peripheral

DISCUSSION Joey Oravec 2 participants 2 messages Aug 25, 2011

lore
Share & tools
lore
#0 lore raw

Fellow ARM developers,

We make a multi-function chip (rtc, gpio, nvram, etc) for embedded applications that has an rs232 serial interface. My goal is to write an MFD kernel driver that speaks serial to this device and implements interfaces. Other busses like spi and i2c are pretty straightforward in the kernel but serial feels a lot more complicated. To talk to this device from the kernel it seems like I need to:

- Call tty_register_ldisc to create a line discipline
- Call tty_register_driver and setup a driver
- Require userspace to call setserial and change the line discipline

This might work, but the documentation implies that a line discipline is for a protocol, not for connecting a device driver to a serial port. Is there any kind of easier-to-use serial class similar to i2c or spi where I can just setup a platform device/driver on a specific serial port? Am I missing an easier solution?

-joey

#1 lore raw
Quoted 11 lines · On Thursday 25 August 2011 17:28:25 Joey Oravec wrote:

We make a multi-function chip (rtc, gpio, nvram, etc) for embedded applications that has an rs232 serial interface. My goal is to write an MFD kernel driver that speaks serial to this device and implements interfaces. Other busses like spi and i2c are pretty straightforward in the kernel but serial feels a lot more complicated. To talk to this device from the kernel it seems like I need to:

- Call tty_register_ldisc to create a line discipline
- Call tty_register_driver and setup a driver
- Require userspace to call setserial and change the line discipline

Quoted 5 lines

This might work, but the documentation implies that a line discipline is for a protocol, not for connecting a device driver to a serial port. Is there any kind of easier-to-use serial class similar to i2c or spi where I can just setup a platform device/driver on a specific serial port? Am I missing an easier solution?

I don't think you need to call tty_register_driver, if it's a standard serial port, it should already work.
Also, I believe that there is a way to set the line discipline from inside the kernel if you know what is connected. I forgot the details but there should be a number of examples in the kernel source.

Arnd