[OpenWrt-Devel] [RFC] ar71xx: add TP-Link TL-WR810N support

Jens Steinhauser jens.steinhauser at gmail.com
Mon May 2 14:50:56 EDT 2016


On 05/02/2016 10:55 AM, John Crispin wrote:
> On 02/05/2016 00:05, Jens Steinhauser wrote:
>> On 04/25/2016 10:02 PM, John Crispin wrote:
>>> Hi
>>>
>>> On 10/04/2016 14:00, Jens Steinhauser wrote:
>>>> This patch adds support for the TP-Link TL-WR810N.
>>>> https://wiki.openwrt.org/toh/tp-link/tl-wr810n
>>>>
>>>> The device has a slide switch to select its mode of operation when using
>>>> the stock firmware. After looking at how it's implemented for similar
>>>> devices, I also used 'struct gpio_keys_button { .type = EV_SW, .code = BTN_... }'
>>>> to support the switch, but both 'switch_b0' and 'switch_b1' are missing
>>>> when using 'evtest' and 'thd', only the 'reset' button shows up in the
>>>> output of the programs.
>>>>
>>>> Changing '.code' to some SW_ value, for example SW_LID and SW_TABLET_MODE,
>>>> makes them usable with both 'evtest' and 'thd'. Am I missing something,
>>>> or is EV_SW + BTN_... an invalid combination?
>>>
>>> i use EV_SW and KEY_RFKILL on various boards and it works well. look at
>>> package/base-files/files/etc/rc.button/rfkill to see how to handle the
>>> events in userland
>>>
>>> 	John
>>
>> Thanks for the hint, indeed the switches can be used like ordinary buttons with procd. What's missing is a way to get the initial switch state after start-up, but that seems to be a limitation of the gpio-button-hotplug driver and procd, not an error in the initialization code.
>>
> 
> when using EV_SW it should send one initial event with the starting
> state. i am sure i added that at some point. i've just put a task onto
> my todo list. i'll have a look at it the next days.

I used the following script to react on switch changes:

root at OpenWrt:/# cat /etc/hotplug.d/button/btn 
#!/bin/sh
logger "$0 $BUTTON $ACTION"
echo "$0 $BUTTON $ACTION" >>/tmp/btn

Directly after start-up the file /tmp/btn is empty and no messages got logged. Enabling the debug messages of the driver shows that it generates some events after it is loaded:

[    4.263157] gpio-keys: event type=5, code=256, value=0
[    4.263179] gpio-keys: create event, name=BTN_0, seen=42949377, pressed=0
[    4.263192] gpio-keys: event type=5, code=257, value=1
[    4.263203] gpio-keys: create event, name=BTN_1, seen=42949377, pressed=1
[    4.263231] gpio-keys: added variable 'released@'
[    4.263241] gpio-keys: added variable 'HOME=/'
[    4.263252] gpio-keys: added variable 'PATH=/sbin:/bin:/usr/sbin:/usr/bin'
[    4.263263] gpio-keys: added variable 'SUBSYSTEM=button'
[    4.263273] gpio-keys: added variable 'ACTION=released'
[    4.263283] gpio-keys: added variable 'BUTTON=BTN_0'
[    4.263293] gpio-keys: added variable 'TYPE=switch'
[    4.263303] gpio-keys: added variable 'SEEN=42949377'
[    4.263314] gpio-keys: added variable 'SEQNUM=258'
[    4.263340] gpio-keys: added variable 'pressed@'
[    4.263349] gpio-keys: added variable 'HOME=/'
[    4.263360] gpio-keys: added variable 'PATH=/sbin:/bin:/usr/sbin:/usr/bin'
[    4.263371] gpio-keys: added variable 'SUBSYSTEM=button'
[    4.263381] gpio-keys: added variable 'ACTION=pressed'
[    4.263390] gpio-keys: added variable 'BUTTON=BTN_1'
[    4.263400] gpio-keys: added variable 'TYPE=switch'
[    4.263410] gpio-keys: added variable 'SEEN=42949377'
[    4.263420] gpio-keys: added variable 'SEQNUM=259'
[    4.263455] ehci-platform ehci-platform: USB 2.0 started, EHCI 1.00
[    4.270905] hub 1-0:1.0: USB hub found
[    4.275308] hub 1-0:1.0: 1 port detected
[    4.282975] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[    4.291082] ohci-platform: OHCI generic platform driver
[    4.299513] uhci_hcd: USB Universal Host Controller Interface driver
[    4.316930] init: - preinit -
[    5.025936] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[    5.054558] random: procd urandom read with 8 bits of entropy available
[    8.292207] jffs2: notice: (359) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
[    8.310100] mount_root: switching to jffs2 overlay
[    8.358949] procd: - early -
[    8.362073] procd: - watchdog -
[    9.052180] procd: - ubus -
[    9.172024] procd: - init -

The procd messages come a few seconds after the messages from the driver, so maybe it's just to early for userspace to react?

When I reload the driver, the events are processed by procd/the button handling script:

root at OpenWrt:/# cat /tmp/btn
cat: can't open '/tmp/btn': No such file or directory
root at OpenWrt:/# rmmod gpio_button_hotplug
root at OpenWrt:/# modprobe gpio_button_hotplug
root at OpenWrt:/# cat /tmp/btn
/etc/rc.button/BTN_0 BTN_0 released
/sbin/hotplug-call BTN_0 released
/etc/rc.button/BTN_1 BTN_1 pressed
/sbin/hotplug-call BTN_1 pressed

	Jens
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list