script: gpio: Refactor signal probing script
authorNikhil Devshatwar <nikhil.nd@ti.com>
Fri, 8 Jul 2016 13:04:20 +0000 (18:34 +0530)
committerNikhil Devshatwar <nikhil.nd@ti.com>
Sat, 9 Jul 2016 13:04:20 +0000 (18:34 +0530)
Generate a better script for reading the signal values
based on the sysfs GPIO reads.
* Force input enable if not done already
* Make simpler to read script
* Easy to add and delete signals easily
* Continuous refresh

Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
README
iodelay-autogen.py

diff --git a/README b/README
index 41f251650e6e8b474ecd8ff04e49364ada927218..7949d0577effa2f12c70a2fbb7c94b65a327e2b0 100644 (file)
--- a/README
+++ b/README
@@ -87,6 +87,12 @@ EXAMPLES
     - e.g. for generating MMC1 for J6eco SR1.0, run
       #> ./generate-all-modes.sh -p dra72x -m MMC1 -r 1.0 -f linux
 
+#5 For generating signal probe script for VIN1A signals:-
+    - Use the module filter for to specify the module.
+    - Enable '--gpio' option
+      #> ./iodelay-autogen.py -m VIN1A --gpio
+    - This would create vin1a-probe.sh which can be used on target
+
 TODO
 ====
 
index 37618146f88224bb0ed2e3bff480744ed336f061..1c9259132fdec7e188e2d2aedad8430da30ad077 100755 (executable)
@@ -57,7 +57,7 @@ parser.add_argument('-s', '--strict', dest='strict',
 
 parser.add_argument('-g', '--gpio', dest='gpio',
        action='store_true',
-       help='generate script to read pad data from GPIO')
+       help='generate script to probe signals using gpio')
 
 parser.add_argument('-c', '--check', dest='check_xml',
        action='store_true',
@@ -398,13 +398,18 @@ def select_mode(pad, pin, module, virt, man, modehelp, sel):
 # Pad read using GPIO - Specific to linux only
 # As each pad is muxed with a SoC gpio (for most of the pads)
 # It's possible to read the pad data using gpio datain registers
-# Dump the linux commands to read the gpio registers and read the pad data
+# Change pad register to enable input path and export sysfs
+# Use sysfs to read the status of GPIO and print in a loop
 def pad_dump_gpio(padconf, per_padconf):
-       print "###########################################"
-       print "# Read %s signals using GPIO DATA-IN registers" % args.module
-       print "# Works only for the input signals"
-       print "###########################################"
        gpio_data_addrs = (0, 0x4ae10138, 0x48055138, 0x48057138, 0x48059138, 0x4805b138, 0x4805d138, 0x48051138, 0x48053138)
+       module = args.module
+
+       # script header
+       gen_header = "###########################################\n" + \
+                    "# Read %s signals using GPIO sysfs\n" % module + \
+                    "###########################################\n\n"
+       gen_data = "%s_data=(\n" % module
+
        for i in padconf:
                (pad_name, pin_name, addr, val, mode, delayinfo) = i
 
@@ -418,14 +423,51 @@ def pad_dump_gpio(padconf, per_padconf):
                inst = int(matchlist.groups(0)[0])
                bit = int(matchlist.groups(0)[1])
                gpio_addr = gpio_data_addrs[inst]
+               ngpio = (inst - 1) * 32 + bit
+               pin_short = re.match(".+_(.*)", pin_name).groups(0)[0]
+
+               gen_data += "\t%s:0x%x:%s:%d:0x%x:%d\n" % (pin_short, addr, gpio_name, ngpio, gpio_addr, bit)
+
+       gen_data += ")\n\n"
+
+       # Main script to probe the signal
+       gen_main = "echo; echo Probing %s signals\n\n" % module + \
+                  "for data in ${%s_data[@]}\n" % module + \
+                  "do\n" + \
+                  "    pin=`echo $data | cut -d ':' -f1`\n" + \
+                  "    pad=`echo $data | cut -d ':' -f2`\n" + \
+                  "    ngpio=`echo $data | cut -d ':' -f4`\n" + \
+                  "    echo $ngpio > /sys/class/gpio/export 2>/dev/null\n" + \
+                  "    omapconf set bit $pad 18 1>/dev/null 2>/dev/null\n" + \
+                  "    printf \"%8s\" $pin\n" + \
+                  "done\n" + \
+                  "echo\n\n"
+
+       gen_main += "while true;\n" + \
+                   "do\n" + \
+                   "    for data in ${%s_data[@]}\n" % module + \
+                   "    do\n" + \
+                   "#       pin=`echo $data | cut -d ':' -f1`\n" + \
+                   "#        pad=`echo $data | cut -d ':' -f2`\n" + \
+                   "#       gpio=`echo $data | cut -d ':' -f3`\n" + \
+                   "        ngpio=`echo $data | cut -d ':' -f4`\n" + \
+                   "#       addr=`echo $data | cut -d ':' -f5`\n" + \
+                   "#       bit=`echo $data | cut -d ':' -f6`\n" + \
+                   "        val=`cat /sys/class/gpio/gpio$ngpio/value`\n" + \
+                   "        printf %8d $val \n" + \
+                   "    done\n" + \
+                   "    echo\n" + \
+                   "done\n\n"
+
+       gen_footer = "###########################################\n"
+
+       # Generate the shell script
+       gen_script = gen_header + gen_data + gen_main + gen_footer
+       filename = ("./%s-probe.sh" % module).lower()
+       print "Generating '%s' script..." % filename
+       gen_file = open(filename, "w+")
+       gen_file.write(gen_script)
 
-               print "#Read GPIO%d_%d to sample %s" % (inst, bit, pin_name)
-               print " echo %d > /sys/class/gpio/export 2>/dev/null;" % ((inst - 1) * 32)
-               print " val=`omapconf read 0x%x 2>&1 | grep -v \"support\"`;" % gpio_addr
-               print " status=$((0x$val >> %d & 0x1));" % bit
-               print " echo -e \"%s (%s)\t = $status\";" % (pin_name, gpio_name)
-               print ""
-       print ""
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 
 # Generate the final pad and delay data in the required format