[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

config_hook(RE: Proposal: button and power control)



Takemura です。すこしでも使ってもらえるようにちょっと書きました。

       config_hook, config_hook_call について。

●config_hook とは
config_hook は、kernel 内で使う、hook メカニズムです。
整数値を使って hook を呼び出すので、config file で呼び出す hook を
選択することが可能です。new config のデバイスツリーで、枝をまたぐ
ようなデバイスの接続を解決するために考えられた機構です。しかし、
config_hook は汎用性が高く、suspend 時に実行すべき hook やイベント
の配信のような用途にも使用できます。

●関連ファイル
sys/arch/hpcmips/hpcmips/config_hook.c    手続きの本体
sys/arch/hpcmips/include/confg_hook.h     type, id 定義
sys/arch/hpcmips/vr/button_vrgiu.c        config_hook_call()使用例
sys/arch/hpcmips/vr/vrpmu.c               config_hook_call()使用例
sys/arch/hpcmips/dev/btnmgr.c             config_hook()使用例
sys/arch/hpcmips/vr/pwctl_vrgiu.c         config_hook()使用例
sys/arch/hpcmips/vr/com_vrip.c            config_hook_call()使用例

● type と id
type と id は hook を識別する整数値です。type は hook の用途を示し
ます。type の値が同じならば、hook 関数に渡されるメッセージの型が同
一でなければなりません。id は type の中でユニークです。
type と id は config_hook.h で定義されています。

現在は以下の 2 つの type が定義されています。

POWERCONTROL  省電力のための電源管理デバイスに on/off を指示する
BUTTONEVENT   キーボード以外の押しボタンスイッチの操作の検出

type は必ず config_hook.h で定義される必要があります。
一方、id は config_hook.h で定義しない場合も、config file 内に即値
を記述して使うことが出来ます。この場合、呼び出し側のデバイスと、呼
ばれる側のデバイスの locator に明示的に id を指定するべきです。

●使用例
[BUTTON] vrgiu の general purpose port(GPIO)の先に接続された押しボ
タンスイッチと vrpmu の管理する電源スイッチの状態を config_hook を
用いて btnmgr(button manager) 擬似デバイスに通知しています。

[POWER CONTROL] GPIO の先に接続された serial port の電源の on/off
を、cofig_hook を用いて他のデバイスから操作できます。LCD のバック
ライトなど、GPIO とまったく関係ないデバイスによって制御されている
他の電源も統一的に扱うことが出来ます。

●他の用途
suspend に先だって一連の hook 関数を実行したい場合などには、同一の
id で config_hook() を複数回呼び出して、複数の hook 関数を登録でき
ます。config_hook.h に新しい type の定義を追加するだけで、list の
管理や hook 登録手続きを新たに書く必要がありません。

Takemura