From nobody Tue Dec 16 11:42:50 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A56D1C28B2B for ; Fri, 19 Aug 2022 16:04:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351274AbiHSQEl (ORCPT ); Fri, 19 Aug 2022 12:04:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57926 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351407AbiHSQBe (ORCPT ); Fri, 19 Aug 2022 12:01:34 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E33BE69F58; Fri, 19 Aug 2022 08:53:21 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 32DBE615E7; Fri, 19 Aug 2022 15:53:18 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA377C433C1; Fri, 19 Aug 2022 15:53:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1660924397; bh=c4+yrRgWYdZgT3VCZtl7ntrSvO41A1/G7kPKcAoAkLM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=w0f+WNT35Kf5QveZ+EE+XLS/87s6k8henCIwESEyucHOOxUHXDo+aRjaH2SappxJl k0/2J71uH+rJMLF9mnrVIt6B4E2lCmsMnUIdvv3u2QtAlppdxPBu8WiCuE8fSzh7W1 jJRo4lbvONFNC8bxQOoy2+nEASY/qRVwj50Q5AmU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lucas Stach , Marek Vasut , Jonas Karlman , Laurent Pinchart , Maxime Ripard , Neil Armstrong , Robert Foss , Sam Ravnborg , Sasha Levin Subject: [PATCH 5.10 158/545] drm/bridge: tc358767: Make sure Refclk clock are enabled Date: Fri, 19 Aug 2022 17:38:48 +0200 Message-Id: <20220819153836.423086583@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220819153829.135562864@linuxfoundation.org> References: <20220819153829.135562864@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Marek Vasut [ Upstream commit 0b4c48f3e315d172e4cc06e10f2c8ba180788baf ] The Refclk may be supplied by SoC clock output instead of crystal oscillator, make sure the clock are enabled before any other action is performed with the bridge chip, otherwise it may either fail to operate at all, or miss reset GPIO toggle. Reviewed-by: Lucas Stach Fixes: 7caff0fc4296e ("drm/bridge: tc358767: Add DPI to eDP bridge driver") Signed-off-by: Marek Vasut Cc: Jonas Karlman Cc: Laurent Pinchart Cc: Lucas Stach Cc: Marek Vasut Cc: Maxime Ripard Cc: Neil Armstrong Cc: Robert Foss Cc: Sam Ravnborg Reviewed-by: Maxime Ripard Link: https://patchwork.freedesktop.org/patch/msgid/20220520121543.11550-1-= marex@denx.de Signed-off-by: Sasha Levin --- drivers/gpu/drm/bridge/tc358767.c | 32 ++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc3= 58767.c index 9af564cf92e5..3e365cd7d0a3 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -1562,6 +1562,13 @@ static int tc_probe_edp_bridge_endpoint(struct tc_da= ta *tc) return ret; } =20 +static void tc_clk_disable(void *data) +{ + struct clk *refclk =3D data; + + clk_disable_unprepare(refclk); +} + static int tc_probe(struct i2c_client *client, const struct i2c_device_id = *id) { struct device *dev =3D &client->dev; @@ -1578,6 +1585,24 @@ static int tc_probe(struct i2c_client *client, const= struct i2c_device_id *id) if (ret) return ret; =20 + tc->refclk =3D devm_clk_get(dev, "ref"); + if (IS_ERR(tc->refclk)) { + ret =3D PTR_ERR(tc->refclk); + dev_err(dev, "Failed to get refclk: %d\n", ret); + return ret; + } + + ret =3D clk_prepare_enable(tc->refclk); + if (ret) + return ret; + + ret =3D devm_add_action_or_reset(dev, tc_clk_disable, tc->refclk); + if (ret) + return ret; + + /* tRSTW =3D 100 cycles , at 13 MHz that is ~7.69 us */ + usleep_range(10, 15); + /* Shut down GPIO is optional */ tc->sd_gpio =3D devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH); if (IS_ERR(tc->sd_gpio)) @@ -1598,13 +1623,6 @@ static int tc_probe(struct i2c_client *client, const= struct i2c_device_id *id) usleep_range(5000, 10000); } =20 - tc->refclk =3D devm_clk_get(dev, "ref"); - if (IS_ERR(tc->refclk)) { - ret =3D PTR_ERR(tc->refclk); - dev_err(dev, "Failed to get refclk: %d\n", ret); - return ret; - } - tc->regmap =3D devm_regmap_init_i2c(client, &tc_regmap_config); if (IS_ERR(tc->regmap)) { ret =3D PTR_ERR(tc->regmap); --=20 2.35.1