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);