Как "привязать" SDIO1 к Wi-Fi LInux?
У меня есть модуль Wi-Fi на базе SDIO, и я играю, чтобы использовать его на Zynq Petalinux. Таким образом, дерево устройств имеет интерфейс SDIO1, а также имеет фиксированный регулятор. Но я не мог понять, как позволить Linux использовать этот интерфейс SDIO1 для Wi-Fi.
Я помню, что я должен что-то повторить для Linux, чтобы использовать одно устройство I2C для RTC. Так это похоже здесь?
Вот мое дерево устройств:
wlcore {
compatible = "wlcore";
interrupt-parent = <&intc>;
irq = <0x0>;
platform-quirks = <0x1>;
board-ref-clock = <0x4>;
};
fixedregulator@1 {
compatible = "regulator-fixed";
regulator-name = "wlan-en-regulator";
regulator-min-microvolt = <0x325aa0>;
regulator-max-microvolt = <0x325aa0>;
/* WLAN_EN GPIO for this board - Bank1, pin9, what does 4 mean? */
gpio = <&gpio0 0x9 0x4>;
startup-delay-us = <0x11170>;
enable-active-high;
linux,phandle = <0x6>;
phandle = <0x6>;
};
};
&sdhci1{
xlnx,has-cd = <0x1>;
xlnx,has-power = <0x0>;
xlnx,has-wp = <0x0>;
vmmc-supply = <0x6>;
cap-power-off-card;
status = "okay";
compatible = "arasan,sdhci-8.9a";
clock-names = "clk_xin", "clk_ahb";
clocks = <&clkc 22>, <&clkc 33>;
interrupt-parent = <&intc>;
interrupts = <0 47 4>;
reg = <0xe0101000 0x1000>;
};
Вопрос
Как сказать Linux использовать этот SDIO1 для Wi-Fi?
1 ответ
Я только недавно получил свою плату PicoZed под управлением Petalinux 2014.4, работающую с модулем Wi-Fi TI WiLink 8, который также использует интерфейс SDIO.
Вот копия моего дерева устройств (system-top.dts), которое описывает фиксированный регулятор и интерфейс SDIO1. Я использовал <<< для обозначения комментария. Они должны быть удалены для окончательного дерева устройств:
/dts-v1/;
/include/ "system-conf.dtsi"
/ {
wlan_en: fixedregulator@2 {
compatible = "regulator-fixed";
regulator-name = "wlan-en-regulator";
regulator-min-microvolt = <0x325aa0>;
regulator-max-microvolt = <0x325aa0>;
gpio = <&gpio0 0x9 0x4>; <<<< GPIO 9 for the WLAN_EN; 0x4 flag is controller-specific.
<<<< see include/dt-bindings/gpio/gpio.h
startup-delay-us = <0x11170>;
enable-active-high;
};
};
&gem0 {
phy-handle = <&phy0>;
phy-mode = "rgmii-id";
mdio {
#address-cells = <1>;
#size-cells = <0>;
phy0: phy@0 {
compatible = "marvell,88e1510";
device_type = "ethernet-phy";
reg = <0x0>;
marvell,reg-init = <3 16 0xff00 0x1e 3 17 0xfff0 0x00>;
};
};
};
&qspi {
flash0: flash@0 {
compatible = "micron,n25q128a13";
};
};
&gpio0 { <<<<< make GPIO0 an interrupt controller for GPIO interrupts
interrupt-controller;
#interrupt-cells = <2>;
};
&sdhci1{ <<<<<<< SDIO 1
vmmc-supply = <&wlan_en>;
bus-width = <4>;
ti,non-removable;
ti,needs-special-hs-handling;
cap-power-off-card;
keep-power-in-suspend;
#address-cells = <1>;
#size-cells = <0>;
wlcore: wlcore@0 {
compatible = "ti,wl1837";
interrupt-parent = <&gpio0>; <<< NOTE: GPIO use as interrupt parent
interrupts = <0 4>; <<<<<<<< using GPIO 0 for IRQ; 4 = input sense high
reg = <2>;
platform-quirks = <0x1>;
board-ref-clock = <0x4>;
};
};
Вам нужно только изменить, какой вывод GPIO используется для включения, а какой - для прерывания при настройке вашего оборудования, но это рекомендуемые выводы.
Правильная настройка дерева устройств - это только один шаг для того, чтобы модуль Wi-Fi работал с платой. Если вы хотите сослаться на мою полную процедуру установки, посетите: http://picozed.org/content/steps-get-wlink8-working-using-petalinux-picozed
Там вы также найдете ссылку от другого участника для работы с платой MicroZed.