Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp3028996rwb; Mon, 15 Aug 2022 16:27:40 -0700 (PDT) X-Google-Smtp-Source: AA6agR72kwtU0AYVRRKWAMkIzm/2Mo7HOBndmUEakhOMvk0/Rcb8U5Whw9mXx6EQaeYxi58H8lP+ X-Received: by 2002:a17:902:e746:b0:16e:f7cf:671f with SMTP id p6-20020a170902e74600b0016ef7cf671fmr18921514plf.168.1660605947743; Mon, 15 Aug 2022 16:25:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660605947; cv=none; d=google.com; s=arc-20160816; b=EPGwv7gNwADvTJPHPsD94kkqkiIToH+m47foEgM799vLIOoWRZzMx5Lda28mAG0CeU nRDt/dnvmW0maw/hZzmcWRrbUIVAH7l95xvoZ+pqS6JwnrKaTbIkNeXl8EHb6BQzneBf S4cxwT6fuw6FMt3AX92pXlhG0gQrQ7U8wUHxc7jbEcbqichqCVfdDvNRaeE16ZVSCBiA PBzV3ddeGSR9MxLwQ8kVD5JGssffO0zWbKcZu4aLrdw27fFbl/SX87K2AaBCsU3bzyVp hi17IxjWnyA7jyrztZ9iUami2JhXhgVaqOgPSSqTb8LiZMzmcUSPfRubE3lzsZ3N7JOs 0qKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=rtmyhujvMZWVrPDL6fJ7gJEhN+KSbatgGTDzsWl3ulw=; b=bfxnYerrA4NL0imeBHP62riZnReABoY0/u6rRepjv/cClsRopWFK9clnirHLnvpZjv Moj5qn2r5IDTIPKSHm+29cKgUkKM4NMQwSJhPTZIyEuhqKWdCxA3dxrMac8k6G7ksefA N0TeL2Zrv7mMT5Lv5Ewx86hrJ5Mmkbp25LOzgO/zFnqCSAPpF+hQosI66BLDhMtE1h4K 73UP3AOco/LAowolH5Dov5POUuSV1xE9TztINGigANsSOkciFtTEJqA6TG1rKu9lVW7I aBTas3UGBDIdNXyj+pyXMD/NvonnOsKlJ4h4g+pMQRolIavDHXKmjiFbhbn53t9XBac6 pHMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fD+JboBJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v22-20020a056a00149600b0052e33f30ca2si12490205pfu.208.2022.08.15.16.25.35; Mon, 15 Aug 2022 16:25:47 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fD+JboBJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233332AbiHOXOY (ORCPT + 99 others); Mon, 15 Aug 2022 19:14:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345701AbiHOXM5 (ORCPT ); Mon, 15 Aug 2022 19:12:57 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BD4805FCD; Mon, 15 Aug 2022 13:00:50 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 4DB94B8113E; Mon, 15 Aug 2022 20:00:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A0A4EC433C1; Mon, 15 Aug 2022 20:00:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1660593648; bh=fsxIfqIiQo8bWSYD5GItZJhduZGBfHipVSilSbWRkKI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fD+JboBJxgPGFlZg4lwSZ4Of8DNINuRzqLfGP0IAs1PryQLT/dfY/8L1ukg+SY/lh w/26YlMBG7tkTcg0ykqeu+Pv2RPGHWdeQlgvNsXtfNymZOhQ8QpV1imu3fxH4HS7TE W3rmgJFY5Qqz0qKtZZIk32yUzMQ1bLiaIteBWR5I= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jitao Shi , Xinlei Lee , AngeloGioacchino Del Regno , Rex-BC Chen , Chun-Kuang Hu , Sasha Levin Subject: [PATCH 5.18 0981/1095] drm/mediatek: Keep dsi as LP00 before dcs cmds transfer Date: Mon, 15 Aug 2022 20:06:20 +0200 Message-Id: <20220815180509.714590769@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220815180429.240518113@linuxfoundation.org> References: <20220815180429.240518113@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jitao Shi [ Upstream commit 39e8d062b03c3dc257d880d82bd55cdd9e185a3b ] To comply with the panel sequence, hold the mipi signal to LP00 before the dcs cmds transmission, and pull the mipi signal high from LP00 to LP11 until the start of the dcs cmds transmission. The normal panel timing is : (1) pp1800 DC pull up (2) avdd & avee AC pull high (3) lcm_reset pull high -> pull low -> pull high (4) Pull MIPI signal high (LP11) -> initial code -> send video data (HS mode) The power-off sequence is reversed. If dsi is not in cmd mode, then dsi will pull the mipi signal high in the mtk_output_dsi_enable function. The delay in lane_ready func is the reaction time of dsi_rx after pulling up the mipi signal. Fixes: 2dd8075d2185 ("drm/mediatek: mtk_dsi: Use the drm_panel_bridge API") Link: https://patchwork.kernel.org/project/linux-mediatek/patch/1653012007-11854-4-git-send-email-xinlei.lee@mediatek.com/ Cc: # 5.10.x: 7f6335c6a258: drm/mediatek: Modify dsi funcs to atomic operations Cc: # 5.10.x: cde7e2e35c28: drm/mediatek: Separate poweron/poweroff from enable/disable and define new funcs Cc: # 5.10.x Signed-off-by: Jitao Shi Signed-off-by: Xinlei Lee Reviewed-by: AngeloGioacchino Del Regno Reviewed-by: Rex-BC Chen Signed-off-by: Chun-Kuang Hu Signed-off-by: Sasha Levin --- drivers/gpu/drm/mediatek/mtk_dsi.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index f0f523bdafb8..e0a2d5ea40af 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -203,6 +203,7 @@ struct mtk_dsi { struct mtk_phy_timing phy_timing; int refcount; bool enabled; + bool lanes_ready; u32 irq_data; wait_queue_head_t irq_wait_queue; const struct mtk_dsi_driver_data *driver_data; @@ -649,18 +650,11 @@ static int mtk_dsi_poweron(struct mtk_dsi *dsi) mtk_dsi_reset_engine(dsi); mtk_dsi_phy_timconfig(dsi); - mtk_dsi_rxtx_control(dsi); - usleep_range(30, 100); - mtk_dsi_reset_dphy(dsi); mtk_dsi_ps_control_vact(dsi); mtk_dsi_set_vm_cmd(dsi); mtk_dsi_config_vdo_timing(dsi); mtk_dsi_set_interrupt_enable(dsi); - mtk_dsi_clk_ulp_mode_leave(dsi); - mtk_dsi_lane0_ulp_mode_leave(dsi); - mtk_dsi_clk_hs_mode(dsi, 0); - return 0; err_disable_engine_clk: clk_disable_unprepare(dsi->engine_clk); @@ -691,6 +685,23 @@ static void mtk_dsi_poweroff(struct mtk_dsi *dsi) clk_disable_unprepare(dsi->digital_clk); phy_power_off(dsi->phy); + + dsi->lanes_ready = false; +} + +static void mtk_dsi_lane_ready(struct mtk_dsi *dsi) +{ + if (!dsi->lanes_ready) { + dsi->lanes_ready = true; + mtk_dsi_rxtx_control(dsi); + usleep_range(30, 100); + mtk_dsi_reset_dphy(dsi); + mtk_dsi_clk_ulp_mode_leave(dsi); + mtk_dsi_lane0_ulp_mode_leave(dsi); + mtk_dsi_clk_hs_mode(dsi, 0); + msleep(20); + /* The reaction time after pulling up the mipi signal for dsi_rx */ + } } static void mtk_output_dsi_enable(struct mtk_dsi *dsi) @@ -698,6 +709,7 @@ static void mtk_output_dsi_enable(struct mtk_dsi *dsi) if (dsi->enabled) return; + mtk_dsi_lane_ready(dsi); mtk_dsi_set_mode(dsi); mtk_dsi_clk_hs_mode(dsi, 1); @@ -1007,6 +1019,8 @@ static ssize_t mtk_dsi_host_transfer(struct mipi_dsi_host *host, if (MTK_DSI_HOST_IS_READ(msg->type)) irq_flag |= LPRX_RD_RDY_INT_FLAG; + mtk_dsi_lane_ready(dsi); + ret = mtk_dsi_host_send_cmd(dsi, msg, irq_flag); if (ret) goto restore_dsi_mode; -- 2.35.1