lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 098/376] drm/mediatek: set dpi pin mode to gpio low to avoid leakage current
    Date
    From: Jitao Shi <jitao.shi@mediatek.com>

    [ Upstream commit 6bd4763fd532cff43f9b15704f324c45a9806f53 ]

    Config dpi pins mode to output and pull low when dpi is disabled.
    Aovid leakage current from some dpi pins (Hsync Vsync DE ... ).

    Signed-off-by: Jitao Shi <jitao.shi@mediatek.com>
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/mediatek/mtk_dpi.c | 31 ++++++++++++++++++++++++++++++
    1 file changed, 31 insertions(+)

    diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c
    index 4f0ce4cd5b8c..2994c63ea279 100644
    --- a/drivers/gpu/drm/mediatek/mtk_dpi.c
    +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c
    @@ -10,7 +10,9 @@
    #include <linux/kernel.h>
    #include <linux/of.h>
    #include <linux/of_device.h>
    +#include <linux/of_gpio.h>
    #include <linux/of_graph.h>
    +#include <linux/pinctrl/consumer.h>
    #include <linux/platform_device.h>
    #include <linux/types.h>

    @@ -74,6 +76,9 @@ struct mtk_dpi {
    enum mtk_dpi_out_yc_map yc_map;
    enum mtk_dpi_out_bit_num bit_num;
    enum mtk_dpi_out_channel_swap channel_swap;
    + struct pinctrl *pinctrl;
    + struct pinctrl_state *pins_gpio;
    + struct pinctrl_state *pins_dpi;
    int refcount;
    };

    @@ -379,6 +384,9 @@ static void mtk_dpi_power_off(struct mtk_dpi *dpi)
    if (--dpi->refcount != 0)
    return;

    + if (dpi->pinctrl && dpi->pins_gpio)
    + pinctrl_select_state(dpi->pinctrl, dpi->pins_gpio);
    +
    mtk_dpi_disable(dpi);
    clk_disable_unprepare(dpi->pixel_clk);
    clk_disable_unprepare(dpi->engine_clk);
    @@ -403,6 +411,9 @@ static int mtk_dpi_power_on(struct mtk_dpi *dpi)
    goto err_pixel;
    }

    + if (dpi->pinctrl && dpi->pins_dpi)
    + pinctrl_select_state(dpi->pinctrl, dpi->pins_dpi);
    +
    mtk_dpi_enable(dpi);
    return 0;

    @@ -705,6 +716,26 @@ static int mtk_dpi_probe(struct platform_device *pdev)
    dpi->dev = dev;
    dpi->conf = (struct mtk_dpi_conf *)of_device_get_match_data(dev);

    + dpi->pinctrl = devm_pinctrl_get(&pdev->dev);
    + if (IS_ERR(dpi->pinctrl)) {
    + dpi->pinctrl = NULL;
    + dev_dbg(&pdev->dev, "Cannot find pinctrl!\n");
    + }
    + if (dpi->pinctrl) {
    + dpi->pins_gpio = pinctrl_lookup_state(dpi->pinctrl, "sleep");
    + if (IS_ERR(dpi->pins_gpio)) {
    + dpi->pins_gpio = NULL;
    + dev_dbg(&pdev->dev, "Cannot find pinctrl idle!\n");
    + }
    + if (dpi->pins_gpio)
    + pinctrl_select_state(dpi->pinctrl, dpi->pins_gpio);
    +
    + dpi->pins_dpi = pinctrl_lookup_state(dpi->pinctrl, "default");
    + if (IS_ERR(dpi->pins_dpi)) {
    + dpi->pins_dpi = NULL;
    + dev_dbg(&pdev->dev, "Cannot find pinctrl active!\n");
    + }
    + }
    mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    dpi->regs = devm_ioremap_resource(dev, mem);
    if (IS_ERR(dpi->regs)) {
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-06-19 18:26    [W:6.151 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site