From 031478d665b11f5c3c17a4def81be23511ed2f7d Mon Sep 17 00:00:00 2001 From: Zefa Chen Date: Thu, 14 Dec 2023 19:03:48 +0800 Subject: [PATCH 1/4] media: i2c: gc8034 add delay after power on Signed-off-by: Zefa Chen Change-Id: I1af45405869ff05f52318ea9237d9cf2f9906ccd --- drivers/media/i2c/gc8034.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/i2c/gc8034.c b/drivers/media/i2c/gc8034.c index caa71e5e119f..bd7e4bdc629a 100644 --- a/drivers/media/i2c/gc8034.c +++ b/drivers/media/i2c/gc8034.c @@ -2575,6 +2575,8 @@ static int __gc8034_power_on(struct gc8034 *gc8034) if (!IS_ERR(gc8034->reset_gpio)) gpiod_set_value_cansleep(gc8034->reset_gpio, 0); + usleep_range(6000, 7000); + /* 8192 cycles prior to first SCCB transaction */ delay_us = gc8034_cal_delay(8192); usleep_range(delay_us, delay_us * 2); From 231360c3df160035a6176a07173375bdb6b0750c Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Wed, 13 Dec 2023 11:07:17 +0800 Subject: [PATCH 2/4] PCI: rockchip: dw-dmatest: Bind the dma transmission code with the device Change-Id: Ida6d0b66c259bb4ddd8e84662f3df4ff0c37987c Signed-off-by: Jon Lin --- drivers/pci/controller/dwc/pcie-dw-dmatest.c | 29 +++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-dmatest.c b/drivers/pci/controller/dwc/pcie-dw-dmatest.c index 049256e61433..3d5b44f4a15e 100644 --- a/drivers/pci/controller/dwc/pcie-dw-dmatest.c +++ b/drivers/pci/controller/dwc/pcie-dw-dmatest.c @@ -50,7 +50,7 @@ static bool is_wired; module_param_named(is_wired, is_wired, bool, 0644); MODULE_PARM_DESC(is_wired, "Transfer is triggered by wired DMA(default false)"); -#define PCIE_DW_MISC_DMATEST_DEV_MAX 8 +#define PCIE_DW_MISC_DMATEST_DEV_MAX 1 #define PCIE_DMA_CHANEL_MAX_NUM 2 #define PCIE_DMA_LL_MAX_NUM 1024 /* Unrestricted, tentative value */ @@ -69,21 +69,20 @@ struct pcie_dw_dmatest_dev { struct dma_table wr_tbl_buf[PCIE_DMA_CHANEL_MAX_NUM]; }; -static struct pcie_dw_dmatest_dev s_dmatest_dev[PCIE_DW_MISC_DMATEST_DEV_MAX]; -static int cur_dmatest_dev; +static struct pcie_dw_dmatest_dev *s_dmatest_dev; static void pcie_dw_dmatest_show(void) { int i; for (i = 0; i < PCIE_DW_MISC_DMATEST_DEV_MAX; i++) { - if (s_dmatest_dev[i].obj) - dev_info(s_dmatest_dev[i].obj->dev, " test_dev index %d\n", i); + if (s_dmatest_dev) + dev_info(s_dmatest_dev->obj->dev, " test_dev index %d\n", i); else break; } - dev_info(s_dmatest_dev[test_dev].obj->dev, " is current test_dev\n"); + dev_info(s_dmatest_dev->obj->dev, " is current test_dev\n"); } static int rk_pcie_dma_wait_for_finished(struct dma_trx_obj *obj, struct dma_table *table) @@ -214,9 +213,13 @@ static int rk_pcie_dma_interrupt_handler_call_back(struct dma_trx_obj *obj, u32 struct dma_trx_obj *pcie_dw_dmatest_register(struct device *dev, bool irq_en) { struct dma_trx_obj *obj; - struct pcie_dw_dmatest_dev *dmatest_dev = &s_dmatest_dev[cur_dmatest_dev]; + struct pcie_dw_dmatest_dev *dmatest_dev; int i; + dmatest_dev = devm_kzalloc(dev, sizeof(struct pcie_dw_dmatest_dev), GFP_KERNEL); + if (!dmatest_dev) + return ERR_PTR(-ENOMEM); + obj = devm_kzalloc(dev, sizeof(struct dma_trx_obj), GFP_KERNEL); if (!obj) return ERR_PTR(-ENOMEM); @@ -236,14 +239,14 @@ struct dma_trx_obj *pcie_dw_dmatest_register(struct device *dev, bool irq_en) /* Enable IRQ transfer as default */ dmatest_dev->irq_en = irq_en; - cur_dmatest_dev++; + s_dmatest_dev = dmatest_dev; return obj; } void pcie_dw_dmatest_unregister(struct dma_trx_obj *obj) { - cur_dmatest_dev = 0; + s_dmatest_dev = NULL; } int pcie_dw_wired_dma_frombus_block(struct dma_trx_obj *obj, u32 chn, @@ -309,7 +312,7 @@ static int dma_test(struct pcie_dw_dmatest_dev *dmatest_dev, u32 chn, static int dma_test_ch0(void *p) { - dma_test(&s_dmatest_dev[test_dev], 0, bus_addr, local_addr, test_size, + dma_test(s_dmatest_dev, 0, bus_addr, local_addr, test_size, cycles_count, rw_test & 0x1, (rw_test & 0x2) >> 1); return 0; @@ -319,10 +322,10 @@ static int dma_test_ch1(void *p) { /* Test in different area with ch0 */ if (chn_en == 3) - dma_test(&s_dmatest_dev[test_dev], 1, bus_addr + test_size, local_addr + test_size, test_size, + dma_test(s_dmatest_dev, 1, bus_addr + test_size, local_addr + test_size, test_size, cycles_count, rw_test & 0x1, (rw_test & 0x2) >> 1); else - dma_test(&s_dmatest_dev[test_dev], 1, bus_addr, local_addr, test_size, + dma_test(s_dmatest_dev, 1, bus_addr, local_addr, test_size, cycles_count, rw_test & 0x1, (rw_test & 0x2) >> 1); return 0; @@ -346,7 +349,7 @@ static int pcie_dw_dmatest(const char *val, const struct kernel_param *kp) { char tmp[8]; - if (!s_dmatest_dev[0].obj) { + if (!s_dmatest_dev) { pr_err("dmatest dev not exits\n"); return -1; From 8b565da34c2d06bdc374ecfde8090419ab000806 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Wed, 13 Dec 2023 15:01:36 +0800 Subject: [PATCH 3/4] misc: rockchip: pcie-rkep: Select PCIE_DW_DMATEST as default Change-Id: I23d3fe2e1ba7a6726b888432fa86b646867c0d61 Signed-off-by: Jon Lin --- drivers/misc/rockchip/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/misc/rockchip/Kconfig b/drivers/misc/rockchip/Kconfig index 3049d7169257..3329c6cd9c2b 100644 --- a/drivers/misc/rockchip/Kconfig +++ b/drivers/misc/rockchip/Kconfig @@ -6,6 +6,7 @@ config PCIE_FUNC_RKEP tristate "Rockchip PCIe EP function driver" depends on PCI depends on ARCH_ROCKCHIP + select PCIE_DW_DMATEST help Enable this configuration option to enable the host side function driver for Rockchip's EP demo function driver. From 786d0045885c9696d8c7af75d9d5bc97742ea8c1 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Fri, 15 Dec 2023 10:12:10 +0800 Subject: [PATCH 4/4] mfd: rkx110_x120: fix compile no previous prototype warning Fixes: e0a3fc877881 ("mfd: rkx110_x120: register 2 panel when attach 2 screen") Change-Id: Iccc663b6f523c1b4e3307712628406bf10163030 Signed-off-by: Zhang Yubing --- drivers/mfd/rkx110_x120/rkx110_linktx.c | 2 +- drivers/mfd/rkx110_x120/rkx110_x120_display.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/rkx110_x120/rkx110_linktx.c b/drivers/mfd/rkx110_x120/rkx110_linktx.c index 4506aa13b54f..8b32318bf2ed 100644 --- a/drivers/mfd/rkx110_x120/rkx110_linktx.c +++ b/drivers/mfd/rkx110_x120/rkx110_linktx.c @@ -487,7 +487,7 @@ void rkx110_linktx_video_enable(struct rk_serdes *serdes, u8 dev_id, bool enable serdes->i2c_update_bits(client, RKLINK_TX_SERDES_CTRL, VIDEO_EN, enable ? VIDEO_EN : 0); } -int rk110_linktx_dual_channel_enable(struct rk_serdes *serdes, u8 dev_id, bool enable) +static int rk110_linktx_dual_channel_enable(struct rk_serdes *serdes, u8 dev_id, bool enable) { struct i2c_client *client = serdes->chip[dev_id].client; diff --git a/drivers/mfd/rkx110_x120/rkx110_x120_display.c b/drivers/mfd/rkx110_x120/rkx110_x120_display.c index bc92c7a333a5..17fca3539102 100644 --- a/drivers/mfd/rkx110_x120/rkx110_x120_display.c +++ b/drivers/mfd/rkx110_x120/rkx110_x120_display.c @@ -7,6 +7,7 @@ #include "hal/cru_api.h" #include "rkx110_x120.h" +#include "rkx110_x120_display.h" #include "rkx110_dsi_rx.h" #include "rkx120_dsi_tx.h"