adv7180 module i.mx6q

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

adv7180 module i.mx6q

942 Views
blackhuang
Contributor I

Dear nxp fae;

                  我使用i.mx6q sabresd移植adv7180时、遇到一下问题,项目比较紧急,还希望您们能够多多帮助。

系统是android6.0,内核是4.1.15

            附件一为dts,

            附件二是内核配置

             附件三为模块加载顺序和出错部分

之前使用非模块加载,直接配置进内核,出现:

DBG sensor data is at c1255f50

但是没有提示到adv7180加载到i2c上成功、是不是由于i2c错误引起啦驱动不能正常工作?

目前已经协助硬件正在排查,还希望能够得到您们指导,

将不胜感激!

Labels (1)
0 Kudos
4 Replies

839 Views
weidong_sun
NXP TechSupport
NXP TechSupport

Hello black,

  我们的Sabre Auto 板子已经支持了ADV7180,Sabre Auto板子的device tree文件是:

linux-imx-4.9.88/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi,要在device tree里支持ADV7180,只需要 这几个步骤:

1. I2C的不用配置。开发板用I2C3

        pinctrl_i2c3: i2c3grp {
            fsl,pins = <
                MX6QDL_PAD_GPIO_3__I2C3_SCL  0x4001b8b1
                MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
            >;
        };

2. ADV7180挂载I2C3 bus的节点

&i2c3 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_i2c3>;
    status = "okay";

    adv7180: adv7180@21 {
        compatible = "adv,adv7180";
        reg = <0x21>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_ipu1_1>;
        clocks = <&clks IMX6QDL_CLK_CKO>;
        clock-names = "csi_mclk";
        DOVDD-supply = <&reg_3p3v>; /* 3.3v, enabled via 2.8 VGEN6 */
        AVDD-supply = <&reg_3p3v>;  /* 1.8v */
        DVDD-supply = <&reg_3p3v>;  /* 1.8v */
        PVDD-supply = <&reg_3p3v>;  /* 1.8v */
        pwn-gpios = <&max7310_b 2 0>; /* 这是使用了扩展的GPIO,你要检查一下7180 DRIVER,是否你不用这个 */
        csi_id = <0>;
        mclk = <24000000>;
        mclk_source = <0>;
        cvbs = <1>;
    };

3. CSI0复用(如果你是8bit的,那么复用CSI0_DAT12~CSI0_DAT19,硬件也连接到这8个脚上)

        pinctrl_ipu1_1: ipu1grp-1 { /* parallel port 16-bit */
            fsl,pins = <
                MX6QDL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04   0x80000000
                MX6QDL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05   0x80000000
                MX6QDL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06   0x80000000
                MX6QDL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07   0x80000000
                MX6QDL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08   0x80000000
                MX6QDL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09   0x80000000
                MX6QDL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10  0x80000000
                MX6QDL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11  0x80000000
                MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12  0x80000000
                MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13  0x80000000
                MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14  0x80000000
                MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15  0x80000000
                MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16  0x80000000
                MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17  0x80000000
                MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18  0x80000000
                MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19  0x80000000
                MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 0x80000000
                MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC    0x80000000
                MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC   0x80000000
            >;
        };

你最好在adv7180的probe里加上调试信息,以确认是否I2C找到它了;另外adv7180的I2C地址是否正确也要检查一下。无论如何,I2C找不到adv7180就是没有办法继续调下去。

所以,对比一下imx6qdl-sabreauto.dtsi,是不是什么地方出了问题。

另外:如果你不把模块编译进内核,那么你可以试试modprobe 加载.ko驱动(如果insmod 不行的话),最后调试好,你还是要把它编译进内核的。

BR,

weidong

0 Kudos

839 Views
blackhuang
Contributor I

Hi Wigros,

               非常感谢您的帮助,我这边昨天上午已经调试成功。我是使用模块加载的形式,主要失败的原因是处在模块加载的顺序上

具体步骤:

                  insmod v4l2-int-device.ko 此步必须先执行
                  insmod adv7180_tvin.ko
                  insmod ipu_prp_enc.ko
                  insmod ipu_bg_overlay_sdc.ko
                  insmod ipu_fg_overlay_sdc.ko
                  insmod ipu_csi_enc.ko
                  insmod ipu_still.ko
                  insmod mxc_v4l2_capture.ko

再使用mxc-v4l2-tvin测试即可,但是最大的疑问就是我之前使用直接编译进内核为何不行,顺序会影响结果?

正如您所说,最后我还是要编译进内核,您是否有更好的建议。

再次对您表示感谢!!!

0 Kudos

838 Views
weidong_sun
NXP TechSupport
NXP TechSupport

不错,干得好! 编译进内核是个好的选择!

伟东

0 Kudos

839 Views
blackhuang
Contributor I

Hi Wigros 

               非常感谢、我昨天这边已经调试成功啦,我的i2c和设备树都没有问题。

我昨天具体是使用模块加载的方法成功的。我最大的错误就是把加载模块的顺序搞错啦。

正确顺序是:

                  insmod  v4l2-int-device.ko      这一步必须放在第一位,此步骤是初始化v4l2

                  insmod  adv7180_tvin.ko

                  insmod   ipu_prp_enc.ko

                  insmod   ipu_bg_overlay_sdc.ko 

                  insmod   ipu_bg_overlay_sdc.ko 

                  insmod   ipu_csi_enc.ko

                  insmod   ipu_still.ko

                  insmod   mxc_v4l2_capture.ko

再使用mxc-v4l2-tvin 测试即可。

现在唯一的疑问是为啥我使用非模块化编进内核无法使用,是否是由于顺序的影响?

0 Kudos