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 = <®_3p3v>; /* 3.3v, enabled via 2.8 VGEN6 */
AVDD-supply = <®_3p3v>; /* 1.8v */
DVDD-supply = <®_3p3v>; /* 1.8v */
PVDD-supply = <®_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