Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1174517yba; Thu, 9 May 2019 12:00:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqxGmnhZ2Bq3Pq8aBidXq97excJf8/PhCGo0BnrEPWOZ1B9T79QQ+1/rnKofzS3/Qc3jqMnp X-Received: by 2002:a62:6497:: with SMTP id y145mr7716645pfb.255.1557428431752; Thu, 09 May 2019 12:00:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557428431; cv=none; d=google.com; s=arc-20160816; b=lj4dbYEQl5jBK+vWrDZ2omkXM1Lnl1LS6Z2/VeRXRQWVwBt13Y6cCtdjcyFigY13X+ D5qfkpUSua0g3sz4QHKuIgZq8LfhWQPbnjYbtiiThCpTzD8E7bYxO+sZ/IRAGj5Frh01 y+SFRpMddNvo1GFIP/BKxGGB47guDS+4VgMgjCOJeWxGtOXX4PYtHkCUY2bFVmxaShYo 2h6pquj6xGEhifD4voA1O2MEL62YjrqcVIrwEO2eO8GQUObVluxWJxYdvmrt/ebnLypj n4lORPa2s/711BWfstpKu/JLkfWEgbBytWOSREr2XFEItAVWgP/P5d0J/q1HF4oV6ISb 0GpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=NDBAsTzsxKQwIGZ31hJj9OF8MOZHsFPsZg34epyNAx4=; b=a0f2ZZ37/FPOg955Ul2sKV9M0p2W2alaKVmmdK48lHiXx516yBfE1cg7CJ5Juw0FqU sMm1tDPKSmu9Vh8gxhSs4CrA4+rwGbmOSRRkn9bbUUn34RNxOGb4qLDWsF9rtZsnILJi RfKTl7jxOEDRKGCjllPfhoMrct8Z71REevWMF3k5+yrxQWaoyNYK1srvw7Fehz8qiOnO PIK5lUppkfpRmV+kWNNtaiRwz/i/d9EAjrZC/c0x3XjrrAzzXy1Qmgn9/LtsZXGAMHy/ jni/gNVHbnhISm3W6FHhFhb0A7lW0OIrU8mertjXsoNPTrGZsoIc6wEpQmr0KUSOnEa6 j7GA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wr3OV0v7; 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 d21si4091101pgv.353.2019.05.09.12.00.15; Thu, 09 May 2019 12:00:31 -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; dkim=pass header.i=@kernel.org header.s=default header.b=wr3OV0v7; 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 S1728844AbfEIS6p (ORCPT + 99 others); Thu, 9 May 2019 14:58:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:47260 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728786AbfEISw5 (ORCPT ); Thu, 9 May 2019 14:52:57 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id D9E142177E; Thu, 9 May 2019 18:52:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557427976; bh=KcBNhjf5N9TzoKLJ8rSU60ZB8nQ2vfmXWLvk1pOJ5Jk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wr3OV0v7I6qIptX4wBgxN62XjSaxvolk9t5L1rGPejTgSenU2GnnWLd6wXNo9RVdj N9rdWMkaGwnRg5PEzRi4MhrE6maIUGsRfq1XvO1XbojeSBrz58ZauYBjxjtNBzQkmc EXsxGZsTotSqm2W2voIGwpPA4iezf7XpZE8KqvFY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hans Verkuil , Jyri Sarha , Laurent Pinchart , Tony Lindgren , Hans Verkuil , Tomi Valkeinen , Sasha Levin Subject: [PATCH 5.0 29/95] drm/omap: hdmi4_cec: Fix CEC clock handling for PM Date: Thu, 9 May 2019 20:41:46 +0200 Message-Id: <20190509181311.346632359@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190509181309.180685671@linuxfoundation.org> References: <20190509181309.180685671@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit 36a1da15b5df493241b0011d2185fdd724ac1ed1 ] If CONFIG_OMAP4_DSS_HDMI_CEC is enabled in .config, deeper SoC idle states are blocked because the CEC clock gets always enabled on init. Let's fix the issue by moving the CEC clock handling to happen later in hdmi_cec_adap_enable() as suggested by Hans Verkuil . This way the CEC clock gets only enabled when needed. This can be tested by doing cec-ctl --playback to enable the CEC, and doing cec-ctl --clear to disable it. Let's also fix the typo for "divider" in the comments while at it. Fixes: 8d7f934df8d8 ("omapdrm: hdmi4_cec: add OMAP4 HDMI CEC support") Suggested-by: Hans Verkuil Cc: Hans Verkuil Cc: Jyri Sarha Cc: Laurent Pinchart Signed-off-by: Tony Lindgren Reviewed-by: Hans Verkuil Signed-off-by: Tomi Valkeinen Link: https://patchwork.freedesktop.org/patch/msgid/20190326151438.32414-1-tony@atomide.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c | 26 ++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c index 340383150fb98..ebf9c96d43eee 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4_cec.c @@ -175,6 +175,7 @@ static int hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable) REG_FLD_MOD(core->base, HDMI_CORE_SYS_INTR_UNMASK4, 0, 3, 3); hdmi_wp_clear_irqenable(core->wp, HDMI_IRQ_CORE); hdmi_wp_set_irqstatus(core->wp, HDMI_IRQ_CORE); + REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0, 5, 0); hdmi4_core_disable(core); return 0; } @@ -182,16 +183,24 @@ static int hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable) if (err) return err; + /* + * Initialize CEC clock divider: CEC needs 2MHz clock hence + * set the divider to 24 to get 48/24=2MHz clock + */ + REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0x18, 5, 0); + /* Clear TX FIFO */ if (!hdmi_cec_clear_tx_fifo(adap)) { pr_err("cec-%s: could not clear TX FIFO\n", adap->name); - return -EIO; + err = -EIO; + goto err_disable_clk; } /* Clear RX FIFO */ if (!hdmi_cec_clear_rx_fifo(adap)) { pr_err("cec-%s: could not clear RX FIFO\n", adap->name); - return -EIO; + err = -EIO; + goto err_disable_clk; } /* Clear CEC interrupts */ @@ -236,6 +245,12 @@ static int hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable) hdmi_write_reg(core->base, HDMI_CEC_INT_STATUS_1, temp); } return 0; + +err_disable_clk: + REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0, 5, 0); + hdmi4_core_disable(core); + + return err; } static int hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr) @@ -333,11 +348,8 @@ int hdmi4_cec_init(struct platform_device *pdev, struct hdmi_core_data *core, return ret; core->wp = wp; - /* - * Initialize CEC clock divider: CEC needs 2MHz clock hence - * set the devider to 24 to get 48/24=2MHz clock - */ - REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0x18, 5, 0); + /* Disable clock initially, hdmi_cec_adap_enable() manages it */ + REG_FLD_MOD(core->wp->base, HDMI_WP_CLK, 0, 5, 0); ret = cec_register_adapter(core->adap, &pdev->dev); if (ret < 0) { -- 2.20.1