mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-22 13:54:57 +08:00
serdev: add helpers for cts and rts handling
Add serdev helper functions for handling of cts and rts lines using the serdev's tiocm functions. Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Sebastian Reichel <sre@kernel.org> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
5659dab26f
commit
756db77874
@ -16,6 +16,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/termios.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
struct serdev_controller;
|
||||
struct serdev_device;
|
||||
@ -254,6 +255,36 @@ static inline int serdev_device_write_room(struct serdev_device *sdev)
|
||||
|
||||
#endif /* CONFIG_SERIAL_DEV_BUS */
|
||||
|
||||
static inline bool serdev_device_get_cts(struct serdev_device *serdev)
|
||||
{
|
||||
int status = serdev_device_get_tiocm(serdev);
|
||||
return !!(status & TIOCM_CTS);
|
||||
}
|
||||
|
||||
static inline int serdev_device_wait_for_cts(struct serdev_device *serdev, bool state, int timeout_ms)
|
||||
{
|
||||
unsigned long timeout;
|
||||
bool signal;
|
||||
|
||||
timeout = jiffies + msecs_to_jiffies(timeout_ms);
|
||||
while (time_is_after_jiffies(timeout)) {
|
||||
signal = serdev_device_get_cts(serdev);
|
||||
if (signal == state)
|
||||
return 0;
|
||||
usleep_range(1000, 2000);
|
||||
}
|
||||
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
static inline int serdev_device_set_rts(struct serdev_device *serdev, bool enable)
|
||||
{
|
||||
if (enable)
|
||||
return serdev_device_set_tiocm(serdev, TIOCM_RTS, 0);
|
||||
else
|
||||
return serdev_device_set_tiocm(serdev, 0, TIOCM_RTS);
|
||||
}
|
||||
|
||||
/*
|
||||
* serdev hooks into TTY core
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user