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 = <®_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
> 佐藤です。
>
> > 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…
---------------------------------
ご協力いただきまして、ありがとうございました。
at_makoto.sato
2023年2月28日 16時26分
佐藤です。
> Linuxカーネルのバージョンは「Linux armadillo 4.9.133-at25」です。
最新の v4.9-at28 で試してみてもらえますでしょうか。
https://armadillo.atmark-techno.com/resources/software/armadillo-x1/lin…