summaryrefslogtreecommitdiff
path: root/drivers/media/platform/vsp1/vsp1_drv.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2015-09-07 08:05:39 -0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-02-19 09:32:49 -0200
commit7f2d50f8da43fde0c883c378fd81f64c8bca74eb (patch)
treeb73155aef9573d96cd1afae79d2f9793a1f94364 /drivers/media/platform/vsp1/vsp1_drv.c
parent7b4baddca69e61cdbabe8caff614778d188d89d8 (diff)
[media] v4l: vsp1: Add support for the R-Car Gen3 VSP2
Add DT compatible strings for the VSP2 instances found in the R-Car Gen3 SoCs and support them in the vsp1 driver. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/platform/vsp1/vsp1_drv.c')
-rw-r--r--drivers/media/platform/vsp1/vsp1_drv.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/media/platform/vsp1/vsp1_drv.c b/drivers/media/platform/vsp1/vsp1_drv.c
index 74b5920e516b..7530dbc978cd 100644
--- a/drivers/media/platform/vsp1/vsp1_drv.c
+++ b/drivers/media/platform/vsp1/vsp1_drv.c
@@ -579,6 +579,7 @@ static int vsp1_probe(struct platform_device *pdev)
struct vsp1_device *vsp1;
struct resource *irq;
struct resource *io;
+ u32 version;
int ret;
vsp1 = devm_kzalloc(&pdev->dev, sizeof(*vsp1), GFP_KERNEL);
@@ -619,6 +620,29 @@ static int vsp1_probe(struct platform_device *pdev)
return ret;
}
+ /* Configure device parameters based on the version register. */
+ ret = clk_prepare_enable(vsp1->clock);
+ if (ret < 0)
+ return ret;
+
+ version = vsp1_read(vsp1, VI6_IP_VERSION);
+ clk_disable_unprepare(vsp1->clock);
+
+ dev_dbg(&pdev->dev, "IP version 0x%08x\n", version);
+
+ switch (version & VI6_IP_VERSION_MODEL_MASK) {
+ case VI6_IP_VERSION_MODEL_VSPD_GEN3:
+ vsp1->pdata.num_bru_inputs = 5;
+ vsp1->pdata.uapi = false;
+ break;
+
+ case VI6_IP_VERSION_MODEL_VSPI_GEN3:
+ case VI6_IP_VERSION_MODEL_VSPBD_GEN3:
+ case VI6_IP_VERSION_MODEL_VSPBC_GEN3:
+ vsp1->pdata.features &= ~VSP1_HAS_BRU;
+ break;
+ }
+
/* Instanciate entities */
ret = vsp1_create_entities(vsp1);
if (ret < 0) {
@@ -642,6 +666,7 @@ static int vsp1_remove(struct platform_device *pdev)
static const struct of_device_id vsp1_of_match[] = {
{ .compatible = "renesas,vsp1" },
+ { .compatible = "renesas,vsp2" },
{ },
};