#!/bin/sh # SPDX-License-Identifier: (GPL-2.0+ OR MIT) # Copyright (c) 2021 Rockchip Electronics Co., Ltd. PMUIO2=0 VCCIO1=0 VCCIO3=0 VCCIO4=0 VCCIO5=0 VCCIO6=0 VCCIO7=0 DTS_PMUIO2=0 DTS_VCCIO1=0 DTS_VCCIO3=0 DTS_VCCIO4=0 DTS_VCCIO5=0 DTS_VCCIO6=0 DTS_VCCIO7=0 DTS_NAME=$1.dts.tmp CheckBckfileRet=0 checklistRst=0 GetVoltageFromDtsVal=0 ShowChecklist() { PMUIO2=$(whiptail --title "IO Domain Checklist" --menu --nocancel\ "Get the corresponding value from the hardware schematic diagram" 15 60 3 \ "1800000" "PMUIO2 Supply Power Voltage(uV)" \ "3000000" "PMUIO2 Supply Power Voltage(uV)" \ "3300000" "PMUIO2 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "You chose Cancel." checklistRst=1 fi VCCIO1=$(whiptail --title "IO Domain Checklist" --menu --nocancel\ "Get the corresponding value from the hardware schematic diagram" 15 60 3 \ "1800000" "VCCIO1 Supply Power Voltage(uV)" \ "3000000" "VCCIO1 Supply Power Voltage(uV)" \ "3300000" "VCCIO1 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "You chose Cancel." checklistRst=1 fi VCCIO3=$(whiptail --title "IO Domain Checklist" --menu --nocancel\ "Get the corresponding value from the hardware schematic diagram" 15 60 3 \ "1800000" "VCCIO3 Supply Power Voltage(uV)" \ "3000000" "VCCIO3 Supply Power Voltage(uV)" \ "3300000" "VCCIO3 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "You chose Cancel." checklistRst=1 fi VCCIO4=$(whiptail --title "IO Domain Checklist" --menu --nocancel\ "Get the corresponding value from the hardware schematic diagram" 15 60 3 \ "1800000" "VCCIO4 Supply Power Voltage(uV)" \ "3000000" "VCCIO4 Supply Power Voltage(uV)" \ "3300000" "VCCIO4 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "You chose Cancel." checklistRst=1 fi VCCIO5=$(whiptail --title "IO Domain Checklist" --menu --nocancel\ "Get the corresponding value from the hardware schematic diagram" 15 60 3 \ "1800000" "VCCIO5 Supply Power Voltage(uV)" \ "3000000" "VCCIO5 Supply Power Voltage(uV)" \ "3300000" "VCCIO5 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "You chose Cancel." checklistRst=1 fi VCCIO6=$(whiptail --title "IO Domain Checklist" --menu --nocancel\ "Get the corresponding value from the hardware schematic diagram" 15 60 3 \ "1800000" "VCCIO6 Supply Power Voltage(uV)" \ "3000000" "VCCIO6 Supply Power Voltage(uV)" \ "3300000" "VCCIO6 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "You chose Cancel." checklistRst=1 fi VCCIO7=$(whiptail --title "IO Domain Checklist" --menu --nocancel\ "Get the corresponding value from the hardware schematic diagram" 15 60 3 \ "1800000" "VCCIO7 Supply Power Voltage(uV)" \ "3000000" "VCCIO7 Supply Power Voltage(uV)" \ "3300000" "VCCIO7 Supply Power Voltage(uV)" 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "You chose Cancel." checklistRst=1 fi } DtsIoDomainVoltageVal=0 DtsIoDomainVoltage() { DtsIoDomainVoltageVal=0 flags=0 if [ -f $DTS_NAME ];then echo "found $DTS_NAME" fi supply=$(cat $DTS_NAME \ | grep $1 \ | cut -d "&" -f 2 \ | cut -d ">" -f 1 \ | tail -n1) ldo_str=$(cat $DTS_NAME \ | awk 'BEGIN {RS="\n\n+";ORS="\n\n"}/regulator-name/{print $0}' \ | awk BEGIN{RS=EOF}'{gsub(/\n/," ");print $0}' \ | grep $supply \ | awk '{print $2}' \ | awk -F 'SWITCH_REG' '{print $2}') if [ "$ldo_str" != "" ];then DtsIoDomainVoltageVal=3300000 else DtsIoDomainVoltageVal=$(cat $DTS_NAME \ | awk 'BEGIN {RS="\n\n+";ORS="\n\n"}/regulator-name/{print $0}' \ | awk BEGIN{RS=EOF}'{gsub(/\n/," ");print $0}' \ |grep $supply \ | awk -F 'regulator-max-microvolt' '{print $2}' \ | cut -d "<" -f 2 \ | cut -d ">" -f 1) fi } GetIoDomainVoltageFromDts() { DtsIoDomainVoltage "pmuio2-supply" DTS_PMUIO2=$DtsIoDomainVoltageVal DtsIoDomainVoltage "vccio1-supply" DTS_VCCIO1=$DtsIoDomainVoltageVal DtsIoDomainVoltage "vccio3-supply" DTS_VCCIO3=$DtsIoDomainVoltageVal DtsIoDomainVoltage "vccio4-supply" DTS_VCCIO4=$DtsIoDomainVoltageVal DtsIoDomainVoltage "vccio5-supply" DTS_VCCIO5=$DtsIoDomainVoltageVal DtsIoDomainVoltage "vccio6-supply" DTS_VCCIO6=$DtsIoDomainVoltageVal DtsIoDomainVoltage "vccio7-supply" DTS_VCCIO7=$DtsIoDomainVoltageVal } CheckVoltageWithBackupfile() { CheckBckfileRet=2 val=$(cat $DTS_NAME.domain \ | grep PMUIO2 \ | cut -d ":" -f 2) if [ "$val" != "$DTS_PMUIO2" ];then CheckBckfileRet=1 echo "PMUIO2 Supply Power Voltage has changed!!! please reconfirm!!!" fi val=$(cat $DTS_NAME.domain \ | grep VCCIO1 \ | cut -d ":" -f 2) if [ "$val" != "$DTS_VCCIO1" ];then CheckBckfileRet=1 echo "VCCIO1 Supply Power Voltage has changed!!! please reconfirm!!!" fi val=$(cat $DTS_NAME.domain \ | grep VCCIO3 \ | cut -d ":" -f 2) if [ "$val" != "$DTS_VCCIO3" ];then CheckBckfileRet=1 echo "VCCIO3 Supply Power Voltage has changed!!! please reconfirm!!!" fi val=$(cat $DTS_NAME.domain | grep VCCIO4 | cut -d ":" -f 2) if [ "$val" != "$DTS_VCCIO4" ];then ret=1 echo "VCCIO4 Supply Power Voltage has changed!!! please reconfirm!!!" fi val=$(cat $DTS_NAME.domain \ | grep VCCIO5 \ | cut -d ":" -f 2) if [ "$val" != "$DTS_VCCIO5" ];then CheckBckfileRet=1 echo "VCCIO5 Supply Power Voltage has changed!!! please reconfirm!!!" fi val=$(cat $DTS_NAME.domain \ | grep VCCIO6 \ | cut -d ":" -f 2) if [ "$val" != "$DTS_VCCIO6" ];then CheckBckfileRet=1 echo "VCCIO6 Supply Power Voltage has changed!!! please reconfirm!!!" fi val=$(cat $DTS_NAME.domain \ | grep VCCIO7 \ | cut -d ":" -f 2) if [ "$val" != "$DTS_VCCIO7" ];then CheckBckfileRet=1 echo "VCCIO7 Supply Power Voltage has changed!!! please reconfirm!!!" fi } CheckVoltageWithEnter() { checklistRst=0 if [ $PMUIO2 -ne $DTS_PMUIO2 ];then checklistRst=1 echo "PMUIO2 Supply Power Voltage has changed!!! please reconfirm!!!" fi if [ $VCCIO1 -ne $DTS_VCCIO1 ];then checklistRst=1 echo "VCCIO1 Supply Power Voltage has changed!!! please reconfirm!!!" fi if [ $VCCIO3 -ne $DTS_VCCIO3 ];then checklistRst=1 echo "VCCIO3 Supply Power Voltage has changed!!! please reconfirm!!!" fi if [ $VCCIO4 -ne $DTS_VCCIO4 ];then checklistRst=1 echo "VCCIO4 Supply Power Voltage has changed!!! please reconfirm!!!" fi if [ $VCCIO5 -ne $DTS_VCCIO5 ];then checklistRst=1 echo "VCCIO5 Supply Power Voltage has changed!!! please reconfirm!!!" fi if [ $VCCIO6 -ne $DTS_VCCIO6 ];then checklistRst=1 echo "VCCIO6 Supply Power Voltage has changed!!! please reconfirm!!!" fi if [ $VCCIO7 -ne $DTS_VCCIO7 ];then checklistRst=1 echo "VCCIO7 Supply Power Voltage has changed!!! please reconfirm!!!" fi } IsRK356x=$(cat $DTS_NAME | grep sdhci@fe310000) if [ "$IsRK356x" = "" ];then echo "is not rk356x" exit 0 fi GetIoDomainVoltageFromDts if [ -f $DTS_NAME.domain ];then CheckVoltageWithBackupfile fi if [ "$CheckBckfileRet" != "2" ];then ShowChecklist CheckVoltageWithEnter if [ $checklistRst -eq 0 ]; then if [ -f $DTS_NAME.domain ];then rm -rf $DTS_NAME.domain fi echo "PMUIO2 Supply Power Voltage1:$PMUIO2" >> $DTS_NAME.domain echo "VCCIO1 Supply Power Voltage1:$VCCIO1" >> $DTS_NAME.domain echo "VCCIO3 Supply Power Voltage1:$VCCIO3" >> $DTS_NAME.domain echo "VCCIO4 Supply Power Voltage1:$VCCIO4" >> $DTS_NAME.domain echo "VCCIO5 Supply Power Voltage1:$VCCIO5" >> $DTS_NAME.domain echo "VCCIO6 Supply Power Voltage1:$VCCIO6" >> $DTS_NAME.domain echo "VCCIO7 Supply Power Voltage1:$VCCIO7" >> $DTS_NAME.domain echo 0 else echo "io-domian default as: &pmu_io_domains { status = "okay"; pmuio1-supply = <&vcc3v3_pmu>; pmuio2-supply = <&vcc3v3_pmu>; vccio1-supply = <&vccio_acodec>; vccio3-supply = <&vccio_sd>; vccio4-supply = <&vcc_3v3>; vccio5-supply = <&vcc_3v3>; vccio6-supply = <&vcc_3v3>; vccio7-supply = <&vcc_3v3>; }; TODO: Need to be modified according to the actual hardware for example rk3568-evb: &pmu_io_domains { status = "okay"; pmuio1-supply = <&vcc3v3_pmu>; pmuio2-supply = <&vcc3v3_pmu>; vccio1-supply = <&vccio_acodec>; vccio3-supply = <&vccio_sd>; vccio4-supply = <&vcc_1v8>; vccio5-supply = <&vcc_3v3>; vccio6-supply = <&vcc_1v8>; vccio7-supply = <&vcc_3v3>; }; io-domain docs: Android11 SDK: RKDocs/android/Rockchip_Developer_Guide_Android11_SDK_V1.1.2_CN.pdf or newer. RK356X Linux SDK: docs/RK356X/Rockchip_RK356X_Introduction_IO_Power_Domains_Configuration.pdf docs/Common/IO-DOMAIN/Rockchip_Developer_Guide_Linux_IO_DOMAIN_CN.pdf " exit 1 fi fi