Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

scripts: ipu6: fix media controller index #11969

Merged
merged 2 commits into from
Jul 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions scripts/rs-enum.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@
# i2c 2 d4xx Firmware /dev/d4xx-dfu-c /dev/d4xx-dfu-2

# Dependency: v4l-utils
v4l2_util=$(which v4l2-ctl)
media_util=$(which media-ctl)
Nir-Az marked this conversation as resolved.
Show resolved Hide resolved
if [ -z ${v4l2_util} ]; then
echo "v4l2-ctl not found, install with: sudo apt install v4l-utils"
exit 1
fi

#
# parse command line parameters
# for '-i' parameter, print links only
Expand Down Expand Up @@ -71,15 +78,15 @@ camera_vid=("depth" "depth-md" "color" "color-md" "ir" "imu")
[[ $quiet -eq 0 ]] && printf "Bus\tCamera\tSensor\tNode Type\tVideo Node\tRS Link\n"

# For Jetson we have simple method
if [ -n "$(v4l2-ctl --list-devices | grep tegra)" ]; then
if [ -n "$(${v4l2_util} --list-devices | grep tegra)" ]; then
for ((i = 0; i < 127; i++)); do
if [ ! -c /dev/video${i} ]; then
break;
fi
cam_id=$((i/6))
sens_id=$((i%6))
vid="/dev/video${i}"
dev_name=$(v4l2-ctl -d ${vid} -D | grep 'Driver name' | head -n1 | awk -F' : ' '{print $2}')
dev_name=$(${v4l2_util} -d ${vid} -D | grep 'Driver name' | head -n1 | awk -F' : ' '{print $2}')
dev_ln="/dev/video-rs-${camera_vid[${sens_id}]}-${cam_id}"
bus="mipi"
if [ "$dev_name" = "uvcvideo" ]; then
Expand All @@ -98,7 +105,7 @@ if [ -n "$(v4l2-ctl --list-devices | grep tegra)" ]; then
[[ -e $dev_ln ]] && sudo unlink $dev_ln
sudo ln -s $vid $dev_ln
# Create DFU device link for camera on jetson
subdev=$(media-ctl --print-dot | grep "D4XX depth ${camera} | awk -F'|' '{print $2}' | awk -F'/' '{print $3}' | tr -d ' '")
subdev=$(${media_util} --print-dot | grep "D4XX depth ${camera} | awk -F'|' '{print $2}' | awk -F'/' '{print $3}' | tr -d ' '")
i2cdev=$(ls -l /sys/class/video4linux/${subdev}/device | awk -F'/' '{print $9}')
dev_dfu_name="/dev/d4xx-dfu-${i2cdev}"
dev_dfu_ln="/dev/d4xx-dfu-${cam_id}"
Expand All @@ -110,8 +117,10 @@ exit 0
fi

#ADL-P IPU6
mdev=$(${v4l2_util} --list-devices | grep -A1 ipu6 | grep media)
#media-ctl -r
# cache media-ctl output
dot=$(media-ctl --print-dot)
dot=$(${media_util} -d ${mdev} --print-dot)
# for all d457 muxes a, b, c and d
for camera in $mux_list; do
create_dfu_dev=0
Expand All @@ -131,7 +140,7 @@ for camera in $mux_list; do
vid=$(echo "${dot}" | grep "${vid_nd}" | grep video | tr '\\n' '\n' | grep video | awk -F'"' '{print $1}')
[[ -z $vid ]] && continue;
dev_ln="/dev/video-rs-${camera_names["${sens}"]}-${camera_idx[${camera}]}"
dev_name=$(v4l2-ctl -d $vid -D | grep Model | awk -F':' '{print $2}')
dev_name=$(${v4l2_util} -d $vid -D | grep Model | awk -F':' '{print $2}')

[[ $quiet -eq 0 ]] && printf '%s\t%d\t%s\tStreaming\t%s\t%s\n' "$dev_name" ${camera_idx[${camera}]} ${camera_names["${sens}"]} $vid $dev_ln

Expand All @@ -140,7 +149,7 @@ for camera in $mux_list; do
[[ -e $dev_ln ]] && sudo unlink $dev_ln
sudo ln -s $vid $dev_ln
# activate ipu6 link enumeration feature
v4l2-ctl -d $dev_ln -c enumerate_graph_link=1
${v4l2_util} -d $dev_ln -c enumerate_graph_link=1
fi
create_dfu_dev=1 # will create DFU device link for camera
# metadata link
Expand All @@ -151,14 +160,14 @@ for camera in $mux_list; do

vid_num=$(echo $vid | grep -o '[0-9]\+')
dev_md_ln="/dev/video-rs-${camera_names["${sens}"]}-md-${camera_idx[${camera}]}"
dev_name=$(v4l2-ctl -d "/dev/video$(($vid_num+1))" -D | grep Model | awk -F':' '{print $2}')
dev_name=$(${v4l2_util} -d "/dev/video$(($vid_num+1))" -D | grep Model | awk -F':' '{print $2}')

[[ $quiet -eq 0 ]] && printf '%s\t%d\t%s\tMetadata\t/dev/video%s\t%s\n' "$dev_name" ${camera_idx[${camera}]} ${camera_names["${sens}"]} $(($vid_num+1)) $dev_md_ln
# create link only in case we choose not only to show it
if [[ $info -eq 0 ]]; then
[[ -e $dev_md_ln ]] && sudo unlink $dev_md_ln
sudo ln -s "/dev/video$(($vid_num+1))" $dev_md_ln
v4l2-ctl -d $dev_md_ln -c enumerate_graph_link=3
${v4l2_util} -d $dev_md_ln -c enumerate_graph_link=3
fi
done
# create DFU device link for camera
Expand Down
36 changes: 23 additions & 13 deletions scripts/rs_ipu6_d457_bind.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
#!/bin/bash
# Dependency: v4l-utils
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we rename the file name to rs_d457_bind or rs_mipi_bind to be generic?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no, bind script is for ipu6 only!

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought you want to align Jetson D457 to it, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

only rs-enum script needed for jetson and that is another commit waiting for approval of that PR

v4l2_util=$(which v4l2-ctl)
media_util=$(which media-ctl)
if [ -z ${v4l2_util} ]; then
echo "v4l2-ctl not found, install with: sudo apt install v4l-utils"
exit 1
fi

# d457_bind.sh
while [[ $# -gt 0 ]]; do
case $1 in
Expand All @@ -24,9 +32,11 @@ declare -A media_mux_csi2_link=( [a]=0 [b]=1 [c]=2 [d]=3 )
declare -A serdes_mux_i2c_bus=( [a]=2 [b]=2 [c]=4 [d]=4 )
mux_list=${mux_param:-'a b c d'}

mdev=$(${v4l2_util} --list-devices | grep -A1 ipu6 | grep media)
media_ctl_cmd="${media_util} -d ${mdev}"
#media-ctl -r
# cache media-ctl output
dot=$(media-ctl --print-dot)
dot=$($media_ctl_cmd --print-dot)
Nir-Az marked this conversation as resolved.
Show resolved Hide resolved

# DS5 MUX. Can be {a, b, c, d}.
for mux in $mux_list; do
Expand All @@ -40,27 +50,27 @@ csi2="CSI-2 ${media_mux_csi2_link[${mux}]}"

be_soc_cap="BE SOC ${media_mux_capture_link[${mux}]}capture"

media-ctl -v -l "\"Intel IPU6 ${csi2}\":1 -> \"Intel IPU6 ${csi2_be_soc}\":0[1]" 1>/dev/null
media-ctl -v -l "\"DS5 mux ${mux}\":0 -> \"Intel IPU6 ${csi2}\":0[1]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2}\":1 -> \"Intel IPU6 ${csi2_be_soc}\":0[1]" 1>/dev/null
$media_ctl_cmd -v -l "\"DS5 mux ${mux}\":0 -> \"Intel IPU6 ${csi2}\":0[1]" 1>/dev/null

media-ctl -v -l "\"D4XX depth ${mux}\":0 -> \"DS5 mux ${mux}\":1[1]" 1>/dev/null
$media_ctl_cmd -v -l "\"D4XX depth ${mux}\":0 -> \"DS5 mux ${mux}\":1[1]" 1>/dev/null
# DEPTH video streaming node
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":1 -> \"Intel IPU6 ${be_soc_cap} 0\":0[5]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2_be_soc}\":1 -> \"Intel IPU6 ${be_soc_cap} 0\":0[5]" 1>/dev/null
# DEPTH metadata node
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":2 -> \"Intel IPU6 ${be_soc_cap} 1\":0[5]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2_be_soc}\":2 -> \"Intel IPU6 ${be_soc_cap} 1\":0[5]" 1>/dev/null

media-ctl -v -l "\"D4XX rgb ${mux}\":0 -> \"DS5 mux ${mux}\":2[1]" 1>/dev/null
$media_ctl_cmd -v -l "\"D4XX rgb ${mux}\":0 -> \"DS5 mux ${mux}\":2[1]" 1>/dev/null
# RGB link
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":3 -> \"Intel IPU6 ${be_soc_cap} 2\":0[5]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2_be_soc}\":3 -> \"Intel IPU6 ${be_soc_cap} 2\":0[5]" 1>/dev/null
# RGB metadata node
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":4 -> \"Intel IPU6 ${be_soc_cap} 3\":0[5]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2_be_soc}\":4 -> \"Intel IPU6 ${be_soc_cap} 3\":0[5]" 1>/dev/null

# IR link
media-ctl -v -l "\"D4XX motion detection ${mux}\":0 -> \"DS5 mux ${mux}\":3[1]" 1>/dev/null
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":5 -> \"Intel IPU6 ${be_soc_cap} 4\":0[5]" 1>/dev/null
$media_ctl_cmd -v -l "\"D4XX motion detection ${mux}\":0 -> \"DS5 mux ${mux}\":3[1]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2_be_soc}\":5 -> \"Intel IPU6 ${be_soc_cap} 4\":0[5]" 1>/dev/null

# IMU link
media-ctl -v -l "\"D4XX imu ${mux}\":0 -> \"DS5 mux ${mux}\":4[1]" 1>/dev/null
media-ctl -v -l "\"Intel IPU6 ${csi2_be_soc}\":6 -> \"Intel IPU6 ${be_soc_cap} 5\":0[5]" 1>/dev/null
$media_ctl_cmd -v -l "\"D4XX imu ${mux}\":0 -> \"DS5 mux ${mux}\":4[1]" 1>/dev/null
$media_ctl_cmd -v -l "\"Intel IPU6 ${csi2_be_soc}\":6 -> \"Intel IPU6 ${be_soc_cap} 5\":0[5]" 1>/dev/null
[[ $quiet -eq 0 ]] && echo done
done
Loading