rk3568 移植rk628

dts 配置文件

rk3568-ddr4-v10.dtsi
@@ -119,6 +119,28 @@
                regulator-always-on;
                regulator-boot-on;
        };
+
+       rk628_dc: rk628-dc {
+               compatible = "rockchip,dummy-codec";
+               #sound-dai-cells = <0>;
+       };
+
+       hdmiin-sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "rockchip,hdmiin";
+               simple-audio-card,bitclock-master = <&dailink0_master>;
+               simple-audio-card,frame-master = <&dailink0_master>;
+               status = "okay";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&i2s3_2ch>;
+               };
+
+               dailink0_master: simple-audio-card,codec {
+                       sound-dai = <&rk628_dc>;
+               };
+       };
 };


+&i2c3 {
+       clock-frequency = <400000>;
+       status = "okay";
+
+
+       rk628_csi: rk628_csi@50 {
+               compatible = "rockchip,rk628-csi-v4l2";
+               reg = <0x50>;
+               status = "okay";
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&rk628_irq &refclk_pins &rk628_reset &rk628_5v>;
+
+               assigned-clocks = <&pmucru CLK_WIFI>;
+               assigned-clock-rates = <24000000>;
+               clocks = <&pmucru CLK_WIFI>;
+               clock-names = "soc_24M";
+
+               rk628-irq-gpios = <&gpio4 RK_PC3 GPIO_ACTIVE_LOW>;
+               power-gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>;
+               reset-gpios = <&gpio4 RK_PD2 GPIO_ACTIVE_LOW>;
+               plugin-det-gpios = <&gpio3 RK_PD0 GPIO_ACTIVE_LOW>;
+               rockchip,camera-module-index = <0>;
+               rockchip,camera-module-facing = "back";
+               rockchip,camera-module-name = "RK628-CSI";
+               rockchip,camera-module-lens-name = "NC";
+
+               // hpd-output-inverted;
+
+               port {
+                       rk628_out: endpoint {
+                               remote-endpoint = <&mipi_in>;
+                               data-lanes = <1 2 3 4>;
+                       };
+               };
+       };
+};
+
+&csi2_dphy_hw {
+       status = "okay";
+};
+
+&csi2_dphy0 {
+       status = "okay";
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       mipi_in: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&rk628_out>;
+                               data-lanes = <1 2 3 4>;
+                       };
+               };
+               port@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       csidphy0_out: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&mipi_csi2_input>;
+                       };
+               };
+       };
+};
+
+&mipi_csi2 {
+       status = "okay";
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               port@0 {
+                       reg = <0>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       mipi_csi2_input: endpoint@1 {
+                                       reg = <1>;
+                                       remote-endpoint = <&csidphy0_out>;
+                                       data-lanes = <1 2 3 4>;
+                               };
+                       };
+               port@1 {
+                       reg = <1>;
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       mipi_csi2_output: endpoint@0 {
+                               reg = <0>;
+                               remote-endpoint = <&cif_mipi_in>;
+                               data-lanes = <1 2 3 4>;
+                       };
+               };
+       };
+};
+
+&rkcif {
+       status = "okay";
+};
+&rkcif_mipi_lvds {
+       status = "okay";
+       port {
+               cif_mipi_in: endpoint {
+                       remote-endpoint = <&mipi_csi2_output>;
+                       data-lanes = <1 2 3 4>;
+               };
+       };
+};
+&rkcif_mmu {
+       status = "okay";
+};

@@ -415,6 +554,19 @@
                        rockchip,pins = <3 RK_PB6 RK_FUNC_GPIO &pcfg_pull_up>;//ÕâÀïÐèÒªÅäÖÃisolateÒý½Å£¬Ä¬ÈÏpull up
                };
        };
+
+       rk628  {
+               rk628_irq: rk628-irq {
+                       rockchip,pins =<4 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+               rk628_reset:rk628_reset{
+                        rockchip,pins =<4 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+               rk628_5v:rk628-5v{
+                        rockchip,pins =<3 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
 };

+
+&i2s3_2ch {
+       // rockchip,bclk-fs = <32>;
+       status = "okay";
+};
+

diff --git a/code/kernel-4.19/arch/arm64/configs/rk3568_aio_defconfig b/code/kernel-4.19/arch/arm64/configs/rk3568_aio_defconfig
index ae6b8a64c18..e32e96dd5c0 100755
--- a/code/kernel-4.19/arch/arm64/configs/rk3568_aio_defconfig
+++ b/code/kernel-4.19/arch/arm64/configs/rk3568_aio_defconfig
@@ -543,8 +543,8 @@ CONFIG_RK3368_THERMAL=y
 CONFIG_WATCHDOG=y
 CONFIG_DW_WATCHDOG=y
 CONFIG_MFD_RK618=y
-CONFIG_MFD_RK628=y
-CONFIG_MFD_RK630_I2C=y
+#CONFIG_MFD_RK628=y
+#CONFIG_MFD_RK630_I2C=y
 CONFIG_MFD_RK808=y
 CONFIG_FUSB_30X=y
 CONFIG_REGULATOR=y
@@ -605,6 +605,7 @@ CONFIG_ROCKCHIP_DRM_TVE=y
 CONFIG_ROCKCHIP_RGB=y
 CONFIG_DRM_ROCKCHIP_RK618=y
 CONFIG_DRM_ROCKCHIP_RK628=y
+CONFIG_VIDEO_RK628=y
 CONFIG_DRM_PANEL_SIMPLE=y
 CONFIG_DRM_RK630_TVE=y
 CONFIG_DRM_RK1000_TVE=y
@@ -838,7 +839,7 @@ CONFIG_CPU_RK3328=y
 CONFIG_CPU_RK3368=y
 CONFIG_CPU_RK3399=y
 CONFIG_CPU_RK3568=y
-CONFIG_ANDROID_VERSION=0x08000000
+CONFIG_ANDROID_VERSION=0x09000000
 CONFIG_ROCKCHIP_PM_DOMAINS=y
 CONFIG_ROCKCHIP_PVTM=y
 CONFIG_ROCKCHIP_SUSPEND_MODE=y

rk628_irq_gpio 中断函数有问题,需要重新获取。

kernel\drivers\media\i2c\rk628
diff -r rk628_csi_v4l2.c rk628_csi_v4l2.c
82d81
< 	struct gpio_desc *rk628_irq_gpio;

< 		// def_edid.edid = rk628f_edid_init_data;
< 		def_edid.edid = edid_init_data;
---
> 		def_edid.edid = rk628f_edid_init_data;
1625,1626c1569,1570
< 		v4l2_dbg(1, debug, sd, "%s: md_ints: %#x, pdec_ints:%#x, plugin: %d signal_change:%d\n",
< 			 __func__, md_ints, pdec_ints, plugin,rk628_hdmirx_is_signal_change_ists(csi->rk628));
---
> 		v4l2_dbg(1, debug, sd, "%s: md_ints: %#x, pdec_ints:%#x, plugin: %d\n",
> 			 __func__, md_ints, pdec_ints, plugin);
1695a1640
> 
2520d2464
< 	clk_set_rate(csi->soc_24M, 24000000);
2553,2561d2496
< 
< 
< 	csi->rk628_irq_gpio = devm_gpiod_get_optional(dev, "rk628-irq",
< 						    GPIOD_IN);
< 	if (IS_ERR(csi->rk628_irq_gpio)) {
< 		dev_err(dev, "failed to get hdmirx det gpio\n");
< 		ret = PTR_ERR(csi->rk628_irq_gpio);
< 		return ret;
< 	}
2691d2625
< 	int i;
2725c2659
< 	// csi->hdmirx_irq = client->irq;
---
> 	csi->hdmirx_irq = client->irq;
2752,2756c2686
< 	for(i=0;i<2;i++)
< 	{
< 		rk628_version_parse(rk628);
< 		printk("rk628_version_parse:\n");
< 	}
---
> 	rk628_version_parse(rk628);
2777,2786d2706
< 
< 	for(i=0;i<2;i++)
< 	{
< 		err = rk628_i2c_read(csi->rk628, CSITX_CSITX_VERSION, &val);
< 		printk("CSITX VERSION: %#x  %d\n", val,err);
< 
< 		err = rk628_i2c_read(csi->rk628, CSITX1_CSITX_VERSION, &val);
< 		printk("CSITX1 VERSION: %#x  %d\n", val,err);
< 	}
< 
2876,2910c2796,2798
< // 	if (csi->hdmirx_irq) {
< // 		irq_flags = irqd_get_trigger_type(irq_get_irq_data(csi->hdmirx_irq));
< // 		v4l2_dbg(1, debug, sd, "cfg hdmirx irq, flags: %lu!\n", irq_flags);
< // 		err = devm_request_threaded_irq(dev, csi->hdmirx_irq, NULL,
< // 				rk628_csi_irq_handler, irq_flags |
< // 				IRQF_ONESHOT, "rk628_csi", csi);
< // 		if (err) {
< // 			v4l2_err(sd, "request rk628-csi irq failed! err:%d\n",
< // 					err);
< // 			goto err_work_queues;
< // 		}
< // 	} else {
< // 		v4l2_dbg(1, debug, sd, "no irq, cfg poll!\n");
< // 		INIT_WORK(&csi->work_i2c_poll,
< // 			  rk628_csi_work_i2c_poll);
< // #ifdef KERNEL_VERSION_4_19
< // 		timer_setup(&csi->timer, rk628_csi_irq_poll_timer, 0);
< // #else
< // 		csi->timer.data = (unsigned long)csi;
< // 		csi->timer.function = rk628_csi_irq_poll_timer;
< // #endif
< // 		csi->timer.expires = jiffies +
< // 				       msecs_to_jiffies(POLL_INTERVAL_MS);
< // 		add_timer(&csi->timer);
< // 	}
< 
< 
< 	if (csi->rk628_irq_gpio) {
< 		csi->hdmirx_irq = gpiod_to_irq(csi->rk628_irq_gpio);
< 		if (csi->hdmirx_irq < 0) {
< 			dev_err(csi->dev, "failed to get rk628_irq det irq\n");
< 			err = csi->hdmirx_irq;
< 			goto err_work_queues;
< 		}
< 
---
> 	if (csi->hdmirx_irq) {
> 		irq_flags = irqd_get_trigger_type(irq_get_irq_data(csi->hdmirx_irq));
> 		v4l2_dbg(1, debug, sd, "cfg hdmirx irq, flags: %lu!\n", irq_flags);
2912,2913c2800,2801
< 				rk628_csi_irq_handler, IRQF_TRIGGER_FALLING |
< 				IRQF_TRIGGER_RISING | IRQF_ONESHOT, "rk628_csi", csi);
---
> 				rk628_csi_irq_handler, irq_flags |
> 				IRQF_ONESHOT, "rk628_csi", csi);
2915c2803,2804
< 			dev_err(csi->dev, "failed to register rk628_irq_gpio irq (%d)\n", err);
---
> 			v4l2_err(sd, "request rk628-csi irq failed! err:%d\n",
> 					err);
2917a2807,2819
> 	} else {
> 		v4l2_dbg(1, debug, sd, "no irq, cfg poll!\n");
> 		INIT_WORK(&csi->work_i2c_poll,
> 			  rk628_csi_work_i2c_poll);
> #ifdef KERNEL_VERSION_4_19
> 		timer_setup(&csi->timer, rk628_csi_irq_poll_timer, 0);
> #else
> 		csi->timer.data = (unsigned long)csi;
> 		csi->timer.function = rk628_csi_irq_poll_timer;
> #endif
> 		csi->timer.expires = jiffies +
> 				       msecs_to_jiffies(POLL_INTERVAL_MS);
> 		add_timer(&csi->timer);
2937d2838
< 
2951,2952d2851
< 	
< 	// clk_prepare_enable(csi->soc_24M);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值