driver
path:
https://elixir.bootlin.com/linux/latest/source/drivers/mmc/core/
相关的文件:
pwrseq.c \ pwrseq_emmc.c \ pwrseq_simple.c
flow:
mmc_pwrseq 这个文档会在pwrseq_simple.c 或者 pwrseq_emmc.c 里面init pwrseq module.
device probe 里面在 parse dts 里面的flags的时候 会call 到pwrseq.c 里面的提供的mmc_pwrseq_alloc。
mmc_pwrseq 是用来控制power system,细节可以参考liunx/Document。
dts
Link
https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/mmc
compatible:
file:
Eg:
wifi_pwrseq: wifi-pwrseq {
compatible = "mmc-pwrseq-simple";
pinctrl-names = "default";
pinctrl-0 = <&wifi_pins_pwrseq>;
/* Toggle WIFI_ENABLE to reset the chip. */
reset-gpios = <&pio 119 1>;
};
wifi_pins_pwrseq: wifipwrseq {
pins_wifi_enable {
pinmux = <PINMUX_GPIO119__FUNC_GPIO119>;
output-low;
};
};
引用:
file:
https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/mmc/mmc.txt
&mmc1 {
status = "okay";
pinctrl-names = "default", "state_uhs";
pinctrl-0 = <&mmc1_pins_default>;
pinctrl-1 = <&mmc1_pins_uhs>;
vmmc-supply = <&mmc1_fixed_power>;
vqmmc-supply = <&mmc1_fixed_io>;
mmc-pwrseq = <&wifi_pwrseq>;