18c2ecf20Sopenharmony_ci#!/bin/sh 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ciled_common_defs_path="include/dt-bindings/leds/common.h" 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_cinum_args=$# 78c2ecf20Sopenharmony_ciif [ $num_args -eq 1 ]; then 88c2ecf20Sopenharmony_ci linux_top=$(dirname `realpath $0` | awk -F/ \ 98c2ecf20Sopenharmony_ci '{ \ 108c2ecf20Sopenharmony_ci i=1; \ 118c2ecf20Sopenharmony_ci while (i <= NF - 2) { \ 128c2ecf20Sopenharmony_ci printf $i"/"; \ 138c2ecf20Sopenharmony_ci i++; \ 148c2ecf20Sopenharmony_ci }; \ 158c2ecf20Sopenharmony_ci }') 168c2ecf20Sopenharmony_ci led_defs_path=$linux_top/$led_common_defs_path 178c2ecf20Sopenharmony_cielif [ $num_args -eq 2 ]; then 188c2ecf20Sopenharmony_ci led_defs_path=`realpath $2` 198c2ecf20Sopenharmony_cielse 208c2ecf20Sopenharmony_ci echo "Usage: get_led_device_info.sh LED_CDEV_PATH [LED_COMMON_DEFS_PATH]" 218c2ecf20Sopenharmony_ci exit 1 228c2ecf20Sopenharmony_cifi 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ciif [ ! -f $led_defs_path ]; then 258c2ecf20Sopenharmony_ci echo "$led_defs_path doesn't exist" 268c2ecf20Sopenharmony_ci exit 1 278c2ecf20Sopenharmony_cifi 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ciled_cdev_path=`echo $1 | sed s'/\/$//'` 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cils "$led_cdev_path/brightness" > /dev/null 2>&1 328c2ecf20Sopenharmony_ciif [ $? -ne 0 ]; then 338c2ecf20Sopenharmony_ci echo "Device \"$led_cdev_path\" does not exist." 348c2ecf20Sopenharmony_ci exit 1 358c2ecf20Sopenharmony_cifi 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_cibus=`readlink $led_cdev_path/device/subsystem | sed s'/.*\///'` 388c2ecf20Sopenharmony_ciusb_subdev=`readlink $led_cdev_path | grep usb | sed s'/\(.*usb[0-9]*\/[0-9]*-[0-9]*\)\/.*/\1/'` 398c2ecf20Sopenharmony_cils "$led_cdev_path/device/of_node/compatible" > /dev/null 2>&1 408c2ecf20Sopenharmony_ciof_node_missing=$? 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ciif [ "$bus" = "input" ]; then 438c2ecf20Sopenharmony_ci input_node=`readlink $led_cdev_path/device | sed s'/.*\///'` 448c2ecf20Sopenharmony_ci if [ ! -z "$usb_subdev" ]; then 458c2ecf20Sopenharmony_ci bus="usb" 468c2ecf20Sopenharmony_ci fi 478c2ecf20Sopenharmony_cifi 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ciif [ "$bus" = "usb" ]; then 508c2ecf20Sopenharmony_ci usb_interface=`readlink $led_cdev_path | sed s'/.*\(usb[0-9]*\)/\1/' | cut -d\/ -f3` 518c2ecf20Sopenharmony_ci cd $led_cdev_path/../$usb_subdev 528c2ecf20Sopenharmony_ci driver=`readlink $usb_interface/driver | sed s'/.*\///'` 538c2ecf20Sopenharmony_ci if [ -d "$usb_interface/ieee80211" ]; then 548c2ecf20Sopenharmony_ci wifi_phy=`ls -l $usb_interface/ieee80211 | grep phy | awk '{print $9}'` 558c2ecf20Sopenharmony_ci fi 568c2ecf20Sopenharmony_ci idVendor=`cat idVendor` 578c2ecf20Sopenharmony_ci idProduct=`cat idProduct` 588c2ecf20Sopenharmony_ci manufacturer=`cat manufacturer` 598c2ecf20Sopenharmony_ci product=`cat product` 608c2ecf20Sopenharmony_cielif [ "$bus" = "input" ]; then 618c2ecf20Sopenharmony_ci cd $led_cdev_path 628c2ecf20Sopenharmony_ci product=`cat device/name` 638c2ecf20Sopenharmony_ci driver=`cat device/device/driver/description` 648c2ecf20Sopenharmony_cielif [ $of_node_missing -eq 0 ]; then 658c2ecf20Sopenharmony_ci cd $led_cdev_path 668c2ecf20Sopenharmony_ci compatible=`cat device/of_node/compatible` 678c2ecf20Sopenharmony_ci if [ "$compatible" = "gpio-leds" ]; then 688c2ecf20Sopenharmony_ci driver="leds-gpio" 698c2ecf20Sopenharmony_ci elif [ "$compatible" = "pwm-leds" ]; then 708c2ecf20Sopenharmony_ci driver="leds-pwm" 718c2ecf20Sopenharmony_ci else 728c2ecf20Sopenharmony_ci manufacturer=`echo $compatible | awk -F, '{print $1}'` 738c2ecf20Sopenharmony_ci product=`echo $compatible | awk -F, '{print $2}'` 748c2ecf20Sopenharmony_ci fi 758c2ecf20Sopenharmony_cielse 768c2ecf20Sopenharmony_ci echo "Unknown device type." 778c2ecf20Sopenharmony_ci exit 1 788c2ecf20Sopenharmony_cifi 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ciprintf "\n#####################################\n" 818c2ecf20Sopenharmony_ciprintf "# LED class device hardware details #\n" 828c2ecf20Sopenharmony_ciprintf "#####################################\n\n" 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ciprintf "bus:\t\t\t$bus\n" 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ciif [ ! -z "$idVendor" ]; then 878c2ecf20Sopenharmony_ci printf "idVendor:\t\t$idVendor\n" 888c2ecf20Sopenharmony_cifi 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ciif [ ! -z "$idProduct" ]; then 918c2ecf20Sopenharmony_ci printf "idProduct:\t\t$idProduct\n" 928c2ecf20Sopenharmony_cifi 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ciif [ ! -z "$manufacturer" ]; then 958c2ecf20Sopenharmony_ci printf "manufacturer:\t\t$manufacturer\n" 968c2ecf20Sopenharmony_cifi 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ciif [ ! -z "$product" ]; then 998c2ecf20Sopenharmony_ci printf "product:\t\t$product\n" 1008c2ecf20Sopenharmony_cifi 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ciif [ ! -z "$driver" ]; then 1038c2ecf20Sopenharmony_ci printf "driver:\t\t\t$driver\n" 1048c2ecf20Sopenharmony_cifi 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ciif [ ! -z "$input_node" ]; then 1078c2ecf20Sopenharmony_ci printf "associated input node:\t$input_node\n" 1088c2ecf20Sopenharmony_cifi 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_ciprintf "\n####################################\n" 1118c2ecf20Sopenharmony_ciprintf "# LED class device name validation #\n" 1128c2ecf20Sopenharmony_ciprintf "####################################\n\n" 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_ciled_name=`echo $led_cdev_path | sed s'/.*\///'` 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_cinum_sections=`echo $led_name | awk -F: '{print NF}'` 1178c2ecf20Sopenharmony_ci 1188c2ecf20Sopenharmony_ciif [ $num_sections -eq 1 ]; then 1198c2ecf20Sopenharmony_ci printf "\":\" delimiter not detected.\t[ FAILED ]\n" 1208c2ecf20Sopenharmony_ci exit 1 1218c2ecf20Sopenharmony_cielif [ $num_sections -eq 2 ]; then 1228c2ecf20Sopenharmony_ci color=`echo $led_name | cut -d: -f1` 1238c2ecf20Sopenharmony_ci function=`echo $led_name | cut -d: -f2` 1248c2ecf20Sopenharmony_cielif [ $num_sections -eq 3 ]; then 1258c2ecf20Sopenharmony_ci devicename=`echo $led_name | cut -d: -f1` 1268c2ecf20Sopenharmony_ci color=`echo $led_name | cut -d: -f2` 1278c2ecf20Sopenharmony_ci function=`echo $led_name | cut -d: -f3` 1288c2ecf20Sopenharmony_cielse 1298c2ecf20Sopenharmony_ci printf "Detected %d sections in the LED class device name - should the script be updated?\n" $num_sections 1308c2ecf20Sopenharmony_ci exit 1 1318c2ecf20Sopenharmony_cifi 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ciS_DEV="devicename" 1348c2ecf20Sopenharmony_ciS_CLR="color " 1358c2ecf20Sopenharmony_ciS_FUN="function " 1368c2ecf20Sopenharmony_cistatus_tab=20 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ciprint_msg_ok() 1398c2ecf20Sopenharmony_ci{ 1408c2ecf20Sopenharmony_ci local section_name="$1" 1418c2ecf20Sopenharmony_ci local section_val="$2" 1428c2ecf20Sopenharmony_ci local msg="$3" 1438c2ecf20Sopenharmony_ci printf "$section_name :\t%-${status_tab}.${status_tab}s %s %s\n" "$section_val" "[ OK ] " "$msg" 1448c2ecf20Sopenharmony_ci} 1458c2ecf20Sopenharmony_ci 1468c2ecf20Sopenharmony_ciprint_msg_failed() 1478c2ecf20Sopenharmony_ci{ 1488c2ecf20Sopenharmony_ci local section_name="$1" 1498c2ecf20Sopenharmony_ci local section_val="$2" 1508c2ecf20Sopenharmony_ci local msg="$3" 1518c2ecf20Sopenharmony_ci printf "$section_name :\t%-${status_tab}.${status_tab}s %s %s\n" "$section_val" "[ FAILED ]" "$msg" 1528c2ecf20Sopenharmony_ci} 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_ciif [ ! -z "$input_node" ]; then 1558c2ecf20Sopenharmony_ci expected_devname=$input_node 1568c2ecf20Sopenharmony_cielif [ ! -z "$wifi_phy" ]; then 1578c2ecf20Sopenharmony_ci expected_devname=$wifi_phy 1588c2ecf20Sopenharmony_cifi 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ciif [ ! -z "$devicename" ]; then 1618c2ecf20Sopenharmony_ci if [ ! -z "$expected_devname" ]; then 1628c2ecf20Sopenharmony_ci if [ "$devicename" = "$expected_devname" ]; then 1638c2ecf20Sopenharmony_ci print_msg_ok "$S_DEV" "$devicename" 1648c2ecf20Sopenharmony_ci else 1658c2ecf20Sopenharmony_ci print_msg_failed "$S_DEV" "$devicename" "Expected: $expected_devname" 1668c2ecf20Sopenharmony_ci fi 1678c2ecf20Sopenharmony_ci else 1688c2ecf20Sopenharmony_ci if [ "$devicename" = "$manufacturer" ]; then 1698c2ecf20Sopenharmony_ci print_msg_failed "$S_DEV" "$devicename" "Redundant: use of vendor name is discouraged" 1708c2ecf20Sopenharmony_ci elif [ "$devicename" = "$product" ]; then 1718c2ecf20Sopenharmony_ci print_msg_failed "$S_DEV" "$devicename" "Redundant: use of product name is discouraged" 1728c2ecf20Sopenharmony_ci else 1738c2ecf20Sopenharmony_ci print_msg_failed "$S_DEV" "$devicename" "Unknown devicename - should the script be updated?" 1748c2ecf20Sopenharmony_ci fi 1758c2ecf20Sopenharmony_ci fi 1768c2ecf20Sopenharmony_cielif [ ! -z "$expected_devname" ]; then 1778c2ecf20Sopenharmony_ci print_msg_failed "$S_DEV" "blank" "Expected: $expected_devname" 1788c2ecf20Sopenharmony_cifi 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_ciif [ ! -z "$color" ]; then 1818c2ecf20Sopenharmony_ci color_upper=`echo $color | tr [:lower:] [:upper:]` 1828c2ecf20Sopenharmony_ci color_id_definition=$(cat $led_defs_path | grep "_$color_upper\s" | awk '{print $2}') 1838c2ecf20Sopenharmony_ci if [ ! -z "$color_id_definition" ]; then 1848c2ecf20Sopenharmony_ci print_msg_ok "$S_CLR" "$color" "Matching definition: $color_id_definition" 1858c2ecf20Sopenharmony_ci else 1868c2ecf20Sopenharmony_ci print_msg_failed "$S_CLR" "$color" "Definition not found in $led_defs_path" 1878c2ecf20Sopenharmony_ci fi 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_cifi 1908c2ecf20Sopenharmony_ci 1918c2ecf20Sopenharmony_ciif [ ! -z "$function" ]; then 1928c2ecf20Sopenharmony_ci # strip optional enumerator 1938c2ecf20Sopenharmony_ci function=`echo $function | sed s'/\(.*\)-[0-9]*$/\1/'` 1948c2ecf20Sopenharmony_ci fun_definition=$(cat $led_defs_path | grep "\"$function\"" | awk '{print $2}') 1958c2ecf20Sopenharmony_ci if [ ! -z "$fun_definition" ]; then 1968c2ecf20Sopenharmony_ci print_msg_ok "$S_FUN" "$function" "Matching definition: $fun_definition" 1978c2ecf20Sopenharmony_ci else 1988c2ecf20Sopenharmony_ci print_msg_failed "$S_FUN" "$function" "Definition not found in $led_defs_path" 1998c2ecf20Sopenharmony_ci fi 2008c2ecf20Sopenharmony_ci 2018c2ecf20Sopenharmony_cifi 202