LinuxユーザースペースでSDIOバスを強制的に再検索するには?

LinuxユーザースペースでSDIOバスを強制的に再検索するには?

組み込みLinuxプラットフォームには、SDIOインターフェイスに接続されたネットワークアダプタがあります。この特定のバスにはカード検出信号はありません。たとえば、ネットワークアダプタの電源を入れたり切ったりした場合、SDIOバスをユーザースペースから強制的に再取得する方法はありますか?

答え1

0andriyが述べたように、バインディング/バインド解除を使用できます。似たようなことをしていますが、ハードウェアによって異なるため変わることがあります。私のsdio wifiモジュールをバインド解除するには、次のようにします。

echo -n "2190000.usdhc" > /sys/devices/soc0/soc/2100000.aips-bus/2190000.usdhc/driver/unbind

これにより、dmesgなどの結果が表示されますmmc1: card 0001 removed

その後、GPIOピンを切り替えてWiFiモジュールをリセットします。

その後、再バインドします。

echo -n "2190000.usdhc" > /sys/bus/soc/devices/soc0/soc/2100000.aips-bus/2190000.usdhc/subsystem/drivers/sdhci-esdhc-imx/bind

この時点で、dmesgは次の内容を印刷します。

mmc1: SDHCI controller on 2190000.usdhc [2190000.usdhc] using ADMA
mmc1: new high speed SDIO card at address 0001

この古いものは、バインディング/バインド解除プロセスを非常によく説明しています。LWN.net 記事

答え2

一つあるようです。パッチが提出されました。この機能を追加するには、linux-mmcメーリングリストにアクセスしてください。現在のソース、追加されていないようです。

残念ながら、私の考えではこれが答えです:それはできません。

答え3

Mariusの回答in beaglebone blackで指定された手順に従って、mmc2(beaglebone mmc0、mmc1、mmc2には3つのSDIOインターフェースがあります)インターフェースに接続されているWiFiチップを正常にバインド解除してバインドできました。ただし、beaglebone blackのmmc2インターフェイスパス(IoT Busterイメージを実行しているBeaglebone Rev Cボードでテスト済み)はわずかに異なります。

sdio モジュールをバインド解除するには、root として次のコマンドを実行します。
echo -n "47810000.mmc" > /sys/devices/platform/soc/subsystem/devices/47810000.mmc/driver/unbind

バインディングモジュール:
echo -n "47810000.mmc" > /sys/devices/platform/soc/subsystem/devices/47810000.mmc/subsystem/drivers/omap_hsmmc/bind

関連情報