lkml.org 
[lkml]   [2019]   [Apr]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 4/6] drm: atmel-hlcdc: enable sys_clk during initalization.
    Date
    From: Sandeep Sheriker Mallikarjun <sandeepsheriker.mallikarjun@microchip.com>

    For SAM9X60 SoC, sys_clk is through lcd_gclk clock source and this
    needs to be enabled before enabling lcd_clk.

    Signed-off-by: Sandeep Sheriker Mallikarjun <sandeepsheriker.mallikarjun@microchip.com>
    [claudiu.beznea@microchip.com: add fixed_clksrc checks]
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    ---
    drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 19 ++++++++++++++++++-
    1 file changed, 18 insertions(+), 1 deletion(-)

    diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
    index 0be13eceedba..8bf51f853721 100644
    --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
    +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
    @@ -625,10 +625,18 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
    dc->hlcdc = dev_get_drvdata(dev->dev->parent);
    dev->dev_private = dc;

    + if (dc->desc->fixed_clksrc) {
    + ret = clk_prepare_enable(dc->hlcdc->sys_clk);
    + if (ret) {
    + dev_err(dev->dev, "failed to enable sys_clk\n");
    + goto err_destroy_wq;
    + }
    + }
    +
    ret = clk_prepare_enable(dc->hlcdc->periph_clk);
    if (ret) {
    dev_err(dev->dev, "failed to enable periph_clk\n");
    - goto err_destroy_wq;
    + goto err_sys_clk_disable;
    }

    pm_runtime_enable(dev->dev);
    @@ -664,6 +672,9 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
    err_periph_clk_disable:
    pm_runtime_disable(dev->dev);
    clk_disable_unprepare(dc->hlcdc->periph_clk);
    +err_sys_clk_disable:
    + if (dc->desc->fixed_clksrc)
    + clk_disable_unprepare(dc->hlcdc->sys_clk);

    err_destroy_wq:
    destroy_workqueue(dc->wq);
    @@ -688,6 +699,8 @@ static void atmel_hlcdc_dc_unload(struct drm_device *dev)

    pm_runtime_disable(dev->dev);
    clk_disable_unprepare(dc->hlcdc->periph_clk);
    + if (dc->desc->fixed_clksrc)
    + clk_disable_unprepare(dc->hlcdc->sys_clk);
    destroy_workqueue(dc->wq);
    }

    @@ -805,6 +818,8 @@ static int atmel_hlcdc_dc_drm_suspend(struct device *dev)
    regmap_read(regmap, ATMEL_HLCDC_IMR, &dc->suspend.imr);
    regmap_write(regmap, ATMEL_HLCDC_IDR, dc->suspend.imr);
    clk_disable_unprepare(dc->hlcdc->periph_clk);
    + if (dc->desc->fixed_clksrc)
    + clk_disable_unprepare(dc->hlcdc->sys_clk);

    return 0;
    }
    @@ -814,6 +829,8 @@ static int atmel_hlcdc_dc_drm_resume(struct device *dev)
    struct drm_device *drm_dev = dev_get_drvdata(dev);
    struct atmel_hlcdc_dc *dc = drm_dev->dev_private;

    + if (dc->desc->fixed_clksrc)
    + clk_prepare_enable(dc->hlcdc->sys_clk);
    clk_prepare_enable(dc->hlcdc->periph_clk);
    regmap_write(dc->hlcdc->regmap, ATMEL_HLCDC_IER, dc->suspend.imr);

    --
    2.7.4
    \
     
     \ /
      Last update: 2019-04-25 14:29    [W:2.311 / U:0.508 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site