[Armadillo:08907] Armadillo-440 PWMバックライト制御の初期化について

高橋 宏章 email@hidden
2013年 6月 21日 (金) 14:47:04 JST


日本高周波の高橋です。
お世話になっております。

PWMバックライト制御の初期化についてご教授願います。
ちょっと前置きの話が長くなります。


<事の発端>
LCDバックライトのbrightness
 /sys/class/backlight/pwm-backlight/brightness
を255から小さい値に変更しても明るさが変わりませんでした。
bl_powerを0にしても消灯されません。

オシロでPWMのラインを見てみたのですが、確かにパルスが出ていませんでし
た。
ただ、Armadilloに標準イメージが書き込まれた状態では確かにパルスが出て
いて、brightnessの変更で明るさが変わったのを確認しています。
linuxカーネル、ユーザーランド、ブートローダーを変更しているのでその変
更の影響だろうと思われました。


<原因>
結局ブートローダーの変更が影響していたようで、ブートローダーのみ標準
のものに書き換えるときちんとPWM制御しているのが確認できました。

ブートローダーの変更は、以前
「Armadillo-440ブートローダー処理中の液晶表示について」
http://lists.atmark-techno.com/pipermail/armadillo/2013-March/008663.html
として質問させていただいて、nakai様のご教授のもとブートローダー処理中
にLCD画面に表示を行うよう変更を入れていました。

この処理の中で
 mx25_iomux_config(pwm_pins, 0);
としてPWMピンの設定を行っているのですが、この処理を無くすとlinux起動後
にきちんとパルスが出ました(ただし、ブートローダーによる画面表示は出な
くなる)。


<本題>
確かにブートローダーでPWMピンの設定を行っていますが、linuxのドライバの
処理で再度設定し直すからPWM制御が行われなくなるのは変だなと思いました。

それでドライバ側の処理を(よくわからないながらも)追ってみたのですが、

 /linux-2.6.26-at16/arch/arm/mach-mx25/armadillo400_gpio.c
の
 void gpio_lcd_bl_active(void)
 {
  mxc_iomux_v3_setup_multiple_pads(armadillo400_lcd_bl_pads,
       ARRAY_SIZE(armadillo400_lcd_bl_pads));
 }
が、PWMバックライト用の設定だと思われました(たぶん…)。
ただ、これを呼んでる処理がいません。そこで、バックライトドライバ処理(
だと思う…)、

 /linux-2.6.26-at16/drivers/video/backlight/pwm_bl.c
の
 static int __init pwm_backlight_init(void)
 {
  return platform_driver_register(&pwm_backlight_driver);
 }
の中で、前述のgpio_lcd_bl_active()を呼んであげると変更したブートローダ
ーを使用していても、linux起動後にPWM制御が出ているのを確認できました。
brightness値変更で明るさも変更できました。

ということで、一応は解決したように見えるのですが、本当にこの修正でよい
のか心配です。
「その方法は違う」とか「そこにその処理入れちゃダメ」とかご指摘ありまし
たら是非お願いします。

以上、よろしくお願い致します。




armadillo メーリングリストの案内