lkml.org 
[lkml]   [2023]   [Oct]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v7 5/7] drm: atmel-hlcdc: add DPI mode support for XLCDC
    Date
    Add support for Display Pixel Interface (DPI) Compatible Mode
    support in atmel-hlcdc driver for XLCDC IP along with legacy
    pixel mapping. DPI mode BIT is configured in LCDC_CFG5 register.

    Signed-off-by: Manikandan Muralidharan <manikandan.m@microchip.com>
    [durai.manickamkr@microchip.com: update DPI mode bit using is_xlcdc flag]
    Signed-off-by: Durai Manickam KR <durai.manickamkr@microchip.com>
    ---
    .../gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 21 +++++++++++++++++--
    1 file changed, 19 insertions(+), 2 deletions(-)

    diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
    index 1ac31c0c474a..1899be2eb6a3 100644
    --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
    +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
    @@ -30,10 +30,12 @@
    *
    * @base: base CRTC state
    * @output_mode: RGBXXX output mode
    + * @dpi: output DPI mode
    */
    struct atmel_hlcdc_crtc_state {
    struct drm_crtc_state base;
    unsigned int output_mode;
    + u8 dpi;
    };

    static inline struct atmel_hlcdc_crtc_state *
    @@ -164,6 +166,8 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc *c)

    state = drm_crtc_state_to_atmel_hlcdc_crtc_state(c->state);
    cfg = state->output_mode << 8;
    + if (is_xlcdc)
    + cfg |= state->dpi << 11;

    if (!is_xlcdc && (adj->flags & DRM_MODE_FLAG_NVSYNC))
    cfg |= ATMEL_HLCDC_VSPOL;
    @@ -176,7 +180,9 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc *c)
    ATMEL_HLCDC_VSPDLYS | ATMEL_HLCDC_VSPDLYE |
    ATMEL_HLCDC_DISPPOL | ATMEL_HLCDC_DISPDLY |
    ATMEL_HLCDC_VSPSU | ATMEL_HLCDC_VSPHO |
    - ATMEL_HLCDC_GUARDTIME_MASK | ATMEL_HLCDC_MODE_MASK,
    + ATMEL_HLCDC_GUARDTIME_MASK |
    + (is_xlcdc ? ATMEL_XLCDC_MODE_MASK |
    + ATMEL_XLCDC_DPI : ATMEL_HLCDC_MODE_MASK),
    cfg);

    clk_disable_unprepare(crtc->dc->hlcdc->sys_clk);
    @@ -374,7 +380,15 @@ static int atmel_hlcdc_crtc_select_output_mode(struct drm_crtc_state *state)

    hstate = drm_crtc_state_to_atmel_hlcdc_crtc_state(state);
    hstate->output_mode = fls(output_fmts) - 1;
    -
    + if (crtc->dc->desc->is_xlcdc) {
    + /* check if MIPI DPI bit needs to be set */
    + if (fls(output_fmts) > 3) {
    + hstate->output_mode -= 4;
    + hstate->dpi = 1;
    + } else {
    + hstate->dpi = 0;
    + }
    + }
    return 0;
    }

    @@ -478,6 +492,7 @@ static struct drm_crtc_state *
    atmel_hlcdc_crtc_duplicate_state(struct drm_crtc *crtc)
    {
    struct atmel_hlcdc_crtc_state *state, *cur;
    + struct atmel_hlcdc_crtc *c = drm_crtc_to_atmel_hlcdc_crtc(crtc);

    if (WARN_ON(!crtc->state))
    return NULL;
    @@ -489,6 +504,8 @@ atmel_hlcdc_crtc_duplicate_state(struct drm_crtc *crtc)

    cur = drm_crtc_state_to_atmel_hlcdc_crtc_state(crtc->state);
    state->output_mode = cur->output_mode;
    + if (c->dc->desc->is_xlcdc)
    + state->dpi = cur->dpi;

    return &state->base;
    }
    --
    2.25.1
    \
     
     \ /
      Last update: 2023-10-05 17:53    [W:3.215 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site