From 894be9903ffddb5fa0addadf52978daa7737f610 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Tue, 16 Oct 2018 09:42:59 +0800 Subject: [PATCH] media: rockchip: isp1: config grf dvp datawidth Change-Id: I173a2054d3f3878d0cc8b4f12236a5ce3f050834 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp1/dev.c | 7 +++++++ drivers/media/platform/rockchip/isp1/dev.h | 1 + drivers/media/platform/rockchip/isp1/regs.h | 5 +++++ drivers/media/platform/rockchip/isp1/rkisp1.c | 10 ++++++++++ 4 files changed, 23 insertions(+) diff --git a/drivers/media/platform/rockchip/isp1/dev.c b/drivers/media/platform/rockchip/isp1/dev.c index 5021f3472793..794f42b2a273 100644 --- a/drivers/media/platform/rockchip/isp1/dev.c +++ b/drivers/media/platform/rockchip/isp1/dev.c @@ -34,12 +34,14 @@ #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -702,6 +704,11 @@ static int rkisp1_plat_probe(struct platform_device *pdev) dev_set_drvdata(dev, isp_dev); isp_dev->dev = dev; + isp_dev->grf = syscon_regmap_lookup_by_phandle(dev->of_node, + "rockchip,grf"); + if (IS_ERR(isp_dev->grf)) + dev_warn(dev, "Missing rockchip,grf property\n"); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); isp_dev->base_addr = devm_ioremap_resource(dev, res); if (IS_ERR(isp_dev->base_addr)) diff --git a/drivers/media/platform/rockchip/isp1/dev.h b/drivers/media/platform/rockchip/isp1/dev.h index 619f8f09f1ef..01e09fd3c912 100644 --- a/drivers/media/platform/rockchip/isp1/dev.h +++ b/drivers/media/platform/rockchip/isp1/dev.h @@ -103,6 +103,7 @@ struct rkisp1_sensor_info { * @params_vdev: ISP input parameters device */ struct rkisp1_device { + struct regmap *grf; void __iomem *base_addr; int irq; struct device *dev; diff --git a/drivers/media/platform/rockchip/isp1/regs.h b/drivers/media/platform/rockchip/isp1/regs.h index 44232d30e1db..fb12304a76fa 100644 --- a/drivers/media/platform/rockchip/isp1/regs.h +++ b/drivers/media/platform/rockchip/isp1/regs.h @@ -36,6 +36,11 @@ #define _RKISP1_REGS_H #include "dev.h" +/* GRF */ +#define GRF_VI_CON0 0x430 +#define ISP_CIF_DATA_WIDTH_MASK 0x60006000 +#define ISP_CIF_DATA_WIDTH_12B (2 << 13 | 2 << 29) + /* ISP_CTRL */ #define CIF_ISP_CTRL_ISP_ENABLE BIT(0) #define CIF_ISP_CTRL_ISP_MODE_RAW_PICT (0 << 1) diff --git a/drivers/media/platform/rockchip/isp1/rkisp1.c b/drivers/media/platform/rockchip/isp1/rkisp1.c index cd7e4aef2ce3..19742d24eb61 100644 --- a/drivers/media/platform/rockchip/isp1/rkisp1.c +++ b/drivers/media/platform/rockchip/isp1/rkisp1.c @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -276,6 +277,15 @@ static int rkisp1_config_dvp(struct rkisp1_device *dev) val = readl(base + CIF_ISP_ACQ_PROP); writel(val | input_sel, base + CIF_ISP_ACQ_PROP); + if (!IS_ERR(dev->grf) && + (dev->isp_ver == ISP_V12 || + dev->isp_ver == ISP_V13)) + /* config isp cif 12bit datawidth */ + regmap_update_bits(dev->grf, + GRF_VI_CON0, + ISP_CIF_DATA_WIDTH_MASK, + ISP_CIF_DATA_WIDTH_12B); + return 0; }