このエントリーをはてなブックマークに追加

Armadillo-x1のカメラドライバについて

Armadillo-x1のカメラドライバについて、ご教授下さい

/drivers/media/platform/mxc/capture/ov5640.c

を参考に、カメラドライバ追加を検討しております。

現状、カメラは接続出来ていない為、ov5640.cの撮影以外の挙動を確認しようとしておりますが
ioctl(VIDIOC_G_CTRL)をコールしても

ov5640_ioctl_desc

に登録した関数が呼び出されておりません。

そもそも、参考とするソースは上記であっていますでしょうか。
※修正内容を以下に記載致します。

カメラドライバの正しい有効化の方法について
恐れ入りますが、ご教授の程、宜しくお願い致します。

*******************************************************************************
【修正内容】
※修正ファイルを添付します。

●menuconfigの変更
    以下を有効化する
    [Device Drivers]
        ->[Multimedia support]
            ->[V4L platform devices]
                -><*>[OmniVision ov5640 camera support]
    ※これ以外はデフォルトのままです。

●armadillo_x1.dtsの修正
    imx7d-19x19-ddr3-arm2-csi.dts
    を参考に修正

●probe関数の修正
    カメラが接続されていない為、そのままではエラーとなる個所を修正し
    ov5640_probeを完走する様にします。

上記を行い、ビルドしたuImageとdtbファイルを書き込みました。
ov5640_probeがコールされ

camera ov5640 is found

のログが出力されている事を確認し

/dev/video0

も生成されておりました。

http://www.nxp.com/jp/products/microcontrollers-and-processors/arm-processors/i.mx-applications-processors/i.mx-7-processors/i.mx-7dual-processors-heterogeneous-processing-with-dual-arm-cortex-a7-cores-and-cortex-m4-core:i.MX7D?tab=Documentation_Tab
L4.1.15_2.0.0_LINUX_DOCS

に同梱されている

i.MX_BSP_Porting_Guide.pdf
    Chapter 7

を参考にしております。
*******************************************************************************

ファイル名 ファイルの説明
修正ファイル.zip

製品: 

  • Armadillo-X1

> Armadillo-x1のカメラドライバについて

溝渕です。

> /drivers/media/platform/mxc/capture/ov5640.c
 : (省略)
> そもそも、参考とするソースは上記であっていますでしょうか。
> ※修正内容を以下に記載致します。

パラレル接続のI2Cカメラを追加するのであれば、上記ソースは参考になるか
と思います。

> *******************************************************************************
> 【修正内容】
> ※修正ファイルを添付します。
>
> ●menuconfigの変更
> 以下を有効化する
> [Device Drivers]
> ->[Multimedia support]
> ->[V4L platform devices]
> -><*>[OmniVision ov5640 camera support]
> ※これ以外はデフォルトのままです。

"/drivers/media/platform/mxc/capture/ov5640.c"に対応するコンフィギュレー
ションは次の通りです。

 -> Device Drivers
   -> Multimedia support
     -> V4L platform devices
       -> MXC Video For Linux Video Capture
         -> MXC Camera/V4L2 PRP Features support
            -> OmniVision ov5640 camera support

> 現状、カメラは接続出来ていない為、ov5640.cの撮影以外の挙動を確認しようとしておりますが
> ioctl(VIDIOC_G_CTRL)をコールしても
>
> ov5640_ioctl_desc
>
> に登録した関数が呼び出されておりません。

"ov5640_ioctl_desc"に登録した関数は、V4L ioctrlから直接callされません。以下のfunctionにwrapされます。

drivers/media/platform/mxc/capture/mxc_v4l2_capture.c: mxc_v4l2_g_ctrl()

ioctl(VIDIOC_G_CTRL)に渡した"struct v4l2_control"のidメンバの値を確認
し、最終的に"vidioc_int_g_ctrl()"が通るかどうかを確認してみてください。

To:溝渕 様

To:溝渕 様

お世話になっております。

ご返信、ありがとうございます。

> パラレル接続のI2Cカメラを追加するのであれば、上記ソースは参考になるか
> と思います。

すいません。記載が漏れておりました。
ご指摘の通り、パラレル接続のI2Cカメラを追加したいと考えております。
参考ソースは妥当である事、承知致しました。

>
> "ov5640_ioctl_desc"に登録した関数は、V4L ioctrlから直接callされません。以下のfunctionにwrapされます。
>
> drivers/media/platform/mxc/capture/mxc_v4l2_capture.c: mxc_v4l2_g_ctrl()
>
> ioctl(VIDIOC_G_CTRL)に渡した"struct v4l2_control"のidメンバの値を確認
> し、最終的に"vidioc_int_g_ctrl()"が通るかどうかを確認してみてください。
>

こちら確認しましたが、mxc_v4l2_g_ctrl() はコールされておりません。

/drivers/media/v4l2-core/v4l2-ioctl.c
__video_do_ioctl()

が呼び出され、

if (!test_bit(_IOC_NR(cmd), vfd->valid_ioctls) && !((info->flags & INFO_FL_CTRL) && vfh && vfh->ctrl_handler))

が真となり、goto done で処理が抜けている様です。

溝渕です。

溝渕です。

> > パラレル接続のI2Cカメラを追加するのであれば、上記ソースは参考になるか
> > と思います。

すみません。以下のソースを参考にしてください。

drivers/media/platform/mxc/subdev/ov5640.c

"imx7d-19x19-ddr3-arm2-csi.dts"で利用されているドライバが上記のものです。

To:溝渕 様

To:溝渕 様

お世話になっております。

> drivers/media/platform/mxc/subdev/ov5640.c
>
> "imx7d-19x19-ddr3-arm2-csi.dts"で利用されているドライバが上記のものです。

ご教授有難う御座います。

上記をベースに

drivers/media/platform/mxc/subdev/mx6s_capture.c
mx6s_csi_ioctl_ops
・vidioc_g_ctrl
・vidioc_s_ctrl

drivers/media/platform/mxc/subdev/ov5640.c
ov5640_subdev_core_ops
・g_ctrl
・s_ctrl

を追加して
VIDIOC_G_CTRL、VIDIOC_S_CTRLが繋がる事を確認しました。
※参考ファイルとして添付しておきます。

もう1点、ご教授頂きたいのですが
今回、Y(8Bit)のみのグレースケールのカメラを接続しようと考えております。

I.MX7Dual資料のCSIに関する記述を確認する限り、グレースケールについては触れられていませんが
Bayerフォーマットはサポートしている記載が御座います。

ですので、Yのみでも、VIDIOC_S_FMTでV4L2_PIX_FMT_SBGGR8として取り込み
後は、ソフトウェアでYとして扱えば良いと思っているのですが
既に、その様に動作させた、実績などありますでしょうか。
※最悪、V4L2_PIX_FMT_YUYV等で幅を1/2にして動作させ様と考えております。

ファイル名 ファイルの説明
参考ファイル.zip

> ですので、Yのみでも、VIDIOC_S

> ですので、Yのみでも、VIDIOC_S_FMTでV4L2_PIX_FMT_SBGGR8として取り込み
> 後は、ソフトウェアでYとして扱えば良いと思っているのですが
> 既に、その様に動作させた、実績などありますでしょうか。

i.MX 7Dualでは実績はありませんが、他製品で(輝度情報のみの)グレースケー
ルのカメラを動作させたことがあります。

そのカメラとのMedia Bus FormatはSBGGR8で動かしていたので、恐らくご推測
の通りの方法で利用可能と思います。

To:溝渕 様

To:溝渕 様

お世話になっております。

> i.MX 7Dualでは実績はありませんが、他製品で(輝度情報のみの)グレースケー
> ルのカメラを動作させたことがあります。
>
> そのカメラとのMedia Bus FormatはSBGGR8で動かしていたので、恐らくご推測
> の通りの方法で利用可能と思います。

ご教授有難う御座います。

実際、センサを接続して動作確認は少し先になりますが、また、結果をご報告させて頂きます。

To:溝渕 様

To:溝渕 様

お世話になっております。

>
> 実際、センサを接続して動作確認は少し先になりますが、また、結果をご報告させて頂きます。
>

本投稿の内容の通り

・subdev/ov5640.c
・imx7d-19x19-ddr3-arm2-csi.dts

をベースにI2C制御のパラレル8Bit Y出力のセンサのデータ取り込みが出来きました。
※V4L2_PIX_FMT_YUYVで幅1/2での取り込みも可能でした。

ご協力、ありがとうございました。