[PATCH] drm: rcar_lvds: Fix color mismatches on R-Car H2 ES2.0 and later
Ulrich Hecht
uli at fpond.eu
Tue Sep 17 09:11:14 UTC 2019
> On September 17, 2019 at 8:23 AM Geert Uytterhoeven <geert+renesas at glider.be> wrote:
>
>
> Commit 5cca30ebe089be23 ("drm/rcar-du: Add LVDS_LANES quirk") states
> that LVDS lanes 1 and 3 are inverted on R-Car H2 ES1 only, and that the
> problem has been fixed in newer revisions.
>
> However, the code didn't take into account the actual hardware revision,
> thus applying the quirk also on newer hardware revisions, causing green
> color reversals.
>
> Fix this by applying the quirk when running on R-Car H2 ES1.x only.
>
> Reported-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh at renesas.com>
> Fixes: c6a27fa41fabb35f ("drm: rcar-du: Convert LVDS encoder code to bridge driver")
> Signed-off-by: Geert Uytterhoeven <geert+renesas at glider.be>
> Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh at renesas.com>
> ---
> Does anyone know if this was fixed in ES2.0, or in any earlier ES1.x?
>
> While the issue was present before aforementioned commit, I do not think
> there is a real need to fix the older code variant, as the new LVDS
> encoder was backported to v4.14-ltsi.
> ---
> drivers/gpu/drm/rcar-du/rcar_lvds.c | 28 +++++++++++++++++++++-------
> 1 file changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/rcar-du/rcar_lvds.c b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> index 3fc7e6899cab5843..50c11a7f0467f746 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_lvds.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_lvds.c
> @@ -16,6 +16,7 @@
> #include <linux/of_graph.h>
> #include <linux/platform_device.h>
> #include <linux/slab.h>
> +#include <linux/sys_soc.h>
>
> #include <drm/drm_atomic.h>
> #include <drm/drm_atomic_helper.h>
> @@ -842,8 +843,23 @@ static int rcar_lvds_get_clocks(struct rcar_lvds *lvds)
> return 0;
> }
>
> +static const struct rcar_lvds_device_info rcar_lvds_r8a7790es1_info = {
> + .gen = 2,
> + .quirks = RCAR_LVDS_QUIRK_LANES,
> + .pll_setup = rcar_lvds_pll_setup_gen2,
> +};
> +
> +static const struct soc_device_attribute lvds_quirk_matches[] = {
> + {
> + .soc_id = "r8a7790", .revision = "ES1.*",
> + .data = &rcar_lvds_r8a7790es1_info,
> + },
> + { /* sentinel */ }
> +};
> +
> static int rcar_lvds_probe(struct platform_device *pdev)
> {
> + const struct soc_device_attribute *attr;
> struct rcar_lvds *lvds;
> struct resource *mem;
> int ret;
> @@ -857,6 +873,10 @@ static int rcar_lvds_probe(struct platform_device *pdev)
> lvds->dev = &pdev->dev;
> lvds->info = of_device_get_match_data(&pdev->dev);
>
> + attr = soc_device_match(lvds_quirk_matches);
> + if (attr)
> + lvds->info = attr->data;
> +
> ret = rcar_lvds_parse_dt(lvds);
> if (ret < 0)
> return ret;
> @@ -893,12 +913,6 @@ static const struct rcar_lvds_device_info rcar_lvds_gen2_info = {
> .pll_setup = rcar_lvds_pll_setup_gen2,
> };
>
> -static const struct rcar_lvds_device_info rcar_lvds_r8a7790_info = {
> - .gen = 2,
> - .quirks = RCAR_LVDS_QUIRK_LANES,
> - .pll_setup = rcar_lvds_pll_setup_gen2,
> -};
> -
> static const struct rcar_lvds_device_info rcar_lvds_gen3_info = {
> .gen = 3,
> .quirks = RCAR_LVDS_QUIRK_PWD,
> @@ -930,7 +944,7 @@ static const struct of_device_id rcar_lvds_of_table[] = {
> { .compatible = "renesas,r8a7744-lvds", .data = &rcar_lvds_gen2_info },
> { .compatible = "renesas,r8a774a1-lvds", .data = &rcar_lvds_gen3_info },
> { .compatible = "renesas,r8a774c0-lvds", .data = &rcar_lvds_r8a77990_info },
> - { .compatible = "renesas,r8a7790-lvds", .data = &rcar_lvds_r8a7790_info },
> + { .compatible = "renesas,r8a7790-lvds", .data = &rcar_lvds_gen2_info },
> { .compatible = "renesas,r8a7791-lvds", .data = &rcar_lvds_gen2_info },
> { .compatible = "renesas,r8a7793-lvds", .data = &rcar_lvds_gen2_info },
> { .compatible = "renesas,r8a7795-lvds", .data = &rcar_lvds_gen3_info },
> --
> 2.17.1
Reviewed-by: Ulrich Hecht <uli+renesas at fpond.eu>
CU
Uli
More information about the dri-devel
mailing list