认识一下设备树,认识设备树,不要理解为“连线”,理解为:我cpu有很多资源形成了SoC,各种控制器,引脚这些一堆,我再要把他们分配给外设用,在设备树中结构成一个个节点,节点里的说明是,我哪些资源给你用,哪些资源给他用,这些资源的属性怎样,然后你要在你自己的驱动中获得这些分配信息,用好这些分配给你的资源,当然你的驱动也是运行在我cpu上的,这就很牛B。你cpu就很NB,你SoC就很NB
&i2c2 {
status = "okay";
pinctrl-0 = <&i2c2m4_xfer>;//裸的gpio gpio0-4 共5组bank,每组bank 0-31 共32个pin,每个ping有0-7 8种复用共能
//i2c2m4_xfer 里描述了 现在用到哪个pin 哪个复用的功能,具体怎么实现复用和选取特定复用共能
//就靠pinctrl 服务系统提供
ov5695_1: ov5695@36 {
status = "okay";
compatible = "ovti,ov5695";
reg = <0x36>;
clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
clock-names = "xvclk";
power-domains = <&power RK3588_PD_VI>;
pinctrl-names = "default";//pinctl的client 有一种状态 state: default,还可能有 sleep等,这里没有
pinctrl-0 = <&mipim0_camera1_clk>;//第0个状态的名字是default,对应引脚在此定义:一组引脚mipim0_camera1_clk,位于rk3588-pinctl.dtsi中pinctl mipi节点中,在那里用rockchip,pins 属性制定了具体是哪些引脚
reset-gpios = <&gpio1 RK_PA3 GPIO_ACTIVE_LOW>;//oringal//裸的gpio 使用是最纯粹的,没有pinctrl 包装MUX
//reset-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;
pwdn-gpios = <&gpio1 RK_PA2 GPIO_ACTIVE_LOW>;
rockchip,camera-module-index = <0>;
rockchip,camera-module-facing = "back";
rockchip,camera-module-name = "default";
rockchip,camera-module-lens-name = "default";
port {
ov5695_out_1: endpoint {
remote-endpoint = <&mipi_in_ucam0>;
data-lanes = <1 2>;
};
};
};
};