lkml.org 
[lkml]   [2020]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 126/173] drm: atmel-hlcdc: enable clock before configuring timing engine
    Date
    From: Claudiu Beznea <claudiu.beznea@microchip.com>

    [ Upstream commit 2c1fb9d86f6820abbfaa38a6836157c76ccb4e7b ]

    Changing pixel clock source without having this clock source enabled
    will block the timing engine and the next operations after (in this case
    setting ATMEL_HLCDC_CFG(5) settings in atmel_hlcdc_crtc_mode_set_nofb()
    will fail). It is recomended (although in datasheet this is not present)
    to actually enabled pixel clock source before doing any changes on timing
    enginge (only SAM9X60 datasheet specifies that the peripheral clock and
    pixel clock must be enabled before using LCD controller).

    Fixes: 1a396789f65a ("drm: add Atmel HLCDC Display Controller support")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
    Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
    Cc: <stable@vger.kernel.org> # v4.0+
    Link: https://patchwork.freedesktop.org/patch/msgid/1576672109-22707-3-git-send-email-claudiu.beznea@microchip.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
    index d73281095faca..976109c20d493 100644
    --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
    +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
    @@ -79,7 +79,11 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc *c)
    struct videomode vm;
    unsigned long prate;
    unsigned int cfg;
    - int div;
    + int div, ret;
    +
    + ret = clk_prepare_enable(crtc->dc->hlcdc->sys_clk);
    + if (ret)
    + return;

    vm.vfront_porch = adj->crtc_vsync_start - adj->crtc_vdisplay;
    vm.vback_porch = adj->crtc_vtotal - adj->crtc_vsync_end;
    @@ -138,6 +142,8 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc *c)
    ATMEL_HLCDC_VSPSU | ATMEL_HLCDC_VSPHO |
    ATMEL_HLCDC_GUARDTIME_MASK | ATMEL_HLCDC_MODE_MASK,
    cfg);
    +
    + clk_disable_unprepare(crtc->dc->hlcdc->sys_clk);
    }

    static enum drm_mode_status
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-02-13 16:55    [W:4.314 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site