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