Re: [PATCH] serdev: add method to set stop bits

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

 



On Fri, Apr 12, 2019 at 1:55 AM Fatih Aşıcı <fatih.asici@xxxxxxxxxxxx> wrote:
>
> Adds serdev_device_set_stop_bits() which takes an int argument with
> a value of 1 or 2.

Do you have a user? We normally like to have one before adding
functions to the kernel.

>
> An implementation for ttyport is also added.
>
> Signed-off-by: Fatih Aşıcı <fatih.asici@xxxxxxxxxxxx>
> ---
>  drivers/tty/serdev/core.c           | 11 +++++++++++
>  drivers/tty/serdev/serdev-ttyport.c | 22 ++++++++++++++++++++++
>  include/linux/serdev.h              |  3 +++
>  3 files changed, 36 insertions(+)
>
> diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> index a0ac16ee6575..1ca1c067e10f 100644
> --- a/drivers/tty/serdev/core.c
> +++ b/drivers/tty/serdev/core.c
> @@ -371,6 +371,17 @@ int serdev_device_set_parity(struct serdev_device *serdev,
>  }
>  EXPORT_SYMBOL_GPL(serdev_device_set_parity);
>
> +int serdev_device_set_stop_bits(struct serdev_device *serdev, int stop_bits)
> +{
> +       struct serdev_controller *ctrl = serdev->ctrl;
> +
> +       if (!ctrl || !ctrl->ops->set_stop_bits)
> +               return -ENOTSUPP;
> +
> +       return ctrl->ops->set_stop_bits(ctrl, stop_bits);
> +}
> +EXPORT_SYMBOL_GPL(serdev_device_set_stop_bits);
> +
>  void serdev_device_wait_until_sent(struct serdev_device *serdev, long timeout)
>  {
>         struct serdev_controller *ctrl = serdev->ctrl;
> diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
> index d1cdd2ab8b4c..820c632e77cc 100644
> --- a/drivers/tty/serdev/serdev-ttyport.c
> +++ b/drivers/tty/serdev/serdev-ttyport.c
> @@ -217,6 +217,27 @@ static int ttyport_set_parity(struct serdev_controller *ctrl,
>         return 0;
>  }
>
> +static int ttyport_set_stop_bits(struct serdev_controller *ctrl, int stop_bits)
> +{
> +       struct serport *serport = serdev_controller_get_drvdata(ctrl);
> +       struct tty_struct *tty = serport->tty;
> +       struct ktermios ktermios = tty->termios;
> +
> +       if (stop_bits == 1)
> +               ktermios.c_cflag &= ~CSTOPB;
> +       else if (stop_bits == 2)
> +               ktermios.c_cflag |= CSTOPB;
> +       else
> +               return -EINVAL;
> +
> +       tty_set_termios(tty, &ktermios);
> +
> +       if ((tty->termios.c_cflag & CSTOPB) != (ktermios.c_cflag & CSTOPB))
> +               return -EINVAL;
> +
> +       return 0;
> +}
> +
>  static void ttyport_wait_until_sent(struct serdev_controller *ctrl, long timeout)
>  {
>         struct serport *serport = serdev_controller_get_drvdata(ctrl);
> @@ -255,6 +276,7 @@ static const struct serdev_controller_ops ctrl_ops = {
>         .close = ttyport_close,
>         .set_flow_control = ttyport_set_flow_control,
>         .set_parity = ttyport_set_parity,
> +       .set_stop_bits = ttyport_set_stop_bits,
>         .set_baudrate = ttyport_set_baudrate,
>         .wait_until_sent = ttyport_wait_until_sent,
>         .get_tiocm = ttyport_get_tiocm,
> diff --git a/include/linux/serdev.h b/include/linux/serdev.h
> index 070bf4e92df7..ec8bb6b4ac39 100644
> --- a/include/linux/serdev.h
> +++ b/include/linux/serdev.h
> @@ -95,6 +95,7 @@ struct serdev_controller_ops {
>         void (*close)(struct serdev_controller *);
>         void (*set_flow_control)(struct serdev_controller *, bool);
>         int (*set_parity)(struct serdev_controller *, enum serdev_parity);
> +       int (*set_stop_bits)(struct serdev_controller *, int);
>         unsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);
>         void (*wait_until_sent)(struct serdev_controller *, long);
>         int (*get_tiocm)(struct serdev_controller *);
> @@ -311,6 +312,8 @@ static inline int serdev_device_set_rts(struct serdev_device *serdev, bool enabl
>  int serdev_device_set_parity(struct serdev_device *serdev,
>                              enum serdev_parity parity);
>
> +int serdev_device_set_stop_bits(struct serdev_device *serdev, int stop_bits);

You need an empty function for when serdev config is disabled.

Rob




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux