lkml.org 
[lkml]   [2022]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] drm: mediatek: Adjust the dpi output format to MT8186
    Date
    From: Xinlei Lee <xinlei.lee@mediatek.com>

    Dpi output needs to adjust the output format to dual edge for MT8186.

    Signed-off-by: Jitao Shi <jitao.shi@mediatek.com>
    Signed-off-by: Xinlei Lee <xinlei.lee@mediatek.com>
    ---
    drivers/gpu/drm/mediatek/mtk_dpi.c | 21 +++++++++++++++++++++
    drivers/gpu/drm/mediatek/mtk_dpi_regs.h | 5 +++++
    2 files changed, 26 insertions(+)

    diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
    index e61cd67b978f..82a5209a1dd8 100644
    --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
    +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
    @@ -15,6 +15,7 @@
    #include <linux/pinctrl/consumer.h>
    #include <linux/platform_device.h>
    #include <linux/types.h>
    +#include <linux/soc/mediatek/mtk-mmsys.h>

    #include <video/videomode.h>

    @@ -28,6 +29,7 @@
    #include "mtk_disp_drv.h"
    #include "mtk_dpi_regs.h"
    #include "mtk_drm_ddp_comp.h"
    +#include "mtk_drm_drv.h"

    enum mtk_dpi_out_bit_num {
    MTK_DPI_OUT_BIT_NUM_8BITS,
    @@ -85,6 +87,7 @@ struct mtk_dpi {
    struct pinctrl_state *pins_dpi;
    u32 output_fmt;
    int refcount;
    + struct device *mmsys_dev;
    };

    static inline struct mtk_dpi *bridge_to_dpi(struct drm_bridge *b)
    @@ -125,6 +128,7 @@ struct mtk_dpi_conf {
    bool edge_sel_en;
    const u32 *output_fmts;
    u32 num_output_fmts;
    + bool rgb888_dual_enable;
    };

    static void mtk_dpi_mask(struct mtk_dpi *dpi, u32 offset, u32 val, u32 mask)
    @@ -393,6 +397,9 @@ static void mtk_dpi_dual_edge(struct mtk_dpi *dpi)
    mtk_dpi_mask(dpi, DPI_OUTPUT_SETTING,
    dpi->output_fmt == MEDIA_BUS_FMT_RGB888_2X12_LE ?
    EDGE_SEL : 0, EDGE_SEL);
    + if (dpi->conf->rgb888_dual_enable)
    + mtk_mmsys_ddp_dpi_confing(dpi->mmsys_dev, DPI_RGB888_DDR_CON,
    + DPI_FORMAT_MASK, NULL);
    } else {
    mtk_dpi_mask(dpi, DPI_DDR_SETTING, DDR_EN | DDR_4PHASE, 0);
    }
    @@ -705,8 +712,10 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data)
    {
    struct mtk_dpi *dpi = dev_get_drvdata(dev);
    struct drm_device *drm_dev = data;
    + struct mtk_drm_private *priv = drm_dev->dev_private;
    int ret;

    + dpi->mmsys_dev = priv->mmsys_dev;
    ret = drm_simple_encoder_init(drm_dev, &dpi->encoder,
    DRM_MODE_ENCODER_TMDS);
    if (ret) {
    @@ -823,6 +832,15 @@ static const struct mtk_dpi_conf mt8192_conf = {
    .num_output_fmts = ARRAY_SIZE(mt8183_output_fmts),
    };

    +static const struct mtk_dpi_conf mt8186_conf = {
    + .cal_factor = mt8183_calculate_factor,
    + .reg_h_fre_con = 0xe0,
    + .max_clock_khz = 150000,
    + .output_fmts = mt8183_output_fmts,
    + .num_output_fmts = ARRAY_SIZE(mt8183_output_fmts),
    + .rgb888_dual_enable = true,
    +};
    +
    static int mtk_dpi_probe(struct platform_device *pdev)
    {
    struct device *dev = &pdev->dev;
    @@ -945,6 +963,9 @@ static const struct of_device_id mtk_dpi_of_ids[] = {
    { .compatible = "mediatek,mt8192-dpi",
    .data = &mt8192_conf,
    },
    + { .compatible = "mediatek,mt8186-dpi",
    + .data = &mt8186_conf,
    + },
    { },
    };
    MODULE_DEVICE_TABLE(of, mtk_dpi_of_ids);
    diff --git a/drivers/gpu/drm/mediatek/mtk_dpi_regs.h b/drivers/gpu/drm/mediatek/mtk_dpi_regs.h
    index 3a02fabe1662..24d4cdf3696b 100644
    --- a/drivers/gpu/drm/mediatek/mtk_dpi_regs.h
    +++ b/drivers/gpu/drm/mediatek/mtk_dpi_regs.h
    @@ -217,4 +217,9 @@

    #define EDGE_SEL_EN BIT(5)
    #define H_FRE_2N BIT(25)
    +
    +#define DPI_FORMAT_MASK 0x1
    +#define DPI_RGB888_DDR_CON BIT(0)
    +#define DPI_RGB565_SDR_CON BIT(1)
    +
    #endif /* __MTK_DPI_REGS_H */
    --
    2.18.0
    \
     
     \ /
      Last update: 2022-07-01 05:17    [W:5.811 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site