GPIO 7 Problems

WP7702
GPIO 7 (Mangoh Red IOT0_GPIO3, pin 26) will not respond to the le_gpio commands issued to it. legato programs will bind properly and silently accept all issued commands, but it will not change value or pull-up/pull-down. Interestingly I can apparently change the input/output state and the pull-up/pull-down state from the command line, but the changes have no effect.

cat /sys/kernel/debug/gpio
GPIOs 0-79, platform/1000000.pinctrl, 1000000.pinctrl:
 gpio0   : in  0 2mA pull down
 gpio1   : in  0 2mA pull down
 gpio2   : in  0 2mA pull up
 gpio3   : in  0 2mA pull down
 gpio4   : out 2 2mA pull up
 gpio5   : in  2 2mA pull down
 gpio6   : in  2 2mA pull down
 gpio7   : out 2 2mA pull up
 gpio8   : in  0 2mA no pull
 gpio9   : in  0 2mA no pull
 gpio10  : in  0 2mA no pull
 gpio11  : in  0 2mA no pull
 gpio12  : out 2 2mA pull down
 gpio13  : in  2 2mA pull down
 gpio14  : in  2 2mA no pull
 gpio15  : in  2 2mA no pull
 gpio16  : out 0 2mA pull up
 gpio17  : in  0 2mA pull up
 gpio18  : in  0 2mA pull down
 gpio19  : in  0 2mA pull down
 gpio20  : out 3 8mA no pull
 gpio21  : in  3 8mA no pull
 gpio22  : out 3 8mA no pull
 gpio23  : out 3 8mA no pull
 gpio24  : out 0 2mA no pull
 gpio25  : out 0 6mA no pull
 gpio26  : in  0 2mA pull up
 gpio27  : out 0 2mA no pull
 gpio28  : out 0 2mA no pull
 gpio29  : out 0 2mA no pull
 gpio30  : in  1 2mA pull up
 gpio31  : out 1 2mA no pull
 gpio32  : out 1 2mA no pull
 gpio33  : out 1 2mA no pull
 gpio34  : in  1 2mA pull up
 gpio35  : in  0 2mA pull down
 gpio36  : out 0 2mA no pull
 gpio37  : in  0 2mA no pull
 gpio38  : in  0 2mA no pull
 gpio39  : out 1 2mA pull down
 gpio40  : out 1 2mA pull down
 gpio41  : out 1 2mA pull down
 gpio42  : out 1 2mA pull down
 gpio43  : out 1 2mA pull down
 gpio44  : out 1 2mA pull down
 gpio45  : in  0 2mA no pull
 gpio46  : in  0 2mA no pull
 gpio47  : in  0 2mA no pull
 gpio48  : in  0 2mA no pull
 gpio49  : out 1 2mA pull down
 gpio50  : out 1 2mA pull down
 gpio51  : in  0 2mA no pull
 gpio52  : out 1 2mA pull down
 gpio53  : out 3 2mA pull down
 gpio54  : out 0 6mA no pull
 gpio55  : out 1 2mA no pull
 gpio56  : out 1 2mA pull down
 gpio57  : out 1 2mA pull down
 gpio58  : out 0 2mA no pull
 gpio59  : in  0 2mA pull up
 gpio60  : in  0 2mA pull down
 gpio61  : in  0 2mA pull down
 gpio62  : in  0 2mA pull down
 gpio63  : in  0 2mA pull down
 gpio64  : in  0 2mA pull down
 gpio65  : in  0 2mA pull down
 gpio66  : in  0 2mA pull down
 gpio67  : in  0 2mA pull down
 gpio68  : in  0 2mA pull down
 gpio69  : in  0 2mA pull down
 gpio70  : in  0 2mA pull down
 gpio71  : in  0 2mA pull down
 gpio72  : in  0 2mA pull down
 gpio73  : in  0 2mA pull down
 gpio74  : in  0 2mA pull down
 gpio75  : out 0 6mA no pull
 gpio76  : out 0 2mA no pull
 gpio77  : in  0 2mA no pull
 gpio78  : in  0 2mA no pull
 gpio79  : in  0 2mA no pull

GPIOs 200-204, platform/swimcu-gpio, swimcu, can sleep:

GPIOs 820-851, platform/soc:qcom,smp2pgpio-ssr-smp2p-1-out, master-kernel:

GPIOs 852-883, platform/soc:qcom,smp2pgpio-ssr-smp2p-1-in, slave-kernel:

GPIOs 884-915, platform/soc:qcom,smp2pgpio-smp2p-1-out, smp2p:

GPIOs 916-947, platform/soc:qcom,smp2pgpio-smp2p-1-in, smp2p:

GPIOs 948-979, platform/soc:qcom,smp2pgpio-smp2p-15-out, smp2p:

GPIOs 980-1011, platform/soc:qcom,smp2pgpio-smp2p-15-in, smp2p:

GPIOs 1012-1017, spmi/qpnp-pin-7, pm8019-mpp:
 gpio-1012 (USB_ID_GPIO         ) in  hi    

GPIOs 1018-1023, spmi/qpnp-pin-6, pm8019-gpio:
 gpio-1023 (sfpr-gpio           ) in  lo   



echo 1 > /sys/class/gpio/gpio7/value; cat /sys/class/gpio/gpio7/value
0

I can even unexport and export gpio7 to no effect. It will not write the pin high, and will still silently accept any commands issued to it.

I can also use AT commands to check if the GPIO is supposed to be attached to the linux processor or not, and the problem is still present there. I can configure it as a GPIO output under the AT command section with AT+WIOCFG=7,4,1,0,1,0,0 and it will respond OK to AT+WIOW=7,1 but the output is still low.

Anyone else seen this? I haven’t come across any other documentation indicating GPIO7 is disabled or unavailable.

I don’t see problem on controlling GPIO7 on WP7702 on mangoh red board.
I can see the voltage is changed:

echo 7 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio7/direction
echo 0 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio7/value

ati3
Manufacturer: Sierra Wireless, Incorporated
Model: WP7702
Revision: SWI9X06Y_02.22.12.00 eaf79c jenkins 2019/04/24 18:48:27
IMEI: 352653090002874
IMEI SV: 3
FSN: VU735370521401
+GCAP: +CGSM

OK
[ 37.337537] i2c-msm-v2 78b8000.i2c: NACK: slave not responding, ensure its powered: msgs(n:1 cur:0 tx) bc(rx:0 tx:2) mode:FIFO slv_addr:0x3a MSTR_STS:0x0c1300c8 OPER:0x00000090

Legato Ver: 18.09.4.c964f253_3ba44b6732e03bacfafb714c4463754d
Yocto Ver: SWI9X06Y_02.22.04.00 2020-06-18_02:43:58
OS Ver: Linux version 3.18.44 (jenkins@CAKEL-EV-ALBLD2) (gcc version 6.2.0 (GCC) ) #2 PREEMPT Thu Jun 18 02:45:08 UTC 2020
LK Ver: 1.3.0_da731a7332
RootFS Ver: SWI9X06Y_02.22.04.00 2020-06-18_02:43:58
UserFS Ver: unknown
MCU Ver: 002.011

OK

I am measuring on here:

I followed the above commands and could not detect any change on my scope. Measured as indicated on the PCB, and soldered into pin 26 of the IoT connector.

root@swi-mdm9x28-wp:~# echo 7 > /sys/class/gpio/export 
root@swi-mdm9x28-wp:~# echo out > /sys/class/gpio/gpio7/direction 
root@swi-mdm9x28-wp:~# echo 0 > /sys/class/gpio/gpio7/value 
root@swi-mdm9x28-wp:~# echo 1 > /sys/class/gpio/gpio7/value 
root@swi-mdm9x28-wp:~# cat /sys/class/gpio/gpio7/value 
0
root@swi-mdm9x28-wp:~# microcom /dev/ttyAT
ati3
Manufacturer: Sierra Wireless, Incorporated
Model: WP7702
Revision: SWI9X06Y_02.16.06.00 7605a6 jenkins 2018/06/20 17:56:12
IMEI: 3526xxxx
IMEI SV: 2
FSN: VU74xxx

+GCAP: +CGSM

Just to double check I used swiflash to instal the latest spk I could find from Sierra wireless and It’s still on IMEI SV:2. How do I get to your revision?

I am using fx30 (WP77 module inside) fw which is fw r11.

FYI, i also tried on wp76 module with same mangoh red board, no problem is found on gpio7.

Not sure if you are really measuring the correct pin on the board, maybe you can measure the same point as my indication above.

These are the documentation I’ve been referencing.

https://source.sierrawireless.com/resources/airprime/hardware_specs_user_guides/airprime_wp77xx_product_technical_specification/#sthash.pfxN6N27.dpbs

First point:
In the Technical specifications GPIO7 is listed as pin 40.
In the schematic, Page 2, section C-3 indicated pin 40 is indeed gpio7.
In the same schematic, Page 3, section H-3, says the pin is connected to CN306 Pin 26.
In the same schematic, Page 4, section I-8, says the pin is also connected to CN401 Pin 4, or the unpopulated surface mount header you illustrated.
I made measurements of both points, neither produced any change.
If you still think I’m not measuring the right point I’ll send you picture of the scope leads connected to the board next week when I’m back in the office.

Second point:
Even if I was measuring the wrong pin, I am very suspicious of the fact that I can’t write to the pin. If I cat the value immediately after writing it high, and the pin is already low. I think there’s a service/program/driver somewhere forcing the pin low. Why else would the pin ignore any output commands from the linux system, and from the AT system? The pin is never driven high, and that’s verifiable with the oscilloscope.

The unpopulated connector you mentioned on page 4 section I-7 of the schematic shows GPIO7 is used for SWD_CLK. The product spec makes no mention of SWD, nor does the legato docs. Could SWD be messing with this? I have no idea what else this could be.

In the same schematic, Page 3, section H-3, says the pin is connected to CN306 Pin 26.
In the same schematic, Page 4, section I-8, says the pin is also connected to CN401 Pin 4, or the unpopulated surface mount header you illustrated.

You can double check by using multimeter and see if those two points are actually the same point.

You seem to be very focused on thinking that I can’t measure the voltage of a pin properly. I probed both points.
Did you read my second point about the value of the pin not changing? Assume for a second that I can operate an oscilloscope and a multimeter, what would be the next thing you check? Why would the value of gpio7 not respond to a write by the root user?

i don’t see anything else i can check then as I cannot see the problem. ( and that is why I suspect you are not measuring the correct point)
Maybe you can try the same FW as mine.

https://source.sierrawireless.com/resources/airlink/software_downloads/fx30-firmware/fx30-firmware-catm/#sthash.Ub3J4uTS.dpbs

Another possibility is that your metal case of WP77 is not closed well…

Back in the lab today. I tested the mangoh red PCB with WP module removed. Pin 40 has continuity to both the pin indicated in your drawing and IOT3 connector pin 26.

Will FX30 firmware work on mangoh red boards? Anything I should be aware of?

i already use the FX30 FW on mangoh red board to test GPIO7.

Under FX30 firmware the board reports an error rather than silently accepting it. It’s a step in the right direction.

root@fx30:~# echo 1 > /sys/class/gpio/gpio7/value 
sh: write error: Operation not permitted

I have also unexported and re-exported the gpio, to no effect.

root@fx30:~# cat /sys/kernel/debug/gpio 
GPIOs 0-79, platform/1000000.pinctrl, 1000000.pinctrl:
 gpio0   : in  0 2mA pull down
 gpio1   : in  0 2mA pull down
 gpio2   : in  0 2mA pull up
 gpio3   : in  0 2mA pull down
 gpio4   : out 2 2mA pull up
 gpio5   : in  2 2mA pull down
 gpio6   : in  2 2mA pull down
 gpio7   : out 2 2mA pull up
 gpio8   : in  0 2mA pull up
 gpio9   : in  0 2mA pull up
 gpio10  : out 0 16mA pull down
 gpio11  : in  0 2mA pull up
 gpio12  : out 2 2mA pull down
 gpio13  : in  2 2mA pull down
 gpio14  : in  2 2mA pull down
 gpio15  : in  2 2mA pull down
 gpio16  : in  0 2mA pull up
 gpio17  : in  0 2mA pull up
 gpio18  : in  0 2mA pull down
 gpio19  : in  0 2mA pull down
 gpio20  : out 3 8mA no pull
 gpio21  : in  3 8mA no pull
 gpio22  : out 3 8mA no pull
 gpio23  : out 3 8mA no pull
 gpio24  : out 0 2mA no pull
 gpio25  : out 0 6mA no pull
 gpio26  : in  0 2mA pull up
 gpio27  : out 0 2mA no pull
 gpio28  : out 0 2mA no pull
 gpio29  : out 0 2mA no pull
 gpio30  : in  1 2mA pull up
 gpio31  : out 1 2mA no pull
 gpio32  : out 1 2mA no pull
 gpio33  : out 1 2mA no pull
 gpio34  : in  1 2mA pull up
 gpio35  : in  0 2mA pull down
 gpio36  : out 0 2mA no pull
 gpio37  : in  0 2mA no pull
 gpio38  : in  0 2mA pull up
 gpio39  : in  0 2mA pull down
 gpio40  : in  0 2mA pull down
 gpio41  : in  0 2mA pull down
 gpio42  : in  0 2mA pull down
 gpio43  : in  0 2mA pull down
 gpio44  : in  0 2mA pull down
 gpio45  : in  0 2mA no pull
 gpio46  : out 0 2mA no pull
 gpio47  : in  0 2mA no pull
 gpio48  : in  0 2mA no pull
 gpio49  : in  0 2mA pull down
 gpio50  : in  0 2mA pull down
 gpio51  : in  0 2mA pull up
 gpio52  : in  0 2mA pull up
 gpio53  : in  3 2mA pull down
 gpio54  : out 0 6mA no pull
 gpio55  : out 0 2mA no pull
 gpio56  : in  0 2mA no pull
 gpio57  : out 0 2mA no pull
 gpio58  : in  0 2mA no pull
 gpio59  : in  0 2mA pull up
 gpio60  : in  0 2mA pull down
 gpio61  : in  0 2mA pull down
 gpio62  : in  0 2mA pull down
 gpio63  : in  0 2mA pull down
 gpio64  : in  0 2mA pull down
 gpio65  : in  0 2mA pull down
 gpio66  : in  0 2mA pull down
 gpio67  : in  0 2mA pull down
 gpio68  : in  0 2mA pull down
 gpio69  : in  0 2mA pull down
 gpio70  : in  0 2mA pull down
 gpio71  : in  0 2mA pull down
 gpio72  : in  0 2mA pull down
 gpio73  : in  0 2mA pull down
 gpio74  : in  0 2mA pull down
 gpio75  : out 0 6mA no pull
 gpio76  : in  0 2mA no pull
 gpio77  : out 0 2mA no pull
 gpio78  : in  0 2mA no pull
 gpio79  : in  0 2mA no pull

GPIOs 200-204, platform/swimcu-gpio, swimcu, can sleep:
 gpio-200 (sysfs               ) in  hi    
 gpio-202 (sysfs               ) in  hi    

GPIOs 820-851, platform/soc:qcom,smp2pgpio-ssr-smp2p-1-out, master-kernel:

GPIOs 852-883, platform/soc:qcom,smp2pgpio-ssr-smp2p-1-in, slave-kernel:

GPIOs 884-915, platform/soc:qcom,smp2pgpio-smp2p-1-out, smp2p:

GPIOs 916-947, platform/soc:qcom,smp2pgpio-smp2p-1-in, smp2p:

GPIOs 948-979, platform/soc:qcom,smp2pgpio-smp2p-15-out, smp2p:

GPIOs 980-1011, platform/soc:qcom,smp2pgpio-smp2p-15-in, smp2p:
 gpio-996 (sysfs               ) in  hi    
 gpio-997 (sysfs               ) in  hi    
 gpio-998 (sysfs               ) in  hi    
 gpio-999 (sysfs               ) in  hi    
 gpio-1000 (sysfs               ) in  hi    
 gpio-1001 (sysfs               ) in  hi    
 gpio-1002 (sysfs               ) in  hi    
 gpio-1003 (sysfs               ) in  hi    
 gpio-1004 (sysfs               ) in  hi    
 gpio-1005 (sysfs               ) in  hi    
 gpio-1006 (sysfs               ) in  hi    
 gpio-1007 (sysfs               ) in  hi    
 gpio-1008 (sysfs               ) in  hi    
 gpio-1009 (sysfs               ) in  hi    
 gpio-1010 (sysfs               ) in  hi    
 gpio-1011 (sysfs               ) in  hi    

GPIOs 1012-1017, spmi/qpnp-pin-7, pm8019-mpp:
 gpio-1012 (USB_ID_GPIO         ) in  hi    

GPIOs 1018-1023, spmi/qpnp-pin-6, pm8019-gpio:
 gpio-1023 (sfpr-gpio           ) in  lo    
root@fx30:~#

do you set it to output?
It seems it is still set as input.

Set as output now.
It’s back to ignoring any errors and not setting the value as directed.

root@fx30:~# cat /sys/class/gpio/gpio7/direction 
in
root@fx30:~# echo out > /sys/class/gpio/gpio7/direction 
root@fx30:~# echo 1 > /sys/class/gpio/gpio7/value 
root@fx30:~# cat /sys/class/gpio/gpio7/value 
0

I ordered new WP7702 modules to test with. If that doesn’t fix it then the mangoh red board will be my next replaced item.