Armadilloフォーラム

起動時、LCDのbacklightが有効にならず "probe of backlight failed with error -22"になる

horikoshi_daisuke

2023年2月28日 13時53分

お世話になっております。

現在、Armadillo-X1にCON8経由で自前で用意したLCDを取り付け動作確認を行っており、起動直後にLCDのバックライトを点灯したいと考えています。
起動直後にバックライト機能を使用し点灯するようにdtsに記述したのですが 「probe of backlight failed with error -22」になり点灯しません。
ご教授いただければ幸いです。

起動時のログを見ると以下のようになっていました。
----
pwm-backlight backlight: unable to request PWM
pwm-backlight: probe of backlight failed with error -22
----

起動後、手動でpwmchip0にコマンドを送るとバックライトが点灯します。
----
echo 0 > /sys/class/pwm/pwmchip0/export
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
----

また、/sys/class/backlight/以下にバックライト機能のディレクトリはありませんでした。
以下、dtsで設定したバックライトに関する内容です。

----------------------------------------
/ {
» backlight {
» » compatible = "pwm-backlight";
» » pwms = <&pwm1 0 500000>;
pwm-names = "backlight";
» » brightness-levels = <0 4 8 16 32 64 128 255>;
» » default-brightness-level = <6>;
» » power-supply = <&reg_3p3v>;
» » status = "okay";
» };
};

~~~~~省略~~~~~

&pwm1 {
» pinctrl-names = "default";
» pinctrl-0 = <&pinctrl_pwm1>;
» status = "okay";
};

~~~~~省略~~~~~

&iomuxc_lpsr {
» x1_extboard_eva01 {
» » pinctrl_pwm1: pwm1grp {
» » » fsl,pins = <
» » » » MX7D_PAD_GPIO1_IO01__PWM1_OUT» 0x01
» » » >;
» » };
» };
};
----------------------------------------

最後に、Linuxカーネル内を探したところ、以下の位置でエラーとなっていました。
※ログを入れていますので行数は目安です。

----------------------------------------
■drivers/video/backlight/pwm_bl.c(pwm_backlight_probe関数内)

pb->pwm = devm_pwm_get(&pdev->dev, NULL); // 319行目:pb->pwmに格納
....
» » ret = PTR_ERR(pb->pwm);
» » if (ret != -EPROBE_DEFER)
» » » dev_err(&pdev->dev, "unable to request PWM\n"); // 329行目:エラー

■drivers/pwm/core.c(devm_pwm_get関数内)

pwm = pwm_get(dev, con_id); // 923行目のpwmがエラーのため929行目でelse文側のdevres_free(ptr)へ

■drivers/pwm/core.c(pwm_get関数内)

return of_pwm_get(dev->of_node, con_id); // 875行目of_pwm_get関数内でエラー

■drivers/pwm/core.c(of_pwm_get関数内)

if (args.args_count != pc->of_pwm_n_cells) { // 684行目※1args.args_count=2,※2pc->of_pwm_n_cells=3となりエラー処理へ
....
pwm = ERR_PTR(-EINVAL); // 687行目 EINVAL=22なので エラー(-22)を格納
----------------------------------------

※1:args.args_countはof_parse_phandle_with_argsの引数&args。(of_pwm_get関数内、668行目)
arch/arm/boot/dts/内xxxx.dtb.dts.tmpを参照している模様。(xxxxは自作のdtsファイル)
#pwm-cellsが<2>のため、args_countは2になる。
-----
pwm1: pwm@30660000 {
compatible = "fsl,imx7d-pwm", "fsl,imx27-pwm";
reg = <0x30660000 0x10000>;
interrupts = <0 81 4>;
clocks = <&clks 270>,
<&clks 270>;
clock-names = "ipg", "per";
#pwm-cells = <2>;
status = "disabled";
};

-----

※2:pc->of_pwm_n_cellsはof_node_to_pwmchipの返り値(of_pwm_get関数内、676行目)
list_for_each_entryの第1引数chipをreturnしたものだが、
&pwm_chipsが不明。

恐らく、pc->of_pwm_n_cellsが2になるような設定方法があると思われるのですが、これ以上の理解が進まず行き詰っている状況です。
Linuxカーネルのバージョンは「Linux armadillo 4.9.133-at25」です。
ご協力いただければ助かります。

コメント

horikoshi_daisuke

2023年3月1日 14時19分

> 佐藤です。
>
> > Linuxカーネルのバージョンは「Linux armadillo 4.9.133-at25」です。
> 最新の v4.9-at28 で試してみてもらえますでしょうか。
> https://armadillo.atmark-techno.com/resources/software/armadillo-x1/lin…

お世話になっております。
堀越です。

ご返信ありがとうございます。
開発環境ATDE8[v20230127]とLinuxカーネル[v4.9-at28]に変更し、作成し直したところ問題なく動作しました。

「Armadillo 製品アップデートのお知らせ2022年12月」で修正されたのではないかと推測します。
以下、文章を抜粋したものです。
---------------------------------
Linux カーネル (4.9-x1-at27)
「Armadillo-X1 評価用拡張ボードセット01」のPWMによるバックライト制御ができない不具合を修正
4.9-x1-at19にてPWM polarity(反転)に対応した事の影響で動作しない状態となっていました

https://armadillo.atmark-techno.com/news/20221228/software-update-aiotg…
---------------------------------

ご協力いただきまして、ありがとうございました。