前回、LCDの表示、タッチパネルの有効化まではできた。
あとやりたいこととしては
- バックライトの制御
- 音声出力
- バージョンアップ機能
- ブラウザ
バックライトの制御(試行錯誤)
u-bootの設定で、LCDのバックライトは
VIDEO_LCD_BL_PWM [=PB4]
としていた。 PWMなので調光できるよねきっと。
https://licheepizero.us/downloads/lichee_zero.pdf
回路図もそうなっているし。
さらりと1kHz以下で使うと書いてある。。
dtsファイルを見てみる
u-bootのconfigでは
BR2_TARGET_UBOOT_BOARD_DEFCONFIG=“LicheePi_Zero_800x480LCD”
BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE=“board/licheepi/boot.cmd”
LicheePi_Zero_800x480LCD_defconfig
CONFIG_DEFAULT_DEVICE_TREE=“sun8i-v3s-licheepi-zero”
sun8i-v3s-licheepi-zero.dts
#include “sun8i-v3s.dtsi”
#include “sunxi-common-regulators.dtsi”
pwmの記載なし
sun8i-v3s.dtsi
pwmの記載なし
board/licheepi/boot.cmd
cat board/licheepi/boot.cmd
setenv bootargs console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock.dtb
bootz 0x41000000 - 0x41800000
kernelの起動時にはsun8i-v3s-licheepi-zero-dock.dtbを読み込むのね。きっと
kernelのconfigでは
BR2_LINUX_KERNEL_INTREE_DTS_NAME=“sun8i-v3s-licheepi-zero sun8i-v3s-licheepi-zero-dock sun8i-v3s-licheepi-zero-with-800x480-lcd”
BR2_ROOTFS_POST_IMAGE_SCRIPT=“support/scripts/genimage.sh”
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/licheepi/genimage.cfg"
こんなに書いてあった
DTS
sun8i-v3s-licheepi-zero
sun8i-v3s-licheepi-zero-dock
sun8i-v3s-licheepi-zero-with-800x480-lcd
[]sun8i-v3s-licheepi-zero-with-800x480-lcd.dts
#include "sun8i-v3s-licheepi-zero-with-lcd.dtsi"
&panel {
compatible = "urt,umsh-8596md-t", "simple-panel";
};
[]sun8i-v3s-licheepi-zero-with-lcd.dtsi*
backlight関係の定義があった。
#include "sun8i-v3s-licheepi-zero.dts"
/ {
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm 0 1000000 0>;
brightness-levels = <0 30 40 50 60 70 100>;
default-brightness-level = <6>;
};
panel: panel {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
backlight = <&backlight>;
#address-cells = <1>;
#size-cells = <0>;
panel_input: endpoint@0 {
reg = <0>;
remote-endpoint = <&tcon0_out_lcd>;
};
};
};
これが他にのdtsファイルにも記載されているといいんだけど。
[]sun8i-v3s-licheepi-zero-dock.dts
dockのボタンとかcodec、mmc1の定義
#include "sun8i-v3s-licheepi-zero.dts"
(略)
support/scripts/genimage.sh
特に関連するものは無いように見える
board/licheepi/genimage.cfg
image boot.vfat {
vfat {
files = {
"zImage",
"sun8i-v3s-licheepi-zero-dock.dtb",
"sun8i-v3s-licheepi-zero.dtb",
"boot.scr"
}
}
size = 8M
}
(略)
整理
混乱してきたので整理
[board/licheepi/boot.cmd]→[sun8i-v3s-licheepi-zero-dock.dts]→[sun8i-v3s-licheepi-zero.dts]
backlightの定義のあるのは
[sun8i-v3s-licheepi-zero-with-800x480-lcd.dts]→[sun8i-v3s-licheepi-zero-with-lcd.dtsi]→[sun8i-v3s-licheepi-zero.dts]
sun8i-v3s-licheepi-zero-dock.dtsに書き足せばいいんじゃねと思ってやってみたのだけど、dtbが更新されない。
make dtbsも無いみたい。
もうひとあがき
すでにあるsun8i-v3s-licheepi-zero-dockで全文検索していたら
Makefileに記載があった。
output/build/linux-zero-4.14.y/arch/arm/boot/dts$ cat Makefile
(中略)
dtb-$(CONFIG_MACH_SUN8I) += \
(中略)
sun8i-v3s-licheepi-zero.dtb \
sun8i-v3s-licheepi-zero-dock.dtb \
sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb \
sun8i-v3s-licheepi-zero-with-800x480-lcd.dtb
ここに、dtbを新たに記載してみても、make時に自動生成はされないようだった。
まだちゃんとは確認できていないけど。
個別にdtbファイルを作成する
dtbが作成されないならば、作ってみよう。
https://qiita.com/ikwzm/items/b07af1a861d6f1c0fde2
上記を参考に
#!/bin/bash
LINUX_KERNEL_SRC=output/build/linux-zero-4.14.y
DTS_SRC_FILE=$1
DTB_OUT_FILE=${DTS_SRC_FILE%.*}.dtb
gcc -E -P -x assembler-with-cpp -I $LINUX_KERNEL_SRC/arch/arm/boot/dts -I $LINUX_KERNEL_SRC/include $DTS_SRC_FILE | dtc -I dts -O dtb -i $LINUX_KERNEL_SRC/arch/arm/boot/dts -o $DTB_OUT_FILE
dtbファイルは[sun8i-v3s-licheepi-zero-dock-with-lcd.dts]
#include "sun8i-v3s-licheepi-zero-dock.dts"
/ {
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm 0 1000000 0>;
brightness-levels = <0 30 40 50 60 70 100>;
default-brightness-level = <6>;
};
};
&pwm {
pinctrl-names = "default";
pinctrl-0 = <&pwm0_pins>;
status = "okay";
};
先程のスクリプトでdtbファイルが生成されるので
/output/imagesにコピーしてみる
各種ファイルの変更
生成したdtbを参照するように変更していく
BR2_LINUX_KERNEL_INTREE_DTS_NAME
BR2_LINUX_KERNEL_INTREE_DTS_NAME=sun8i-v3s-licheepi-zero-dock-with-lcd
/board/licheepi/boot.cmd
setenv bootargs console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock-with-lcd.dtb
bootz 0x41000000 - 0x41800000
/board/licheepi/genimage.cfg
image boot.vfat {
vfat {
files = {
"zImage",
"sun8i-v3s-licheepi-zero-dock-with-lcd.dtb",
"boot.scr"
}
}
size = 8M
}
(略)
いざmake
makeがすんなりと終わって、書き込んでみたら
U-Boot 2017.01-rc2 (Oct 26 2020 - 05:55:22 +0900) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: Lichee Pi Zero
DRAM: 64 MiB
MMC: SUNXI SD/MMC: 0
*** Warning - bad CRC, using default environment
Setting up a 800x480 lcd console (overscan 0x0)
dotclock: 33000kHz = 33000kHz: (1 * 3MHz * 66) / 6
In: serial@01c28000
Out: serial@01c28000
Err: serial@01c28000
Net: No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
reading /boot.scr
292 bytes read in 15 ms (18.6 KiB/s)
## Executing script at 41900000
reading zImage
4022144 bytes read in 204 ms (18.8 MiB/s)
reading sun8i-v3s-licheepi-zero-dock.dtb
** Unable to read file sun8i-v3s-licheepi-zero-dock.dtb **
ERROR: Did not find a cmdline Flattened Device Tree
Could not find a valid device tree
SCRIPT FAILED: continuing...
「** Unable to read file sun8i-v3s-licheepi-zero-dock.dtb **」・・・Orz
更新できていないみたい。
いったん落ち着いて・・・。
バックライトの制御
make cleanしてやりなおす
よくわからない状態になってしまったので、いったん落ち着いて・・・。
make clean
make licheepi_zero_custom_x_touch_backlight_defconfig
設定を確認していく
BR2_LINUX_KERNEL_INTREE_DTS_NAME
BR2_LINUX_KERNEL_INTREE_DTS_NAME=sun8i-v3s-licheepi-zero-dock-with-lcd
/board/licheepi/boot.cmd
setenv bootargs console=ttyS0,115200 panic=5 console=tty0 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero-dock-with-lcd.dtb
bootz 0x41000000 - 0x41800000
/board/licheepi/genimage.cfg
image boot.vfat {
vfat {
files = {
"zImage",
"sun8i-v3s-licheepi-zero-dock-with-lcd.dtb",
"boot.scr"
}
}
size = 8M
}
(略)
dl/linux/git/arch/arm/boot/dts
- sun8i-v3s-licheepi-zero-dock-with-lcd.dts の追加
- Makefileの変更
(略)
sun8i-v3s-licheepi-zero-with-480x272-lcd.dtb \
sun8i-v3s-licheepi-zero-with-800x480-lcd.dtb \
sun8i-v3s-licheepi-zero-dock-with-lcd.dtb
dtb-$(CONFIG_MACH_SUN9I) += \
(略)
いざmake
make[2]: *** ターゲット ‘arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock-with-lcd.dtb’ を make するルールがありません. 中止.
output/build/linux-zero-4.14.y/arch/arm/boot/dts
- sun8i-v3s-licheepi-zero-dock-with-lcd.dts の追加
- Makefileの変更
これでOK
どうやったら、outputに生成される方にも反映できるのかな・・・
動作確認
以下を参考にあれこれ変えてみる
https://wiki.archlinux.jp/index.php/バックライト
# ls /sys/class/backlight/
backlight
# ls /sys/class/backlight/backlight/
actual_brightness device subsystem
bl_power max_brightness type
brightness power uevent
# cat /sys/class/backlight/backlight/max_brightness
6
# echo -n 0 > /sys/class/backlight/backlight/brightness
(消灯した!)
# echo -n 6 > /sys/class/backlight/backlight/brightness
(点灯した!)
いいね!
最大輝度は結構見やすいと思う。