From mboxrd@z Thu Jan 1 00:00:00 1970 From: Johan Hovold Subject: Re: [PATCH v3 1/4] Bluetooth: hci_qca: use wait_until_sent() for power pulses Date: Fri, 14 Dec 2018 14:16:19 +0100 Message-ID: <20181214131619.GD20658@localhost> References: <20181130150247.26294-1-bgodavar@codeaurora.org> <20181130150247.26294-2-bgodavar@codeaurora.org> <20181205062503.GG18087@localhost> <20181212164251.GI3500@localhost> <53775e90cb3803cee9cfff2325cb7429@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <53775e90cb3803cee9cfff2325cb7429@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org To: Balakrishna Godavarthi Cc: Johan Hovold , marcel@holtmann.org, johan.hedberg@gmail.com, mka@chromium.org, linux-kernel@vger.kernel.org, linux-bluetooth@vger.kernel.org, hemantg@codeaurora.org, linux-arm-msm@vger.kernel.org, Johan Hovold List-Id: linux-arm-msm@vger.kernel.org On Fri, Dec 14, 2018 at 06:02:40PM +0530, Balakrishna Godavarthi wrote: > Hi Johan, > > On 2018-12-12 22:12, Johan Hovold wrote: > > On Thu, Dec 06, 2018 at 04:10:07PM +0530, Balakrishna Godavarthi wrote: > >> uart_write_wakeup()->ttyport_write_wakeup()->serdev_controller_write_wakeup()->hci_uart_write_wakeup()->hci_uart_tx_wakeup() > >> > >> the above is flow when serdev_device_write() is called, it is > >> indirectly calling serdev_write_wakeup(). > > > > No, serdev_device_write_wakeup() is currently not called in this path, > > which means you cannot use serdev_device_write(). > > > >> Why actual we need to call an serdev_write_wakeup() is this > >> wakeup related to the UART port or for the BT chip. > > > > serdev_device_write_wakeup() is where a writer blocked on a full write > > buffer in serdev_device_write() is woken up. > > > > Johan > > Is it preferred to use and serdev_device_write_buf() followed by > serdev_device_wait_until_sent() That's up to the driver author and depends on what you want to achieve. If you want to do something synchronously, you always have to call serdev_device_wait_until_sent() after, as both serdev_device_write_buf() and serdev_device_write() only buffer the data. If you use serdev_device_write_buf() you also have to make sure that you can handle incomplete buffering yourself (e.g. when the underlying tty driver buffer is getting full). serdev_device_write() was added as a convenience helper for this, but depends on serdev_device_write_wakeup() being called in the write_wakeup path to make forward progress. > or do we required an write_wakeup() called before writing into > serdev_device_write_buf() No, that doesn't make any sense. serdev_device_write_wakeup() needs to be called in the write-wakeup path, but only if you use serdev_device_write(). Please see the documentation of these function that I added to linux-next (and that I linked to earlier). Johan