From a52d69153e59302c6e58c099fd96601a8c493272 Mon Sep 17 00:00:00 2001 From: Elaine Zhang Date: Wed, 5 Jun 2024 11:02:44 +0800 Subject: [PATCH 1/7] arm64: dts: rockchip: rk3576: set aclk_php to 250M by default Signed-off-by: Elaine Zhang Change-Id: I5c0277bbc2f7583df5a93ec72d87b7c103ade20e --- arch/arm64/boot/dts/rockchip/rk3576.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3576.dtsi b/arch/arm64/boot/dts/rockchip/rk3576.dtsi index 4ed99a665cf0..cf5ba9547c2f 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3576.dtsi @@ -1781,7 +1781,8 @@ <&cru CLK_UART_FRAC_1>, <&cru CLK_UART_FRAC_2>, <&cru CLK_AUDIO_FRAC_0>, <&cru CLK_AUDIO_FRAC_1>, <&cru CLK_CPLL_DIV2>, <&cru CLK_CPLL_DIV4>, - <&cru CLK_CPLL_DIV10>, <&cru FCLK_DDR_CM0_CORE>; + <&cru CLK_CPLL_DIV10>, <&cru FCLK_DDR_CM0_CORE>, + <&cru ACLK_PHP_ROOT>; assigned-clock-parents = <&cru PLL_AUPLL>; assigned-clock-rates = <0>, @@ -1790,7 +1791,8 @@ <96000000>, <128000000>, <45158400>, <49152000>, <500000000>, <250000000>, - <100000000>, <500000000>; + <100000000>, <500000000>, + <250000000>; }; i2c0: i2c@27300000 { From dcaa39ee96cb26b4a72327b0595eb0db8d0b169e Mon Sep 17 00:00:00 2001 From: Chandler Chen Date: Thu, 30 May 2024 17:13:27 +0800 Subject: [PATCH 2/7] video: rockchip: mpp: fix unused buffer move fail issue When dmabuf cache disable: 1.move most recently used link node to link tail, instead of calculate oldest ktime when buffer full. 2.For those buffer import by ioctl MPP_CMD_TRANS_FD_TO_IOVA, move to static_list instead of used_list, and don't increase extra kref, so that it will release when user space call ioctl MPP_CMD_RELEASE_FD. Change-Id: I38f209c24f6cc7e831338e2417050e3ef39226f9 Signed-off-by: Chandler Chen --- drivers/video/rockchip/mpp/mpp_common.c | 4 +- drivers/video/rockchip/mpp/mpp_iommu.c | 52 ++++++++++++++++++------- drivers/video/rockchip/mpp/mpp_iommu.h | 8 +++- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c index bfe7d9715088..0e7261c8dd50 100644 --- a/drivers/video/rockchip/mpp/mpp_common.c +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -1363,7 +1363,7 @@ static int mpp_process_request(struct mpp_session *session, mpp_iommu_down_read(mpp->iommu_info); buffer = mpp_dma_import_fd(mpp->iommu_info, - session->dma, fd); + session->dma, fd, 1); mpp_iommu_up_read(mpp->iommu_info); if (IS_ERR_OR_NULL(buffer)) { mpp_err("can not import fd %d\n", fd); @@ -1770,7 +1770,7 @@ mpp_task_attach_fd(struct mpp_task *task, int fd) mem_region->is_dup = true; } else { mpp_iommu_down_read(mpp->iommu_info); - buffer = mpp_dma_import_fd(mpp->iommu_info, dma, fd); + buffer = mpp_dma_import_fd(mpp->iommu_info, dma, fd, 0); mpp_iommu_up_read(mpp->iommu_info); if (IS_ERR(buffer)) { mpp_err("can't import dma-buf %d\n", fd); diff --git a/drivers/video/rockchip/mpp/mpp_iommu.c b/drivers/video/rockchip/mpp/mpp_iommu.c index ee1bea35248c..9a3589314e0e 100644 --- a/drivers/video/rockchip/mpp/mpp_iommu.c +++ b/drivers/video/rockchip/mpp/mpp_iommu.c @@ -33,6 +33,7 @@ mpp_dma_find_buffer_fd(struct mpp_dma_session *dma, int fd) struct dma_buf *dmabuf; struct mpp_dma_buffer *out = NULL; struct mpp_dma_buffer *buffer = NULL, *n; + int find = 0; dmabuf = dma_buf_get(fd); if (IS_ERR(dmabuf)) @@ -47,9 +48,26 @@ mpp_dma_find_buffer_fd(struct mpp_dma_session *dma, int fd) */ if (buffer->dmabuf == dmabuf) { out = buffer; + find = 1; + list_move_tail(&buffer->link, &buffer->dma->used_list); break; } } + if (!find) { + list_for_each_entry_safe(buffer, n, + &dma->static_list, link) { + /* + * fd may dup several and point the same dambuf. + * thus, here should be distinguish with the dmabuf. + */ + if (buffer->dmabuf == dmabuf) { + out = buffer; + list_move_tail(&buffer->link, &buffer->dma->static_list); + break; + } + } + } + mutex_unlock(&dma->list_mutex); dma_buf_put(dmabuf); @@ -84,22 +102,20 @@ static int mpp_dma_remove_extra_buffer(struct mpp_dma_session *dma) { struct mpp_dma_buffer *n; - struct mpp_dma_buffer *oldest = NULL, *buffer = NULL; - ktime_t oldest_time = ktime_set(0, 0); + struct mpp_dma_buffer *removable = NULL, *buffer = NULL; if (dma->buffer_count > dma->max_buffers) { mutex_lock(&dma->list_mutex); list_for_each_entry_safe(buffer, n, &dma->used_list, link) { - if (ktime_to_ns(oldest_time) == 0 || - ktime_after(oldest_time, buffer->last_used)) { - oldest_time = buffer->last_used; - oldest = buffer; + if (kref_read(&buffer->ref) == 1) { + removable = buffer; + break; } } - if (oldest && kref_read(&oldest->ref) == 1) - kref_put(&oldest->ref, mpp_dma_release_buffer); + if (removable) + kref_put(&removable->ref, mpp_dma_release_buffer); mutex_unlock(&dma->list_mutex); } @@ -176,7 +192,7 @@ int mpp_dma_free(struct mpp_dma_buffer *buffer) struct mpp_dma_buffer *mpp_dma_import_fd(struct mpp_iommu_info *iommu_info, struct mpp_dma_session *dma, - int fd) + int fd, int static_use) { int ret = 0; struct sg_table *sgt; @@ -196,10 +212,8 @@ struct mpp_dma_buffer *mpp_dma_import_fd(struct mpp_iommu_info *iommu_info, /* Check whether in dma session */ buffer = mpp_dma_find_buffer_fd(dma, fd); if (!IS_ERR_OR_NULL(buffer)) { - if (kref_get_unless_zero(&buffer->ref)) { - buffer->last_used = ktime_get(); + if (kref_get_unless_zero(&buffer->ref)) return buffer; - } dev_dbg(dma->dev, "missing the fd %d\n", fd); } @@ -224,7 +238,6 @@ struct mpp_dma_buffer *mpp_dma_import_fd(struct mpp_iommu_info *iommu_info, buffer->dmabuf = dmabuf; buffer->dir = DMA_BIDIRECTIONAL; - buffer->last_used = ktime_get(); attach = dma_buf_attach(buffer->dmabuf, dma->dev); if (IS_ERR(attach)) { @@ -247,13 +260,16 @@ struct mpp_dma_buffer *mpp_dma_import_fd(struct mpp_iommu_info *iommu_info, kref_init(&buffer->ref); - if (!IS_ENABLED(CONFIG_DMABUF_CACHE)) + if (!static_use && !IS_ENABLED(CONFIG_DMABUF_CACHE)) /* Increase the reference for used outside the buffer pool */ kref_get(&buffer->ref); mutex_lock(&dma->list_mutex); dma->buffer_count++; - list_add_tail(&buffer->link, &dma->used_list); + if (static_use) + list_add_tail(&buffer->link, &dma->static_list); + else + list_add_tail(&buffer->link, &dma->used_list); mutex_unlock(&dma->list_mutex); return buffer; @@ -333,6 +349,11 @@ int mpp_dma_session_destroy(struct mpp_dma_session *dma) link) { kref_put(&buffer->ref, mpp_dma_release_buffer); } + list_for_each_entry_safe(buffer, n, + &dma->static_list, + link) { + kref_put(&buffer->ref, mpp_dma_release_buffer); + } mutex_unlock(&dma->list_mutex); kfree(dma); @@ -354,6 +375,7 @@ mpp_dma_session_create(struct device *dev, u32 max_buffers) mutex_init(&dma->list_mutex); INIT_LIST_HEAD(&dma->unused_list); INIT_LIST_HEAD(&dma->used_list); + INIT_LIST_HEAD(&dma->static_list); if (max_buffers > MPP_SESSION_MAX_BUFFERS) { mpp_debug(DEBUG_IOCTL, "session_max_buffer %d must less than %d\n", diff --git a/drivers/video/rockchip/mpp/mpp_iommu.h b/drivers/video/rockchip/mpp/mpp_iommu.h index fc5d4bd63210..265f276de281 100644 --- a/drivers/video/rockchip/mpp/mpp_iommu.h +++ b/drivers/video/rockchip/mpp/mpp_iommu.h @@ -57,6 +57,12 @@ struct mpp_dma_session { /* the buffer used in session */ struct list_head unused_list; struct list_head used_list; + /* + * For those buffer import by ioctl MPP_CMD_TRANS_FD_TO_IOVA, + * move to static_list instead of used_list and don't increase extra kref, + * so that it will release when user space call ioctl MPP_CMD_RELEASE_FD. + */ + struct list_head static_list; struct mpp_dma_buffer dma_bufs[MPP_SESSION_MAX_BUFFERS]; /* the mutex for the above buffer list */ struct mutex list_mutex; @@ -108,7 +114,7 @@ int mpp_dma_free(struct mpp_dma_buffer *buffer); struct mpp_dma_buffer * mpp_dma_import_fd(struct mpp_iommu_info *iommu_info, - struct mpp_dma_session *dma, int fd); + struct mpp_dma_session *dma, int fd, int static_use); int mpp_dma_release(struct mpp_dma_session *dma, struct mpp_dma_buffer *buffer); int mpp_dma_release_fd(struct mpp_dma_session *dma, int fd); From 9aba6831dd39e5f25c0e9b84c30ff9cad32e1f61 Mon Sep 17 00:00:00 2001 From: Zheng zhiqi Date: Thu, 25 Apr 2024 17:45:58 +0800 Subject: [PATCH 3/7] arm64: dts: rockchip: rk3576-vehiclke-evb: use vehicle sound 1. open spi1 dev 2. change spi codec to dummy codec 3. remove es8388 sound This patch keeps the vehicle sound to be "car-rk3308-sound" since the audio HAL use it fixed. Change-Id: I6a968e09f548cffa64088bfba0c7c266f3727146 Signed-off-by: Zheng zhiqi Signed-off-by: Jianqun Xu --- .../boot/dts/rockchip/rk3576-vehicle-evb.dtsi | 115 ++++-------------- 1 file changed, 23 insertions(+), 92 deletions(-) diff --git a/arch/arm64/boot/dts/rockchip/rk3576-vehicle-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3576-vehicle-evb.dtsi index 1f396ccb7d00..8b1d556eb4a0 100644 --- a/arch/arm64/boot/dts/rockchip/rk3576-vehicle-evb.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3576-vehicle-evb.dtsi @@ -8,61 +8,6 @@ #include "rk3576-rk806.dtsi" / { - es8388_sound: es8388-sound { - status = "disabled"; - compatible = "rockchip,multicodecs-card"; - rockchip,card-name = "rockchip-es8388"; - hp-det-gpio = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; - io-channels = <&saradc 3>; - io-channel-names = "adc-detect"; - keyup-threshold-microvolt = <1800000>; - poll-interval = <100>; - spk-con-gpio = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>; - hp-con-gpio = <&gpio3 RK_PD6 GPIO_ACTIVE_HIGH>; - rockchip,format = "i2s"; - rockchip,mclk-fs = <256>; - rockchip,cpu = <&sai1>; - rockchip,codec = <&es8388>; - rockchip,audio-routing = - "Headphone", "LOUT1", - "Headphone", "ROUT1", - "Speaker", "LOUT2", - "Speaker", "ROUT2", - "Headphone", "Headphone Power", - "Headphone", "Headphone Power", - "Speaker", "Speaker Power", - "Speaker", "Speaker Power", - "LINPUT1", "Main Mic", - "LINPUT2", "Main Mic", - "RINPUT1", "Headset Mic", - "RINPUT2", "Headset Mic"; - pinctrl-names = "default"; - pinctrl-0 = <&hp_det>; - play-pause-key { - label = "playpause"; - linux,code = ; - press-threshold-microvolt = <2000>; - }; - }; - - pdmics: dummy-codec { - status = "disabled"; - compatible = "rockchip,dummy-codec"; - #sound-dai-cells = <0>; - }; - - pdm_mic_array: pdm-mic-array { - status = "disabled"; - compatible = "simple-audio-card"; - simple-audio-card,name = "rockchip,pdm-mic-array"; - simple-audio-card,cpu { - sound-dai = <&pdm1>; - }; - simple-audio-card,codec { - sound-dai = <&pdmics>; - }; - }; - vcc5v0_buck: vcc5v0-buck { compatible = "regulator-fixed"; regulator-name = "vcc5v0_buck"; @@ -142,8 +87,6 @@ vin-supply = <&vcc_3v3_s0>; }; - - vcc5v0_host_usb30: vcc5v0-host-usb30 { compatible = "regulator-fixed"; regulator-name = "vcc5v0_host_usb30"; @@ -176,7 +119,13 @@ vin-supply = <&vcc5v0_buck>; }; - car_rk3308_sound: car-rk3308-sound { + dummy_codec: dummy-codec { + status = "okay"; + compatible = "rockchip,dummy-codec"; + #sound-dai-cells = <0>; + }; + + vehicle_adsp_sound: vehicle-adsp-sound { status = "okay"; compatible = "simple-audio-card"; simple-audio-card,name = "rockchip,car-rk3308-sound"; @@ -190,7 +139,7 @@ dai-tdm-slot-width = <32>; }; codec_master: simple-audio-card,codec { - sound-dai = <&spi_codec>; + sound-dai = <&dummy_codec>; }; }; }; @@ -223,7 +172,6 @@ status = "okay"; }; - &gmac0 { /* Use rgmii-rxid mode to disable rx delay inside Soc */ phy-mode = "rgmii-rxid"; @@ -325,7 +273,6 @@ pinctrl-names = "default"; pinctrl-0 = <&i2c7m1_xfer>; - icm42607_acc: icm_acc@68 { status = "okay"; compatible = "icm42607_acc"; @@ -393,12 +340,6 @@ }; }; - headphone { - hp_det: hp-det { - rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>; - }; - }; - s35390a { s35390a_int: s35390a-int { rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>; @@ -435,12 +376,6 @@ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>; }; }; - - rk3308 { - rk3308_reset: rk3308-reset { - rockchip,pins = <2 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>; - }; - }; }; &route_hdmi { @@ -452,15 +387,15 @@ status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&sai1m0_lrck - &sai1m0_sclk - &sai1m0_sdi0 - &sai1m0_sdi1 - &sai1m0_sdi2 - &sai1m0_sdi3 - &sai1m0_sdo0 - &sai1m0_sdo1 - &sai1m0_sdo2 - &sai1m0_sdo3>; + &sai1m0_sclk + &sai1m0_sdi0 + &sai1m0_sdi1 + &sai1m0_sdi2 + &sai1m0_sdi3 + &sai1m0_sdo0 + &sai1m0_sdo1 + &sai1m0_sdo2 + &sai1m0_sdo3>; }; &sdmmc { @@ -469,18 +404,14 @@ &spi1 { status = "okay"; - pinctrl-names = "default"; + max-freq = <50000000>; /* spi internal clk, don't modify */ + pinctrl-names = "default", "high_speed"; pinctrl-0 = <&spi1m1_csn0 &spi1m1_pins>; - - spi_codec: spi-codec@1 { - compatible ="rockchip,spi-codec"; - reg = <1>; + spi_dev@0 { + compatible = "rockchip,spidev"; + reg = <0>; + spi-max-frequency = <50000000>; spi-lsb-first; - spi-max-frequency = <5000000>; - #sound-dai-cells = <0>; - pinctrl-names = "default"; - pinctrl-0 = <&rk3308_reset>; - status = "okay"; }; }; From f48e683a54336609cc6bb2ac864991a249a04f14 Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 4 Jun 2024 20:26:00 +0800 Subject: [PATCH 4/7] dmaengine: pl330: Workaround for interleaved for GKI Once upstream is merged, this patch can be dropped. also for line CONFIG_NO_GKI Signed-off-by: Sugar Zhang Change-Id: I2b0fc69aa6673e46dcd65e0369ab4353e7c4f9fc --- drivers/dma/pl330.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 178f90623fbe..25db2656ebdd 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -2943,6 +2943,8 @@ static struct dma_async_tx_descriptor *pl330_prep_interleaved_dma( #ifdef CONFIG_NO_GKI nump = xt->nump; +#else + nump = xt->sgl[1].size; #endif numf = xt->numf; size = xt->sgl[0].size; From 56d2082cec84e411066f283c26e9516fd222b4cf Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Tue, 4 Jun 2024 20:38:25 +0800 Subject: [PATCH 5/7] ASoC: rockchip: multi-dais: Workaround for interleaved for GKI Once upstream is merged, this patch can be dropped. also for line CONFIG_NO_GKI Signed-off-by: Sugar Zhang Change-Id: I83f5a08e93010741c26ec044f70b388a50e6c7a9 --- sound/soc/rockchip/rockchip_multi_dais_pcm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sound/soc/rockchip/rockchip_multi_dais_pcm.c b/sound/soc/rockchip/rockchip_multi_dais_pcm.c index d0173bfd54aa..0feab27b477d 100644 --- a/sound/soc/rockchip/rockchip_multi_dais_pcm.c +++ b/sound/soc/rockchip/rockchip_multi_dais_pcm.c @@ -196,6 +196,8 @@ static int dmaengine_config_interleaved(struct snd_pcm_substream *substream, #ifdef CONFIG_NO_GKI xt->nump = nump; +#else + xt->sgl[1].size = nump; #endif xt->numf = numf; @@ -692,8 +694,14 @@ static int dmaengine_mpcm_open(struct snd_soc_component *component, if (!prtd) return -ENOMEM; +#ifdef CONFIG_NO_GKI prtd->xt = kzalloc(sizeof(struct dma_interleaved_template) + sizeof(struct data_chunk), GFP_KERNEL); +#else + prtd->xt = kzalloc(sizeof(struct dma_interleaved_template) + + sizeof(struct data_chunk) * 2, GFP_KERNEL); + +#endif if (!prtd->xt) { kfree(prtd); return -ENOMEM; From 675c5920332125afb122feb436ba0934a8ee69e7 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Tue, 30 Apr 2024 09:48:50 +0800 Subject: [PATCH 6/7] arm64: configs: rockchip_linux_defconfig: enable CONFIG_ROCKCHIP_DP_MST_AUX_CLIENT Change-Id: If1070103e6b0468456d8c480a73c0315095a3b59 Signed-off-by: Zhang Yubing --- arch/arm64/configs/rockchip_linux_defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/configs/rockchip_linux_defconfig b/arch/arm64/configs/rockchip_linux_defconfig index 67f36e8b9884..b5c3d2e42d86 100644 --- a/arch/arm64/configs/rockchip_linux_defconfig +++ b/arch/arm64/configs/rockchip_linux_defconfig @@ -355,6 +355,7 @@ CONFIG_ROCKCHIP_INNO_HDMI=y CONFIG_ROCKCHIP_LVDS=y CONFIG_ROCKCHIP_RGB=y CONFIG_ROCKCHIP_DW_HDCP2=y +CONFIG_ROCKCHIP_DP_MST_AUX_CLIENT=y CONFIG_DRM_PANEL_SIMPLE=y CONFIG_DRM_DISPLAY_CONNECTOR=y CONFIG_DRM_SII902X=y From 33c51f42c402b76fd06e46d1ae73f8b7080b6f43 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Tue, 30 Apr 2024 09:08:42 +0800 Subject: [PATCH 7/7] drm/rockchip: dp-mst-sim: support mst device without aux client some MST-capable device may not support Messaging AUX Client. In this case, sideband MSG can't be transferred between DPTX and the MST device. A solution is to simulate a Messaging AUX client in MST device side to deal with sideband MSG. Change-Id: I7c68f6d0bd88501c4e19097e3a1f9a9fabcf2698 Signed-off-by: Zhang Yubing --- drivers/gpu/drm/rockchip/Kconfig | 6 + drivers/gpu/drm/rockchip/Makefile | 3 + .../drm/rockchip/rockchip_dp_mst_aux_client.c | 326 ++++++ .../drm/rockchip/rockchip_dp_mst_aux_client.h | 41 + .../rockchip_dp_mst_aux_client_helper.c | 938 ++++++++++++++++++ .../rockchip_dp_mst_aux_client_helper.h | 117 +++ 6 files changed, 1431 insertions(+) create mode 100644 drivers/gpu/drm/rockchip/rockchip_dp_mst_aux_client.c create mode 100644 drivers/gpu/drm/rockchip/rockchip_dp_mst_aux_client.h create mode 100644 drivers/gpu/drm/rockchip/rockchip_dp_mst_aux_client_helper.c create mode 100644 drivers/gpu/drm/rockchip/rockchip_dp_mst_aux_client_helper.h diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig index 686d52e368a0..3c39856f234a 100644 --- a/drivers/gpu/drm/rockchip/Kconfig +++ b/drivers/gpu/drm/rockchip/Kconfig @@ -173,6 +173,12 @@ config ROCKCHIP_DW_HDCP2 Choose this option to enable support for the Synopsys Designware HDCP2 Controller. +config ROCKCHIP_DP_MST_AUX_CLIENT + tristate "dp mst aux client" + select DRM_DISPLAY_DP_HELPER + help + This selects support dp mst device that not support aux client. + source "drivers/gpu/drm/rockchip/rk618/Kconfig" endif diff --git a/drivers/gpu/drm/rockchip/Makefile b/drivers/gpu/drm/rockchip/Makefile index 3809b69975bc..2bf6b589b957 100644 --- a/drivers/gpu/drm/rockchip/Makefile +++ b/drivers/gpu/drm/rockchip/Makefile @@ -32,3 +32,6 @@ obj-$(CONFIG_ROCKCHIP_PANEL_NOTIFIER) += rockchip_panel_notifier.o obj-$(CONFIG_ROCKCHIP_DW_HDCP2) += dw_hdcp2.o obj-$(CONFIG_DRM_ROCKCHIP) += rockchipdrm.o obj-$(CONFIG_DRM_ROCKCHIP_RK618) += rk618/ + +rockchip_aux_client-y := rockchip_dp_mst_aux_client.o rockchip_dp_mst_aux_client_helper.o +obj-$(CONFIG_ROCKCHIP_DP_MST_AUX_CLIENT) += rockchip_aux_client.o diff --git a/drivers/gpu/drm/rockchip/rockchip_dp_mst_aux_client.c b/drivers/gpu/drm/rockchip/rockchip_dp_mst_aux_client.c new file mode 100644 index 000000000000..a763cfa8c1d8 --- /dev/null +++ b/drivers/gpu/drm/rockchip/rockchip_dp_mst_aux_client.c @@ -0,0 +1,326 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Rockchip DP MST simulation axu client + * + * Copyright (c) 2024 Rockchip Electronics Co. Ltd. + * + * Author: Zhang Yubing + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include