[Gta04-owner] [Letux-kernel] w2sg004 woes
H. Nikolaus Schaller
hns at goldelico.com
Wed Feb 22 10:34:29 CET 2017
Hi,
> Am 20.02.2017 um 20:12 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>
> Hi,
>
>> Am 15.02.2017 um 15:11 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>>
>> Hi,
>>
>>> Am 12.02.2017 um 21:18 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
>>>
>>>
>>>> Am 12.02.2017 um 20:19 schrieb Andreas Kemnade <andreas at kemnade.info>:
>>>>
>>>> Hi,
>>>>
>>>> On Sun, 12 Feb 2017 10:11:38 +0100
>>>> "H. Nikolaus Schaller" <hns at goldelico.com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>>> Am 12.02.2017 um 09:43 schrieb Andreas Kemnade
>>>>>> <andreas at kemnade.info>:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I just noticed this waring occuring when the gps module is loaded
>>>>>> with a recent kernel.
>>>>>> Maybe someone knows about what is wring.
>>>>>
>>>>> Yes. It comes from the tty/uart layer and our uart-slave patches. It
>>>>> seems that uart_change_pm is not allowed during driver probing. Or
>>>>> some pm isn't initialized at this point. Or something else :)
>>>>>
>>>>> Since this warning does not harm (except for a 200ms boot delay), I
>>>>> did not invest any time to fix it.
>>>>>
>>>>> Anyways, we have to rework the w2sg driver completely to get it
>>>>> upstream by using the new serdev interface. This means that this call
>>>>> sequence will go away completely and we will remove our own fix in
>>>>> the end...
>>>>>
>>>>> There is already a w2sg driver skeleton based on serdev in branch
>>>>> work/hns/misc/w2sg-serdev.
>>>>>
>>>> Does that mean... there is support for advanced serial stuff accepted by
>>>> mainline
>>>
>>> yes, it is basically accepted. Especially by the Bluetooth/N900/TiWi
>>> driver people. They seem to have been waiting for long time for such
>>> a feature as well and our solution didn't make them happy.
>>>
>>> Something has arrived in linux-next:
>>>
>>> https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/log/?id=refs%2Ftags%2Fnext-20170210&qt=grep&q=serdev
>>>
>>>> so that we simply can build our serial pm stuff upon it
>>>
>>> yes. I think it should work as I have described. The only thing I don't
>>> exactly know is how to correctly handle buffers and block sizes. Serdev
>>> seems to present all bytes it has received while a read() from user space
>>> might not expect that much.
>>>
>>>> so that we can finally upstream these things after long years?
>>>
>>> Well, this will still lead to debates why we need to create a driver
>>> for this at all since it is a plain serial device. Why it opens another
>>> /dev/tty. Why it needs so complex buffer management etc. Then we must
>>> explain the man-in-the-middle role of the driver for proper power-management.
>>
>> I spent some hours with this 12 years old document and now I think I understand
>> how it should work, especially for sending data from the driver to user-space:
>>
>> https://static.lwn.net/images/pdf/LDD3/ch18.pdf
>>
>> Well, modern API has partially been turned upside down and introduced many
>> more levels of struct indirection but I could use drivers/usb/class/cdc-acm.c
>> and drivers/net/usb/hso.c as examples where I know what the driver should
>> be doing...
>>
>> Here is a first result which compiles:
>>
>> http://git.goldelico.com/?p=gta04-kernel.git;a=shortlog;h=refs/heads/letux-4.10-rc8%2Bserial-bus%2Bw2sg-serdev-w2sg-tty-slave2
>> http://git.goldelico.com/?p=gta04-kernel.git;a=shortlog;h=refs/heads/work/hns/misc/w2sg-serdev
>>
>> It also starts (but sometimes enters the probe function twice).
>> It creates a fresh /dev/ttyGPS0 (should renamed ttyO* later).
>>
>> But opening the /dev/ttyGPS0 makes the kernel segfault in tty_port_open().
>> So some initialization must still be missing for the /dev/tty end.
>>
>> If someone wants to help, please take a look into the code. So that we can switch
>> to this solution asap (we can only have either driver in the kernel and not both
>> in parallel).
>
> Did anyone find a little time to check this?
Looks as if I have made it working:
http://git.goldelico.com/?p=gta04-kernel.git;a=shortlog;h=refs/heads/work/hns/misc/w2sg-serdev
Needs some code cleanup and testing if it works as we want to have it in all situation we
can imagine.
Please note that this driver exposes a /dev/ttyGPS0 to access the GPS chip.
And as a bug/side-effect of including immature upstream code, it disables HCI access for bluetooth.
BR,
Nikolaus
More information about the Gta04-owner
mailing list