From patchwork Thu Oct 17 07:28:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 59518 X-Patchwork-Delegate: hverkuil@xs4all.nl Received: from vger.kernel.org ([209.132.180.67]) by www.linuxtv.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iL0DM-0007Go-33; Thu, 17 Oct 2019 07:28:52 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387545AbfJQH2u (ORCPT + 1 other); Thu, 17 Oct 2019 03:28:50 -0400 Received: from lb3-smtp-cloud8.xs4all.net ([194.109.24.29]:43271 "EHLO lb3-smtp-cloud8.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730715AbfJQH2t (ORCPT ); Thu, 17 Oct 2019 03:28:49 -0400 Received: from tschai.fritz.box ([46.9.232.237]) by smtp-cloud8.xs4all.net with ESMTPA id L0DCiNIhkPduvL0DGitUVv; Thu, 17 Oct 2019 09:28:46 +0200 From: Hans Verkuil To: linux-media@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Dariusz Marcinkiewicz , Daniel Vetter , Russell King , Laurent Pinchart , Hans Verkuil Subject: [PATCHv9 1/2] drm: tda998x: use cec_notifier_conn_(un)register Date: Thu, 17 Oct 2019 09:28:41 +0200 Message-Id: <20191017072842.16793-2-hverkuil-cisco@xs4all.nl> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191017072842.16793-1-hverkuil-cisco@xs4all.nl> References: <20191017072842.16793-1-hverkuil-cisco@xs4all.nl> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfGFAX9zU26r6wlHNsYbLI+OSAqNLGbGKkUn9xVdyWxOVKD4TD5psA+QsWHW2HCyNizsE4ILeAgH+Y4I5r7hgR9GYDZk7ZrgQoAgTHN+rxRqAilBBB2cJ EUHnL9WnsYDfBQgTsVuPB5CWz5wgByOXOl/Zv9wDADavWaMMTh5YuHxHOBGVmyAlIKBHulPs5v1uUjC9lDXau7B7vsO0r/kzOu9+yHPQl6bSa8JCLKEpfVAw zNxbxzWCUAS7Db/0cQKbboZqTvkn4EgffAC/oHxtZPwHZ00H2baENo1/ZWCxS3fbrSl1ciS1hL0i/PDN7j08Hk2zzYhKDDfx8NSc3DIo2Oa1Ol6SLUji7rJv ek3zhsJ9kMjfX2VzJJZortT1g2qbXVPD1cR51HrWd7YoZBIEvu8= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Dariusz Marcinkiewicz Use the new cec_notifier_conn_(un)register() functions to (un)register the notifier for the HDMI connector. Signed-off-by: Dariusz Marcinkiewicz Signed-off-by: Hans Verkuil --- drivers/gpu/drm/i2c/tda998x_drv.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c index 84c6d4c91c65..dde8decb52a6 100644 --- a/drivers/gpu/drm/i2c/tda998x_drv.c +++ b/drivers/gpu/drm/i2c/tda998x_drv.c @@ -805,8 +805,8 @@ static irqreturn_t tda998x_irq_thread(int irq, void *data) tda998x_edid_delay_start(priv); } else { schedule_work(&priv->detect_work); - cec_notifier_set_phys_addr(priv->cec_notify, - CEC_PHYS_ADDR_INVALID); + cec_notifier_phys_addr_invalidate( + priv->cec_notify); } handled = true; @@ -1790,8 +1790,7 @@ static void tda998x_destroy(struct device *dev) i2c_unregister_device(priv->cec); - if (priv->cec_notify) - cec_notifier_put(priv->cec_notify); + cec_notifier_conn_unregister(priv->cec_notify); } static int tda998x_create(struct device *dev) @@ -1916,7 +1915,7 @@ static int tda998x_create(struct device *dev) cec_write(priv, REG_CEC_RXSHPDINTENA, CEC_RXSHPDLEV_HPD); } - priv->cec_notify = cec_notifier_get(dev); + priv->cec_notify = cec_notifier_conn_register(dev, NULL, NULL); if (!priv->cec_notify) { ret = -ENOMEM; goto fail; From patchwork Thu Oct 17 07:28:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 59519 X-Patchwork-Delegate: hverkuil@xs4all.nl Received: from vger.kernel.org ([209.132.180.67]) by www.linuxtv.org with esmtp (Exim 4.84_2) (envelope-from ) id 1iL0DN-0007Go-2g; Thu, 17 Oct 2019 07:28:53 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387947AbfJQH2v (ORCPT + 1 other); Thu, 17 Oct 2019 03:28:51 -0400 Received: from lb1-smtp-cloud8.xs4all.net ([194.109.24.21]:36811 "EHLO lb1-smtp-cloud8.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728553AbfJQH2u (ORCPT ); Thu, 17 Oct 2019 03:28:50 -0400 Received: from tschai.fritz.box ([46.9.232.237]) by smtp-cloud8.xs4all.net with ESMTPA id L0DCiNIhkPduvL0DHitUWA; Thu, 17 Oct 2019 09:28:47 +0200 From: Hans Verkuil To: linux-media@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Dariusz Marcinkiewicz , Daniel Vetter , Russell King , Laurent Pinchart , Hans Verkuil Subject: [PATCHv9 2/2] drm: tda998x: set the connector info Date: Thu, 17 Oct 2019 09:28:42 +0200 Message-Id: <20191017072842.16793-3-hverkuil-cisco@xs4all.nl> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191017072842.16793-1-hverkuil-cisco@xs4all.nl> References: <20191017072842.16793-1-hverkuil-cisco@xs4all.nl> MIME-Version: 1.0 X-CMAE-Envelope: MS4wfMjm2H/NJK8bIu3deYv4BfEyuT2RBShEcA4goJ14CgKowZA7idHLU2gZ9TjmNh7D+VtZHaudgIfx+Pfc6D/EwnOHqwpuaFXaR9raXVLhDqHGw5oBrO0u uAkCvNVq4B8+pGdWrdTbHgYrWLaeyk3v5jm98mFX9ecNHemKl8oGMp1ZohGRkrCHjj4zln/o00Qyi0ycNDOXkWWOfCVs8TgxHPWwpTlNhYFN2AGYI1G6MkmF M4nsXOY1plXJ2PKhomsWIRSSLMmoeWFtHTcqNy9EqRMeNEtkxe2ZluuNO6qICuBhPQczNWDCGW5li819D+AEQa5bTmpXSybdWBNP9CdzcJAswO6hhfVMqWH9 9x85uXtPTTQhtAICc55ednqcF7WyKWARFJPzKDEfVkI7BimHPIU= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Dariusz Marcinkiewicz Fill in the cec_connector_info when calling cec_notifier_conn_register(). Signed-off-by: Dariusz Marcinkiewicz Tested-by: Hans Verkuil Signed-off-by: Hans Verkuil --- drivers/gpu/drm/i2c/tda998x_drv.c | 33 +++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/i2c/tda998x_drv.c b/drivers/gpu/drm/i2c/tda998x_drv.c index dde8decb52a6..b0620842fa3a 100644 --- a/drivers/gpu/drm/i2c/tda998x_drv.c +++ b/drivers/gpu/drm/i2c/tda998x_drv.c @@ -82,6 +82,9 @@ struct tda998x_priv { u8 audio_port_enable[AUDIO_ROUTE_NUM]; struct tda9950_glue cec_glue; struct gpio_desc *calib; + + /* protect cec_notify */ + struct mutex cec_notify_mutex; struct cec_notifier *cec_notify; }; @@ -805,8 +808,11 @@ static irqreturn_t tda998x_irq_thread(int irq, void *data) tda998x_edid_delay_start(priv); } else { schedule_work(&priv->detect_work); + + mutex_lock(&priv->cec_notify_mutex); cec_notifier_phys_addr_invalidate( priv->cec_notify); + mutex_unlock(&priv->cec_notify_mutex); } handled = true; @@ -1331,6 +1337,8 @@ static int tda998x_connector_init(struct tda998x_priv *priv, struct drm_device *drm) { struct drm_connector *connector = &priv->connector; + struct cec_connector_info conn_info; + struct cec_notifier *notifier; int ret; connector->interlace_allowed = 1; @@ -1347,6 +1355,17 @@ static int tda998x_connector_init(struct tda998x_priv *priv, if (ret) return ret; + cec_fill_conn_info_from_drm(&conn_info, connector); + + notifier = cec_notifier_conn_register(priv->cec_glue.parent, + NULL, &conn_info); + if (!notifier) + return -ENOMEM; + + mutex_lock(&priv->cec_notify_mutex); + priv->cec_notify = notifier; + mutex_unlock(&priv->cec_notify_mutex); + drm_connector_attach_encoder(&priv->connector, priv->bridge.encoder); @@ -1366,6 +1385,11 @@ static void tda998x_bridge_detach(struct drm_bridge *bridge) { struct tda998x_priv *priv = bridge_to_tda998x_priv(bridge); + mutex_lock(&priv->cec_notify_mutex); + cec_notifier_conn_unregister(priv->cec_notify); + priv->cec_notify = NULL; + mutex_unlock(&priv->cec_notify_mutex); + drm_connector_cleanup(&priv->connector); } @@ -1789,8 +1813,6 @@ static void tda998x_destroy(struct device *dev) cancel_work_sync(&priv->detect_work); i2c_unregister_device(priv->cec); - - cec_notifier_conn_unregister(priv->cec_notify); } static int tda998x_create(struct device *dev) @@ -1811,6 +1833,7 @@ static int tda998x_create(struct device *dev) mutex_init(&priv->mutex); /* protect the page access */ mutex_init(&priv->audio_mutex); /* protect access from audio thread */ mutex_init(&priv->edid_mutex); + mutex_init(&priv->cec_notify_mutex); INIT_LIST_HEAD(&priv->bridge.list); init_waitqueue_head(&priv->edid_delay_waitq); timer_setup(&priv->edid_delay_timer, tda998x_edid_delay_done, 0); @@ -1915,12 +1938,6 @@ static int tda998x_create(struct device *dev) cec_write(priv, REG_CEC_RXSHPDINTENA, CEC_RXSHPDLEV_HPD); } - priv->cec_notify = cec_notifier_conn_register(dev, NULL, NULL); - if (!priv->cec_notify) { - ret = -ENOMEM; - goto fail; - } - priv->cec_glue.parent = dev; priv->cec_glue.data = priv; priv->cec_glue.init = tda998x_cec_hook_init;