2146091_ja-JP

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2146091_ja-JP

2146091_ja-JP

uboot - デバイスツリーバインディングとdm_gpio_lookup_name("x",&desc)

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 -22
Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc)

OK。実際に利用可能なポートを見つけるには、次のように印刷するだけです。

		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` です

Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc)

こんにちは@DavidFlir

gpio-uclass.cの関数を参照することをお勧めします。

danielchen_0-1754466845499.png


よろしくお願いします。

ダニエル

Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc)

返信ありがとうございます!

私は次の例に気づきました:

https://github.com/nxp-imx/uboot-imx/blob/9383f8387dc76524524da69992db96c22195a57c/board/freescale/i...

ret = dm_gpio_lookup_name ( "adp5585-gpio4" & exp_sel_desc );
これは「gpioX_Y」の他に許可されている形式のようです
 
それは次のように定義されます
	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;
		};

では、構文がどのようになっているかを確認するにはどうすればよいでしょうか?たとえば、「_」または「-」で接続されていますか...?

Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc)

こんにちは、デビッド:

dm_gpio_lookup_name() 関数は、デバイス ツリーから gpio 名または行名を解析しません。「gpioX_Y」という形式のみ理解します。

XはGPIOコントローラです

Yはピン番号です。


Linuxカーネル(U-BOOTではない)で作業している場合は、

構造体gpio_desc * rst_gpio ;
rst_gpio = devm_gpiod_get ( & pdev ->dev , "reset" , GPIOD_OUT_LOW ) ;


DTSで定義する

リセット- gpios = < & gpio1 8 GPIO_ACTIVE_LOW > ;
gpio -名前= "リセット" ;


よろしくお願いします。

ダニエル

Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc)

_defconfig設定が見つからないことが分かりました

CONFIG_IMX_RGPIO2P=y
 
この設定で私は成功することができます
ret = dm_gpio_lookup_name ( "gpio1_8" & desc );

しかし、.dtsで定義された名前をどのようにCAN使用できるかはまだわかりません。このgpio1_8 の代わりにファイルを使用します。
`
标记 (1)
无评分
版本历史
最后更新:
‎11-21-2025 07:56 AM
更新人: