All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
To: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org
Cc: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>,
	Rob Herring <robh@kernel.org>, Johan Hovold <johan@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jslaby@suse.com>
Subject: [PATCH 18/19] serdev: ttydev: Serdev driver that creates an standard TTY port
Date: Tue, 29 May 2018 15:10:13 +0200	[thread overview]
Message-ID: <20180529131014.18641-19-ricardo.ribalda@gmail.com> (raw)
In-Reply-To: <20180529131014.18641-1-ricardo.ribalda@gmail.com>

Standard TTY port that can be loaded/unloaded via serdev sysfs. This
serdev driver can only be used by serdev controllers that are compatible
with ttyport.

Cc: Rob Herring <robh@kernel.org>
Cc: Johan Hovold <johan@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.com>
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 drivers/tty/serdev/Kconfig         | 11 +++++
 drivers/tty/serdev/Makefile        |  2 +
 drivers/tty/serdev/serdev-ttydev.c | 70 ++++++++++++++++++++++++++++++
 3 files changed, 83 insertions(+)
 create mode 100644 drivers/tty/serdev/serdev-ttydev.c

diff --git a/drivers/tty/serdev/Kconfig b/drivers/tty/serdev/Kconfig
index 1dbc8352e027..d19bf689a424 100644
--- a/drivers/tty/serdev/Kconfig
+++ b/drivers/tty/serdev/Kconfig
@@ -21,4 +21,15 @@ config SERIAL_DEV_CTRL_TTYPORT
 	depends on SERIAL_DEV_BUS != m
 	default y
 
+config SERIAL_DEV_CTRL_TTYDEV
+	tristate "TTY port dynamically loaded by the Serial Device Bus"
+	help
+	  Say Y here if you want to create a bridge driver between the Serial
+	  device bus and the TTY chardevice. This driver can be dynamically
+	  loaded/unloaded by the Serial Device Bus.
+
+	  If unsure, say Y.
+	depends on SERIAL_DEV_CTRL_TTYPORT
+	default m
+
 endif
diff --git a/drivers/tty/serdev/Makefile b/drivers/tty/serdev/Makefile
index 0cbdb9444d9d..5c807b77d12d 100644
--- a/drivers/tty/serdev/Makefile
+++ b/drivers/tty/serdev/Makefile
@@ -3,3 +3,5 @@ serdev-objs := core.o
 obj-$(CONFIG_SERIAL_DEV_BUS) += serdev.o
 
 obj-$(CONFIG_SERIAL_DEV_CTRL_TTYPORT) += serdev-ttyport.o
+
+obj-$(CONFIG_SERIAL_DEV_CTRL_TTYDEV) += serdev-ttydev.o
diff --git a/drivers/tty/serdev/serdev-ttydev.c b/drivers/tty/serdev/serdev-ttydev.c
new file mode 100644
index 000000000000..66479d6534dd
--- /dev/null
+++ b/drivers/tty/serdev/serdev-ttydev.c
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2018 Ricardo Ribalda <ricardo.ribalda@gmail.com>
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/module.h>
+#include <linux/serdev.h>
+#include <linux/tty.h>
+#include "serport.h"
+
+static int ttydev_serdev_probe(struct serdev_device *serdev)
+{
+	struct serdev_controller *ctrl = serdev->ctrl;
+	struct serport *serport;
+	struct device *dev;
+
+	if (!ctrl->is_ttyport)
+		return -ENODEV;
+
+	serport = serdev_controller_get_drvdata(ctrl);
+
+	dev = tty_register_device_attr(serport->tty_drv, serport->tty_idx,
+					&serdev->dev, NULL, NULL);
+
+	return dev ? 0 : PTR_ERR(dev);
+}
+
+static void ttydev_serdev_remove(struct serdev_device *serdev)
+{
+	struct serdev_controller *ctrl = serdev->ctrl;
+	struct serport *serport;
+
+	serport = serdev_controller_get_drvdata(ctrl);
+	tty_unregister_device(serport->tty_drv, serport->tty_idx);
+}
+
+static const struct serdev_device_id ttydev_serdev_id[] = {
+	{ "ttydev", },
+	{ "ttydev_serdev", },
+	{}
+};
+MODULE_DEVICE_TABLE(serdev, ttydev_serdev_id);
+
+static struct serdev_device_driver ttydev_serdev_driver = {
+	.probe = ttydev_serdev_probe,
+	.remove = ttydev_serdev_remove,
+	.driver = {
+		.name = "ttydev_serdev",
+	},
+	.id_table = ttydev_serdev_id,
+};
+
+static int __init ttydev_serdev_init(void)
+{
+	return serdev_device_driver_register(&ttydev_serdev_driver);
+}
+module_init(ttydev_serdev_init);
+
+static void __exit ttydev_serdev_exit(void)
+{
+	return serdev_device_driver_unregister(&ttydev_serdev_driver);
+}
+module_exit(ttydev_serdev_exit);
+
+MODULE_AUTHOR("Ricardo Ribalda <ricardo.ribalda@gmail.com>");
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Serdev to ttydev module");
-- 
2.17.0

  parent reply	other threads:[~2018-05-29 13:11 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-29 13:09 [PATCH 00/19] Dynamically load/remove serdev devices via sysfs* Ricardo Ribalda Delgado
2018-05-29 13:09 ` [PATCH 01/19] serdev: Add id_table to serdev_device_driver Ricardo Ribalda Delgado
2018-05-29 13:09 ` [PATCH 02/19] Bluetooth: hci_bcm: Add serdev_id_table Ricardo Ribalda Delgado
2018-05-29 13:09 ` [PATCH 03/19] Bluetooth: hci_ll: " Ricardo Ribalda Delgado
2018-05-29 13:09 ` [PATCH 04/19] Bluetooth: hci_nokia: " Ricardo Ribalda Delgado
2018-06-05 13:36   ` Andy Shevchenko
2018-06-05 13:53   ` Marcel Holtmann
2018-06-07 10:27     ` Pavel Machek
2018-06-07 12:32       ` Marcel Holtmann
2018-06-07 12:51         ` Pavel Machek
2018-05-29 13:10 ` [PATCH 05/19] serdev: Introduce modalias field Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 06/19] serdev: Support bus matching with " Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 07/19] serdev: Allows dynamic creation of devices via sysfs Ricardo Ribalda Delgado
2018-05-29 15:38   ` Rob Herring
2018-05-29 16:30     ` Ricardo Ribalda Delgado
2018-05-29 16:32       ` Ricardo Ribalda Delgado
2018-05-29 20:35   ` Andy Shevchenko
2018-05-29 21:23     ` Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 08/19] serdev: Provide modalias attribute for modalias devices Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 09/19] serdev: Provide modalias uevent " Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 10/19] file2alias: Support for serdev devices Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 11/19] Bluetooth: hci_bcm: MODULE_DEVICE_TABLE(serdev) Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 12/19] Bluetooth: hci_ll: MODULE_DEVICE_TABLE(serdev) Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 13/19] Bluetooth: hci_nokia: MODULE_DEVICE_TABLE(serdev) Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 14/19] mfd: rave-sp: MODULE_DEVICE_TABLE(serdev) Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 15/19] net: qualcomm: MODULE_DEVICE_TABLE(serdev) Ricardo Ribalda Delgado
2018-06-01  8:59   ` Stefan Wahren
2018-05-29 13:10 ` [PATCH 16/19] serdev: ttyport: Move serport structure to its own header Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 17/19] serdev: Mark controllers compatible with ttyport Ricardo Ribalda Delgado
2018-05-29 13:10 ` Ricardo Ribalda Delgado [this message]
2018-06-05 13:42   ` [PATCH 18/19] serdev: ttydev: Serdev driver that creates an standard TTY port Andy Shevchenko
2018-06-06  6:58     ` Ricardo Ribalda Delgado
2018-06-06  7:47       ` Ricardo Ribalda Delgado
2018-06-06  9:55         ` Andy Shevchenko
2018-06-06  9:58           ` Ricardo Ribalda Delgado
2018-05-29 13:10 ` [PATCH 19/19] serdev: Instantiate a ttydev serdev if acpi and of fails Ricardo Ribalda Delgado
2018-06-05 13:44   ` Andy Shevchenko
2018-06-06  7:28     ` Ricardo Ribalda Delgado

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=20180529131014.18641-19-ricardo.ribalda@gmail.com \
    --to=ricardo.ribalda@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=johan@kernel.org \
    --cc=jslaby@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=robh@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.