Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp722464imm; Thu, 26 Jul 2018 10:50:01 -0700 (PDT) X-Google-Smtp-Source: AAOMgpesHoE4CS5lTNdE/Do9YvQn3brGbgLe2Hx+MFthADAuD+kZ6j+mBSU014AVLM3ktX8SgADY X-Received: by 2002:a63:c50c:: with SMTP id f12-v6mr2832502pgd.88.1532627401441; Thu, 26 Jul 2018 10:50:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532627401; cv=none; d=google.com; s=arc-20160816; b=pEEJyDmIVjPLqrefTcVh7sPTXfOW7kT/5DwyAQ6iymO7dr5YckEoVXwVTs8Qvm0Ljd jPtZ9g+HZefJ6tKuAUu9YX7CWc9eMe9Vt3q3BR+9tKCn3W2fNRMi3SpMv79hcLBFV5C/ /4celSFPL05uooWUWfUp/3BefFH+6XIznW+Gri5SDLTb7vBhwO+bzwhrfukzZG++lLOD LlC63I4y92663Vxc/0wC5uXTdWiavgYvxBp1BrTADRGF8hkMmWomikx52eZrqPI+BNoy vDp5pnXttqco2lO5r6ntGzXbZcdOrJ6ls/huDzYk2gRBKh62faijymGWHFdaKKIgKHw4 04GQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=9xhwCPsR+YUCp/K1k9lx35lybgfF5ZnFYkTQeLvHEk4=; b=RJ03Bs4AjXh79luzcKE42gY4H/ii8q6cA2ezcmlp/O3rRikTWzXCtiMsaFnAIQS4Bi qpjydH6Kyo9PwoUlZM1ItNDryaNIAOC0SM1b/GnTjhY0qHZPRaurpFqnWC/aFBKqsSZY dUWSzD9ib5NC5rzr6JtrOkWQY5Q/HFQWdemEIhMZcPtalcGEGsbtKorFTMxmBc7OWJXS AJiZIGAZywmCW9XNgkjg1q5jgBuheGyohYQtkoQdsXRSPlnY5LCLb/hiM78GexuuxkIt qzYrMt97CajBxwi1KTsN7PrfZXSQN/vBoFyPvl+Z4ibENMUX4WanfggELi8U2Faturls DGxQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p64-v6si1826489pga.25.2018.07.26.10.49.46; Thu, 26 Jul 2018 10:50:01 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388824AbeGZSgd (ORCPT + 99 others); Thu, 26 Jul 2018 14:36:33 -0400 Received: from hermes.aosc.io ([199.195.250.187]:58365 "EHLO hermes.aosc.io" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730085AbeGZSgd (ORCPT ); Thu, 26 Jul 2018 14:36:33 -0400 Received: from localhost (localhost [127.0.0.1]) (Authenticated sender: icenowy@aosc.io) by hermes.aosc.io (Postfix) with ESMTPSA id 70C919FAEE; Thu, 26 Jul 2018 17:18:37 +0000 (UTC) From: Icenowy Zheng To: Maxime Ripard , Rob Herring , Chen-Yu Tsai , Jagan Teki , Jernej Skrabec Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-sunxi@googlegroups.com, Icenowy Zheng Subject: [PATCH v3.1 09/10] drm/sun4i: Add support for HDMI voltage regulator Date: Fri, 27 Jul 2018 01:12:56 +0800 Message-Id: <20180726171257.6688-10-icenowy@aosc.io> In-Reply-To: <20180726171257.6688-1-icenowy@aosc.io> References: <20180726171257.6688-1-icenowy@aosc.io> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jernej Skrabec Some boards have HDMI VCC pin connected to voltage regulator which may not be turned on by default. Add support for such boards by adding voltage regulator handling code to HDMI driver. Signed-off-by: Jernej Skrabec Signed-off-by: Icenowy Zheng --- Changes in v3.1: - New patch. (Replaced "drm: sun4i: add support for HVCC regulator for DWC HDMI glue" by Icenowy.) drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c | 17 ++++++++++++++++- drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h | 2 ++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c index 31875b636434..bf7bf4f2fb29 100644 --- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c +++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.c @@ -125,10 +125,22 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct device *master, return PTR_ERR(hdmi->clk_tmds); } + hdmi->regulator = devm_regulator_get(dev, "hdmi"); + if (IS_ERR(hdmi->regulator)) { + dev_err(dev, "Couldn't get regulator\n"); + return PTR_ERR(hdmi->regulator); + } + + ret = regulator_enable(hdmi->regulator); + if (ret) { + dev_err(dev, "Failed to enable regulator\n"); + return ret; + } + ret = reset_control_deassert(hdmi->rst_ctrl); if (ret) { dev_err(dev, "Could not deassert ctrl reset control\n"); - return ret; + goto err_disable_regulator; } ret = clk_prepare_enable(hdmi->clk_tmds); @@ -183,6 +195,8 @@ static int sun8i_dw_hdmi_bind(struct device *dev, struct device *master, clk_disable_unprepare(hdmi->clk_tmds); err_assert_ctrl_reset: reset_control_assert(hdmi->rst_ctrl); +err_disable_regulator: + regulator_disable(hdmi->regulator); return ret; } @@ -196,6 +210,7 @@ static void sun8i_dw_hdmi_unbind(struct device *dev, struct device *master, sun8i_hdmi_phy_remove(hdmi); clk_disable_unprepare(hdmi->clk_tmds); reset_control_assert(hdmi->rst_ctrl); + regulator_disable(hdmi->regulator); } static const struct component_ops sun8i_dw_hdmi_ops = { diff --git a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h index aadbe0a10b0c..7fdc1ecd2892 100644 --- a/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h +++ b/drivers/gpu/drm/sun4i/sun8i_dw_hdmi.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #define SUN8I_HDMI_PHY_DBG_CTRL_REG 0x0000 @@ -176,6 +177,7 @@ struct sun8i_dw_hdmi { struct drm_encoder encoder; struct sun8i_hdmi_phy *phy; struct dw_hdmi_plat_data plat_data; + struct regulator *regulator; struct reset_control *rst_ctrl; }; -- 2.18.0