diff options
Diffstat (limited to 'drivers/media/platform/renesas/rcar-vin')
-rw-r--r-- | drivers/media/platform/renesas/rcar-vin/rcar-core.c | 42 | ||||
-rw-r--r-- | drivers/media/platform/renesas/rcar-vin/rcar-csi2.c | 21 | ||||
-rw-r--r-- | drivers/media/platform/renesas/rcar-vin/rcar-dma.c | 21 |
3 files changed, 22 insertions, 62 deletions
diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-core.c b/drivers/media/platform/renesas/rcar-vin/rcar-core.c index 5e53d6b7036c..ff4bde9cc0e3 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-core.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-core.c @@ -17,7 +17,6 @@ #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/slab.h> -#include <linux/sys_soc.h> #include <media/v4l2-async.h> #include <media/v4l2-fwnode.h> @@ -1183,24 +1182,6 @@ static const struct rvin_info rcar_info_r8a7795 = { .scaler = rvin_scaler_gen3, }; -static const struct rvin_group_route rcar_info_r8a7795es1_routes[] = { - { .master = 0, .csi = RVIN_CSI20, .chsel = 0x04 }, - { .master = 0, .csi = RVIN_CSI21, .chsel = 0x05 }, - { .master = 0, .csi = RVIN_CSI40, .chsel = 0x03 }, - { .master = 4, .csi = RVIN_CSI20, .chsel = 0x04 }, - { .master = 4, .csi = RVIN_CSI21, .chsel = 0x05 }, - { .master = 4, .csi = RVIN_CSI41, .chsel = 0x03 }, - { /* Sentinel */ } -}; - -static const struct rvin_info rcar_info_r8a7795es1 = { - .model = RCAR_GEN3, - .use_mc = true, - .max_width = 4096, - .max_height = 4096, - .routes = rcar_info_r8a7795es1_routes, -}; - static const struct rvin_group_route rcar_info_r8a7796_routes[] = { { .master = 0, .csi = RVIN_CSI20, .chsel = 0x04 }, { .master = 0, .csi = RVIN_CSI40, .chsel = 0x03 }, @@ -1372,17 +1353,8 @@ static const struct of_device_id rvin_of_id_table[] = { }; MODULE_DEVICE_TABLE(of, rvin_of_id_table); -static const struct soc_device_attribute r8a7795es1[] = { - { - .soc_id = "r8a7795", .revision = "ES1.*", - .data = &rcar_info_r8a7795es1, - }, - { /* Sentinel */ } -}; - static int rcar_vin_probe(struct platform_device *pdev) { - const struct soc_device_attribute *attr; struct rvin_dev *vin; int irq, ret; @@ -1394,14 +1366,6 @@ static int rcar_vin_probe(struct platform_device *pdev) vin->info = of_device_get_match_data(&pdev->dev); vin->alpha = 0xff; - /* - * Special care is needed on r8a7795 ES1.x since it - * uses different routing than r8a7795 ES2.0. - */ - attr = soc_device_match(r8a7795es1); - if (attr) - vin->info = attr->data; - vin->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(vin->base)) return PTR_ERR(vin->base); @@ -1442,7 +1406,7 @@ static int rcar_vin_probe(struct platform_device *pdev) return 0; } -static int rcar_vin_remove(struct platform_device *pdev) +static void rcar_vin_remove(struct platform_device *pdev) { struct rvin_dev *vin = platform_get_drvdata(pdev); @@ -1458,8 +1422,6 @@ static int rcar_vin_remove(struct platform_device *pdev) rvin_parallel_cleanup(vin); rvin_dma_unregister(vin); - - return 0; } static SIMPLE_DEV_PM_OPS(rvin_pm_ops, rvin_suspend, rvin_resume); @@ -1472,7 +1434,7 @@ static struct platform_driver rcar_vin_driver = { .of_match_table = rvin_of_id_table, }, .probe = rcar_vin_probe, - .remove = rcar_vin_remove, + .remove_new = rcar_vin_remove, }; module_platform_driver(rcar_vin_driver); diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-csi2.c b/drivers/media/platform/renesas/rcar-vin/rcar-csi2.c index 174aa6176f54..e34060c2b039 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-csi2.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-csi2.c @@ -345,7 +345,7 @@ static const struct rcsi2_mbps_reg hsfreqrange_h3_v3h_m3n[] = { { /* sentinel */ }, }; -static const struct rcsi2_mbps_reg hsfreqrange_m3w_h3es1[] = { +static const struct rcsi2_mbps_reg hsfreqrange_m3w[] = { { .mbps = 80, .reg = 0x00 }, { .mbps = 90, .reg = 0x10 }, { .mbps = 100, .reg = 0x20 }, @@ -1369,11 +1369,6 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a7795 = { .clear_ulps = true, }; -static const struct rcar_csi2_info rcar_csi2_info_r8a7795es1 = { - .hsfreqrange = hsfreqrange_m3w_h3es1, - .num_channels = 4, -}; - static const struct rcar_csi2_info rcar_csi2_info_r8a7795es2 = { .init_phtw = rcsi2_init_phtw_h3es2, .hsfreqrange = hsfreqrange_h3_v3h_m3n, @@ -1383,12 +1378,12 @@ static const struct rcar_csi2_info rcar_csi2_info_r8a7795es2 = { }; static const struct rcar_csi2_info rcar_csi2_info_r8a7796 = { - .hsfreqrange = hsfreqrange_m3w_h3es1, + .hsfreqrange = hsfreqrange_m3w, .num_channels = 4, }; static const struct rcar_csi2_info rcar_csi2_info_r8a77961 = { - .hsfreqrange = hsfreqrange_m3w_h3es1, + .hsfreqrange = hsfreqrange_m3w, .num_channels = 4, }; @@ -1482,10 +1477,6 @@ MODULE_DEVICE_TABLE(of, rcar_csi2_of_table); static const struct soc_device_attribute r8a7795[] = { { - .soc_id = "r8a7795", .revision = "ES1.*", - .data = &rcar_csi2_info_r8a7795es1, - }, - { .soc_id = "r8a7795", .revision = "ES2.*", .data = &rcar_csi2_info_r8a7795es2, }, @@ -1574,7 +1565,7 @@ error_mutex: return ret; } -static int rcsi2_remove(struct platform_device *pdev) +static void rcsi2_remove(struct platform_device *pdev) { struct rcar_csi2 *priv = platform_get_drvdata(pdev); @@ -1585,12 +1576,10 @@ static int rcsi2_remove(struct platform_device *pdev) pm_runtime_disable(&pdev->dev); mutex_destroy(&priv->lock); - - return 0; } static struct platform_driver rcar_csi2_pdrv = { - .remove = rcsi2_remove, + .remove_new = rcsi2_remove, .probe = rcsi2_probe, .driver = { .name = "rcar-csi2", diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c index 98bfd445a649..2a77353f10b5 100644 --- a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c +++ b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c @@ -728,11 +728,9 @@ static int rvin_setup(struct rvin_dev *vin) case V4L2_FIELD_SEQ_TB: case V4L2_FIELD_SEQ_BT: case V4L2_FIELD_NONE: - vnmc = VNMC_IM_ODD_EVEN; - progressive = true; - break; case V4L2_FIELD_ALTERNATE: vnmc = VNMC_IM_ODD_EVEN; + progressive = true; break; default: vnmc = VNMC_IM_ODD; @@ -1312,12 +1310,23 @@ static int rvin_mc_validate_format(struct rvin_dev *vin, struct v4l2_subdev *sd, } if (rvin_scaler_needed(vin)) { + /* Gen3 can't scale NV12 */ + if (vin->info->model == RCAR_GEN3 && + vin->format.pixelformat == V4L2_PIX_FMT_NV12) + return -EPIPE; + if (!vin->scaler) return -EPIPE; } else { - if (fmt.format.width != vin->format.width || - fmt.format.height != vin->format.height) - return -EPIPE; + if (vin->format.pixelformat == V4L2_PIX_FMT_NV12) { + if (ALIGN(fmt.format.width, 32) != vin->format.width || + ALIGN(fmt.format.height, 32) != vin->format.height) + return -EPIPE; + } else { + if (fmt.format.width != vin->format.width || + fmt.format.height != vin->format.height) + return -EPIPE; + } } if (fmt.format.code != vin->mbus_code) |