From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from lb2-smtp-cloud9.xs4all.net ([194.109.24.26]:56785 "EHLO lb2-smtp-cloud9.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752380AbdHBSlO (ORCPT ); Wed, 2 Aug 2017 14:41:14 -0400 From: Hans Verkuil To: linux-media@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, Russell King - ARM Linux , Laurent Pinchart , Russell King Subject: [PATCHv3 1/4] drm/bridge: dw-hdmi: add cec notifier support Date: Wed, 2 Aug 2017 20:41:05 +0200 Message-Id: <20170802184108.7913-2-hverkuil@xs4all.nl> In-Reply-To: <20170802184108.7913-1-hverkuil@xs4all.nl> References: <20170802184108.7913-1-hverkuil@xs4all.nl> Sender: linux-media-owner@vger.kernel.org List-ID: From: Russell King Add CEC notifier support to the HDMI bridge driver, so that the CEC part of the IP can receive its physical address. Signed-off-by: Russell King [hans.verkuil: added missing cec_notifier_put to remove()] Acked-by: Hans Verkuil Tested-by: Hans Verkuil Tested-by: Laurent Pinchart --- drivers/gpu/drm/bridge/synopsys/Kconfig | 1 + drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/synopsys/Kconfig b/drivers/gpu/drm/bridge/synopsys/Kconfig index 53e78d092d18..351db000599a 100644 --- a/drivers/gpu/drm/bridge/synopsys/Kconfig +++ b/drivers/gpu/drm/bridge/synopsys/Kconfig @@ -2,6 +2,7 @@ config DRM_DW_HDMI tristate select DRM_KMS_HELPER select REGMAP_MMIO + select CEC_CORE if CEC_NOTIFIER config DRM_DW_HDMI_AHB_AUDIO tristate "Synopsys Designware AHB Audio interface" diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c index ead11242c4b9..108495862cac 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -36,7 +36,10 @@ #include "dw-hdmi.h" #include "dw-hdmi-audio.h" +#include + #define DDC_SEGMENT_ADDR 0x30 + #define HDMI_EDID_LEN 512 enum hdmi_datamap { @@ -175,6 +178,8 @@ struct dw_hdmi { struct regmap *regm; void (*enable_audio)(struct dw_hdmi *hdmi); void (*disable_audio)(struct dw_hdmi *hdmi); + + struct cec_notifier *cec_notifier; }; #define HDMI_IH_PHY_STAT0_RX_SENSE \ @@ -1896,6 +1901,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid); hdmi->sink_has_audio = drm_detect_monitor_audio(edid); drm_mode_connector_update_edid_property(connector, edid); + cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid); ret = drm_add_edid_modes(connector, edid); /* Store the ELD */ drm_edid_to_eld(connector, edid); @@ -2119,11 +2125,16 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id) * ask the source to re-read the EDID. */ if (intr_stat & - (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) + (HDMI_IH_PHY_STAT0_RX_SENSE | HDMI_IH_PHY_STAT0_HPD)) { __dw_hdmi_setup_rx_sense(hdmi, phy_stat & HDMI_PHY_HPD, phy_stat & HDMI_PHY_RX_SENSE); + if ((phy_stat & (HDMI_PHY_RX_SENSE | HDMI_PHY_HPD)) == 0) + cec_notifier_set_phys_addr(hdmi->cec_notifier, + CEC_PHYS_ADDR_INVALID); + } + if (intr_stat & HDMI_IH_PHY_STAT0_HPD) { dev_dbg(hdmi->dev, "EVENT=%s\n", phy_int_pol & HDMI_PHY_HPD ? "plugin" : "plugout"); @@ -2376,6 +2387,12 @@ __dw_hdmi_probe(struct platform_device *pdev, if (ret) goto err_iahb; + hdmi->cec_notifier = cec_notifier_get(dev); + if (!hdmi->cec_notifier) { + ret = -ENOMEM; + goto err_iahb; + } + /* * To prevent overflows in HDMI_IH_FC_STAT2, set the clk regenerator * N and cts values before enabling phy @@ -2452,6 +2469,9 @@ __dw_hdmi_probe(struct platform_device *pdev, hdmi->ddc = NULL; } + if (hdmi->cec_notifier) + cec_notifier_put(hdmi->cec_notifier); + clk_disable_unprepare(hdmi->iahb_clk); err_isfr: clk_disable_unprepare(hdmi->isfr_clk); @@ -2469,6 +2489,9 @@ static void __dw_hdmi_remove(struct dw_hdmi *hdmi) /* Disable all interrupts */ hdmi_writeb(hdmi, ~0, HDMI_IH_MUTE_PHY_STAT0); + if (hdmi->cec_notifier) + cec_notifier_put(hdmi->cec_notifier); + clk_disable_unprepare(hdmi->iahb_clk); clk_disable_unprepare(hdmi->isfr_clk); -- 2.13.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans Verkuil Subject: [PATCHv3 1/4] drm/bridge: dw-hdmi: add cec notifier support Date: Wed, 2 Aug 2017 20:41:05 +0200 Message-ID: <20170802184108.7913-2-hverkuil@xs4all.nl> References: <20170802184108.7913-1-hverkuil@xs4all.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lb3-smtp-cloud9.xs4all.net (lb3-smtp-cloud9.xs4all.net [194.109.24.30]) by gabe.freedesktop.org (Postfix) with ESMTPS id B6E7A89CC4 for ; Wed, 2 Aug 2017 18:41:14 +0000 (UTC) In-Reply-To: <20170802184108.7913-1-hverkuil@xs4all.nl> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-media@vger.kernel.org Cc: Russell King , Russell King - ARM Linux , dri-devel@lists.freedesktop.org, Laurent Pinchart List-Id: dri-devel@lists.freedesktop.org RnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KCkFkZCBDRUMg bm90aWZpZXIgc3VwcG9ydCB0byB0aGUgSERNSSBicmlkZ2UgZHJpdmVyLCBzbyB0aGF0IHRoZSBD RUMKcGFydCBvZiB0aGUgSVAgY2FuIHJlY2VpdmUgaXRzIHBoeXNpY2FsIGFkZHJlc3MuCgpTaWdu ZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgpbaGFu cy52ZXJrdWlsOiBhZGRlZCBtaXNzaW5nIGNlY19ub3RpZmllcl9wdXQgdG8gcmVtb3ZlKCldCkFj a2VkLWJ5OiBIYW5zIFZlcmt1aWwgPGhhbnMudmVya3VpbEBjaXNjby5jb20+ClRlc3RlZC1ieTog SGFucyBWZXJrdWlsIDxoYW5zLnZlcmt1aWxAY2lzY28uY29tPgpUZXN0ZWQtYnk6IExhdXJlbnQg UGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL0tjb25maWcgICB8ICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2Uvc3lub3BzeXMvZHctaGRtaS5jIHwgMjUgKysrKysrKysrKysrKysrKysrKysrKysr LQogMiBmaWxlcyBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnIGIvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnCmluZGV4IDUzZTc4ZDA5MmQxOC4uMzUx ZGIwMDA1OTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL0tj b25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnCkBAIC0y LDYgKzIsNyBAQCBjb25maWcgRFJNX0RXX0hETUkKIAl0cmlzdGF0ZQogCXNlbGVjdCBEUk1fS01T X0hFTFBFUgogCXNlbGVjdCBSRUdNQVBfTU1JTworCXNlbGVjdCBDRUNfQ09SRSBpZiBDRUNfTk9U SUZJRVIKIAogY29uZmlnIERSTV9EV19IRE1JX0FIQl9BVURJTwogCXRyaXN0YXRlICJTeW5vcHN5 cyBEZXNpZ253YXJlIEFIQiBBdWRpbyBpbnRlcmZhY2UiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv c3lub3BzeXMvZHctaGRtaS5jCmluZGV4IGVhZDExMjQyYzRiOS4uMTA4NDk1ODYyY2FjIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYwpAQCAtMzYsNyArMzYsMTAg QEAKICNpbmNsdWRlICJkdy1oZG1pLmgiCiAjaW5jbHVkZSAiZHctaGRtaS1hdWRpby5oIgogCisj aW5jbHVkZSA8bWVkaWEvY2VjLW5vdGlmaWVyLmg+CisKICNkZWZpbmUgRERDX1NFR01FTlRfQURE UgkweDMwCisKICNkZWZpbmUgSERNSV9FRElEX0xFTgkJNTEyCiAKIGVudW0gaGRtaV9kYXRhbWFw IHsKQEAgLTE3NSw2ICsxNzgsOCBAQCBzdHJ1Y3QgZHdfaGRtaSB7CiAJc3RydWN0IHJlZ21hcCAq cmVnbTsKIAl2b2lkICgqZW5hYmxlX2F1ZGlvKShzdHJ1Y3QgZHdfaGRtaSAqaGRtaSk7CiAJdm9p ZCAoKmRpc2FibGVfYXVkaW8pKHN0cnVjdCBkd19oZG1pICpoZG1pKTsKKworCXN0cnVjdCBjZWNf bm90aWZpZXIgKmNlY19ub3RpZmllcjsKIH07CiAKICNkZWZpbmUgSERNSV9JSF9QSFlfU1RBVDBf UlhfU0VOU0UgXApAQCAtMTg5Niw2ICsxOTAxLDcgQEAgc3RhdGljIGludCBkd19oZG1pX2Nvbm5l Y3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIAkJaGRtaS0+ c2lua19pc19oZG1pID0gZHJtX2RldGVjdF9oZG1pX21vbml0b3IoZWRpZCk7CiAJCWhkbWktPnNp bmtfaGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwogCQlkcm1fbW9k ZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKKwkJY2Vj X25vdGlmaWVyX3NldF9waHlzX2FkZHJfZnJvbV9lZGlkKGhkbWktPmNlY19ub3RpZmllciwgZWRp ZCk7CiAJCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwogCQkvKiBT dG9yZSB0aGUgRUxEICovCiAJCWRybV9lZGlkX3RvX2VsZChjb25uZWN0b3IsIGVkaWQpOwpAQCAt MjExOSwxMSArMjEyNSwxNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgZHdfaGRtaV9pcnEoaW50IGly cSwgdm9pZCAqZGV2X2lkKQogCSAqIGFzayB0aGUgc291cmNlIHRvIHJlLXJlYWQgdGhlIEVESUQu CiAJICovCiAJaWYgKGludHJfc3RhdCAmCi0JICAgIChIRE1JX0lIX1BIWV9TVEFUMF9SWF9TRU5T RSB8IEhETUlfSUhfUEhZX1NUQVQwX0hQRCkpCisJICAgIChIRE1JX0lIX1BIWV9TVEFUMF9SWF9T RU5TRSB8IEhETUlfSUhfUEhZX1NUQVQwX0hQRCkpIHsKIAkJX19kd19oZG1pX3NldHVwX3J4X3Nl bnNlKGhkbWksCiAJCQkJCSBwaHlfc3RhdCAmIEhETUlfUEhZX0hQRCwKIAkJCQkJIHBoeV9zdGF0 ICYgSERNSV9QSFlfUlhfU0VOU0UpOwogCisJCWlmICgocGh5X3N0YXQgJiAoSERNSV9QSFlfUlhf U0VOU0UgfCBIRE1JX1BIWV9IUEQpKSA9PSAwKQorCQkJY2VjX25vdGlmaWVyX3NldF9waHlzX2Fk ZHIoaGRtaS0+Y2VjX25vdGlmaWVyLAorCQkJCQkJICAgQ0VDX1BIWVNfQUREUl9JTlZBTElEKTsK Kwl9CisKIAlpZiAoaW50cl9zdGF0ICYgSERNSV9JSF9QSFlfU1RBVDBfSFBEKSB7CiAJCWRldl9k YmcoaGRtaS0+ZGV2LCAiRVZFTlQ9JXNcbiIsCiAJCQlwaHlfaW50X3BvbCAmIEhETUlfUEhZX0hQ RCA/ICJwbHVnaW4iIDogInBsdWdvdXQiKTsKQEAgLTIzNzYsNiArMjM4NywxMiBAQCBfX2R3X2hk bWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAlpZiAocmV0KQogCQlnb3Rv IGVycl9pYWhiOwogCisJaGRtaS0+Y2VjX25vdGlmaWVyID0gY2VjX25vdGlmaWVyX2dldChkZXYp OworCWlmICghaGRtaS0+Y2VjX25vdGlmaWVyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8g ZXJyX2lhaGI7CisJfQorCiAJLyoKIAkgKiBUbyBwcmV2ZW50IG92ZXJmbG93cyBpbiBIRE1JX0lI X0ZDX1NUQVQyLCBzZXQgdGhlIGNsayByZWdlbmVyYXRvcgogCSAqIE4gYW5kIGN0cyB2YWx1ZXMg YmVmb3JlIGVuYWJsaW5nIHBoeQpAQCAtMjQ1Miw2ICsyNDY5LDkgQEAgX19kd19oZG1pX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCWhkbWktPmRkYyA9IE5VTEw7CiAJfQog CisJaWYgKGhkbWktPmNlY19ub3RpZmllcikKKwkJY2VjX25vdGlmaWVyX3B1dChoZG1pLT5jZWNf bm90aWZpZXIpOworCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmlhaGJfY2xrKTsKIGVy cl9pc2ZyOgogCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5pc2ZyX2Nsayk7CkBAIC0yNDY5 LDYgKzI0ODksOSBAQCBzdGF0aWMgdm9pZCBfX2R3X2hkbWlfcmVtb3ZlKHN0cnVjdCBkd19oZG1p ICpoZG1pKQogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KIAloZG1pX3dyaXRlYihoZG1p LCB+MCwgSERNSV9JSF9NVVRFX1BIWV9TVEFUMCk7CiAKKwlpZiAoaGRtaS0+Y2VjX25vdGlmaWVy KQorCQljZWNfbm90aWZpZXJfcHV0KGhkbWktPmNlY19ub3RpZmllcik7CisKIAljbGtfZGlzYWJs ZV91bnByZXBhcmUoaGRtaS0+aWFoYl9jbGspOwogCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1p LT5pc2ZyX2Nsayk7CiAKLS0gCjIuMTMuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==