Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932208AbbFFNJz (ORCPT ); Sat, 6 Jun 2015 09:09:55 -0400 Received: from atrey.karlin.mff.cuni.cz ([195.113.26.193]:50918 "EHLO atrey.karlin.mff.cuni.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751736AbbFFNJp (ORCPT ); Sat, 6 Jun 2015 09:09:45 -0400 Date: Sat, 6 Jun 2015 15:09:41 +0200 From: Pavel Machek To: "Dr. H. Nikolaus Schaller" Cc: "linux-kernel@vger.kernel.org" , Peter Hurley , Mark Rutland , One Thousand Gnomes , Arnd Bergmann , "devicetree@vger.kernel.org" , Greg Kroah-Hartman , Sebastian Reichel , NeilBrown , "grant.likely@linaro.org" , Marek Belisko , Jiri Slaby , linux-serial@vger.kernel.org, List for communicating with real GTA04 owners Subject: Re: [PATCH RFC 0/3] UART slave device support Message-ID: <20150606130941.GA1329@xo-6d-61-c0.localdomain> References: <20150506141547.GB1764@leverpostej> <20150506171802.GE2974@leverpostej> <554B7D33.602@hurleysoftware.com> <9EF54D80-F634-4D59-BFD9-FC79FCFE06DE@goldelico.com> <554B8A14.2080904@hurleysoftware.com> <21C337B3-D612-4931-BA23-6B7518E6E4DD@goldelico.com> <112A49DF-935D-41DF-8DF7-F04CC13B9598@goldelico.com> <56C579D3-E8F8-4B5A-B6E8-993B113F3461@goldelico.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56C579D3-E8F8-4B5A-B6E8-993B113F3461@goldelico.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4271 Lines: 83 On Wed 2015-06-03 13:49:30, Dr. H. Nikolaus Schaller wrote: > Hi all, > this patch series is our proposal to add hooks so that the driver for a device connected to an UART can > monitor modem control lines and data activity of the connected chip. > > It contains an example for such a device driver which needs such sophisticated power control: wi2wi,w2sg0004 > > A remote device connected to a RS232 interface is usually power controlled by the DTR line. > The DTR line is managed automatically by the UART driver for open() and close() syscalls > and on demand by tcsetattr(). > > With embedded devices, the serial peripheral might be directly and always connected to the UART > and there might be no physical DTR line involved. Power control (on/off) has to be done by some > chip specific device driver (which we call "UART slave") through some mechanisms (I2C, GPIOs etc.) > not related to the serial interface. Some devices do not tell their power state except by sending > or not sending data to the UART. In such a case the device driver must be able to monitor data > activity. The role of the device driver is to encapsulate such power control in a single place. > > This patch series allows to support such UART slave drivers by providing: > * a mechanism that a slave driver can identify the UART instance it is connected to > * a mechanism that UART slave drivers can register to be notified > * notfications for DTR (and other modem control) state changes > * notifications that the device has sent some data to the UART > > A slave device tree entry simply adds a phandle reference to the UART it is connected to, e.g. > > gps { > compatible = "wi2wi,w2sg0004"; > uart = <&uart1>; > }; Device tree maintainers repeatedly pointed out this is not a way to go. NAK. Pavel > > The slave driver calls devm_serial_get_uart_by_phandle() to identify the uart driver. > devm_serial_get_uart_by_phandle() follows the concept of devm_usb_get_phy_by_phandle(). > > A slave device driver registers itself with serial_register_slave() to receive notifications. > Notification handlers can be registered by serial_register_mctrl_notification() and > serial_register_rx_notification(). If an UART has a NULL slave or a NULL handler registered, > no notifications are sent. > > RX notification handlers can define a ktermios setup and modify or decide to throw away the > character that is passed upwards. > > This all is a follow-up to the w2sg0004 driver submitted in 2014 that did want to add an optional > GPIO to DTR in omap-serial.c and required the w2sg0004 driver to present itself as a "virtual > GPIO". The idea of a "virtual GPIO" is not compatible with the concept that DT must > describe hardware (and not virtual hardware). So in this new solution DT only describes that > the w2sg0004 is connected to some UART and how the power state signalling works is left > to the driver implementations. > > The rx data notification also removes the concept of having two different pinmux states > and make the w2sg0004 driver intercept rx activities by switching the rx line to a GPIO > interrupt. This was very OMAP3 specific. The new solution is generic and might even be > extensible that the chip driver could filter or consume the rx data before it is passed > to the tty layer. > > This patch works on linux-next as intended except one major weakness: we have to call > uart_change_speed() each time we open the tty. This is the opposite of what we would like > to have: that the slave initializes the uart speed through some termios and the tty level just uses > this setting. We have not yet completely understood how to make this work and are happy > about help in this area. > > And of course we would like to see general comments about the whole implementation > approach. > > > Signed-off-by: H. Nikolaus Schaller > -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/