1

fsa9485 ドライバー (USB スイッチ) を理解しようとしています。私が遭遇したドック初期化コードにあります:

switch_dev_register(&switch_dock)

switch_dockタイプの構造体でswitch_devあり、アクセサリ検出ルーチンでは次のように使用されます。

switch_set_state(&switch_dock, attached)

私は次のように推測しています:ドックには2種類のドックがあり、1つはカードックで、もう1つはデスクドックで、switch_devクラスはそれらを切り替えるためのものです。

なぜswitch_devクラスが必要なのですか??. そのクラスは 2 つの異なるドックをどのように区別しますか?

4

1 に答える 1

3

このswitch_dev_register関数は、 にデバイスを登録し、 にsysfsファイルを作成します/sys/Switch_set_state実行中のカーネル (stateファイル) で作成されたファイルの 1 つの値を更新します。したがって、私のカーネルでは、「/sys/devices/virtual/switch/dock/state」というファイルを読み取ることで状態を確認できます。Stateは の場合は 1、 のdeskdock場合は 2、cardockそれ以外の場合は 0 です。これは、ハードウェア情報をユーザー空間に渡す簡単な方法です。

switch_devでの標準化のためにクラスを使用する必要がありますsysfs。ドライバーは、I2C バス上にある fsa9485 チップからレジスタ値を読み取ることによって、2 つのドックを区別します。fsa9480_detect_devfsa9480.cを参照してください。ドライバーはアナログ デジタル コンバーター(ADC)とデバイス タイプ レジスタから値を読み取り、ドックのタイプを判別します。

于 2013-02-15T14:57:26.187 に答える