LED support for QCA9980

Nathaniel Filardo nwfilardo at gmail.com
Tue Oct 24 14:51:07 PDT 2017

Hi!  You may find the following script I run on my ath10k board useful.


DEVNAME=$1; shift

if [ ! -r ${DEVPATH}/vendor -o ! -r ${DEVPATH}/device ]; then
  echo "Bad device name?  No /vendor or /device sys file in ${DEVPATH}"
  exit 1

PCIID="$(cat ${DEVPATH}/vendor):$(cat ${DEVPATH}/device)"

if [ "0x168c:0x0040" != "${PCIID}" ]; then
  echo "Bad PCI ID: ${PCIID}; bailing out!"
  exit 1

dopcimem() {
  # echo pcimem ${DEVPATH}/resource0 $1 w $2 >&2
  pcimem ${DEVPATH}/resource0 $1 w $2 | sed -ne 's/^Value at [^:]*:

ORIG18=$(dopcimem 0x85018)
ORIG00=$(dopcimem 0x85000)

case $1 in
     dopcimem 0x85018 $((${ORIG18} |  0x20000)) # init
     dopcimem 0x85000 $((${ORIG00} & ~0x20000)) # active low
     dopcimem 0x85000 $((${ORIG00} |  0x20000)) # inactive high
     dopcimem 0x85018 $((${ORIG18} & ~0x20000)) # deinit
  *) echo "Dunno how to '$2'?  Try 'on' or 'off'"
     exit 1

Run as, for example, "./ath-leds.sh wlan0 on".


On Tue, Oct 24, 2017 at 5:32 PM, Tolga Cakir <cevelnet at gmail.com> wrote:
>> Thanks to some hero's sleuthing around a GPL source dump
>> (https://forum.openwrt.org/viewtopic.php?pid=336237#p336237) and a
>> later suggestion to try flipping bits from userspace (using
>> https://github.com/billfarrow/pcimem), I can report that, at least for
>> the two QCA9980s in my possession (within the TP-Link C2600 gateway I
>> have) that the speculation is correct: kicking on bit 17 (the value of
>> ATH_BEELINER_LED) in 0x85018 of resource0 makes bit 17 in 0x85000 an
>> active-low controller for the LEDs attached to the chip.
> Hi! I've got the Zyxel NBG6817, which uses QCA9984 SoCs - very similar
> to yours. I've investigated Zyxel's OEM firmware and also came across
> QCA9984 GPIO pin 17 beeing used for the WiFi 2.4G and 5G LEDs.
> Interestingly enough, Netgear R7800 also uses GPIO pin 17, according
> to their firmware sources. Unfortunately, I was not able to find out
> any address or verify your supplied address or find any other way to
> manipulate the WiFi SoC's GPIOs.
> I'm a hobby programmer and have worked on reverse-engineering USB
> devices and Linux kernel drivers in the past and am now interested in
> getting this to work. I'm familiar with the Linux LED API, but I'm
> completely new to networking / PCI / ath10k.
> What I need is a hint, how to cleanly access QCA9984 GPIOs (or atleast
> GPIO pin 17) within ath10k / kernel. Exposing that access to userspace
> via Linux LED API is not an issue - I can do that.
> Any ideas? I'm thankful for any help or hint I can get!
> Cheers,
> Tolga

More information about the ath10k mailing list