Hi,
I have a custom iMX6 board with multiple GPIO pins on it being used. All of the GPIOs that I am using as outputs work and all but one of my inputs work. The input that is not working has the same voltage divider and filtering capacitors as the other inputs, so the circuitry is the same. For some reason GPIO7_IO01 always reads 0 regardless of whether the input pin is at 0V or 3.3V. I use the below commands to read the input:
echo 193 >> /sys/class/gpio/export
echo in >> /sys/class/gpio/gpio193/direction
cat /sys/class/gpio/gpio193/value
In my device tree, I have tried with the pin not specified as anything and throwing in pinctrl_hog set as below:
MX6QDL_PAD_SD3_DAT4__GPIO7_IO01 0x0001B0B0
In both cases, 0 is always read. The SD3 pins are not being used for an SDIO interface. I am using four of the SD3 pins for my two CAN interfaces (CMD, CLK, DAT0 and DAT1). Some of the other pins are being used for GPIO (DAT6, DAT7 and RST) and they work. The other GPIO are not specified in the device tree.
I am really at a loss for this one, any ideas?
Thanks,
Josh
Solved! Go to Solution.
Hi Josh
one can check if that pad was used in uboot. Seems most
simple way to attach jtag debugger (or add printfs) and look at
GPIO registers described in Chapter 28 General Purpose Input/Output (GPIO)
i.MX6DQ Reference Manual
https://www.nxp.com/docs/en/reference-manual/IMX6DQRM.pdf
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Hi Josh
one can check if that pad was used in uboot. Seems most
simple way to attach jtag debugger (or add printfs) and look at
GPIO registers described in Chapter 28 General Purpose Input/Output (GPIO)
i.MX6DQ Reference Manual
https://www.nxp.com/docs/en/reference-manual/IMX6DQRM.pdf
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Thanks Igor,
You were correct, uboot was setting it as an SDIO pin, which affected it in some way. I removed that part from my uboot and it reads correctly now.
As a more detailed explaination of what I had to do, in the .c file for my board I commented out the lines setting the gpio pins as SDIO and one other line setting another SD3 pin to an output. They are the below lines.
/*MX6_PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
MX6_PAD_NANDF_D0__GPIO2_IO00 | MUX_PAD_CTRL(NO_PAD_CTRL),*/ /* CD */
.....
//gpio_direction_input(USDHC3_CD_GPIO);
I'm not using SD3 on my board so this worked for me.
Josh
Hi Josh,
In order to set SION bit in your device tree:
MX6QDL_PAD_SD3_DAT4__GPIO7_IO01 0x4001B0B0
(Need to set bit 30)
Hope this helps.