+} # have_sunxi_pio
+
+my $have_raspi_gpio = `which raspi-gpio`;
+if ( $have_raspi_gpio ) {
+
+my @gpio_pins;
+
+open(my $pio, '-|', 'raspi-gpio get');
+while(<$pio>) {
+ chomp;
+ if ( m/^\s*GPIO (\d+): (.+)/ ) {
+ my $pin = 'gpio' . $1 * 1; # we need * 1 to strip leading zero
+ push @gpio_pins, $1;
+ annotate_pin $pin, $2 if ! $opt_svg;
+ }
+}
+close($pio);
+
+open(my $pio, '-|', 'raspi-gpio funcs '.join(',',@gpio_pins));
+while(<$pio>) {
+ chomp;
+ s/,\s/ /g;
+ if (m/^(\d+)\s+(.*)/) {
+ annotate_pin 'gpio'.$1,"($2)" if $opt_alt;
+ }
+}
+close($pio);
+
+} # have_raspi_gpio
+
+
+my $pinmux;
+my $pinmux_path = (glob("/sys/kernel/debug/pinctrl/*/pinmux-functions"))[0];
+if ( $opt_pinmux && -e $pinmux_path ) {
+ open(my $mux, '<', $pinmux_path);
+ while(<$mux>) {
+ chomp;
+ if ( m/function: (\w+), groups = \[ (.*) \]/ ) {
+ my ( $func, $pins ) = ( $1, $2 );
+ foreach ( split(/\s+/,$pins) ) {
+ push @{ $pinmux->{$_} }, $func;
+ }
+ } else {
+ warn "IGNORED [$pinmux_path] [$_]\n";
+ }
+ }
+
+ foreach my $pin ( keys %$pinmux ) {
+ if ( exists $pins->{$pin} ) {
+ annotate_pin $pin, '{' . join(' ', @{$pinmux->{$pin}}) . '}';
+ } else {
+ warn "IGNORED mux on $pin\n";
+ }
+ }
+
+ warn "# pinmux = ",dump( $pinmux );
+}
+
+
+