Commit 32d17597 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

[media] v4l: vsp1: Remove support for platform data

Now that all platforms instantiate the VSP1 through DT, platform data
support isn't needed anymore.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarSimon Horman <horms+renesas@verge.net.au>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 1b8dc322
...@@ -223,7 +223,7 @@ config VIDEO_SH_VEU ...@@ -223,7 +223,7 @@ config VIDEO_SH_VEU
config VIDEO_RENESAS_VSP1 config VIDEO_RENESAS_VSP1
tristate "Renesas VSP1 Video Processing Engine" tristate "Renesas VSP1 Video Processing Engine"
depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && HAS_DMA depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && HAS_DMA
depends on ARCH_SHMOBILE || COMPILE_TEST depends on (ARCH_SHMOBILE && OF) || COMPILE_TEST
select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_DMA_CONTIG
---help--- ---help---
This is a V4L2 driver for the Renesas VSP1 video processing engine. This is a V4L2 driver for the Renesas VSP1 video processing engine.
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/platform_data/vsp1.h>
#include <media/media-device.h> #include <media/media-device.h>
#include <media/v4l2-device.h> #include <media/v4l2-device.h>
...@@ -40,9 +39,20 @@ struct vsp1_uds; ...@@ -40,9 +39,20 @@ struct vsp1_uds;
#define VSP1_MAX_UDS 3 #define VSP1_MAX_UDS 3
#define VSP1_MAX_WPF 4 #define VSP1_MAX_WPF 4
#define VSP1_HAS_LIF (1 << 0)
#define VSP1_HAS_LUT (1 << 1)
#define VSP1_HAS_SRU (1 << 2)
struct vsp1_platform_data {
unsigned int features;
unsigned int rpf_count;
unsigned int uds_count;
unsigned int wpf_count;
};
struct vsp1_device { struct vsp1_device {
struct device *dev; struct device *dev;
struct vsp1_platform_data *pdata; struct vsp1_platform_data pdata;
void __iomem *mmio; void __iomem *mmio;
struct clk *clock; struct clk *clock;
......
...@@ -40,7 +40,7 @@ static irqreturn_t vsp1_irq_handler(int irq, void *data) ...@@ -40,7 +40,7 @@ static irqreturn_t vsp1_irq_handler(int irq, void *data)
irqreturn_t ret = IRQ_NONE; irqreturn_t ret = IRQ_NONE;
unsigned int i; unsigned int i;
for (i = 0; i < vsp1->pdata->wpf_count; ++i) { for (i = 0; i < vsp1->pdata.wpf_count; ++i) {
struct vsp1_rwpf *wpf = vsp1->wpf[i]; struct vsp1_rwpf *wpf = vsp1->wpf[i];
struct vsp1_pipeline *pipe; struct vsp1_pipeline *pipe;
u32 status; u32 status;
...@@ -181,7 +181,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -181,7 +181,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
list_add_tail(&vsp1->hst->entity.list_dev, &vsp1->entities); list_add_tail(&vsp1->hst->entity.list_dev, &vsp1->entities);
if (vsp1->pdata->features & VSP1_HAS_LIF) { if (vsp1->pdata.features & VSP1_HAS_LIF) {
vsp1->lif = vsp1_lif_create(vsp1); vsp1->lif = vsp1_lif_create(vsp1);
if (IS_ERR(vsp1->lif)) { if (IS_ERR(vsp1->lif)) {
ret = PTR_ERR(vsp1->lif); ret = PTR_ERR(vsp1->lif);
...@@ -191,7 +191,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -191,7 +191,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
list_add_tail(&vsp1->lif->entity.list_dev, &vsp1->entities); list_add_tail(&vsp1->lif->entity.list_dev, &vsp1->entities);
} }
if (vsp1->pdata->features & VSP1_HAS_LUT) { if (vsp1->pdata.features & VSP1_HAS_LUT) {
vsp1->lut = vsp1_lut_create(vsp1); vsp1->lut = vsp1_lut_create(vsp1);
if (IS_ERR(vsp1->lut)) { if (IS_ERR(vsp1->lut)) {
ret = PTR_ERR(vsp1->lut); ret = PTR_ERR(vsp1->lut);
...@@ -201,7 +201,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -201,7 +201,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
list_add_tail(&vsp1->lut->entity.list_dev, &vsp1->entities); list_add_tail(&vsp1->lut->entity.list_dev, &vsp1->entities);
} }
for (i = 0; i < vsp1->pdata->rpf_count; ++i) { for (i = 0; i < vsp1->pdata.rpf_count; ++i) {
struct vsp1_rwpf *rpf; struct vsp1_rwpf *rpf;
rpf = vsp1_rpf_create(vsp1, i); rpf = vsp1_rpf_create(vsp1, i);
...@@ -214,7 +214,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -214,7 +214,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
list_add_tail(&rpf->entity.list_dev, &vsp1->entities); list_add_tail(&rpf->entity.list_dev, &vsp1->entities);
} }
if (vsp1->pdata->features & VSP1_HAS_SRU) { if (vsp1->pdata.features & VSP1_HAS_SRU) {
vsp1->sru = vsp1_sru_create(vsp1); vsp1->sru = vsp1_sru_create(vsp1);
if (IS_ERR(vsp1->sru)) { if (IS_ERR(vsp1->sru)) {
ret = PTR_ERR(vsp1->sru); ret = PTR_ERR(vsp1->sru);
...@@ -224,7 +224,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -224,7 +224,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
list_add_tail(&vsp1->sru->entity.list_dev, &vsp1->entities); list_add_tail(&vsp1->sru->entity.list_dev, &vsp1->entities);
} }
for (i = 0; i < vsp1->pdata->uds_count; ++i) { for (i = 0; i < vsp1->pdata.uds_count; ++i) {
struct vsp1_uds *uds; struct vsp1_uds *uds;
uds = vsp1_uds_create(vsp1, i); uds = vsp1_uds_create(vsp1, i);
...@@ -237,7 +237,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -237,7 +237,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
list_add_tail(&uds->entity.list_dev, &vsp1->entities); list_add_tail(&uds->entity.list_dev, &vsp1->entities);
} }
for (i = 0; i < vsp1->pdata->wpf_count; ++i) { for (i = 0; i < vsp1->pdata.wpf_count; ++i) {
struct vsp1_rwpf *wpf; struct vsp1_rwpf *wpf;
wpf = vsp1_wpf_create(vsp1, i); wpf = vsp1_wpf_create(vsp1, i);
...@@ -261,7 +261,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1) ...@@ -261,7 +261,7 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
goto done; goto done;
} }
if (vsp1->pdata->features & VSP1_HAS_LIF) { if (vsp1->pdata.features & VSP1_HAS_LIF) {
ret = media_entity_create_link( ret = media_entity_create_link(
&vsp1->wpf[0]->entity.subdev.entity, RWPF_PAD_SOURCE, &vsp1->wpf[0]->entity.subdev.entity, RWPF_PAD_SOURCE,
&vsp1->lif->entity.subdev.entity, LIF_PAD_SINK, 0); &vsp1->lif->entity.subdev.entity, LIF_PAD_SINK, 0);
...@@ -294,7 +294,7 @@ static int vsp1_device_init(struct vsp1_device *vsp1) ...@@ -294,7 +294,7 @@ static int vsp1_device_init(struct vsp1_device *vsp1)
/* Reset any channel that might be running. */ /* Reset any channel that might be running. */
status = vsp1_read(vsp1, VI6_STATUS); status = vsp1_read(vsp1, VI6_STATUS);
for (i = 0; i < vsp1->pdata->wpf_count; ++i) { for (i = 0; i < vsp1->pdata.wpf_count; ++i) {
unsigned int timeout; unsigned int timeout;
if (!(status & VI6_STATUS_SYS_ACT(i))) if (!(status & VI6_STATUS_SYS_ACT(i)))
...@@ -318,10 +318,10 @@ static int vsp1_device_init(struct vsp1_device *vsp1) ...@@ -318,10 +318,10 @@ static int vsp1_device_init(struct vsp1_device *vsp1)
vsp1_write(vsp1, VI6_CLK_DCSWT, (8 << VI6_CLK_DCSWT_CSTPW_SHIFT) | vsp1_write(vsp1, VI6_CLK_DCSWT, (8 << VI6_CLK_DCSWT_CSTPW_SHIFT) |
(8 << VI6_CLK_DCSWT_CSTRW_SHIFT)); (8 << VI6_CLK_DCSWT_CSTRW_SHIFT));
for (i = 0; i < vsp1->pdata->rpf_count; ++i) for (i = 0; i < vsp1->pdata.rpf_count; ++i)
vsp1_write(vsp1, VI6_DPR_RPF_ROUTE(i), VI6_DPR_NODE_UNUSED); vsp1_write(vsp1, VI6_DPR_RPF_ROUTE(i), VI6_DPR_NODE_UNUSED);
for (i = 0; i < vsp1->pdata->uds_count; ++i) for (i = 0; i < vsp1->pdata.uds_count; ++i)
vsp1_write(vsp1, VI6_DPR_UDS_ROUTE(i), VI6_DPR_NODE_UNUSED); vsp1_write(vsp1, VI6_DPR_UDS_ROUTE(i), VI6_DPR_NODE_UNUSED);
vsp1_write(vsp1, VI6_DPR_SRU_ROUTE, VI6_DPR_NODE_UNUSED); vsp1_write(vsp1, VI6_DPR_SRU_ROUTE, VI6_DPR_NODE_UNUSED);
...@@ -428,28 +428,36 @@ static const struct dev_pm_ops vsp1_pm_ops = { ...@@ -428,28 +428,36 @@ static const struct dev_pm_ops vsp1_pm_ops = {
* Platform Driver * Platform Driver
*/ */
static int vsp1_validate_platform_data(struct platform_device *pdev, static int vsp1_parse_dt(struct vsp1_device *vsp1)
struct vsp1_platform_data *pdata)
{ {
if (pdata == NULL) { struct device_node *np = vsp1->dev->of_node;
dev_err(&pdev->dev, "missing platform data\n"); struct vsp1_platform_data *pdata = &vsp1->pdata;
return -EINVAL;
} if (of_property_read_bool(np, "renesas,has-lif"))
pdata->features |= VSP1_HAS_LIF;
if (of_property_read_bool(np, "renesas,has-lut"))
pdata->features |= VSP1_HAS_LUT;
if (of_property_read_bool(np, "renesas,has-sru"))
pdata->features |= VSP1_HAS_SRU;
of_property_read_u32(np, "renesas,#rpf", &pdata->rpf_count);
of_property_read_u32(np, "renesas,#uds", &pdata->uds_count);
of_property_read_u32(np, "renesas,#wpf", &pdata->wpf_count);
if (pdata->rpf_count <= 0 || pdata->rpf_count > VSP1_MAX_RPF) { if (pdata->rpf_count <= 0 || pdata->rpf_count > VSP1_MAX_RPF) {
dev_err(&pdev->dev, "invalid number of RPF (%u)\n", dev_err(vsp1->dev, "invalid number of RPF (%u)\n",
pdata->rpf_count); pdata->rpf_count);
return -EINVAL; return -EINVAL;
} }
if (pdata->uds_count <= 0 || pdata->uds_count > VSP1_MAX_UDS) { if (pdata->uds_count <= 0 || pdata->uds_count > VSP1_MAX_UDS) {
dev_err(&pdev->dev, "invalid number of UDS (%u)\n", dev_err(vsp1->dev, "invalid number of UDS (%u)\n",
pdata->uds_count); pdata->uds_count);
return -EINVAL; return -EINVAL;
} }
if (pdata->wpf_count <= 0 || pdata->wpf_count > VSP1_MAX_WPF) { if (pdata->wpf_count <= 0 || pdata->wpf_count > VSP1_MAX_WPF) {
dev_err(&pdev->dev, "invalid number of WPF (%u)\n", dev_err(vsp1->dev, "invalid number of WPF (%u)\n",
pdata->wpf_count); pdata->wpf_count);
return -EINVAL; return -EINVAL;
} }
...@@ -457,33 +465,6 @@ static int vsp1_validate_platform_data(struct platform_device *pdev, ...@@ -457,33 +465,6 @@ static int vsp1_validate_platform_data(struct platform_device *pdev,
return 0; return 0;
} }
static struct vsp1_platform_data *
vsp1_get_platform_data(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct vsp1_platform_data *pdata;
if (!IS_ENABLED(CONFIG_OF) || np == NULL)
return pdev->dev.platform_data;
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
if (pdata == NULL)
return NULL;
if (of_property_read_bool(np, "renesas,has-lif"))
pdata->features |= VSP1_HAS_LIF;
if (of_property_read_bool(np, "renesas,has-lut"))
pdata->features |= VSP1_HAS_LUT;
if (of_property_read_bool(np, "renesas,has-sru"))
pdata->features |= VSP1_HAS_SRU;
of_property_read_u32(np, "renesas,#rpf", &pdata->rpf_count);
of_property_read_u32(np, "renesas,#uds", &pdata->uds_count);
of_property_read_u32(np, "renesas,#wpf", &pdata->wpf_count);
return pdata;
}
static int vsp1_probe(struct platform_device *pdev) static int vsp1_probe(struct platform_device *pdev)
{ {
struct vsp1_device *vsp1; struct vsp1_device *vsp1;
...@@ -499,11 +480,7 @@ static int vsp1_probe(struct platform_device *pdev) ...@@ -499,11 +480,7 @@ static int vsp1_probe(struct platform_device *pdev)
mutex_init(&vsp1->lock); mutex_init(&vsp1->lock);
INIT_LIST_HEAD(&vsp1->entities); INIT_LIST_HEAD(&vsp1->entities);
vsp1->pdata = vsp1_get_platform_data(pdev); ret = vsp1_parse_dt(vsp1);
if (vsp1->pdata == NULL)
return -ENODEV;
ret = vsp1_validate_platform_data(pdev, vsp1->pdata);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -280,7 +280,7 @@ struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index) ...@@ -280,7 +280,7 @@ struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index)
* except for the WPF0 source link if a LIF is present. * except for the WPF0 source link if a LIF is present.
*/ */
flags = MEDIA_LNK_FL_ENABLED; flags = MEDIA_LNK_FL_ENABLED;
if (!(vsp1->pdata->features & VSP1_HAS_LIF) || index != 0) if (!(vsp1->pdata.features & VSP1_HAS_LIF) || index != 0)
flags |= MEDIA_LNK_FL_IMMUTABLE; flags |= MEDIA_LNK_FL_IMMUTABLE;
ret = media_entity_create_link(&wpf->entity.subdev.entity, ret = media_entity_create_link(&wpf->entity.subdev.entity,
......
/*
* vsp1.h -- R-Car VSP1 Platform Data
*
* Copyright (C) 2013 Renesas Corporation
*
* Contact: Laurent Pinchart (laurent.pinchart@ideasonboard.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#ifndef __PLATFORM_VSP1_H__
#define __PLATFORM_VSP1_H__
#define VSP1_HAS_LIF (1 << 0)
#define VSP1_HAS_LUT (1 << 1)
#define VSP1_HAS_SRU (1 << 2)
struct vsp1_platform_data {
unsigned int features;
unsigned int rpf_count;
unsigned int uds_count;
unsigned int wpf_count;
};
#endif /* __PLATFORM_VSP1_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment