imx91 ベースのプロジェクトでは、最初の GPIO を出力として定義することに行き詰まっています。
デバイス ツリーの例が説明されている投稿をいくつか読みましたが、まだ `-22` の戻り値が返されます。
デバイスツリーで定義:
gpio_reset: gpio-reset {
compatible = "gpio-reset";
pinctrl-names = "default";
reset-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
status = "okay";
label = "RSTO";
gpio-name = "RSTO";
line-name = "RSTO";
};ここで、ラベリング、gpio-name、line-name を追加してみました。どれが必要かは分かりません。
そして機能的に
static void board_gpio_init(void){
struct gpio_desc desc;
int ret;
/* De-assert RSTO */
ret = dm_gpio_lookup_name("RSTO", &desc);
if (ret) {
printf("%s lookup 'RSTO' failed ret = %d\n", __func__, ret);
return;
}
...
}これは常に -22 を返し、最初に検索するピンになります。
そこで、LEDをベースにした実証済みのサンプルコードを試してみようと思いました。
gpio-leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio_led>;
led-0 {
gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
led-1 {
gpios = <&gpio3 27 GPIO_ACTIVE_HIGH>;
default-state = "on";
};
};
Then
ret = dm_gpio_lookup_name("led-1", &desc);
also returns -22OK。実際に利用可能なポートを見つけるには、次のように印刷するだけです。
len = uc_priv->bank_name ? strlen(uc_priv->bank_name) : 0;
printf("%s: lookup %s\n", __func__,uc_priv->bank_name);
if (!strncasecmp(name, uc_priv->bank_name, len)) {そして、コンソール上で使用可能かつ正しい名前を確認できるようになります。
ファイルの場所は `uboot/ドライバ/gpio/gpio-uclass.c` です
こんにちは@DavidFlir
gpio-uclass.cの関数を参照することをお勧めします。
よろしくお願いします。
ダニエル
返信ありがとうございます!
私は次の例に気づきました:
ret = dm_gpio_lookup_name ( "adp5585-gpio4" 、 & exp_sel_desc );
adp5585: io-expander@34 {
compatible = "adi,adp5585-00", "adi,adp5585";
reg = <0x34>;
#gpio-cells = <2>;
gpio-controller;
#pwm-cells = <3>;
gpio-reserved-ranges = <5 1>;
exp-sel-hog {
gpio-hog;
gpios = <4 GPIO_ACTIVE_HIGH>;
output-low;
};では、構文がどのようになっているかを確認するにはどうすればよいでしょうか?たとえば、「_」または「-」で接続されていますか...?
こんにちは、デビッド:
dm_gpio_lookup_name() 関数は、デバイス ツリーから gpio 名または行名を解析しません。「gpioX_Y」という形式のみ理解します。
XはGPIOコントローラです
Yはピン番号です。
Linuxカーネル(U-BOOTではない)で作業している場合は、
DTSで定義する
よろしくお願いします。
ダニエル
_defconfig設定が見つからないことが分かりました
CONFIG_IMX_RGPIO2P=y
ret = dm_gpio_lookup_name ( "gpio1_8" 、 & desc );