Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp1047858ybm; Wed, 27 May 2020 14:52:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyEx9Ux4T+yQGaqaRKhFZUXnQGGUpcVZg+Zxij3wZsgN+7yVioZASwb+xpYqFWzzukWM2+7 X-Received: by 2002:a17:906:edb5:: with SMTP id sa21mr368912ejb.78.1590616321325; Wed, 27 May 2020 14:52:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590616321; cv=none; d=google.com; s=arc-20160816; b=hozP+NVZITQo+62LavLrpszaZe0AeLkadFgwVRgnd2OcH4cV62XNIOJaMtumyl00Yo FHtxeGqFU3P7kiy/r5f3oJT6tI7pXzY6fod9dcSEEe/dT3CFAbMKHMsk0zaXIDhjcs4n 19vQ5AsSInWH+g0xecZAvecIs8WBiFLl7majp0pseuB12BwrQlWUicUvhJ7sLrUuCwFi jtW9ETa6s16diQzLApzc4dP723GgYTFkdNmGeC2uVJckTFP6tosmzgWBYsjep8atqyZ5 Un8pP6H4Uz53wE3UwqMs0EtQWSCjUwleunDWWrBJ88Q4J51k/3Be1zCoPpBYhIZn33vq 4WDg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=aGDNKgfbupEd20uOVjJDSIqtW5LOwu8lX9eYl16fpr0=; b=D2Lj84cxIQI3dFE3xPHjIQ+Uuy5s7MHu2KBtS8KQRTNS0AnCjfzlpEUW5wShKrjyn6 bq67HRfSlOu2pxoO95bDsAmRmKaWgmvDMDHlc8/Sh4w6+xVQnbuRTHolHBW+IxTB3oht sB4xZHBr3w7JMMzD3JYfKH9+Oab6+402gauml3aEKSjVAqQOI5ZpmvIcKgoOoOdUuQx+ 7et0D/TjrsUwqynj7P9xD/fVh2SrfCqYV7BnixdYJScBB5FEBHd0DER/nr4ypliEp2pB b8NB+g1MytNI4JSlY7D4CxNWb4v8YYwpJCpnBl+p9xzCTeR9n/S2mh1JYrXQiyc5olwe Zj0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=op1qkriE; dkim=pass header.i=@messagingengine.com header.s=fm2 header.b=VRXxfC+f; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n19si2300603edr.438.2020.05.27.14.51.38; Wed, 27 May 2020 14:52:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=op1qkriE; dkim=pass header.i=@messagingengine.com header.s=fm2 header.b=VRXxfC+f; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390585AbgE0Pye (ORCPT + 98 others); Wed, 27 May 2020 11:54:34 -0400 Received: from new1-smtp.messagingengine.com ([66.111.4.221]:39825 "EHLO new1-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730653AbgE0Pvg (ORCPT ); Wed, 27 May 2020 11:51:36 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailnew.nyi.internal (Postfix) with ESMTP id 6FDFC581510; Wed, 27 May 2020 11:51:34 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Wed, 27 May 2020 11:51:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=aGDNKgfbupEd2 0uOVjJDSIqtW5LOwu8lX9eYl16fpr0=; b=op1qkriEu8zYCZLR8dUCyi21wN4gW oU3RkhbE+N+9HSwFyAuvWa1Og4/A/M8tttI6MmyT74td0GjXJ+zDQHizafhjYypa +N1eKXdLwX1gdXc3bn6ezi3z6Ftn1VXJob0TqcvMHhfID1K7otn1T2/Wj7oVU07Z PIaVeKjd72pr0KriFN2+h45USUTiFz7ZHqx6m+TqWUxX/5JKdwmOTd3y1XbJB0d9 8VQ/9uVj/kCmjlamfIok8dzyWsxpnXyc3AQzoFu244dIx+5UvHTNlruapAqnHUfp ROO/8RaAwwrwl7jlQpYxPQ1GCy0j1sdF3pT2b84QClOaKH/wMKKWBQKsw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=aGDNKgfbupEd20uOVjJDSIqtW5LOwu8lX9eYl16fpr0=; b=VRXxfC+f TfE3b0mCozxBK+B0CCM7oBX+QzU8iVUV5waHllvUZDpG7oBY9sHtqD6Vtdgd32sF 3qJtVil8gcFp5NbhvS1s0v092QM5UVpd4uPSr+nUp1bHfFcYG5/hKNV1k9m1Q3Jr C/vppRRsaz/ryH8gP69GnxydIF5LdNiZme6nzSMx3nWM70aYEwYVAmiPTQJ+85Q4 vL1VnvDCsUpI9G6dGHAONhhnd+KjgaN9MkTBYNYW40KWuInKo2T30gvXUvA3JYQM GHoerLOAul1nsxzLnZQJQyl3FNpEa9pHsJWvLqgIK1rr+cgutEblpfLAKN68+akB F/qC7PPhUB1+ow== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduhedruddvgedgkeegucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeforgigihhm vgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrfgrth htvghrnhepvdekleevfeffkeejhfffueelteelfeduieefheduudfggffhhfffheevveeh hedvnecukfhppeeltddrkeelrdeikedrjeeinecuvehluhhsthgvrhfuihiivgepieefne curfgrrhgrmhepmhgrihhlfhhrohhmpehmrgigihhmvgestggvrhhnohdrthgvtghh X-ME-Proxy: Received: from localhost (lfbn-tou-1-1502-76.w90-89.abo.wanadoo.fr [90.89.68.76]) by mail.messagingengine.com (Postfix) with ESMTPA id 200C830614FA; Wed, 27 May 2020 11:51:34 -0400 (EDT) From: Maxime Ripard To: Nicolas Saenz Julienne , Eric Anholt Cc: dri-devel@lists.freedesktop.org, linux-rpi-kernel@lists.infradead.org, bcm-kernel-feedback-list@broadcom.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Dave Stevenson , Tim Gover , Phil Elwell , Maxime Ripard Subject: [PATCH v3 087/105] drm/vc4: hdmi: Move CEC init to its own function Date: Wed, 27 May 2020 17:48:57 +0200 Message-Id: X-Mailer: git-send-email 2.26.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The CEC init code was put directly into the bind function, which was quite inconsistent with how the audio support was done, and would prevent us from further changes to skip that initialisation entirely. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/vc4_hdmi.c | 108 +++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index 8a63ac3dd86b..7eb3cee25001 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1170,6 +1170,67 @@ static const struct cec_adap_ops vc4_hdmi_cec_adap_ops = { .adap_log_addr = vc4_hdmi_cec_adap_log_addr, .adap_transmit = vc4_hdmi_cec_adap_transmit, }; + +static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) +{ + struct cec_connector_info conn_info; + struct platform_device *pdev = vc4_hdmi->pdev; + u32 value; + int ret; + + vc4_hdmi->cec_adap = cec_allocate_adapter(&vc4_hdmi_cec_adap_ops, + vc4_hdmi, "vc4", + CEC_CAP_DEFAULTS | + CEC_CAP_CONNECTOR_INFO, 1); + ret = PTR_ERR_OR_ZERO(vc4_hdmi->cec_adap); + if (ret < 0) + return ret; + + cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector); + cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info); + + HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, 0xffffffff); + value = HDMI_READ(HDMI_CEC_CNTRL_1); + value &= ~VC4_HDMI_CEC_DIV_CLK_CNT_MASK; + /* + * Set the logical address to Unregistered and set the clock + * divider: the hsm_clock rate and this divider setting will + * give a 40 kHz CEC clock. + */ + value |= VC4_HDMI_CEC_ADDR_MASK | + (4091 << VC4_HDMI_CEC_DIV_CLK_CNT_SHIFT); + HDMI_WRITE(HDMI_CEC_CNTRL_1, value); + ret = devm_request_threaded_irq(&pdev->dev, platform_get_irq(pdev, 0), + vc4_cec_irq_handler, + vc4_cec_irq_handler_thread, 0, + "vc4 hdmi cec", vc4_hdmi); + if (ret) + goto err_delete_cec_adap; + + ret = cec_register_adapter(vc4_hdmi->cec_adap, &pdev->dev); + if (ret < 0) + goto err_delete_cec_adap; + + return 0; + +err_delete_cec_adap: + cec_delete_adapter(vc4_hdmi->cec_adap); + + return ret; +} + +static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) +{ + cec_unregister_adapter(vc4_hdmi->cec_adap); +} +#else +static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) +{ + return 0; +} + +static void vc4_hdmi_cec_exit(struct vc4_hdmi *vc4_hdmi) {}; + #endif static int vc4_hdmi_build_regset(struct vc4_hdmi *vc4_hdmi, @@ -1247,9 +1308,6 @@ static int vc4_hdmi_init_resources(struct vc4_hdmi *vc4_hdmi) static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) { -#ifdef CONFIG_DRM_VC4_HDMI_CEC - struct cec_connector_info conn_info; -#endif struct platform_device *pdev = to_platform_device(dev); struct drm_device *drm = dev_get_drvdata(master); const struct vc4_hdmi_variant *variant; @@ -1328,43 +1386,13 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) if (ret) goto err_destroy_encoder; -#ifdef CONFIG_DRM_VC4_HDMI_CEC - vc4_hdmi->cec_adap = cec_allocate_adapter(&vc4_hdmi_cec_adap_ops, - vc4_hdmi, "vc4", - CEC_CAP_DEFAULTS | - CEC_CAP_CONNECTOR_INFO, 1); - ret = PTR_ERR_OR_ZERO(vc4_hdmi->cec_adap); - if (ret < 0) - goto err_destroy_conn; - - cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector); - cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info); - - HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, 0xffffffff); - value = HDMI_READ(HDMI_CEC_CNTRL_1); - value &= ~VC4_HDMI_CEC_DIV_CLK_CNT_MASK; - /* - * Set the logical address to Unregistered and set the clock - * divider: the hsm_clock rate and this divider setting will - * give a 40 kHz CEC clock. - */ - value |= VC4_HDMI_CEC_ADDR_MASK | - (4091 << VC4_HDMI_CEC_DIV_CLK_CNT_SHIFT); - HDMI_WRITE(HDMI_CEC_CNTRL_1, value); - ret = devm_request_threaded_irq(dev, platform_get_irq(pdev, 0), - vc4_cec_irq_handler, - vc4_cec_irq_handler_thread, 0, - "vc4 hdmi cec", vc4_hdmi); + ret = vc4_hdmi_cec_init(vc4_hdmi); if (ret) - goto err_delete_cec_adap; - ret = cec_register_adapter(vc4_hdmi->cec_adap, dev); - if (ret < 0) - goto err_delete_cec_adap; -#endif + goto err_destroy_conn; ret = vc4_hdmi_audio_init(vc4_hdmi); if (ret) - goto err_destroy_encoder; + goto err_free_cec; vc4_debugfs_add_file(drm, variant->debugfs_name, vc4_hdmi_debugfs_regs, @@ -1372,12 +1400,10 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) return 0; -#ifdef CONFIG_DRM_VC4_HDMI_CEC -err_delete_cec_adap: - cec_delete_adapter(vc4_hdmi->cec_adap); +err_free_cec: + vc4_hdmi_cec_exit(vc4_hdmi); err_destroy_conn: vc4_hdmi_connector_destroy(&vc4_hdmi->connector); -#endif err_destroy_encoder: drm_encoder_cleanup(encoder); err_unprepare_hsm: @@ -1402,7 +1428,7 @@ static void vc4_hdmi_unbind(struct device *dev, struct device *master, kfree(vc4_hdmi->hdmi_regset.regs); kfree(vc4_hdmi->hd_regset.regs); - cec_unregister_adapter(vc4_hdmi->cec_adap); + vc4_hdmi_cec_exit(vc4_hdmi); vc4_hdmi_connector_destroy(&vc4_hdmi->connector); drm_encoder_cleanup(&vc4_hdmi->encoder.base.base); -- git-series 0.9.1