私はpca9570 i2c GPOエクスパンダ用のドライバを作成しています。 (これは、その値はそのI2Cアドレスに簡単な1バイトの書き込みによって設定された4つの出力ビットを持っています。)私は現在、GPIOを設定していカーネルモジュールのGPIOを常に出力にする
次のように:どのようにこのモジュール
struct gpio_chip *gc = &chip->gpio_chip;
gc->set = pca9570_gpio_set_value;
gc->get = pca9570_gpio_get_value;
gc->direction_output = pca9570_gpio_direction_output;
gc->direction_input = pca9570_gpio_direction_input;
gc->can_sleep = true;
gc->base = gpio_start;
gc->ngpio = PCA9570_GPIO_COUNT;
gc->label = chip->client->name;
gc->owner = THIS_MODULE;
gc->dev = &chip->client->dev;
をカーネルにデータだけを出力できることを伝えますか?すなわち、ユーザー空間[email protected]:/sys/class/gpio/gpio508# cat direction
の結果をout
にしたいのですが、現在はin
ではありません。
私はこのドライバが、初期化時に出力として方向を設定するために、そしてユーザがそれらを入力として設定しようとするたびに、クライアントサイドのgpio呼び出しを追加する必要があると考えています。これは正しい方法ですか?
コピーできる既存の「出力専用」gpioドライバはありますか?
*「?これはそれを行うための正しい方法です」* - いいえリソース制御を適切に使用しているコード(例えば 'gpio_request()')があれば、あなたのドライバはGPIOピンを所有し、その方向を変えようとする人はいません。 – sawdust
@sawdust、 'gpio_request()'はかなり古いAPIなので、メンテナーは後者を使うのをやめてしまうので、 'gpiod_get()'を意味すると思います。 – 0andriy
データシートhttp://www.nxp.com/documents/data_sheet/PCA9570.pdfによると、エクスパンダは入力と出力をサポートしています。したがって、ドライバーに何かを強制する必要はありません。これは発信者の忙しさです。あなたのものではありません。 – 0andriy