mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
Update olinuxino BSP packages
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
BOARD_NAME="SOM204-A20"
|
||||
BOARDFAMILY="sun7i"
|
||||
BOOTCONFIG="A20-Olimex-SOM204-EVB-eMMC_defconfig"
|
||||
MODULES="8021q a20_tp bonding g_serial gpio_sunxi m25p80 spi_sun7i sunxi_lirc_new sunxi_can"
|
||||
MODULES="8021q a20_tp bonding ft5x_ts g_serial gpio_sunxi m25p80 spi_sun7i sunxi_lirc_new sunxi_can"
|
||||
MODULES_NEXT="bonding g_serial gpio-ir-tx r8723bs"
|
||||
MODULES_DEV="bonding g_serial gpio-ir-tx r8723bs "
|
||||
#
|
||||
|
||||
@@ -281,18 +281,18 @@ rtp_regidity_level = 5
|
||||
rtp_press_threshold_enable = 0
|
||||
rtp_press_threshold = 0x1f40
|
||||
rtp_sensitive_level = 0xf
|
||||
rtp_exchange_x_y_flag = 0
|
||||
rtp_exchange_x_y_flag = 1
|
||||
|
||||
[ctp_para]
|
||||
ctp_used = 1
|
||||
ctp_name = "ft5x_ts"
|
||||
ctp_twi_id = 2
|
||||
ctp_twi_addr = 0x38
|
||||
ctp_screen_max_x = 1024
|
||||
ctp_screen_max_y = 600
|
||||
ctp_screen_max_x = 800
|
||||
ctp_screen_max_y = 480
|
||||
ctp_revert_x_flag = 0
|
||||
ctp_revert_y_flag = 0
|
||||
ctp_exchange_x_y_flag = 1
|
||||
ctp_exchange_x_y_flag = 0
|
||||
ctp_firm = 1
|
||||
ctp_int_port = port:PH02<6><default><default><default>
|
||||
ctp_wakeup = port:PI01<1><default><default><1>
|
||||
@@ -411,6 +411,8 @@ lcd_gamma_correction_en = 0
|
||||
lcd_gamma_tbl_0 = 0x0
|
||||
lcd_gamma_tbl_1 = 0x10101
|
||||
lcd_gamma_tbl_255 = 0xffffff
|
||||
lcd_bl_en_used = 1
|
||||
lcd_bl_en = port:PB02<1><0><default><1>
|
||||
lcd_power_used = 1
|
||||
lcd_power = port:PC24<1><0><default><1>
|
||||
lcd_pwm_used = 1
|
||||
|
||||
@@ -1317,6 +1317,7 @@ CONFIG_SENSORS_LIS3LV02D=m
|
||||
CONFIG_SUNXI_DBGREG=m
|
||||
# CONFIG_ATMEL_PWM is not set
|
||||
CONFIG_SUNXI_PWM=y
|
||||
CONFIG_OLINUXINO_LCD=m
|
||||
# CONFIG_ICS932S401 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_APDS9802ALS is not set
|
||||
|
||||
@@ -42,21 +42,33 @@ family_tweaks_s()
|
||||
if [[ $BRANCH != default ]]; then
|
||||
# Enable bluetooth
|
||||
chroot $SDCARD /bin/bash -c "systemctl --no-reload enable olinuxino-bluetooth.service >/dev/null 2>&1"
|
||||
else
|
||||
# Install touchscreen calibrator
|
||||
[[ $BUILD_DESKTOP == yes ]] && chroot $SDCARD /bin/bash -c "apt-get -y -qq install xinput-calibrator >/dev/null 2>&1"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
family_tweaks_bsp_s()
|
||||
{
|
||||
if [[ $BRANCH != default && $BOARD == olimex-som204-a20 ]]; then
|
||||
if [[ $BOARD == olimex-som204-a20 ]]; then
|
||||
|
||||
# Copy bluetooth service
|
||||
install -m 755 $SRC/packages/bsp/olinuxino/rtk_hciattach $destination/usr/bin
|
||||
cp $SRC/packages/bsp/olinuxino/olinuxino-bluetooth.service $destination/lib/systemd/system
|
||||
if [[ $BRANCH == default ]]; then
|
||||
# Copy LCD ralated files
|
||||
install -m 755 $SRC/packages/bsp/olinuxino/usr/sbin/devmem $destination/usr/sbin
|
||||
install -m 755 $SRC/packages/bsp/olinuxino/usr/sbin/change-display $destination/usr/sbin
|
||||
|
||||
if [[ $BRANCH == dev ]]; then
|
||||
# Copy fbdev configuration
|
||||
cp $SRC/packages/bsp/olinuxino/02-olinuxino-hdmi-fbdev.conf $destination/etc/X11/xorg.conf.d/
|
||||
# Copy LCD-OLinuXino-15.6FHD service. Initially the service should be disabled
|
||||
cp $SRC/packages/bsp/olinuxino/lib/systemd/system/olinuxino-lcd.service $destination/lib/systemd/system
|
||||
else
|
||||
# Copy bluetooth service
|
||||
install -m 755 $SRC/packages/bsp/olinuxino/usr/bin/rtk_hciattach $destination/usr/bin
|
||||
cp $SRC/packages/bsp/olinuxino/lib/systemd/system/olinuxino-bluetooth.service $destination/lib/systemd/system
|
||||
|
||||
if [[ $BRANCH == dev ]]; then
|
||||
# Copy fbdev configuration
|
||||
cp $SRC/packages/bsp/olinuxino/etc/X11/xorg.conf.d/02-olinuxino-hdmi-fbdev.conf $destination/etc/X11/xorg.conf.d/
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=LCD-OLinuXino-15.6FHD source clock tune
|
||||
After=basic.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/sbin/devmem 0x01c20118 w 0xc3000000
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
808
packages/bsp/olinuxino/usr/sbin/change-display
Executable file
808
packages/bsp/olinuxino/usr/sbin/change-display
Executable file
@@ -0,0 +1,808 @@
|
||||
#!/bin/bash
|
||||
|
||||
# read in board info
|
||||
[[ -f /etc/armbian-release ]] && source /etc/armbian-release
|
||||
backtitle="OLinuXino display configurator for Armbian v${VERSION}"
|
||||
|
||||
bin_file="/boot/script.bin"
|
||||
log_file="/var/log/change_display.log"
|
||||
|
||||
function change_parameters()
|
||||
{
|
||||
local __parameters=("$@")
|
||||
local __fex_file=$(mktemp)
|
||||
local __total=${#__parameters[@]}
|
||||
local __i=0
|
||||
|
||||
# Convert bin -> fex
|
||||
if ! bin2fex $bin_file $__fex_file 2>$log_file; then
|
||||
display_error_dialog "Something happened" "Failed converting configuration file!\n\n
|
||||
Command: bin2fex $bin_file $__fex_file\n
|
||||
Output:\n
|
||||
$(cat $log_file)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
( for par in "${__parameters[@]}"; do
|
||||
local __section=$(awk -F'[|=]' '{print $1}' <<< $par)
|
||||
local __parameter=$(awk -F'[|=]' '{print $2}' <<< $par)
|
||||
local __value=$(awk -F'[|=]' '{print $3}' <<< $par)
|
||||
|
||||
# Calculate progress
|
||||
local __progress=$((100 * (++__i) / $__total))
|
||||
|
||||
# Display progress
|
||||
cat << __EOF__
|
||||
XXX
|
||||
$__progress
|
||||
|
||||
[$__section]$__parameter=$__value
|
||||
XXX
|
||||
__EOF__
|
||||
# Find section start
|
||||
local __section_start=$(grep -m 1 -n "\[$__section]" $__fex_file | cut -d':' -f1)
|
||||
if [[ -z $__section_start ]]; then
|
||||
# If not found append it to the end of file
|
||||
echo -e "[$__section]\n">> $__fex_file
|
||||
__section_start=$(grep -m 1 -n "\[$__section]" $__fex_file | cut -d':' -f1)
|
||||
fi
|
||||
|
||||
# Find section end
|
||||
local __section_end=$(tail -n +$__section_start $__fex_file | grep -n -m 1 "^$" | cut -d':' -f1)
|
||||
if [[ -z $__section_end ]]; then
|
||||
display_error_dialog "Converting error" "The end of \"$__section\" section is not found!"
|
||||
fi
|
||||
__section_end=$(($__section_end - 1))
|
||||
|
||||
# Check if line exist in section.
|
||||
# If so execute sed, otherwise insert it to the bottom
|
||||
if tail -n +$__section_start $__fex_file | head -n $__section_end | grep -q "$__parameter ="; then
|
||||
sed -i "$__section_start,+$__section_end s/$__parameter =.*/$__parameter = $__value/" $__fex_file
|
||||
else
|
||||
sed -i "$(($__section_start + $__section_end)) i $__parameter = $__value" $__fex_file
|
||||
fi
|
||||
|
||||
# done )
|
||||
done ) | dialog --title "Converting configuration" --backtitle "$backtitle" --gauge "Please wait..." 7 70 0
|
||||
|
||||
# Convert back to bin file
|
||||
if ! fex2bin $__fex_file $bin_file 2>$log_file; then
|
||||
display_error_dialog "Something happened" "Failed converting configuration file!\n\n
|
||||
Command: fex2bin $__fex_file $bin_file\n
|
||||
Output:\n
|
||||
$(cat $log_file)"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function display_reboot_dialog()
|
||||
{
|
||||
dialog --title "Almost done" --backtitle "$backtitle" --yes-label "Reboot" --no-label "Exit" --yesno "\nAll done. \n
|
||||
Board must be rebooted to apply changes." 7 70
|
||||
[[ $? -ne 0 ]] && exit 0
|
||||
reboot
|
||||
}
|
||||
|
||||
function display_error_dialog()
|
||||
{
|
||||
dialog --title "$1" --backtitle "$backtitle" --msgbox "\n$2" 0 0
|
||||
exit 1
|
||||
}
|
||||
function dispaly_comfirm_dialog()
|
||||
{
|
||||
dialog --title "Confirmation" --backtitle "$backtitle" --yesno "\n$1" 7 74
|
||||
[[ $? -ne 0 ]] && exit 1
|
||||
}
|
||||
|
||||
function enable_ts()
|
||||
{
|
||||
sed -i "/a20_tp/d" /etc/modules
|
||||
! grep -q "sun4i_ts" /etc/modules && echo "sun4i_ts" >> /etc/modules
|
||||
}
|
||||
|
||||
function disable_ts()
|
||||
{
|
||||
sed -i "/sun4i_ts/d" /etc/modules
|
||||
! grep -q "a20_tp" /etc/modules && echo "a20_tp" >> /etc/modules
|
||||
}
|
||||
|
||||
function set_hdmi_resolution()
|
||||
{
|
||||
options=(
|
||||
0 "480i"
|
||||
1 "576i"
|
||||
2 "480p"
|
||||
3 "576p"
|
||||
4 "720p50"
|
||||
5 "720p60"
|
||||
6 "1080i50"
|
||||
7 "1080i60"
|
||||
8 "1080p24"
|
||||
9 "1080p50"
|
||||
10 "1080p60"
|
||||
11 "pal"
|
||||
14 "ntsc")
|
||||
|
||||
cmd=(dialog --title "Configure HDMI output" --backtitle "$backtitle" --menu "\nSelect HDMI resolution: \n" 21 60 14)
|
||||
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
|
||||
[[ $? -ne 0 ]] && exit 1
|
||||
|
||||
for choice in $choices; do
|
||||
fex_mode=$choice
|
||||
for i in "${!options[@]}"; do
|
||||
if [[ "${options[$i]}" == "$choice" ]]; then
|
||||
fex_desc=${options[$(($i + 1))]}
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
dispaly_comfirm_dialog "Set HDMI resolution to \"$fex_desc\"?"
|
||||
|
||||
# Set parameters
|
||||
hdmi_parameters=(
|
||||
"disp_init|screen0_output_type=3"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|screen0_output_mode=$fex_mode"
|
||||
"lcd0_para|lcd_used=0"
|
||||
"lcd1_para|lcd_used=0"
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0")
|
||||
|
||||
# Execute parameter change
|
||||
change_parameters "${hdmi_parameters[@]}"
|
||||
|
||||
# Remove olinuxino-lcd module and service
|
||||
systemctl disable olinuxino-lcd.service 2>/dev/null
|
||||
sed -i "/olinuxino-lcd/d" /etc/modules
|
||||
|
||||
disable_ts
|
||||
}
|
||||
|
||||
function set_vga_resolution()
|
||||
{
|
||||
options=(
|
||||
0 "1680x1050"
|
||||
1 "1440x900"
|
||||
2 "1360x768"
|
||||
3 "1280x1024"
|
||||
4 "1024x768"
|
||||
5 "800x600"
|
||||
6 "640x480"
|
||||
10 "1920x1080"
|
||||
11 "1280x720")
|
||||
|
||||
cmd=(dialog --title "Configure VGA output" --backtitle "$backtitle" --menu "\nSelect VGA resolution: \n" 18 60 14)
|
||||
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
|
||||
[[ $? -ne 0 ]] && exit 1
|
||||
|
||||
for choice in $choices; do
|
||||
fex_mode=$choice
|
||||
for i in "${!options[@]}"; do
|
||||
if [[ "${options[$i]}" == "$choice" ]]; then
|
||||
fex_desc=${options[$(($i + 1))]}
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
dispaly_comfirm_dialog "Set HDMI resolution to \"$fex_desc\"?"
|
||||
|
||||
# Set parameters
|
||||
vga_parameters=(
|
||||
"disp_init|screen0_output_type=4"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|screen0_output_mode=$fex_mode"
|
||||
"lcd0_para|lcd_used=0"
|
||||
"lcd1_para|lcd_used=0"
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0")
|
||||
|
||||
# Execute parameter change
|
||||
change_parameters "${vga_parameters[@]}"
|
||||
|
||||
# Remove olinuxino-lcd module and service
|
||||
systemctl disable olinuxino-lcd.service 2>/dev/null
|
||||
sed -i "/olinuxino-lcd/d" /etc/modules
|
||||
|
||||
disable_ts
|
||||
}
|
||||
|
||||
function disable_output()
|
||||
{
|
||||
dispaly_comfirm_dialog "Disable all display outputs?"
|
||||
|
||||
none_parameters=(
|
||||
"disp_init|screen0_output_type=0"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"lcd0_para|lcd_used=0"
|
||||
"lcd1_para|lcd_used=0"
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0"
|
||||
)
|
||||
|
||||
# Execute parameter change
|
||||
change_parameters "${none_parameters[@]}"
|
||||
|
||||
# Remove olinuxino-lcd module and service
|
||||
systemctl disable olinuxino-lcd.service 2>/dev/null
|
||||
sed -i "/olinuxino-lcd/d" /etc/modules
|
||||
|
||||
disable_ts
|
||||
}
|
||||
|
||||
function set_lcd_resolution()
|
||||
{
|
||||
options=(
|
||||
1 "LCD-OLinuXino-4.3|480x272"
|
||||
2 "LCD-OLinuXino-5|800x480"
|
||||
3 "LCD-OLinuXino-7|800x480"
|
||||
4 "LCD-OLinuXino-10-Rev.A|1024x600"
|
||||
5 "LCD-OLinuXino-10-Rev.B|1024x600"
|
||||
6 "LCD-OLinuXino-15.6|1366x768"
|
||||
7 "LCD-OLinuXino-15.6FHD|1920x1080")
|
||||
|
||||
cmd=(dialog --title "Configure LCD output" --backtitle "$backtitle" --column-separator "|" --menu "\nSelect LCD panel: \n" 15 60 14)
|
||||
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
|
||||
[[ $? -ne 0 ]] && exit 1
|
||||
|
||||
for choice in $choices; do
|
||||
fex_mode=$choice
|
||||
for i in "${!options[@]}"; do
|
||||
if [[ "${options[$i]}" == "$choice" ]]; then
|
||||
fex_desc=$(cut -d"|" -f1 <<< ${options[$(($i + 1))]} )
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
dispaly_comfirm_dialog "Select \"$fex_desc\"?"
|
||||
|
||||
for choice in $choices
|
||||
do
|
||||
case $choice in
|
||||
1)
|
||||
lcd_parameters=(
|
||||
"clock|pll3="
|
||||
|
||||
"disp_init|disp_mode=0"
|
||||
"disp_init|screen0_output_type=1"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|fb0_scaler_mode_enable=0"
|
||||
|
||||
"lcd0_para|lcd_used=1"
|
||||
"lcd0_para|lcd_x=480"
|
||||
"lcd0_para|lcd_y=272"
|
||||
"lcd0_para|lcd_dclk_freq=12"
|
||||
"lcd0_para|lcd_pwm_not_used=0"
|
||||
"lcd0_para|lcd_if=0"
|
||||
"lcd0_para|lcd_hbp=2"
|
||||
"lcd0_para|lcd_ht=525"
|
||||
"lcd0_para|lcd_vbp=2"
|
||||
"lcd0_para|lcd_vt=572"
|
||||
"lcd0_para|lcd_hv_vspw=10"
|
||||
"lcd0_para|lcd_hv_hspw=41"
|
||||
"lcd0_para|lcd_hv_if=0"
|
||||
"lcd0_para|lcd_lvds_ch=0"
|
||||
"lcd0_para|lcd_lvds_mode=0"
|
||||
"lcd0_para|lcd_lvds_bitwidth=0"
|
||||
"lcd0_para|lcd_frm=1"
|
||||
"lcd0_para|lcd_io_cfg0=268435456"
|
||||
"lcd0_para|lcd_bl_en_used=0"
|
||||
"lcd0_para|lcd_pwm_used=1"
|
||||
|
||||
"lcd0_para|lcdd0=port:PD00<2><0><default><default>"
|
||||
"lcd0_para|lcdd1=port:PD01<2><0><default><default>"
|
||||
"lcd0_para|lcdd2=port:PD02<2><0><default><default>"
|
||||
"lcd0_para|lcdd3=port:PD03<2><0><default><default>"
|
||||
"lcd0_para|lcdd4=port:PD04<2><0><default><default>"
|
||||
"lcd0_para|lcdd5=port:PD05<2><0><default><default>"
|
||||
"lcd0_para|lcdd6=port:PD06<2><0><default><default>"
|
||||
"lcd0_para|lcdd7=port:PD07<2><0><default><default>"
|
||||
"lcd0_para|lcdd8=port:PD08<2><0><default><default>"
|
||||
"lcd0_para|lcdd9=port:PD09<2><0><default><default>"
|
||||
"lcd0_para|lcdd10=port:PD10<2><0><default><default>"
|
||||
"lcd0_para|lcdd11=port:PD11<2><0><default><default>"
|
||||
"lcd0_para|lcdd12=port:PD12<2><0><default><default>"
|
||||
"lcd0_para|lcdd13=port:PD13<2><0><default><default>"
|
||||
"lcd0_para|lcdd14=port:PD14<2><0><default><default>"
|
||||
"lcd0_para|lcdd15=port:PD15<2><0><default><default>"
|
||||
"lcd0_para|lcdd16=port:PD16<2><0><default><default>"
|
||||
"lcd0_para|lcdd17=port:PD17<2><0><default><default>"
|
||||
"lcd0_para|lcdd18=port:PD18<2><0><default><default>"
|
||||
"lcd0_para|lcdd19=port:PD19<2><0><default><default>"
|
||||
"lcd0_para|lcdd20=port:PD20<2><0><default><default>"
|
||||
"lcd0_para|lcdd21=port:PD21<2><0><default><default>"
|
||||
"lcd0_para|lcdd22=port:PD22<2><0><default><default>"
|
||||
"lcd0_para|lcdd23=port:PD23<2><0><default><default>"
|
||||
"lcd0_para|lcdclk=port:PD24<2><0><default><default>"
|
||||
"lcd0_para|lcdde=port:PD25<2><0><default><default>"
|
||||
"lcd0_para|lcdhsync=port:PD26<2><0><default><default>"
|
||||
"lcd0_para|lcdvsync=port:PD27<2><0><default><default>"
|
||||
|
||||
"pwm0_para|pwm_used=1"
|
||||
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0"
|
||||
)
|
||||
;;
|
||||
|
||||
2)
|
||||
lcd_parameters=(
|
||||
"clock|pll3="
|
||||
|
||||
"disp_init|disp_mode=0"
|
||||
"disp_init|screen0_output_type=1"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|fb0_scaler_mode_enable=0"
|
||||
|
||||
"lcd0_para|lcd_used=1"
|
||||
"lcd0_para|lcd_x=800"
|
||||
"lcd0_para|lcd_y=480"
|
||||
"lcd0_para|lcd_dclk_freq=33"
|
||||
"lcd0_para|lcd_pwm_not_used=0"
|
||||
"lcd0_para|lcd_if=0"
|
||||
"lcd0_para|lcd_hbp=46"
|
||||
"lcd0_para|lcd_ht=1055"
|
||||
"lcd0_para|lcd_vbp=23"
|
||||
"lcd0_para|lcd_vt=1050"
|
||||
"lcd0_para|lcd_hv_vspw=1"
|
||||
"lcd0_para|lcd_hv_hspw=30"
|
||||
"lcd0_para|lcd_hv_if=0"
|
||||
"lcd0_para|lcd_lvds_ch=0"
|
||||
"lcd0_para|lcd_lvds_mode=0"
|
||||
"lcd0_para|lcd_lvds_bitwidth=0"
|
||||
"lcd0_para|lcd_frm=1"
|
||||
"lcd0_para|lcd_io_cfg0=268435456"
|
||||
"lcd0_para|lcd_bl_en_used=0"
|
||||
"lcd0_para|lcd_pwm_used=1"
|
||||
|
||||
"lcd0_para|lcdd0=port:PD00<2><0><default><default>"
|
||||
"lcd0_para|lcdd1=port:PD01<2><0><default><default>"
|
||||
"lcd0_para|lcdd2=port:PD02<2><0><default><default>"
|
||||
"lcd0_para|lcdd3=port:PD03<2><0><default><default>"
|
||||
"lcd0_para|lcdd4=port:PD04<2><0><default><default>"
|
||||
"lcd0_para|lcdd5=port:PD05<2><0><default><default>"
|
||||
"lcd0_para|lcdd6=port:PD06<2><0><default><default>"
|
||||
"lcd0_para|lcdd7=port:PD07<2><0><default><default>"
|
||||
"lcd0_para|lcdd8=port:PD08<2><0><default><default>"
|
||||
"lcd0_para|lcdd9=port:PD09<2><0><default><default>"
|
||||
"lcd0_para|lcdd10=port:PD10<2><0><default><default>"
|
||||
"lcd0_para|lcdd11=port:PD11<2><0><default><default>"
|
||||
"lcd0_para|lcdd12=port:PD12<2><0><default><default>"
|
||||
"lcd0_para|lcdd13=port:PD13<2><0><default><default>"
|
||||
"lcd0_para|lcdd14=port:PD14<2><0><default><default>"
|
||||
"lcd0_para|lcdd15=port:PD15<2><0><default><default>"
|
||||
"lcd0_para|lcdd16=port:PD16<2><0><default><default>"
|
||||
"lcd0_para|lcdd17=port:PD17<2><0><default><default>"
|
||||
"lcd0_para|lcdd18=port:PD18<2><0><default><default>"
|
||||
"lcd0_para|lcdd19=port:PD19<2><0><default><default>"
|
||||
"lcd0_para|lcdd20=port:PD20<2><0><default><default>"
|
||||
"lcd0_para|lcdd21=port:PD21<2><0><default><default>"
|
||||
"lcd0_para|lcdd22=port:PD22<2><0><default><default>"
|
||||
"lcd0_para|lcdd23=port:PD23<2><0><default><default>"
|
||||
"lcd0_para|lcdclk=port:PD24<2><0><default><default>"
|
||||
"lcd0_para|lcdde=port:PD25<2><0><default><default>"
|
||||
"lcd0_para|lcdhsync=port:PD26<2><0><default><default>"
|
||||
"lcd0_para|lcdvsync=port:PD27<2><0><default><default>"
|
||||
|
||||
"pwm0_para|pwm_used=1"
|
||||
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0"
|
||||
)
|
||||
;;
|
||||
|
||||
3)
|
||||
lcd_parameters=(
|
||||
"clock|pll3="
|
||||
|
||||
"disp_init|disp_mode=0"
|
||||
"disp_init|screen0_output_type=1"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|fb0_scaler_mode_enable=0"
|
||||
|
||||
"lcd0_para|lcd_used=1"
|
||||
"lcd0_para|lcd_x=800"
|
||||
"lcd0_para|lcd_y=480"
|
||||
"lcd0_para|lcd_dclk_freq=33"
|
||||
"lcd0_para|lcd_pwm_not_used=0"
|
||||
"lcd0_para|lcd_if=0"
|
||||
"lcd0_para|lcd_hbp=46"
|
||||
"lcd0_para|lcd_ht=1055"
|
||||
"lcd0_para|lcd_vbp=23"
|
||||
"lcd0_para|lcd_vt=1050"
|
||||
"lcd0_para|lcd_hv_vspw=1"
|
||||
"lcd0_para|lcd_hv_hspw=30"
|
||||
"lcd0_para|lcd_hv_if=0"
|
||||
"lcd0_para|lcd_lvds_ch=0"
|
||||
"lcd0_para|lcd_lvds_mode=0"
|
||||
"lcd0_para|lcd_lvds_bitwidth=0"
|
||||
"lcd0_para|lcd_frm=1"
|
||||
"lcd0_para|lcd_io_cfg0=268435456"
|
||||
"lcd0_para|lcd_bl_en_used=0"
|
||||
"lcd0_para|lcd_pwm_used=1"
|
||||
|
||||
"lcd0_para|lcdd0=port:PD00<2><0><default><default>"
|
||||
"lcd0_para|lcdd1=port:PD01<2><0><default><default>"
|
||||
"lcd0_para|lcdd2=port:PD02<2><0><default><default>"
|
||||
"lcd0_para|lcdd3=port:PD03<2><0><default><default>"
|
||||
"lcd0_para|lcdd4=port:PD04<2><0><default><default>"
|
||||
"lcd0_para|lcdd5=port:PD05<2><0><default><default>"
|
||||
"lcd0_para|lcdd6=port:PD06<2><0><default><default>"
|
||||
"lcd0_para|lcdd7=port:PD07<2><0><default><default>"
|
||||
"lcd0_para|lcdd8=port:PD08<2><0><default><default>"
|
||||
"lcd0_para|lcdd9=port:PD09<2><0><default><default>"
|
||||
"lcd0_para|lcdd10=port:PD10<2><0><default><default>"
|
||||
"lcd0_para|lcdd11=port:PD11<2><0><default><default>"
|
||||
"lcd0_para|lcdd12=port:PD12<2><0><default><default>"
|
||||
"lcd0_para|lcdd13=port:PD13<2><0><default><default>"
|
||||
"lcd0_para|lcdd14=port:PD14<2><0><default><default>"
|
||||
"lcd0_para|lcdd15=port:PD15<2><0><default><default>"
|
||||
"lcd0_para|lcdd16=port:PD16<2><0><default><default>"
|
||||
"lcd0_para|lcdd17=port:PD17<2><0><default><default>"
|
||||
"lcd0_para|lcdd18=port:PD18<2><0><default><default>"
|
||||
"lcd0_para|lcdd19=port:PD19<2><0><default><default>"
|
||||
"lcd0_para|lcdd20=port:PD20<2><0><default><default>"
|
||||
"lcd0_para|lcdd21=port:PD21<2><0><default><default>"
|
||||
"lcd0_para|lcdd22=port:PD22<2><0><default><default>"
|
||||
"lcd0_para|lcdd23=port:PD23<2><0><default><default>"
|
||||
"lcd0_para|lcdclk=port:PD24<2><0><default><default>"
|
||||
"lcd0_para|lcdde=port:PD25<2><0><default><default>"
|
||||
"lcd0_para|lcdhsync=port:PD26<2><0><default><default>"
|
||||
"lcd0_para|lcdvsync=port:PD27<2><0><default><default>"
|
||||
|
||||
"pwm0_para|pwm_used=1"
|
||||
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0"
|
||||
)
|
||||
;;
|
||||
|
||||
4)
|
||||
lcd_parameters=(
|
||||
"clock|pll3="
|
||||
|
||||
"disp_init|disp_mode=0"
|
||||
"disp_init|screen0_output_type=1"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|fb0_scaler_mode_enable=0"
|
||||
|
||||
"lcd0_para|lcd_used=1"
|
||||
"lcd0_para|lcd_x=1024"
|
||||
"lcd0_para|lcd_y=600"
|
||||
"lcd0_para|lcd_dclk_freq=45"
|
||||
"lcd0_para|lcd_pwm_not_used=0"
|
||||
"lcd0_para|lcd_if=0"
|
||||
"lcd0_para|lcd_hbp=160"
|
||||
"lcd0_para|lcd_ht=1200"
|
||||
"lcd0_para|lcd_vbp=23"
|
||||
"lcd0_para|lcd_vt=1250"
|
||||
"lcd0_para|lcd_hv_vspw=2"
|
||||
"lcd0_para|lcd_hv_hspw=10"
|
||||
"lcd0_para|lcd_hv_if=0"
|
||||
"lcd0_para|lcd_lvds_ch=0"
|
||||
"lcd0_para|lcd_lvds_mode=0"
|
||||
"lcd0_para|lcd_lvds_bitwidth=0"
|
||||
"lcd0_para|lcd_frm=1"
|
||||
"lcd0_para|lcd_io_cfg0=268435456"
|
||||
"lcd0_para|lcd_bl_en_used=0"
|
||||
"lcd0_para|lcd_pwm_used=1"
|
||||
|
||||
"lcd0_para|lcdd0=port:PD00<2><0><default><default>"
|
||||
"lcd0_para|lcdd1=port:PD01<2><0><default><default>"
|
||||
"lcd0_para|lcdd2=port:PD02<2><0><default><default>"
|
||||
"lcd0_para|lcdd3=port:PD03<2><0><default><default>"
|
||||
"lcd0_para|lcdd4=port:PD04<2><0><default><default>"
|
||||
"lcd0_para|lcdd5=port:PD05<2><0><default><default>"
|
||||
"lcd0_para|lcdd6=port:PD06<2><0><default><default>"
|
||||
"lcd0_para|lcdd7=port:PD07<2><0><default><default>"
|
||||
"lcd0_para|lcdd8=port:PD08<2><0><default><default>"
|
||||
"lcd0_para|lcdd9=port:PD09<2><0><default><default>"
|
||||
"lcd0_para|lcdd10=port:PD10<2><0><default><default>"
|
||||
"lcd0_para|lcdd11=port:PD11<2><0><default><default>"
|
||||
"lcd0_para|lcdd12=port:PD12<2><0><default><default>"
|
||||
"lcd0_para|lcdd13=port:PD13<2><0><default><default>"
|
||||
"lcd0_para|lcdd14=port:PD14<2><0><default><default>"
|
||||
"lcd0_para|lcdd15=port:PD15<2><0><default><default>"
|
||||
"lcd0_para|lcdd16=port:PD16<2><0><default><default>"
|
||||
"lcd0_para|lcdd17=port:PD17<2><0><default><default>"
|
||||
"lcd0_para|lcdd18=port:PD18<2><0><default><default>"
|
||||
"lcd0_para|lcdd19=port:PD19<2><0><default><default>"
|
||||
"lcd0_para|lcdd20=port:PD20<2><0><default><default>"
|
||||
"lcd0_para|lcdd21=port:PD21<2><0><default><default>"
|
||||
"lcd0_para|lcdd22=port:PD22<2><0><default><default>"
|
||||
"lcd0_para|lcdd23=port:PD23<2><0><default><default>"
|
||||
"lcd0_para|lcdclk=port:PD24<2><0><default><default>"
|
||||
"lcd0_para|lcdde=port:PD25<2><0><default><default>"
|
||||
"lcd0_para|lcdhsync=port:PD26<2><0><default><default>"
|
||||
"lcd0_para|lcdvsync=port:PD27<2><0><default><default>"
|
||||
|
||||
"pwm0_para|pwm_used=1"
|
||||
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0"
|
||||
)
|
||||
;;
|
||||
|
||||
5)
|
||||
lcd_parameters=(
|
||||
"clock|pll3="
|
||||
|
||||
"disp_init|disp_mode=0"
|
||||
"disp_init|screen0_output_type=1"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|fb0_scaler_mode_enable=0"
|
||||
|
||||
"lcd0_para|lcd_used=1"
|
||||
"lcd0_para|lcd_x=1024"
|
||||
"lcd0_para|lcd_y=600"
|
||||
"lcd0_para|lcd_dclk_freq=45"
|
||||
"lcd0_para|lcd_pwm_not_used=0"
|
||||
"lcd0_para|lcd_if=0"
|
||||
"lcd0_para|lcd_hbp=160"
|
||||
"lcd0_para|lcd_ht=1200"
|
||||
"lcd0_para|lcd_vbp=23"
|
||||
"lcd0_para|lcd_vt=1250"
|
||||
"lcd0_para|lcd_hv_vspw=2"
|
||||
"lcd0_para|lcd_hv_hspw=10"
|
||||
"lcd0_para|lcd_hv_if=0"
|
||||
"lcd0_para|lcd_lvds_ch=0"
|
||||
"lcd0_para|lcd_lvds_mode=0"
|
||||
"lcd0_para|lcd_lvds_bitwidth=0"
|
||||
"lcd0_para|lcd_frm=1"
|
||||
"lcd0_para|lcd_io_cfg0=0"
|
||||
"lcd0_para|lcd_bl_en_used=0"
|
||||
"lcd0_para|lcd_pwm_used=1"
|
||||
|
||||
"lcd0_para|lcdd0=port:PD00<2><0><default><default>"
|
||||
"lcd0_para|lcdd1=port:PD01<2><0><default><default>"
|
||||
"lcd0_para|lcdd2=port:PD02<2><0><default><default>"
|
||||
"lcd0_para|lcdd3=port:PD03<2><0><default><default>"
|
||||
"lcd0_para|lcdd4=port:PD04<2><0><default><default>"
|
||||
"lcd0_para|lcdd5=port:PD05<2><0><default><default>"
|
||||
"lcd0_para|lcdd6=port:PD06<2><0><default><default>"
|
||||
"lcd0_para|lcdd7=port:PD07<2><0><default><default>"
|
||||
"lcd0_para|lcdd8=port:PD08<2><0><default><default>"
|
||||
"lcd0_para|lcdd9=port:PD09<2><0><default><default>"
|
||||
"lcd0_para|lcdd10=port:PD10<2><0><default><default>"
|
||||
"lcd0_para|lcdd11=port:PD11<2><0><default><default>"
|
||||
"lcd0_para|lcdd12=port:PD12<2><0><default><default>"
|
||||
"lcd0_para|lcdd13=port:PD13<2><0><default><default>"
|
||||
"lcd0_para|lcdd14=port:PD14<2><0><default><default>"
|
||||
"lcd0_para|lcdd15=port:PD15<2><0><default><default>"
|
||||
"lcd0_para|lcdd16=port:PD16<2><0><default><default>"
|
||||
"lcd0_para|lcdd17=port:PD17<2><0><default><default>"
|
||||
"lcd0_para|lcdd18=port:PD18<2><0><default><default>"
|
||||
"lcd0_para|lcdd19=port:PD19<2><0><default><default>"
|
||||
"lcd0_para|lcdd20=port:PD20<2><0><default><default>"
|
||||
"lcd0_para|lcdd21=port:PD21<2><0><default><default>"
|
||||
"lcd0_para|lcdd22=port:PD22<2><0><default><default>"
|
||||
"lcd0_para|lcdd23=port:PD23<2><0><default><default>"
|
||||
"lcd0_para|lcdclk=port:PD24<2><0><default><default>"
|
||||
"lcd0_para|lcdde=port:PD25<2><0><default><default>"
|
||||
"lcd0_para|lcdhsync=port:PD26<2><0><default><default>"
|
||||
"lcd0_para|lcdvsync=port:PD27<2><0><default><default>"
|
||||
|
||||
"pwm0_para|pwm_used=1"
|
||||
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=0"
|
||||
)
|
||||
;;
|
||||
|
||||
6)
|
||||
|
||||
lcd_parameters=(
|
||||
"clock|pll3=297"
|
||||
|
||||
"disp_init|disp_mode=0"
|
||||
"disp_init|screen0_output_type=1"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|fb0_scaler_mode_enable=1"
|
||||
|
||||
"lcd0_para|lcd_used=1"
|
||||
"lcd0_para|lcd_x=1366"
|
||||
"lcd0_para|lcd_y=768"
|
||||
"lcd0_para|lcd_dclk_freq=70"
|
||||
"lcd0_para|lcd_pwm_not_used=1"
|
||||
"lcd0_para|lcd_if=3"
|
||||
"lcd0_para|lcd_hbp=54"
|
||||
"lcd0_para|lcd_ht=1440"
|
||||
"lcd0_para|lcd_vbp=23"
|
||||
"lcd0_para|lcd_vt=1616"
|
||||
"lcd0_para|lcd_hv_vspw=0"
|
||||
"lcd0_para|lcd_hv_hspw=0"
|
||||
"lcd0_para|lcd_hv_if=0"
|
||||
"lcd0_para|lcd_lvds_ch=0"
|
||||
"lcd0_para|lcd_lvds_mode=0"
|
||||
"lcd0_para|lcd_lvds_bitwidth=1"
|
||||
"lcd0_para|lcd_frm=1"
|
||||
"lcd0_para|lcd_io_cfg0=268435456"
|
||||
"lcd0_para|lcd_bl_en_used=1"
|
||||
"lcd0_para|lcd_pwm_used=0"
|
||||
|
||||
"lcd0_para|lcdd0=port:PD00<3><0><default><default>"
|
||||
"lcd0_para|lcdd1=port:PD01<3><0><default><default>"
|
||||
"lcd0_para|lcdd2=port:PD02<3><0><default><default>"
|
||||
"lcd0_para|lcdd3=port:PD03<3><0><default><default>"
|
||||
"lcd0_para|lcdd4=port:PD04<3><0><default><default>"
|
||||
"lcd0_para|lcdd5=port:PD05<3><0><default><default>"
|
||||
"lcd0_para|lcdd6=port:PD06<3><0><default><default>"
|
||||
"lcd0_para|lcdd7=port:PD07<3><0><default><default>"
|
||||
"lcd0_para|lcdd8=port:PD08<3><0><default><default>"
|
||||
"lcd0_para|lcdd9=port:PD09<3><0><default><default>"
|
||||
"lcd0_para|lcdd10=port:PD10<3><0><default><default>"
|
||||
"lcd0_para|lcdd11=port:PD11<3><0><default><default>"
|
||||
"lcd0_para|lcdd12=port:PD12<3><0><default><default>"
|
||||
"lcd0_para|lcdd13=port:PD13<3><0><default><default>"
|
||||
"lcd0_para|lcdd14=port:PD14<3><0><default><default>"
|
||||
"lcd0_para|lcdd15=port:PD15<3><0><default><default>"
|
||||
"lcd0_para|lcdd16=port:PD16<3><0><default><default>"
|
||||
"lcd0_para|lcdd17=port:PD17<3><0><default><default>"
|
||||
"lcd0_para|lcdd18=port:PD18<3><0><default><default>"
|
||||
"lcd0_para|lcdd19=port:PD19<3><0><default><default>"
|
||||
"lcd0_para|lcdd20=port:PD20<3><0><default><default>"
|
||||
"lcd0_para|lcdd21=port:PD21<3><0><default><default>"
|
||||
"lcd0_para|lcdd22="
|
||||
"lcd0_para|lcdd23="
|
||||
"lcd0_para|lcdclk="
|
||||
"lcd0_para|lcdde="
|
||||
"lcd0_para|lcdhsync="
|
||||
"lcd0_para|lcdvsync="
|
||||
|
||||
"pwm0_para|pwm_used=0"
|
||||
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=1"
|
||||
"olinuxino_lcd_para|backlight_pin=port:PD23<0><default><default><default>"
|
||||
"olinuxino_lcd_para|contrast_pin=port:PD24<0><default><default><default>"
|
||||
)
|
||||
;;
|
||||
|
||||
7)
|
||||
lcd_parameters=(
|
||||
"clock|pll3=297"
|
||||
|
||||
"disp_init|disp_mode=0"
|
||||
"disp_init|screen0_output_type=1"
|
||||
"disp_init|screen1_output_type=0"
|
||||
"disp_init|fb0_scaler_mode_enable=1"
|
||||
|
||||
"lcd0_para|lcd_used=1"
|
||||
"lcd0_para|lcd_x=1920"
|
||||
"lcd0_para|lcd_y=1080"
|
||||
"lcd0_para|lcd_dclk_freq=152"
|
||||
"lcd0_para|lcd_pwm_not_used=1"
|
||||
"lcd0_para|lcd_if=3"
|
||||
"lcd0_para|lcd_hbp=100"
|
||||
"lcd0_para|lcd_ht=2226"
|
||||
"lcd0_para|lcd_vbp=23"
|
||||
"lcd0_para|lcd_vt=2284"
|
||||
"lcd0_para|lcd_hv_vspw=0"
|
||||
"lcd0_para|lcd_hv_hspw=0"
|
||||
"lcd0_para|lcd_hv_if=1"
|
||||
"lcd0_para|lcd_lvds_ch=1"
|
||||
"lcd0_para|lcd_lvds_mode=0"
|
||||
"lcd0_para|lcd_lvds_bitwidth=1"
|
||||
"lcd0_para|lcd_frm=1"
|
||||
"lcd0_para|lcd_io_cfg0=268435456"
|
||||
"lcd0_para|lcd_bl_en_used=1"
|
||||
"lcd0_para|lcd_pwm_used=0"
|
||||
|
||||
"lcd0_para|lcdd0=port:PD00<3><0><default><default>"
|
||||
"lcd0_para|lcdd1=port:PD01<3><0><default><default>"
|
||||
"lcd0_para|lcdd2=port:PD02<3><0><default><default>"
|
||||
"lcd0_para|lcdd3=port:PD03<3><0><default><default>"
|
||||
"lcd0_para|lcdd4=port:PD04<3><0><default><default>"
|
||||
"lcd0_para|lcdd5=port:PD05<3><0><default><default>"
|
||||
"lcd0_para|lcdd6=port:PD06<3><0><default><default>"
|
||||
"lcd0_para|lcdd7=port:PD07<3><0><default><default>"
|
||||
"lcd0_para|lcdd8=port:PD08<3><0><default><default>"
|
||||
"lcd0_para|lcdd9=port:PD09<3><0><default><default>"
|
||||
"lcd0_para|lcdd10=port:PD10<3><0><default><default>"
|
||||
"lcd0_para|lcdd11=port:PD11<3><0><default><default>"
|
||||
"lcd0_para|lcdd12=port:PD12<3><0><default><default>"
|
||||
"lcd0_para|lcdd13=port:PD13<3><0><default><default>"
|
||||
"lcd0_para|lcdd14=port:PD14<3><0><default><default>"
|
||||
"lcd0_para|lcdd15=port:PD15<3><0><default><default>"
|
||||
"lcd0_para|lcdd16=port:PD16<3><0><default><default>"
|
||||
"lcd0_para|lcdd17=port:PD17<3><0><default><default>"
|
||||
"lcd0_para|lcdd18=port:PD18<3><0><default><default>"
|
||||
"lcd0_para|lcdd19=port:PD19<3><0><default><default>"
|
||||
"lcd0_para|lcdd20=port:PD20<3><0><default><default>"
|
||||
"lcd0_para|lcdd21=port:PD21<3><0><default><default>"
|
||||
"lcd0_para|lcdd22="
|
||||
"lcd0_para|lcdd23="
|
||||
"lcd0_para|lcdclk="
|
||||
"lcd0_para|lcdde="
|
||||
"lcd0_para|lcdhsync="
|
||||
"lcd0_para|lcdvsync="
|
||||
|
||||
"pwm0_para|pwm_used=0"
|
||||
|
||||
"olinuxino_lcd_para|olinuxino_lcd_used=1"
|
||||
"olinuxino_lcd_para|backlight_pin=port:PD23<0><default><default><default>"
|
||||
"olinuxino_lcd_para|contrast_pin=port:PD24<0><default><default><default>"
|
||||
)
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Enable touchscreen
|
||||
if [[ $fex_desc != "LCD-OLinuXino-15.6"* ]]; then
|
||||
dialog --title "Configure touchscreen" --backtitle "$backtitle" --yesno "\nEnable touchscreen?\nThis will disable core temperature monitor!" 7 74
|
||||
if [[ $? -eq 0 ]]; then
|
||||
|
||||
if [[ $fex_desc == "LCD-OLinuXino-5" ]]; then
|
||||
lcd_parameters+=("ctp_para|ctp_used=1")
|
||||
lcd_parameters+=("rtp_para|rtp_used=0")
|
||||
disable_ts
|
||||
else
|
||||
lcd_parameters+=("ctp_para|ctp_used=0")
|
||||
lcd_parameters+=("rtp_para|rtp_used=1")
|
||||
enable_ts
|
||||
fi
|
||||
|
||||
else
|
||||
lcd_parameters+=("ctp_para|ctp_used=0")
|
||||
lcd_parameters+=("rtp_para|rtp_used=0")
|
||||
disable_ts
|
||||
fi
|
||||
|
||||
# Disable olinuxino-lcd module and service
|
||||
sed -i "/olinuxino-lcd/d" /etc/modules
|
||||
systemctl disable olinuxino-lcd.service 2>/dev/null
|
||||
else
|
||||
# LCD-OLinuXino-15.6 doesn't support TS
|
||||
lcd_parameters+=("ctp_para|ctp_used=0")
|
||||
lcd_parameters+=("rtp_para|rtp_used=0")
|
||||
disable_ts
|
||||
|
||||
# Enable olinuxino-lcd module and service
|
||||
! grep -q "olinuxino-lcd" /etc/modules && echo "olinuxino-lcd" >> /etc/modules
|
||||
if [[ $fex_desc == "LCD-OLinuXino-15.6FHD" ]]; then
|
||||
systemctl enable olinuxino-lcd.service 2>/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
# Execute parameter change
|
||||
change_parameters "${lcd_parameters[@]}"
|
||||
}
|
||||
|
||||
function main()
|
||||
{
|
||||
# This tool must run under root
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This tool must run as root. Exiting ..." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# This tool is working with default branch only
|
||||
if [[ $BRANCH != default ]]; then
|
||||
echo "This tool work with default branch only. Exiting ..." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set options
|
||||
options=(1 "Enable HDMI display output" 2 "Enable VGA display output" 3 "Enable LCD display output" 4 "Disable all display outputs")
|
||||
|
||||
cmd=(dialog --title "Configure display output" --backtitle "$backtitle" --menu "\nChoose an option: \n" 14 60 7)
|
||||
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
|
||||
[[ $? -ne 0 ]] && exit 1
|
||||
|
||||
for choice in $choices
|
||||
do
|
||||
case $choice in
|
||||
1)
|
||||
set_hdmi_resolution
|
||||
;;
|
||||
|
||||
2)
|
||||
set_vga_resolution
|
||||
;;
|
||||
|
||||
3)
|
||||
set_lcd_resolution
|
||||
;;
|
||||
|
||||
4)
|
||||
disable_output
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
display_reboot_dialog
|
||||
}
|
||||
main "$@"
|
||||
BIN
packages/bsp/olinuxino/usr/sbin/devmem
Executable file
BIN
packages/bsp/olinuxino/usr/sbin/devmem
Executable file
Binary file not shown.
421
patch/kernel/sun7i-default/olinuxino-lcd.patch
Normal file
421
patch/kernel/sun7i-default/olinuxino-lcd.patch
Normal file
@@ -0,0 +1,421 @@
|
||||
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
|
||||
index b444606..4e86e04 100644
|
||||
--- a/drivers/misc/Kconfig
|
||||
+++ b/drivers/misc/Kconfig
|
||||
@@ -88,6 +88,13 @@ config SUNXI_PWM
|
||||
a sysfs interface at /sys/class/pwm-sunxi as well as the
|
||||
kernel pwm interface.
|
||||
|
||||
+config OLINUXINO_LCD
|
||||
+ tristate "PWM driver for LCD-OLinuXino-15.6FHD
|
||||
+ depends on ARCH_SUN7I
|
||||
+ help
|
||||
+ This driver implements software pwm support for
|
||||
+ OLinuXino-15.6FHD. The lcd needs two pwms: backlight and
|
||||
+ contrast.
|
||||
|
||||
config AB8500_PWM
|
||||
bool "AB8500 PWM support"
|
||||
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
|
||||
index 57a707c..bffa6c2 100644
|
||||
--- a/drivers/misc/Makefile
|
||||
+++ b/drivers/misc/Makefile
|
||||
@@ -55,3 +55,4 @@ obj-$(CONFIG_SENSORS_AK8975) += akm8975.o
|
||||
obj-$(CONFIG_SUN4I_VIBRATOR) += sun4i-vibrator.o
|
||||
obj-$(CONFIG_SUNXI_DBGREG) += sunxi-dbgreg.o
|
||||
obj-$(CONFIG_SUNXI_PWM) += pwm-sunxi.o
|
||||
+obj-$(CONFIG_OLINUXINO_LCD) += olinuxino-lcd.o
|
||||
diff --git a/drivers/misc/olinuxino-lcd.c b/drivers/misc/olinuxino-lcd.c
|
||||
new file mode 100644
|
||||
index 0000000..c854a52
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/olinuxino-lcd.c
|
||||
@@ -0,0 +1,388 @@
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/timer.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/device.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/hrtimer.h>
|
||||
+#include <linux/ktime.h>
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/sysfs.h>
|
||||
+#include <linux/fs.h>
|
||||
+
|
||||
+#include <plat/sys_config.h>
|
||||
+
|
||||
+#include <asm/div64.h>
|
||||
+
|
||||
+
|
||||
+struct olinuxino_lcd_platform_data {
|
||||
+ unsigned gpio_handler;
|
||||
+
|
||||
+ script_gpio_set_t info;
|
||||
+
|
||||
+ char pin_name[16];
|
||||
+ char device_name[64];
|
||||
+
|
||||
+ unsigned duty;
|
||||
+ unsigned last_state;
|
||||
+
|
||||
+ ktime_t period;
|
||||
+ ktime_t pulse_on;
|
||||
+ ktime_t pulse_off;
|
||||
+ struct hrtimer hr_timer;
|
||||
+
|
||||
+ struct device *dev;
|
||||
+};
|
||||
+
|
||||
+static DEFINE_MUTEX(sysfs_lock);
|
||||
+
|
||||
+static struct olinuxino_lcd_platform_data *p_backlight;
|
||||
+static struct olinuxino_lcd_platform_data *p_contrast;
|
||||
+
|
||||
+static int sunxi_gpio_is_valid(struct olinuxino_lcd_platform_data *gpio)
|
||||
+{
|
||||
+ if(gpio->gpio_handler)
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int sunxi_direction_input(struct olinuxino_lcd_platform_data *gpio)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ if(sunxi_gpio_is_valid(gpio)){
|
||||
+ ret = gpio_set_one_pin_io_status(gpio->gpio_handler, 0, gpio->pin_name);
|
||||
+ }else{
|
||||
+ printk(KERN_ERR "%s: requested gpio has no valid handler\n", __func__);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void sunxi_gpio_set_value(struct olinuxino_lcd_platform_data *gpio, int value)
|
||||
+{
|
||||
+ if(sunxi_gpio_is_valid(gpio)){
|
||||
+ gpio_write_one_pin_value(gpio->gpio_handler, value, gpio->pin_name);
|
||||
+ }else{
|
||||
+ printk(KERN_ERR "%s: requested gpio has no valid handler\n", __func__);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int sunxi_direction_output(struct olinuxino_lcd_platform_data *gpio, int value)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ if(!sunxi_gpio_is_valid(gpio)){
|
||||
+ printk(KERN_ERR "%s: requested gpio has no valid handler\n", __func__);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ ret = gpio_set_one_pin_io_status(gpio->gpio_handler, 1, gpio->pin_name);
|
||||
+
|
||||
+ if (!ret)
|
||||
+ ret = gpio_write_one_pin_value(gpio->gpio_handler,
|
||||
+ value, gpio->pin_name);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static ssize_t duty_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
+{
|
||||
+ struct olinuxino_lcd_platform_data *device;
|
||||
+ ssize_t ret;
|
||||
+
|
||||
+ device = dev_get_drvdata(dev);
|
||||
+
|
||||
+ mutex_lock(&sysfs_lock);
|
||||
+
|
||||
+ ret = sprintf(buf, "%d\n", device->duty);
|
||||
+
|
||||
+ mutex_unlock(&sysfs_lock);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static ssize_t duty_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
|
||||
+{
|
||||
+ ssize_t ret;
|
||||
+ long duty;
|
||||
+ u64 v;
|
||||
+ struct olinuxino_lcd_platform_data *device;
|
||||
+
|
||||
+ device = dev_get_drvdata(dev);
|
||||
+
|
||||
+ mutex_lock(&sysfs_lock);
|
||||
+
|
||||
+ ret = strict_strtol(buf, 0, &duty);
|
||||
+ if(ret)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if(duty < 0 || duty > 100)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ device->duty = duty;
|
||||
+ v = device->period.tv64;
|
||||
+ do_div(v, 100);
|
||||
+
|
||||
+ device->pulse_on.tv64 = v*duty;
|
||||
+ device->pulse_off.tv64 = v*(100-duty);
|
||||
+
|
||||
+ mutex_unlock(&sysfs_lock);
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR(duty, 0666, duty_show, duty_store);
|
||||
+
|
||||
+enum hrtimer_restart olinuxino_lcd_hrtimer_callback(struct hrtimer *timer)
|
||||
+{
|
||||
+ unsigned char current_state;
|
||||
+ struct olinuxino_lcd_platform_data *dev;
|
||||
+ ktime_t now = ktime_get();
|
||||
+
|
||||
+ dev = container_of(timer, struct olinuxino_lcd_platform_data, hr_timer);
|
||||
+
|
||||
+ if(!dev->duty){
|
||||
+ sunxi_gpio_set_value(dev, 0);
|
||||
+ hrtimer_forward(timer, now, dev->pulse_off);
|
||||
+ }else if(dev->duty == 100){
|
||||
+ sunxi_gpio_set_value(dev, 1);
|
||||
+ hrtimer_forward(timer, now, dev->pulse_on);
|
||||
+ }else{
|
||||
+ current_state = dev->last_state;
|
||||
+ if(current_state){
|
||||
+ sunxi_gpio_set_value(dev, 0);
|
||||
+ dev->last_state = 0;
|
||||
+ hrtimer_forward(timer, now, dev->pulse_off);
|
||||
+ }else{
|
||||
+ sunxi_gpio_set_value(dev, 1);
|
||||
+ dev->last_state = 1;
|
||||
+ hrtimer_forward(timer, now, dev->pulse_on);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return HRTIMER_RESTART;
|
||||
+}
|
||||
+
|
||||
+static struct attribute *olinuxino_lcd_sysfs_entries[] = {
|
||||
+ &dev_attr_duty.attr,
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+static struct attribute_group olinuxino_lcd_attribute_group = {
|
||||
+ .attrs = (struct attribute **)olinuxino_lcd_sysfs_entries,
|
||||
+};
|
||||
+
|
||||
+static struct class olinuxino_lcd_class = {
|
||||
+ .name = "olinuxino_lcd",
|
||||
+ .owner = THIS_MODULE,
|
||||
+};
|
||||
+
|
||||
+static ssize_t __init olinuxino_lcd_init(void)
|
||||
+{
|
||||
+ int err;
|
||||
+ int olinuxino_lcd_used = 0;
|
||||
+
|
||||
+ printk(KERN_INFO "%s()\n", __func__);
|
||||
+
|
||||
+ /* Check if olinuxino_lcd is used */
|
||||
+ err = script_parser_fetch("olinuxino_lcd_para", "olinuxino_lcd_used", &olinuxino_lcd_used, sizeof(olinuxino_lcd_used)/sizeof(int));
|
||||
+ if (!olinuxino_lcd_used || err) {
|
||||
+ printk(KERN_INFO "%s: olinuxino_lcd is not used in config\n", __func__);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ p_backlight = kzalloc(sizeof(struct olinuxino_lcd_platform_data), GFP_KERNEL);
|
||||
+ p_contrast = kzalloc(sizeof(struct olinuxino_lcd_platform_data), GFP_KERNEL);
|
||||
+
|
||||
+ if (!p_backlight || !p_contrast) {
|
||||
+ printk(KERN_INFO "%s: failed to kzalloc memory\n", __func__);
|
||||
+ err = -ENOMEM;
|
||||
+ goto exit0;
|
||||
+ }
|
||||
+
|
||||
+ sprintf(p_backlight->pin_name, "backlight_pin");
|
||||
+ sprintf(p_contrast->pin_name, "contrast_pin");
|
||||
+
|
||||
+ sprintf(p_backlight->device_name, "backlight");
|
||||
+ sprintf(p_contrast->device_name, "contrast");
|
||||
+
|
||||
+ /* Read GPIO data */
|
||||
+ err = script_parser_fetch("olinuxino_lcd_para", p_backlight->pin_name,
|
||||
+ (int *)&p_backlight->info,
|
||||
+ sizeof(script_gpio_set_t));
|
||||
+
|
||||
+ if (err) {
|
||||
+ printk(KERN_INFO "%s failed to find %s\n", __func__,
|
||||
+ p_backlight->pin_name);
|
||||
+ goto exit0;
|
||||
+ }
|
||||
+ err = script_parser_fetch("olinuxino_lcd_para", p_contrast->pin_name,
|
||||
+ (int *)&p_contrast->info,
|
||||
+ sizeof(script_gpio_set_t));
|
||||
+ if (err) {
|
||||
+ printk(KERN_INFO "%s failed to find %s\n", __func__,
|
||||
+ p_contrast->pin_name);
|
||||
+ goto exit0;
|
||||
+ }
|
||||
+
|
||||
+ /* Request gpio */
|
||||
+ p_backlight->gpio_handler = gpio_request_ex("olinuxino_lcd_para",
|
||||
+ p_backlight->pin_name);
|
||||
+ if (!p_backlight->gpio_handler) {
|
||||
+ printk(KERN_INFO "%s: cannot request %s, already used ?\n",
|
||||
+ __func__, p_backlight->pin_name);
|
||||
+ goto exit0;
|
||||
+ }
|
||||
+ p_contrast->gpio_handler = gpio_request_ex("olinuxino_lcd_para",
|
||||
+ p_contrast->pin_name);
|
||||
+ if (!p_contrast->gpio_handler) {
|
||||
+ printk(KERN_INFO "%s: cannot request %s, already used ?\n",
|
||||
+ __func__, p_contrast->pin_name);
|
||||
+ goto exit0;
|
||||
+ }
|
||||
+
|
||||
+ printk(KERN_INFO "%s: backlight registered @ port:%d, num:%d\n",
|
||||
+ __func__, p_backlight->info.port, p_backlight->info.port_num);
|
||||
+ printk(KERN_INFO "%s: contrast registered @ port:%d, num:%d\n",
|
||||
+ __func__, p_contrast->info.port, p_contrast->info.port_num);
|
||||
+
|
||||
+ err = class_register(&olinuxino_lcd_class);
|
||||
+ if(err < 0){
|
||||
+ printk(KERN_INFO "%s: unable to register class\n", __func__);
|
||||
+ goto exit0;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ /* Make sysfs devices */
|
||||
+ p_backlight->dev = device_create(&olinuxino_lcd_class, NULL,
|
||||
+ MKDEV(0, 0), p_backlight,
|
||||
+ p_backlight->device_name);
|
||||
+ if(IS_ERR(p_backlight->dev)) {
|
||||
+ printk(KERN_INFO "%s: device_create failed\n", __func__);
|
||||
+ err = PTR_ERR(p_backlight->dev);
|
||||
+ goto exit1;
|
||||
+ }
|
||||
+ p_contrast->dev = device_create(&olinuxino_lcd_class, NULL,
|
||||
+ MKDEV(0, 0), p_contrast,
|
||||
+ p_contrast->device_name);
|
||||
+ if(IS_ERR(p_backlight->dev)) {
|
||||
+ printk(KERN_INFO "%s: device_create failed\n", __func__);
|
||||
+ err = PTR_ERR(p_contrast->dev);
|
||||
+ goto exit1;
|
||||
+ }
|
||||
+
|
||||
+ err = sysfs_create_group(&p_backlight->dev->kobj,
|
||||
+ &olinuxino_lcd_attribute_group);
|
||||
+ if(err < 0){
|
||||
+ printk(KERN_INFO "%s: failed to create sysfs device attributes\n", __func__);
|
||||
+ goto exit2;
|
||||
+ }
|
||||
+ err = sysfs_create_group(&p_contrast->dev->kobj,
|
||||
+ &olinuxino_lcd_attribute_group);
|
||||
+ if(err < 0){
|
||||
+ printk(KERN_INFO "%s: failed to create sysfs device attributes\n", __func__);
|
||||
+ goto exit2;
|
||||
+ }
|
||||
+
|
||||
+ p_backlight->duty = 100;
|
||||
+ p_contrast->duty = 100;
|
||||
+
|
||||
+ /* Set period to 1kHz, 50% duty */
|
||||
+ p_backlight->period = ktime_set(0, 1000000);
|
||||
+ p_contrast->period = ktime_set(0, 1000000);
|
||||
+
|
||||
+ p_backlight->pulse_on = ktime_set(0, 1000000);
|
||||
+ p_contrast->pulse_on = ktime_set(0, 1000000);
|
||||
+
|
||||
+ p_backlight->pulse_off = ktime_set(0, 0);
|
||||
+ p_contrast->pulse_off = ktime_set(0, 0);
|
||||
+
|
||||
+ /* Init gpio as output */
|
||||
+ sunxi_direction_output(p_backlight, 0);
|
||||
+ p_backlight->last_state = 0;
|
||||
+
|
||||
+ sunxi_direction_output(p_contrast, 0);
|
||||
+ p_contrast->last_state = 0;
|
||||
+
|
||||
+ hrtimer_init(&p_backlight->hr_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
|
||||
+ hrtimer_init(&p_contrast->hr_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
|
||||
+
|
||||
+ p_backlight->hr_timer.function = &olinuxino_lcd_hrtimer_callback;
|
||||
+ p_contrast->hr_timer.function = &olinuxino_lcd_hrtimer_callback;
|
||||
+
|
||||
+ hrtimer_start(&p_backlight->hr_timer, p_backlight->pulse_off, HRTIMER_MODE_REL);
|
||||
+ hrtimer_start(&p_contrast->hr_timer, p_contrast->pulse_off, HRTIMER_MODE_REL);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+exit2:
|
||||
+ sysfs_remove_group(&p_backlight->dev->kobj, &olinuxino_lcd_attribute_group);
|
||||
+ sysfs_remove_group(&p_contrast->dev->kobj, &olinuxino_lcd_attribute_group);
|
||||
+
|
||||
+exit1:
|
||||
+ /* Unregister devices */
|
||||
+ if(p_backlight->dev)
|
||||
+ device_unregister(p_backlight->dev);
|
||||
+ if(p_contrast->dev)
|
||||
+ device_unregister(p_contrast->dev);
|
||||
+
|
||||
+ /* Unregister class */
|
||||
+ class_unregister(&olinuxino_lcd_class);
|
||||
+
|
||||
+exit0:
|
||||
+ if (err != -ENOMEM) {
|
||||
+
|
||||
+ if(p_backlight->gpio_handler){
|
||||
+ gpio_release(p_backlight->gpio_handler, 1);
|
||||
+ }
|
||||
+
|
||||
+ if(p_contrast->gpio_handler){
|
||||
+ gpio_release(p_contrast->gpio_handler, 1);
|
||||
+ }
|
||||
+ }
|
||||
+ kfree(p_contrast);
|
||||
+ kfree(p_backlight);
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static void __exit olinuxino_lcd_exit(void)
|
||||
+{
|
||||
+
|
||||
+ printk(KERN_INFO "%s()\n", __func__);
|
||||
+
|
||||
+ hrtimer_cancel(&p_backlight->hr_timer);
|
||||
+ hrtimer_cancel(&p_contrast->hr_timer);
|
||||
+
|
||||
+ /* Make gpios as inputs */
|
||||
+ sunxi_direction_input(p_backlight);
|
||||
+ sunxi_direction_input(p_contrast);
|
||||
+
|
||||
+ /* Release gpios */
|
||||
+ if(p_backlight->gpio_handler){
|
||||
+ gpio_release(p_backlight->gpio_handler, 1);
|
||||
+ printk(KERN_INFO "%s: gpio %s released\n", __func__, p_backlight->info.gpio_name);
|
||||
+ }
|
||||
+ if(p_contrast->gpio_handler){
|
||||
+ gpio_release(p_contrast->gpio_handler, 1);
|
||||
+ printk(KERN_INFO "%s: gpio %s released\n", __func__, p_contrast->info.gpio_name);
|
||||
+ }
|
||||
+
|
||||
+ sysfs_remove_group(&p_backlight->dev->kobj, &olinuxino_lcd_attribute_group);
|
||||
+ sysfs_remove_group(&p_contrast->dev->kobj, &olinuxino_lcd_attribute_group);
|
||||
+
|
||||
+ if(p_backlight->dev)
|
||||
+ device_unregister(p_backlight->dev);
|
||||
+ if(p_contrast->dev)
|
||||
+ device_unregister(p_contrast->dev);
|
||||
+
|
||||
+ class_unregister(&olinuxino_lcd_class);
|
||||
+}
|
||||
+
|
||||
+module_init(olinuxino_lcd_init);
|
||||
+module_exit(olinuxino_lcd_exit);
|
||||
+
|
||||
+MODULE_AUTHOR("Stefan Mavrodiev <stefan@olimex.com");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
Reference in New Issue
Block a user