# Copyright (c) 2011, The Linux Foundation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # * Neither the name of The Linux Foundation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # list_clks.sh # Echoes all clock values inside debugfs/clk # Author: Jack Cheung # This script is intended to also work with adb shell verbosity=0 root=/debug choose_clk="all" # Parse arguments while getopts 'v:d:' OPTION do case $OPTION in v) verbosity=$OPTARG ;; d) root=$OPTARG ;; ?) echo "Usage: list_all_clks.sh [-v ] [-d ]" echo "Options:" echo " -v, Set verbosity level (default 0)" echo " 0 - Display Local, Enabled, Rate" echo " 1 - Display Measured rate" echo " 2 - Display Supported rate" echo " -d, Set path to debugfs (default /debug)" exit ;; esac done shift $(($OPTIND - 1)) echo "Verbosity: $verbosity" echo "Root Debug Dir: $root" echo "" case $verbosity in 0) echo -e " Local Enabled Rate" ;; 1) echo -e " Local Enabled Rate Measured Rate" ;; 2) echo -e " Local Enabled Rate Measured Rate" ;; esac # Print table for local, enabled, rate, and measured rate # Loop through every directory in root dir for clk_dir in $root/clk/* do # Reset values to null local_val= enable_val= rate_val= measure_val= # Leaves only basename clk_name=${clk_dir##*/} # Special case - Need to ignore the debug_suspend case $clk_name in debug_suspend) continue ;; esac # Read values and hide errors by outputting to /dev/null local_val=`cat $clk_dir/is_local 2>/dev/null` enable_val=`cat $clk_dir/enable 2>/dev/null` rate_val=`cat $clk_dir/rate 2>/dev/null` measure_val=`cat $clk_dir/measure 2>/dev/null` # Need to pad values with spaces so columns align correctly # Loop and remove last character untill it is correct length clk_name="$clk_name " while true do # Chops off last character clk_name=${clk_name%?} length=${#clk_name} case $length in 32) break ;; esac done # local_val must be 0 or 1 case $local_val in 0) local_val="N " ;; 1) local_val="Y " ;; esac # enable_val must be -1, 0, or 1 # Still accounting for when enable_val is accidentally seen # as MAX unsigned int instead of signed -1 case $enable_val in -1) enable_val="NA " ;; 4294967295) enable_val="NA " ;; 0) enable_val="OFF " ;; 1) enable_val="ON " ;; esac # Padding value with spaces, similar to clk_name rate_val="$rate_val " while true do rate_val=${rate_val%?} length=${#rate_val} case $length in 12) break ;; esac done case $verbosity in 0) echo -e "$clk_name$local_val$enable_val$rate_val" ;; 1) echo -e "$clk_name$local_val$enable_val$rate_val$measure_val" ;; 2) echo -e "$clk_name$local_val$enable_val$rate_val$measure_val" ;; esac done echo "" # Print supported rates separately. Too many to fit in table cleanly case $verbosity in 2) echo -n "Supported Rates" for clk_dir in $root/clk/* do myfile= myline= count=0 clk_name=${clk_dir##*/} myfile=`cat $clk_dir/list_rates 2>/dev/null` for myline in $myfile do # Print 8 values per line case $count in 0) echo "" echo "" echo "$clk_name" echo -n "$myline" ;; 7) echo -n ", $myline" ;; 8) echo "" echo -n "$myline" count=0 ;; *) echo -n ", $myline" ;; esac count=$(($count + 1)) done done ;; esac echo -e "\nDone"