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