Как "привязать" 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.

Другие вопросы по тегам