Wie kann ein erneuter Scan eines SDIO-Busses aus dem Linux-Benutzerbereich erzwungen werden?

8

Auf einer eingebetteten Linux-Plattform ist ein Netzwerkadapter an eine SDIO-Schnittstelle angeschlossen. Auf diesem Bus ist kein Kartenerkennungssignal vorhanden. Wenn ich beispielsweise den Netzwerkadapter ein- oder ausschalte, kann ich auf irgendeine Weise einen erneuten Scan des SDIO-Busses aus dem Benutzerbereich erzwingen?

Peter S. Housel
quelle

Antworten:

6

Wie von 0andriy erwähnt, können Sie bind / unbind verwenden. Ich mache etwas Ähnliches, aber das wird anders sein, da es von der Hardware abhängt. Um mein SDIO-WLAN-Modul zu lösen, verwende ich:

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

Dies gibt Ihnen so etwas wie mmc1: card 0001 removedin dmesg.

Ich schalte dann einen GPIO-Pin um, um mein WLAN-Modul zurückzusetzen

Dann zum erneuten Binden:

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

An diesem Punkt druckt dmesg so etwas wie:

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

Der Bindungs- / Entbindungsprozess wird in diesem alten LWN.net-Artikel gut erklärt .

Marius
quelle
Beachten Sie, dass basierend auf der entsprechenden Frage , wenn Sie ein TI SDIO-Gerät verwenden, es ohne den Interrupt nicht funktioniert.
Minghua
2

Es sieht so aus, als ob ein Patch an die Linux-MMC-Mailingliste gesendet wurde, um diese Funktion hinzuzufügen. In der aktuellen Quelle scheint er jedoch nicht hinzugefügt worden zu sein.

Leider denke ich, dass dies die Antwort ist: Sie können nicht.

Patrick
quelle
1
Es ist nicht ganz wahr. Die einfachste Möglichkeit, dies zu umgehen, besteht darin, den Zyklus des Host-Controllers zu lösen / zu binden. Es gibt auch eine andere Möglichkeit, die Kartenerkennung im Treiber zu simulieren, es handelt sich jedoch möglicherweise um eine nicht vorgelagerte Lösung.
0andriy