Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S944092AbdDTJjr (ORCPT ); Thu, 20 Apr 2017 05:39:47 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:42940 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S943758AbdDTJjo (ORCPT ); Thu, 20 Apr 2017 05:39:44 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 26180610D5 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=architt@codeaurora.org Subject: Re: [PATCH v2 2/2] drm: dw-hdmi: gate audio clock from the I2S enablement callbacks To: Romain Perier , David Airlie References: <20170414083113.4255-1-romain.perier@collabora.com> <20170414083113.4255-3-romain.perier@collabora.com> Cc: Jose Abreu , Neil Armstrong , Russell King , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org From: Archit Taneja Message-ID: Date: Thu, 20 Apr 2017 15:09:36 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3631 Lines: 110 On 04/19/2017 10:21 AM, Archit Taneja wrote: > > > On 04/14/2017 02:01 PM, Romain Perier wrote: >> Currently, the audio sampler clock is enabled from dw_hdmi_setup() at >> step E. and is kept enabled for later use. This clock should be enabled >> and disabled along with the actual audio stream and not always on (that >> is bad for PM). Futhermore, as described by the datasheet, the I2S > > s/Futhermore/Furthermore > >> variant need to gate/ungate the clock when the stream is > > s/need/needs > >> enabled/disabled. >> >> This commit adds a parameter to hdmi_audio_enable_clk() that controls >> when the audio sample clock must be enabled or disabled. Then, it adds >> the call to this function from dw_hdmi_i2s_audio_enable() and >> dw_hdmi_i2s_audio_disable(). >> >> Signed-off-by: Romain Perier >> --- >> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 20 ++++++++++++++------ >> 1 file changed, 14 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c >> index 5b328c0..a6da634 100644 >> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c >> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c >> @@ -544,6 +544,12 @@ void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate) >> } >> EXPORT_SYMBOL_GPL(dw_hdmi_set_sample_rate); >> >> +static void hdmi_enable_audio_clk(struct dw_hdmi *hdmi, bool enable) >> +{ >> + hdmi_modb(hdmi, enable ? 0 : HDMI_MC_CLKDIS_AUDCLK_DISABLE, >> + HDMI_MC_CLKDIS_AUDCLK_DISABLE, HDMI_MC_CLKDIS); >> +} >> + >> void dw_hdmi_ahb_audio_enable(struct dw_hdmi *hdmi) >> { >> hdmi_set_cts_n(hdmi, hdmi->audio_cts, hdmi->audio_n); >> @@ -557,6 +563,12 @@ void dw_hdmi_ahb_audio_disable(struct dw_hdmi *hdmi) >> void dw_hdmi_i2s_audio_enable(struct dw_hdmi *hdmi) >> { >> hdmi_set_cts_n(hdmi, hdmi->audio_cts, hdmi->audio_n); >> + hdmi_enable_audio_clk(hdmi, true); >> +} >> + >> +void dw_hdmi_i2s_audio_disable(struct dw_hdmi *hdmi) >> +{ >> + hdmi_enable_audio_clk(hdmi, false); >> } > > This should be static too. > > If you're okay with the suggestions, I can fix these myself and push. Let > me know if that's okay. Took the liberty of going ahead with the fixes. Queued both patches to drm-misc-next. Thanks, Archit > > Thanks, > Archit > >> >> void dw_hdmi_audio_enable(struct dw_hdmi *hdmi) >> @@ -1592,11 +1604,6 @@ static void dw_hdmi_enable_video_path(struct dw_hdmi *hdmi) >> HDMI_MC_FLOWCTRL); >> } >> >> -static void hdmi_enable_audio_clk(struct dw_hdmi *hdmi) >> -{ >> - hdmi_modb(hdmi, 0, HDMI_MC_CLKDIS_AUDCLK_DISABLE, HDMI_MC_CLKDIS); >> -} >> - >> /* Workaround to clear the overflow condition */ >> static void dw_hdmi_clear_overflow(struct dw_hdmi *hdmi) >> { >> @@ -1710,7 +1717,7 @@ static int dw_hdmi_setup(struct dw_hdmi *hdmi, struct drm_display_mode *mode) >> >> /* HDMI Initialization Step E - Configure audio */ >> hdmi_clk_regenerator_update_pixel_clock(hdmi); >> - hdmi_enable_audio_clk(hdmi); >> + hdmi_enable_audio_clk(hdmi, true); >> } >> >> /* not for DVI mode */ >> @@ -2438,6 +2445,7 @@ __dw_hdmi_probe(struct platform_device *pdev, >> audio.write = hdmi_writeb; >> audio.read = hdmi_readb; >> hdmi->enable_audio = dw_hdmi_i2s_audio_enable; >> + hdmi->disable_audio = dw_hdmi_i2s_audio_disable; >> >> pdevinfo.name = "dw-hdmi-i2s-audio"; >> pdevinfo.data = &audio; >> > -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project