[Letux-kernel] [PATCH RFC] dt: gta04: add pinctrl to mmc2 for remuxing dat1 to gpio

H. Nikolaus Schaller hns at goldelico.com
Thu Aug 11 12:32:11 CEST 2016


Hi,

> Am 11.08.2016 um 07:22 schrieb Andreas Kemnade <andreas at kemnade.info>:
> 
> The previous solution to have sdio irq on gta04 was to forcre fclk
> to be enabled all the time. According to the TRM of the DM3730 there
> should be a possibility to have some wakeup mechanism to wake up
> mmc2 to aute-enable the fclk and have the system react on sdio irqs
> even if fclk is off. But the omap-hsmmc code seems not to touch a
> register needed for it.
> As a first workaround this patch tries to remux the dat1 line to gpio

"remux" isn't simple...

The problem is the duplicate definition of MMC2_DAT1.
There can only be either one and they are not merged.

This means you have to define the full set of pins for every
state ("default", "active", "idle").

What I am not sure is if it is possible to specify two &mmc2_pins nodes
at e.g. pinctrl-1.

Then something like

> +	pinctrl-0 = <&mmc2_pins> <&mmc2_data1_pin>;
> +	pinctrl-1 = <&mmc2_pins> <&mmc2_data1_pin>;
> +	pinctrl-2 = <&mmc2_pins> <&mmc2_cirq1_pin>;


could work.

> in lower power states and use a gpio irq on that line which
> is intended as a solution for am33xx chips.
> The patch is based on https://lkml.org/lkml/2013/10/18/520
> It should be a better solution than
> f1a738b2c1dea1666bc221642632bd65031ef701
> but unfortunately does not work yet. Maybe somehow wrong
> pinctrl?
> 
> Signed-off-by: Andreas Kemnade <andreas at kemnade.info>
> ---
> arch/arm/boot/dts/omap3-gta04.dtsi | 37 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi
> index a5b4c63..46ec085 100644
> --- a/arch/arm/boot/dts/omap3-gta04.dtsi
> +++ b/arch/arm/boot/dts/omap3-gta04.dtsi
> @@ -252,6 +252,37 @@
> 		>;
> 	};
> 
> +	mmc2_pins: pinmux_mmc2_pins {
> +		pinctrl-single,pins = <
> +			/* sdmmc2_clk */
> +			OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0)
> +			/* sdmmc2_cmd */
> +			OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0)
> +			/* sdmmc2_dat0 */
> +			OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0)
> +			/* sdmmc2_dat1 */
> +			OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE0)
> +			/* sdmmc2_dat2 */
> +			OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0)
> +			/* sdmmc2_dat3 */
> +			OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0)
> +			/* sdmmc2_dir_dat0 */
> +			OMAP3_CORE1_IOPAD(0x2164, PIN_OUTPUT_PULLUP | MUX_MODE1)
> +			/* sdmmc2_dir_dat1 */
> +			OMAP3_CORE1_IOPAD(0x2166, PIN_OUTPUT_PULLUP | MUX_MODE1)
> +			/* sdmmc2_dir_cmd */
> +			OMAP3_CORE1_IOPAD(0x2168, PIN_OUTPUT_PULLUP | MUX_MODE1)
> +			/* sdmmc2_dir_clkin */
> +			OMAP3_CORE1_IOPAD(0x216a, PIN_INPUT_PULLUP | MUX_MODE1)
> +		>;
> +	};
> +
> +	mmc2_cirq_pin: pinmux_cirq_pin {
> +		pinctrl-single,pins = <
> +			/* MMC2_DAT1 as GPIO5_5 */
> +			OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE4)
> +		>;
> +	};
> 	backlight_pins: backlight_pins_pimnux {
> 		pinctrl-single,pins = <
> 			OMAP3_CORE1_IOPAD(0x20ba, MUX_MODE3)		/* gpt11/gpio57 */
> @@ -528,9 +559,15 @@
> };
> 
> &mmc2 {
> +	pinctrl-names = "default", "active", "idle";
> +	pinctrl-0 = <&mmc2_pins>;
> +	pinctrl-1 = <&mmc2_pins>;
> +	pinctrl-2 = <&mmc2_cirq_pin>;
> +	interrupts-extended = <&intc 86 &gpio5 5 0>;
> 	vmmc-supply = <&vaux4>;
> 	bus-width = <4>;
> 	ti,non-removable;
> +	ti,quirk-swakeup-missing;
> 	mmc-pwrseq = <&wifi_pwrseq>;
> 	cap-power-off-card;	/* remove! */
> };
> -- 
> 2.1.4
> 
> __________________________________________


Hope this helps,
Nikolaus




More information about the Letux-kernel mailing list