buildroot: 0003-board-gateworks-add-overlay-for-Gateworks-Ventana-bo.patch

File 0003-board-gateworks-add-overlay-for-Gateworks-Ventana-bo.patch, 17.9 KB (added by Tim Harvey, 3 years ago)
  • new file oard/gateworks/ventana/rootfs_overlay/bin/media-ctl-setup

    From dcc92b6e2832db1463a65faad5a56a639f162914 Mon Sep 17 00:00:00 2001
    From: Tim Harvey <tharvey@gateworks.com>
    Date: Wed, 26 Feb 2020 15:22:01 -0800
    Subject: [PATCH 3/3] board/gateworks: add overlay for Gateworks Ventana boards
    
    - add media-ctl-setup for configuring V4L2 video capture devices
    - add symlink for vpu firmware so it loads on first attempt
    
    Signed-off-by: Tim Harvey <tharvey@gateworks.com>
    ---
     .../ventana/rootfs_overlay/bin/media-ctl-setup     | 533 +++++++++++++++++++++
     .../ventana/rootfs_overlay/lib/firmware/imx/sdma   |   1 +
     .../rootfs_overlay/lib/firmware/vpu_fw_imx6q.bin   |   1 +
     3 files changed, 535 insertions(+)
     create mode 100755 board/gateworks/ventana/rootfs_overlay/bin/media-ctl-setup
     create mode 120000 board/gateworks/ventana/rootfs_overlay/lib/firmware/imx/sdma
     create mode 120000 board/gateworks/ventana/rootfs_overlay/lib/firmware/vpu_fw_imx6q.bin
    
    diff --git a/board/gateworks/ventana/rootfs_overlay/bin/media-ctl-setup b/board/gateworks/ventana/rootfs_overlay/bin/media-ctl-setup
    new file mode 100755
    index 0000000..7340bc1
    - +  
     1#!/bin/sh
     2
     3MEDIA_CTL=media-ctl
     4V4L2_CTL=v4l2-ctl
     5GST=gst-launch-1.0
     6
     7out() {
     8        echo "$@"
     9}
     10
     11dbg() {
     12        [ -n "$DEBUG" ] && { echo "$@" 1>&2; }
     13}
     14
     15err() {
     16        local ret=$1
     17
     18        shift
     19
     20        [ -n "$FORCE" ] && {
     21                                        out "# Error: $@"
     22        } || {
     23                echo "Error: $@" 1>&2
     24                exit $ret
     25        }
     26}
     27
     28# link 2 entities together
     29# $1 pad1
     30# $2 pad2
     31# $3 flags
     32lnk() {
     33        out $MEDIA_CTL -l \""$1 -> $2$3"\"
     34}
     35
     36# format pad
     37fmt() {
     38        out $MEDIA_CTL --set-v4l2 "\"$1\""
     39}
     40
     41# mode0: sensor -> mux -> csi -> /dev/videoN
     42# raw capture
     43mode0() {
     44        EP="ipu${IPU}_csi${CSI}"
     45        EPP=2
     46        [ $SOC = imx6q ] && p=1 || p=4
     47
     48        out "# setup links"
     49        lnk "'$SENSOR':0" "'ipu${IPU}_csi${CSI}_mux':$p" "[1]"
     50        lnk "'ipu${IPU}_csi${CSI}_mux':$((p+1))" "'$EP':0" "[1]"
     51        lnk "'$EP':$EPP" "'$EP capture':0" "[1]"
     52
     53        out "# configure pads"
     54        case "$SENS" in
     55                adv7180)
     56                        fmt "'$SENSOR':0 [fmt:UYVY2X8/$res field:alternate]"
     57                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:UYVY2X8/$res]"
     58                        # rec709 config at CSI pad 0
     59                        fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     60                        # CSI src pad output is frame height
     61                        h=$((h*2))
     62                        res=${w}x${h}
     63                        fmt "'$EP':$EPP [fmt:AYUV32/$res]"
     64                        # Error: gstreamer: Device does not support progressive interlacing
     65                        ;;
     66                tda1997x)
     67                        fmt "'$SENSOR':0 [fmt:$fmt field:$field]"
     68                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:$fmt field:$field]"
     69                        # rec709 config at CSI pad 0
     70                        fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     71                        fmt "'$EP':$EPP [fmt:AYUV32/$res]"
     72                        out "$MEDIA_CTL --get-v4l2 '\"$EP\":$EPP'"
     73                        ;;
     74        esac
     75}
     76
     77# mode1: sensor -> mux -> csi -> ic_prp -> ic_prpenc -> /dev/videoN
     78# IC enc CSC/Scale/interweave
     79mode1() {
     80        EP="ipu${IPU}_ic_prpenc"
     81        EPP=1
     82        [ $SOC = imx6q ] && p=1 || p=4
     83
     84        out "# setup links"
     85        lnk "'$SENSOR':0" "'ipu${IPU}_csi${CSI}_mux':$p" "[1]"
     86        lnk "'ipu${IPU}_csi${CSI}_mux':$((p+1))" "'ipu${IPU}_csi${CSI}':0" "[1]"
     87        lnk "'ipu${IPU}_csi${CSI}':1" "'ipu${IPU}_ic_prp':0" "[1]"
     88        lnk "'ipu${IPU}_ic_prp':1" "'$EP':0" "[1]"
     89        lnk "'$EP':1" "'$EP capture':0" "[1]"
     90
     91        out "# configure pads"
     92        case "$SENS" in
     93                adv7180)
     94                        fmt "'$SENSOR':0 [fmt:UYVY2X8/$res field:alternate]"
     95                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:UYVY2X8/$res]"
     96                        # rec709 config at CSI pad 0
     97                        fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     98                        # CSI src pad output is frame height
     99                        h=$((h*2))
     100                        res=${w}x${h}
     101                        fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     102                        fmt "'ipu${IPU}_ic_prp':1 [fmt:AYUV32/$res]"
     103                        fmt "'$EP':1 [fmt:AYUV32/$res]"
     104                        # Error: gstreamer: Device does not support progressive interlacing
     105                        ;;
     106                tda1997x)
     107                        [ "$fcc" = "UYVY8_1X16" ] && {
     108                                        err 1 "Invalid mode: 16bit capture (passthrough) can't go through IC"
     109                        }
     110                        fmt "'$SENSOR':0 [fmt:$fmt field:$field]"
     111                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:$fmt field:$field]"
     112                        [ "$w" -ge 1024 -o "$h" -ge 1024 ] && {
     113                                # downscale CSI resolution
     114                                res="$((w/2))x$((h/2))"
     115                                dbg "Adjusting resolution from ${w}x${h} to $res"
     116                                fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     117                                #fmt "'ipu${IPU}_csi${CSI}':0 [crop:(0,0)/$res]"
     118                                #fmt "'ipu${IPU}_csi${CSI}':0 [compose:(0,0)/$res]"
     119                                fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     120                                fmt "'ipu${IPU}_ic_prp':1 [fmt:AYUV32/$res]"
     121                                fmt "'$EP':1 [fmt:AYUV32/$res]"
     122                        } || {
     123                                fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     124                                fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     125                                fmt "'ipu${IPU}_ic_prp':1 [fmt:AYUV32/$res]"
     126                                fmt "'$EP':1 [fmt:AYUV32/$res]"
     127                                out "$MEDIA_CTL --get-v4l2 '\"$EP\":1'"
     128                        }
     129                        ;;
     130        esac
     131}
     132
     133# mode2: sensor -> mux -> csi -> ic_prp -> ic_prpvf -> /dev/videoN
     134# IC vf CSC/Scale/interweave (same as mode1 but using vf instead of enc)
     135mode2() {
     136        EP="ipu${IPU}_ic_prpvf"
     137        EPP=1
     138        [ $SOC = imx6q ] && p=1 || p=4
     139
     140        out "# setup links"
     141        lnk "'$SENSOR':0" "'ipu${IPU}_csi${CSI}_mux':$p" "[1]"
     142        lnk "'ipu${IPU}_csi${CSI}_mux':$((p+1))" "'ipu${IPU}_csi${CSI}':0" "[1]"
     143        lnk "'ipu${IPU}_csi${CSI}':1" "'ipu${IPU}_ic_prp':0" "[1]"
     144        lnk "'ipu${IPU}_ic_prp':2" "'$EP':0" "[1]"
     145        lnk "'$EP':1" "'$EP capture':0" "[1]"
     146
     147        out "# configure pads"
     148        case "$SENS" in
     149                adv7180)
     150                        fmt "'$SENSOR':0 [fmt:UYVY2X8/$res field:alternate]"
     151                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:UYVY2X8/$res]"
     152                        # rec709 config at CSI pad 0
     153                        fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     154                        # CSI src pad output is frame height
     155                        h=$((h*2))
     156                        res=${w}x${h}
     157                        fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     158                        fmt "'ipu${IPU}_ic_prp':2 [fmt:AYUV32/$res]"
     159                        fmt "'$EP':1 [fmt:AYUV32/$res]"
     160                        # Error: gstreamer: Device does not support progressive interlacing
     161                        ;;
     162                tda1997x)
     163                        [ "$fcc" = "UYVY8_1X16" ] && {
     164                                        err 1 "Invalid mode: 16bit capture (passthrough) can't go through IC"
     165                        }
     166                        fmt "'$SENSOR':0 [fmt:$fmt field:$field]"
     167                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:$fmt field:$field]"
     168                        # rec709 config at CSI pad 0
     169                        fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     170                        [ "$w" -ge 1024 -o "$h" -ge 1024 ] && {
     171                                # downscale CSI resolution
     172                                res="$((w/2))x$((h/2))"
     173                                dbg "Adjusting resolution from ${w}x${h} to $res"
     174                                fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     175                                #fmt "'ipu${IPU}_csi${CSI}':0 [crop:(0,0)/$res]"
     176                                #fmt "'ipu${IPU}_csi${CSI}':0 [compose:(0,0)/$res]"
     177                                fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     178                                fmt "'ipu${IPU}_ic_prp':2 [fmt:AYUV32/$res]"
     179                                fmt "'$EP':1 [fmt:AYUV32/$res]"
     180                        } || {
     181                                fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     182                                fmt "'ipu${IPU}_ic_prp':2 [fmt:AYUV32/$res]"
     183                                fmt "'$EP':1 [fmt:AYUV32/$res]"
     184                                out "$MEDIA_CTL --get-v4l2 '\"$EP\":1'"
     185                        }
     186                        ;;
     187        esac
     188}
     189
     190# mode3: sensor -> mux -> csi -> vdic -> ic_prp -> ic_prpvf -> /dev/videoN
     191# IC vf CSC/Scale/interweave with motion compensated de-interlace
     192mode3() {
     193        EP="ipu${IPU}_ic_prpvf"
     194        EPP=1
     195        [ $SOC = imx6q ] && p=1 || p=4
     196
     197        [ "$fld" = "progressive" ] && {
     198                err 1 "Invalid mode: VDIC does not accept progressive video"
     199        }
     200
     201        out "# setup links"
     202        lnk "'$SENSOR':0" "'ipu${IPU}_csi${CSI}_mux':$p" "[1]"
     203        lnk "'ipu${IPU}_csi${CSI}_mux':$((p+1))" "'ipu${IPU}_csi${CSI}':0" "[1]"
     204        lnk "'ipu${IPU}_csi${CSI}':1" "'ipu${IPU}_vdic':0" "[1]"
     205        lnk "'ipu${IPU}_vdic':2" "'ipu${IPU}_ic_prp':0" "[1]"
     206        lnk "'ipu${IPU}_ic_prp':2" "'$EP':0" "[1]"
     207        lnk "'$EP':1" "'$EP capture':0" "[1]"
     208
     209        out "# configure pads"
     210        case "$SENS" in
     211                adv7180)
     212                        fmt "'$SENSOR':0 [fmt:UYVY2X8/$res field:alternate]"
     213                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:UYVY2X8/$res]"
     214                        # rec709 config at CSI pad 0
     215                        fmt "'ipu${IPU}_csi${CSI}':0 [fmt:$fmt field:$field colorspace:rec709 ycbcr:709]"
     216                        # CSI src pad output is frame height
     217                        h=$((h*2))
     218                        res=${w}x${h}
     219                        fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     220                        fmt "'ipu${IPU}_vdic':2 [fmt:AYUV32/$res field:none]"
     221                        fmt "'ipu${IPU}_ic_prp':2 [fmt:AYUV32/$res field:none]"
     222                        fmt "'$EP':1 [fmt:AYUV32/$res]"
     223                        ;;
     224                tda1997x)
     225                        fmt "'$SENSOR':0 [fmt:$fmt field:$field]"
     226                        fmt "'ipu${IPU}_csi${CSI}_mux':$((p+1)) [fmt:$fmt field:$field]"
     227                        fmt "'ipu${IPU}_csi${CSI}':1 [fmt:AYUV32/$res]"
     228                        fmt "'ipu${IPU}_vdic':2 [fmt:AYUV32/$res]"
     229                        fmt "'ipu${IPU}_ic_prp':2 [fmt:AYUV32/$res]"
     230                        fmt "'$EP':1 [fmt:AYUV32/$res]"
     231                        ;;
     232        esac
     233}
     234
     235# return entity/pad format (all or specific field)
     236# $1 entity
     237# $2 optional parameter (fmt|fcc|res|int|field|colorspace)
     238#               (will return entire fmt if empty)
     239get_format_param() {
     240        local sensor="$1"
     241        local param="$2"
     242        local fmt name val int res fcc
     243
     244        # v4l-utils 1.16.1: [fmt:UYVY8_1X16/1280x720 field:none colorspace:rec709]
     245        fmt=$($MEDIA_CTL --get-v4l2 "$sensor" | sed -n 's/.*\[\(.*\)\]/\1/p')
     246        dbg "get_format_param: $sensor [$fmt]"
     247        [ -z "$param" ] && {
     248                echo $fmt
     249                return
     250        }
     251        for i in $fmt; do
     252                name=$(echo "$i" | sed -n 's/\(.*\):.*/\1/p')
     253                val=$(echo "$i" | sed -n 's/.*:\(.*\)/\1/p')
     254                [ "$param" = "$name" ] && {
     255                        echo $val
     256                        return
     257                }
     258                [ "$name" = "fmt" ] && {
     259                        fcc=$(echo "$val" | awk -F '/' '{print $1}')
     260                        res=$(echo "$val" | awk -F '/' '{print $2}')
     261                        int=$(echo "$val" | awk -F '@' '{print $2}')
     262                        [ -n "$int" ] && {
     263                                res=$(echo "$res" | awk -F '@' '{print $1}')
     264                        }
     265                        case "$param" in
     266                                fcc) echo "$fcc"; return;;
     267                                res) echo "$res"; return;;
     268                                int) echo "$int"; return;;
     269                        esac
     270                }
     271        done
     272}
     273
     274# obtain entity/pad format
     275# TODO: replace with get_format_param usage
     276get_sensor_format() {
     277        local sensor="$1"
     278        local subdev="$($MEDIA_CTL -e "$sensor")"
     279
     280        dbg "get_sensor_format: sensor='$sensor' subdev=$subdev"
     281        # Get framerate and std (sets the following vars):
     282        #        std=NTSC|PAL
     283        #        framerate=29.9
     284        #        w=720
     285        #        h=480|576
     286        #        fld="seq-bt"
     287        #        res=${w}x${h}
     288        #        pixelclock=calculated
     289        case "$sensor" in
     290                # for SD encoders:
     291                #  TODO: get-detected-standard not detecting switch between PAL/NTSC
     292                #   use 'v4l2-ctl --get-detected-standard' (VIDIOC_QUERYSTD) to get
     293                #       received std.
     294                #   use 'v4l2-ctl --get-standard' (VIDIOC_G_STD) to get selected std
     295                #   use 'v4l2-ctl --set-standard' (VIDIOC_S_STD) to set selected std
     296                adv7180*)
     297                        csc=YUV
     298                        #fmt="$($V4L2_CTL --device $subdev --get-standard)"
     299                        # TODO: 'Video standard = 0x00000000' means no signal
     300                        #[ $? -ne 0 ] && { err 2 "v4l-utils 1.16 required for subdev support"; }
     301                        fmt=$STD
     302                        case $fmt in
     303                                *NTSC*)
     304                                        std=NTSC
     305                                        framerate=29.9
     306                                        w=720
     307                                        h=480
     308                                        fld="seq-bt"
     309                                        res=${w}x${h}
     310                                        pixelclock=$((w*h*2*30))
     311                                        ;;
     312                                *PAL*)
     313                                        std=PAL
     314                                        framerate=24.9
     315                                        w=720
     316                                        h=576
     317                                        fld="seq-tb"
     318                                        res=${w}x${h}
     319                                        pixelclock=$((w*h*2*30))
     320                                        ;;
     321                                *) err 2 "unknown standard or no input: $fmt";;
     322                        esac
     323                        out "# sensor standard"
     324                        #out $V4L2_CTL --device $subdev --get-detected-standard \# $std
     325                        out $V4L2_CTL --device $subdev --set-standard $std > /dev/null
     326                        out $V4L2_CTL --device $subdev --get-detected-standard # display std
     327                        ;;
     328                # for DV encoders:
     329                #    use 'v4l2-ctl --get-dv-timings' detailed timing data
     330                tda1997*)
     331                        fmt="$($V4L2_CTL --device $subdev --get-dv-timings)"
     332                        pixelclock="$(echo "$fmt" | sed -n 's/.*Pixelclock: \(.*\) Hz.*/\1/p')"
     333                        framerate="$(echo "$fmt" | sed -n 's/.*(\(.*\) frames.*/\1/p')"
     334                        fld="$(echo "$fmt" | sed -n 's/.*Frame format: \(.*\)/\1/p')"
     335                        out "# get framerate"
     336                        out $V4L2_CTL --device $subdev --get-dv-timings \# $res $fld $framerate
     337                        ;;
     338        esac
     339        dbg "fmt=$fmt"
     340        dbg "std=$std"
     341        dbg "res=$res"
     342        dbg "fld=$fld"
     343        dbg "framerate=$framerate"
     344        dbg "pixelclock=$pixelclock"
     345
     346        # media-ctl --get-v4l2 will return fcc/res/field/colorspace
     347        fmt=$($MEDIA_CTL --get-v4l2 "'$sensor':0" | sed -n 's/.*\[\(.*\)\]/\1/p')
     348        SENS_FMT=$fmt
     349        #out "# sensor format"
     350        #out $MEDIA_CTL --get-v4l2 \'\"$sensor\":0\' \# $SENS_FMT
     351        for i in $fmt; do
     352                name=$(echo "$i" | sed -n 's/\(.*\):.*/\1/p')
     353                val=$(echo "$i" | sed -n 's/.*:\(.*\)/\1/p')
     354                eval $name="$val"
     355                [ "$name" = "fmt" ] && {
     356                        fcc=$(echo "$val" | awk -F '/' '{print $1}')
     357                        res=$(echo "$val" | awk -F '/' '{print $2}')
     358                        int=$(echo "$val" | awk -F '@' '{print $2}')
     359                        [ -n "$int" ] && {
     360                                res=$(echo "$res" | awk -F '@' '{print $1}')
     361                        }
     362                        w=$(echo "$res" | awk -F 'x' '{print $1}')
     363                        h=$(echo "$res" | awk -F 'x' '{print $2}')
     364                }
     365
     366                [ "$name" = "field" ] && {
     367                        [ "$val" = "none" ] && {
     368                                src=${h}p
     369                        } || {
     370                                src=${h}i
     371                        }
     372                }
     373                [ "$name" = "colorspace" ] && {
     374                        case "$val" in
     375                                rec709) csc=YUV;;
     376                                srgb) csc=RGB;;
     377                        esac
     378                }
     379                #dbg "$name=$val"
     380        done
     381
     382        dbg "   fld:$field"
     383        dbg "   fmt:$fmt"
     384        dbg "   fcc:$fcc"
     385        dbg "   res:$res (width=$w height=$h)"
     386        dbg "   int:$int"
     387        dbg "   csc:$colorspace"
     388}
     389
     390adv7180_setup() {
     391        # parse sensor format into vars
     392        get_sensor_format "$SENSOR"
     393}
     394
     395# set and detect current HDMI input source, break it down to its components
     396# (such as pixel format, resolution, field, and colorspace) and assign
     397# them to variables for later use
     398tda1997x_setup() {
     399        # set output format to detected input format
     400        out "# set sensor output pad to sensor source format"
     401        $V4L2_CTL -d $SUBDEV --set-dv-bt-timings=query > /dev/null
     402        out $V4L2_CTL -d $SUBDEV --set-dv-bt-timings=query
     403
     404        # parse sensor format into vars
     405        get_sensor_format "$SENSOR"
     406}
     407
     408# Get SOC and BOARD from dt unless passed in
     409SOC=${SOC:-$(sed -n 's/gw,\(imx6.*\)-.*/\1/p' /proc/device-tree/compatible)}
     410BOARD=${BOARD:-$(sed -n 's/gw,imx6.*-\(gw.*\)gw,ventana.*/\1/p' /proc/device-tree/compatible)}
     411SENSOR=${1:-adv7180}
     412STD=${2:-NTSC}
     413
     414dbg "BOARD=$BOARD"
     415dbg "SOC=$SOC"
     416dbg "SENSOR=$SENSOR"
     417
     418# if IPUCSI not provided, determine it from BOARD/SOC/SENSOR
     419[ -z "${IPU}" -o -z "${CSI}" ] && {
     420        dbg "Determining IPU and CSI for ${SOC}-${BOARD}-${SENSOR}..."
     421        case "${SOC}-${BOARD}-${SENSOR}" in
     422                imx6q-gw54xx-adv7180|\
     423                imx6q-gw53xx-adv7180|\
     424                imx6q-gw52xx-adv7180)
     425                        IPU=2
     426                        CSI=1
     427                        ;;
     428                imx6dl-gw52xx-adv7180|\
     429                imx6dl-gw53xx-adv7180)
     430                        IPU=1
     431                        CSI=1
     432                        ;;
     433                imx6q-gw51xx-adv7180|\
     434                imx6q-gw553x-adv7180|\
     435                imx6dl-gw51xx-adv7180|\
     436                imx6dl-gw553x-adv7180|\
     437                imx6dl-gw551x-tda1997x|\
     438                imx6q-gw551x-tda1997x|\
     439                imx6q-gw54xx-tda1997x)
     440                        IPU=1
     441                        CSI=0
     442                        ;;
     443                *)
     444                        err 1 "Unrecognized board/soc/sensor: '${SOC}-${BOARD}-${SENSOR}'"
     445                        ;;
     446        esac
     447        case "${SENSOR}" in
     448                adv7180)
     449                        SENS=$SENSOR
     450                        SENSOR="adv7180 2-0020"
     451                        # use VDIC pipeline for Analog CVBS capture
     452                        MODE=${MODE:-3}
     453                        ;;
     454                tda1997x)
     455                        SENS=$SENSOR
     456                        SENSOR="tda19971 2-0048"
     457                        # use RAW pipeline for Digital HDMI capture
     458                        MODE=${MODE:-0}
     459                        ;;
     460        esac
     461}
     462SUBDEV=$($MEDIA_CTL -e "$SENSOR")
     463dbg "SUBDEV=$SUBDEV"
     464
     465# create graphs (txt/dot/png) in $DIR if exists
     466[ -n "$DIR" -a -d "$DIR" ] && {
     467        $MEDIA_CTL --reset
     468        $MEDIA_CTL --print-topology > ${DIR}/${SOC}-${BOARD}-media.txt
     469        $MEDIA_CTL --print-dot > ${DIR}/${SOC}-${BOARD}-media.dot
     470        [ -x /usr/bin/dot ] && /usr/bin/dot -Tpng \
     471                ${DIR}/${SOC}-${BOARD}-media.dot \
     472                > ${DIR}/${SOC}-${BOARD}-media.png
     473}
     474
     475# Mode:
     476#       There are multiple basic IMX6 pipelines which we will specify by a mode var:
     477#       0: sensor -> mux -> csi -> /dev/videoN
     478#       1: sensor -> mux -> csi -> ic_prp -> ic_prpenc -> /dev/videoN
     479#       2: sensor -> mux -> csi -> ic_prp -> ic_prpvf -> /dev/videoN
     480#       3: sensor -> mux -> csi -> vdic -> ic_prp -> ic_prpvf -> /dev/videoN
     481MODE=${MODE:-0}
     482case $MODE in
     483        0) MODE_DESC="sensor->mux->csi";;
     484        1) MODE_DESC="sensor->mux->csi->ic_prp->ic_prpenc";;
     485        2) MODE_DESC="sensor->mux->csi->ic_prp->ic_prpvf";;
     486        3) MODE_DESC="sensor->mux->csi->vdic->ic_prp->ic_prpvf";;
     487        *) err 1 "invalid MODE:$MODE";;
     488esac
     489
     490dbg "IPUCSI=ipu${IPU}_csi${CSI} MODE$MODE:$MODE_DESC"
     491
     492out "#!/bin/sh"
     493out ""
     494out "# ${SOC}-${BOARD} ${SENS} IPU${IPU}_CSI${CSI} MODE$MODE:$MODE_DESC"
     495out ""
     496
     497# perform any sensor specific setup
     498${SENS}_setup
     499
     500out ""
     501out "#"
     502out "# ${SOC}-${BOARD} IPU${IPU}_CSI${CSI} ${SENS} $fcc ${src}@${framerate}Hz $csc MODE${MODE}:$MODE_DESC $(uname -r)"
     503out "#"
     504out "# reset all links"
     505out "$MEDIA_CTL --reset"
     506
     507# setup links, formats, and EP (endpoint entity)
     508mode${MODE}
     509dbg "EP=$EP"
     510# set v4l2 capture device
     511DEVICE=$($MEDIA_CTL -e "$EP capture")
     512out "# devices"
     513[ "$SENS" = "adv7180" -a "$MODE" -ne "3" ] && {
     514        out "# configure video device"
     515        out $V4L2_CTL --device $DEVICE --set-fmt-video=field=interlaced_bt
     516}
     517
     518ENCODER=/dev/$(for i in $(ls -d /sys/class/video4linux/video*); do [ "coda-encoder" = "$(cat $i/name)" ] && basename $i; done)
     519DECODER=/dev/$(for i in $(ls -d /sys/class/video4linux/video*); do [ "coda-decoder" = "$(cat $i/name)" ] && basename $i; done)
     520MEM2MEM=/dev/$(for i in $(ls -d /sys/class/video4linux/video*); do [ "ipu_ic_pp mem2mem" = "$(cat $i/name)" ] && basename $i; done)
     521GST_CONVERT=$(gst-inspect-1.0 | grep -e "v4l2.*convert*" | sed -e 's/.*:\s*\(v4l2.*convert\):.*/\1/')
     522
     523out "echo DEVICE=$DEVICE"
     524out "echo ENCODER=$ENCODER"
     525out "echo DECODER=$DECODER"
     526out "echo MEM2MEM=$MEM2MEM"
     527out "echo GST_CONVERT=$GST_CONVERT"
     528out "export DEVICE=$DEVICE # capture"
     529out "export ENCODER=$ENCODER # encode"
     530out "export DECODER=$DECODER # decode"
     531out "export MEM2MEM=$MEM2MEM # converter"
     532out "export GST_CONVERT=$GST_CONVERT # GST converter"
     533
  • new file oard/gateworks/ventana/rootfs_overlay/lib/firmware/imx/sdma

    diff --git a/board/gateworks/ventana/rootfs_overlay/lib/firmware/imx/sdma b/board/gateworks/ventana/rootfs_overlay/lib/firmware/imx/sdma
    new file mode 120000
    index 0000000..aa4fac8
    - +  
     1../sdma
     2 No newline at end of file
  • new file oard/gateworks/ventana/rootfs_overlay/lib/firmware/vpu_fw_imx6q.bin

    diff --git a/board/gateworks/ventana/rootfs_overlay/lib/firmware/vpu_fw_imx6q.bin b/board/gateworks/ventana/rootfs_overlay/lib/firmware/vpu_fw_imx6q.bin
    new file mode 120000
    index 0000000..53ab939
    - +  
     1vpu/vpu_fw_imx6q.bin
     2 No newline at end of file