Armadilloフォーラム

Armadillo-810でPWMを使う方法

k.makiguchi

2015年7月22日 10時29分

巻口と申します。お世話になっております。

Armadillo-810の拡張ボードからPWMを出力しようとしていますが、
make menuconfigでCONFIG_RMOB_TPU_PWMをONにして、
make後にイメージを書き込んでReboot後、Armadillo側の
CONFIG_RMOB_TPU_PWMがONになりません。

何か設定が足りていないのでしょうか?
そもそも設定するコンフィグレーションはこれで合っているのでしょうか?

Armadillo-810でPWMを使う手順をご教授頂けると助かります。

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

コメント

at_takashi.sasayama

2015年7月22日 14時18分

笹山です。

>何か設定が足りていないのでしょうか?
>そもそも設定するコンフィグレーションはこれで合っているのでしょうか?

Armadillo-810 は 拡張ボード01 (Aコネクタ用) CON2_1 (PORT66) から
TPU0TO2 を使って PWM 出力ができます。

カーネルコンフィギュレーションは以下となります。

Linux/arm 3.4-at14 Kernel Configuration
    System Type  --->
        Armadillo-810 System Configuration  --->
            [*] use TPU0 Output2 [PORT66]                # チェックを入れます
            [*]   PWM: Generic PWM based Backlight (NEW) # チェックを入れます
    Device Drivers  --->
            Misc devices  --->
                <*> R-Mobile TPU PWM driver  # チェックを入れます
            Graphics support  ---> 
                [*] Backlight & LCD device support  --->   # チェックを入れます
                    <*>   Lowlevel Backlight controls          # M を * に変更します。
                      : 一部省略
                    <*>     Generic PWM based Backlight Driver # チェックを入れます

上記カーネルコンフィギュレーションを行ったイメージで Armadillo-810 を起動し、
次に以下のコマンドを実行するとデフォルトでは 30 KHz デューティ比 50:50 の波形が、
CON2_1 にて確認できると思います。

[armadillo-810]# echo 128 > /sys/class/backlight/pwm-backlight.0/brightness

■参考情報

4.3.2. Armadillo-810 拡張ボード01 (Aコネクタ用) インターフェースレイアウト
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…

表21.6 CON2 拡張入出力ピンのマルチプレクス
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…

巻口です。

返信いただきありがとうございます。
下記の通り実行したところ、確かにbacklightのsysfsにアクセスできるようになりました。
(すみません、まだハードが何もつながっていないので、実出力は未確認です)

ただ、実際にはperiod_nsとduty_nsをコントロールしてPWM出力したいのですが、
period_nsとduty_nsやenableのsysfsが見つかりません。
試しにコンフィギュレーションでバックライトを有効にしない感じに設定してもだめでした。

恐れ入りますが、ご教授ください。

> 笹山です。
>
> >何か設定が足りていないのでしょうか?
> >そもそも設定するコンフィグレーションはこれで合っているのでしょうか?
>
> Armadillo-810 は 拡張ボード01 (Aコネクタ用) CON2_1 (PORT66) から
> TPU0TO2 を使って PWM 出力ができます。
>
> カーネルコンフィギュレーションは以下となります。
>

> Linux/arm 3.4-at14 Kernel Configuration
>     System Type  --->
>         Armadillo-810 System Configuration  --->
>             [*] use TPU0 Output2 [PORT66]                # チェックを入れます
>             [*]   PWM: Generic PWM based Backlight (NEW) # チェックを入れます
>     Device Drivers  --->
>             Misc devices  --->
>                 <*> R-Mobile TPU PWM driver  # チェックを入れます
>             Graphics support  ---> 
>                 [*] Backlight & LCD device support  --->   # チェックを入れます
>                     <*>   Lowlevel Backlight controls          # M を * に変更します。
>                       : 一部省略
>                     <*>     Generic PWM based Backlight Driver # チェックを入れます
> 

>
> 上記カーネルコンフィギュレーションを行ったイメージで Armadillo-810 を起動し、
> 次に以下のコマンドを実行するとデフォルトでは 30 KHz デューティ比 50:50 の波形が、
> CON2_1 にて確認できると思います。
>
>

> [armadillo-810]# echo 128 > /sys/class/backlight/pwm-backlight.0/brightness
> 

>
>
> ■参考情報
>
> 4.3.2. Armadillo-810 拡張ボード01 (Aコネクタ用) インターフェースレイアウト
> http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…
>
> 表21.6 CON2 拡張入出力ピンのマルチプレクス
> http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…

at_takashi.sasayama

2015年7月24日 15時14分

笹山です。

> ただ、実際にはperiod_nsとduty_nsをコントロールしてPWM出力したいのですが、
> period_nsとduty_nsやenableのsysfsが見つかりません。

申し訳ありません、現状 Armadillo-800シリーズでは、Armadillo-400シリーズと同じ PWM sysfs 経由での
設定がサポートされていません。

Armadillo-800シリーズで PWM の設定を行う場合は、以下の手順となります。

■PWMの周期を設定する

Armadillo上で周期を設定することはできず、
以下ソースファイルの .pwm_period_ns にて設定します。

linux-3.14-at14/arch/arm/mach-shmobile/board-armadillo810.c

160 static struct platform_pwm_backlight_data __maybe_unused pwm02_backlight_data = {
161         .pwm_id = RMOB_TPU_PWM_ID(0, 2),
162         .max_brightness = 255,
163         .dft_brightness = 255,
164         .pwm_period_ns = 33333, /* 30kHz */
165 };

■デューティ比を設定する

Armadillo上で /sys/class/backlight/pwm-backlight.0/brightness の値を変更することで設定します。

デューティ比(ON:OFF) 50:50

[armadillo-810]# echo 128 > /sys/class/backlight/pwm-backlight.0/brightness

デューティ比(ON:OFF) 100:0

[armadillo-810]# echo 0 > /sys/class/backlight/pwm-backlight.0/brightness

デューティ比(ON:OFF) 0:100

[armadillo-810]# echo 255 > /sys/class/backlight/pwm-backlight.0/brightness

お世話になります。巻口です。
返信遅くなって申し訳ありません。

本件、頂いた情報を参考にして、自分でKernelのソースをいじってみました。
結果、暫定ではありますが、backlightの処理にduty_nsとperiod_nsを追加するなどして、
所望の動作ができるようになりました。

ありがとうございました。

> 笹山です。
>
> > ただ、実際にはperiod_nsとduty_nsをコントロールしてPWM出力したいのですが、
> > period_nsとduty_nsやenableのsysfsが見つかりません。
>
> 申し訳ありません、現状 Armadillo-800シリーズでは、Armadillo-400シリーズと同じ PWM sysfs 経由での
> 設定がサポートされていません。
>
> Armadillo-800シリーズで PWM の設定を行う場合は、以下の手順となります。
>
> ■PWMの周期を設定する
>
> Armadillo上で周期を設定することはできず、
> 以下ソースファイルの .pwm_period_ns にて設定します。
>
> linux-3.14-at14/arch/arm/mach-shmobile/board-armadillo810.c
>

> 160 static struct platform_pwm_backlight_data __maybe_unused pwm02_backlight_data = {
> 161         .pwm_id = RMOB_TPU_PWM_ID(0, 2),
> 162         .max_brightness = 255,
> 163         .dft_brightness = 255,
> 164         .pwm_period_ns = 33333, /* 30kHz */
> 165 };
> 

>
>
> ■デューティ比を設定する
>
> Armadillo上で /sys/class/backlight/pwm-backlight.0/brightness の値を変更することで設定します。
>
> デューティ比(ON:OFF) 50:50
>

> [armadillo-810]# echo 128 > /sys/class/backlight/pwm-backlight.0/brightness
> 

>
> デューティ比(ON:OFF) 100:0
>

> [armadillo-810]# echo 0 > /sys/class/backlight/pwm-backlight.0/brightness
> 

>
> デューティ比(ON:OFF) 0:100
>

> [armadillo-810]# echo 255 > /sys/class/backlight/pwm-backlight.0/brightness
> 

>