From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Stuebner Subject: [PATCH v4 6/6] drm/rockchip: dw_hdmi: add dw-hdmi support for the rk3328 Date: Mon, 10 Sep 2018 11:22:23 +0200 Message-ID: <20180910092223.1106-7-heiko@sntech.de> References: <20180910092223.1106-1-heiko@sntech.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180910092223.1106-1-heiko@sntech.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: architt@codeaurora.org, hjc@rock-chips.com, a.hajda@samsung.com Cc: Jose.Abreu@synopsys.com, algea.cao@rock-chips.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Laurent.pinchart@ideasonboard.com, linux-arm-kernel@lists.infradead.org, zhengyang@rock-chips.com List-Id: linux-rockchip.vger.kernel.org VGhlIHJrMzMyOCB1c2VzIGEgZHctaGRtaSBjb250cm9sbGVyIHdpdGggYW4gZXh0ZXJuYWwgaGRt aSBwaHkgZnJvbQpJbm5vc2lsaWNvbiB3aGljaCB1c2VzIHRoZSBnZW5lcmljIHBoeSBmcmFtZXdv cmsgZm9yIGFjY2Vzcy4KQWRkIHRoZSBuZWNlc3NhcnkgZGF0YSBhbmQgdGhlIGNvbXBhdGlibGUg Zm9yIHRoZSByazMzMjggdG8gdGhlCnJvY2tjaGlwIGR3LWhkbWkgZHJpdmVyLgoKU2lnbmVkLW9m Zi1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KVGVzdGVkLWJ5OiBSb2JpbiBN dXJwaHkgPHJvYmluLm11cnBoeUBhcm0uY29tPgpBY2tlZC1ieTogUm9iIEhlcnJpbmcgPHJvYmhA a2VybmVsLm9yZz4KCmNoYW5nZXMgaW4gdjM6Ci0gcmV3b3JkIGFzIHN1Z2dlc3RlZCBieSBSb2Ig dG8gc2hvdyB0aGF0IGl0J3MgYSBkdy1oZG1pICsgSW5ubyBwaHkKLS0tCiAuLi4vZGlzcGxheS9y b2NrY2hpcC9kd19oZG1pLXJvY2tjaGlwLnR4dCAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL2R3X2hkbWktcm9ja2NoaXAuYyAgIHwgMTA2ICsrKysrKysrKysrKysrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3JvY2tjaGlwL2R3X2hkbWktcm9ja2No aXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvcm9ja2No aXAvZHdfaGRtaS1yb2NrY2hpcC50eHQKaW5kZXggOTM3YmZiNDcyZTFkLi4zOTE0MzQyNGE0NzQg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3Jv Y2tjaGlwL2R3X2hkbWktcm9ja2NoaXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJl ZS9iaW5kaW5ncy9kaXNwbGF5L3JvY2tjaGlwL2R3X2hkbWktcm9ja2NoaXAudHh0CkBAIC0xMyw2 ICsxMyw3IEBAIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKIC0gY29tcGF0aWJsZTogc2hvdWxkIGJl IG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCQkicm9ja2NoaXAscmszMjg4LWR3LWhkbWkiCisJCSJy b2NrY2hpcCxyazMzMjgtZHctaGRtaSIKIAkJInJvY2tjaGlwLHJrMzM5OS1kdy1oZG1pIgogLSBy ZWc6IFNlZSBkd19oZG1pLnR4dC4KIC0gcmVnLWlvLXdpZHRoOiBTZWUgZHdfaGRtaS50eHQuIFNo YWxsIGJlIDQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHdfaGRtaS1y b2NrY2hpcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3X2hkbWktcm9ja2NoaXAuYwpp bmRleCAxOWYwMDJmYTBhMDkuLjIzN2YzMWZkODQwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL2R3X2hkbWktcm9ja2NoaXAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jCkBAIC0yNSw2ICsyNSwyNCBAQAogCiAjZGVmaW5lIFJL MzI4OF9HUkZfU09DX0NPTjYJCTB4MDI1QwogI2RlZmluZSBSSzMyODhfSERNSV9MQ0RDX1NFTAkJ QklUKDQpCisjZGVmaW5lIFJLMzMyOF9HUkZfU09DX0NPTjIJCTB4MDQwOAorCisjZGVmaW5lIFJL MzMyOF9IRE1JX1NEQUlOX01TSwkJQklUKDExKQorI2RlZmluZSBSSzMzMjhfSERNSV9TQ0xJTl9N U0sJCUJJVCgxMCkKKyNkZWZpbmUgUkszMzI4X0hETUlfSFBEX0lPRQkJQklUKDIpCisjZGVmaW5l IFJLMzMyOF9HUkZfU09DX0NPTjMJCTB4MDQwYworLyogbmVlZCB0byBiZSB1bnNldCBpZiBoZG1p IG9yIGkyYyBzaG91bGQgY29udHJvbCB2b2x0YWdlICovCisjZGVmaW5lIFJLMzMyOF9IRE1JX1NE QTVWX0dSRgkJQklUKDE1KQorI2RlZmluZSBSSzMzMjhfSERNSV9TQ0w1Vl9HUkYJCUJJVCgxNCkK KyNkZWZpbmUgUkszMzI4X0hETUlfSFBENVZfR1JGCQlCSVQoMTMpCisjZGVmaW5lIFJLMzMyOF9I RE1JX0NFQzVWX0dSRgkJQklUKDEyKQorI2RlZmluZSBSSzMzMjhfR1JGX1NPQ19DT040CQkweDA0 MTAKKyNkZWZpbmUgUkszMzI4X0hETUlfSFBEX1NBUkFEQwkJQklUKDEzKQorI2RlZmluZSBSSzMz MjhfSERNSV9DRUNfNVYJCUJJVCgxMSkKKyNkZWZpbmUgUkszMzI4X0hETUlfU0RBXzVWCQlCSVQo MTApCisjZGVmaW5lIFJLMzMyOF9IRE1JX1NDTF81VgkJQklUKDkpCisjZGVmaW5lIFJLMzMyOF9I RE1JX0hQRF81VgkJQklUKDgpCisKICNkZWZpbmUgUkszMzk5X0dSRl9TT0NfQ09OMjAJCTB4NjI1 MAogI2RlZmluZSBSSzMzOTlfSERNSV9MQ0RDX1NFTAkJQklUKDYpCiAKQEAgLTI5Miw2ICszMTAs NjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgZHdfaGRt aV9yb2NrY2hpcF9lbmNvZGVyX2hlbHBlcl9mdW4KIAkuYXRvbWljX2NoZWNrID0gZHdfaGRtaV9y b2NrY2hpcF9lbmNvZGVyX2F0b21pY19jaGVjaywKIH07CiAKK3N0YXRpYyBpbnQgZHdfaGRtaV9y b2NrY2hpcF9nZW5waHlfaW5pdChzdHJ1Y3QgZHdfaGRtaSAqZHdfaGRtaSwgdm9pZCAqZGF0YSwK KwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IHJvY2tj aGlwX2hkbWkgKmhkbWkgPSAoc3RydWN0IHJvY2tjaGlwX2hkbWkgKilkYXRhOworCisJcmV0dXJu IHBoeV9wb3dlcl9vbihoZG1pLT5waHkpOworfQorCitzdGF0aWMgdm9pZCBkd19oZG1pX3JvY2tj aGlwX2dlbnBoeV9kaXNhYmxlKHN0cnVjdCBkd19oZG1pICpkd19oZG1pLCB2b2lkICpkYXRhKQor eworCXN0cnVjdCByb2NrY2hpcF9oZG1pICpoZG1pID0gKHN0cnVjdCByb2NrY2hpcF9oZG1pICop ZGF0YTsKKworCXBoeV9wb3dlcl9vZmYoaGRtaS0+cGh5KTsKK30KKworc3RhdGljIGVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMKK2R3X2hkbWlfcmszMzI4X3JlYWRfaHBkKHN0cnVjdCBkd19oZG1p ICpkd19oZG1pLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByb2NrY2hpcF9oZG1pICpoZG1pID0g KHN0cnVjdCByb2NrY2hpcF9oZG1pICopZGF0YTsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVz IHN0YXR1czsKKworCXN0YXR1cyA9IGR3X2hkbWlfcGh5X3JlYWRfaHBkKGR3X2hkbWksIGRhdGEp OworCisJaWYgKHN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKKwkJcmVnbWFw X3dyaXRlKGhkbWktPnJlZ21hcCwKKwkJCVJLMzMyOF9HUkZfU09DX0NPTjQsCisJCQlISVdPUkRf VVBEQVRFKFJLMzMyOF9IRE1JX0NFQ181ViB8IFJLMzMyOF9IRE1JX1NEQV81ViB8CisJCQkJICAg ICAgUkszMzI4X0hETUlfU0NMXzVWLAorCQkJCSAgICAgIFJLMzMyOF9IRE1JX0NFQ181ViB8IFJL MzMyOF9IRE1JX1NEQV81ViB8CisJCQkJICAgICAgUkszMzI4X0hETUlfU0NMXzVWKSk7CisJZWxz ZQorCQlyZWdtYXBfd3JpdGUoaGRtaS0+cmVnbWFwLAorCQkJUkszMzI4X0dSRl9TT0NfQ09ONCwK KwkJCUhJV09SRF9VUERBVEUoMCwKKwkJCQkgICAgICBSSzMzMjhfSERNSV9DRUNfNVYgfCBSSzMz MjhfSERNSV9TREFfNVYgfAorCQkJCSAgICAgIFJLMzMyOF9IRE1JX1NDTF81VikpOworCXJldHVy biBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGR3X2hkbWlfcmszMzI4X3NldHVwX2hwZChzdHJ1 Y3QgZHdfaGRtaSAqZHdfaGRtaSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgcm9ja2NoaXBfaGRt aSAqaGRtaSA9IChzdHJ1Y3Qgcm9ja2NoaXBfaGRtaSAqKWRhdGE7CisKKwlkd19oZG1pX3BoeV9z ZXR1cF9ocGQoZHdfaGRtaSwgZGF0YSk7CisKKwkvKiBFbmFibGUgYW5kIG1hcCBwaW5zIHRvIDNW IGdyZi1jb250cm9sbGVkIGlvLXZvbHRhZ2UgKi8KKwlyZWdtYXBfd3JpdGUoaGRtaS0+cmVnbWFw LAorCQlSSzMzMjhfR1JGX1NPQ19DT040LAorCQlISVdPUkRfVVBEQVRFKDAsIFJLMzMyOF9IRE1J X0hQRF9TQVJBREMgfCBSSzMzMjhfSERNSV9DRUNfNVYgfAorCQkJCSBSSzMzMjhfSERNSV9TREFf NVYgfCBSSzMzMjhfSERNSV9TQ0xfNVYgfAorCQkJCSBSSzMzMjhfSERNSV9IUERfNVYpKTsKKwly ZWdtYXBfd3JpdGUoaGRtaS0+cmVnbWFwLAorCQlSSzMzMjhfR1JGX1NPQ19DT04zLAorCQlISVdP UkRfVVBEQVRFKDAsIFJLMzMyOF9IRE1JX1NEQTVWX0dSRiB8IFJLMzMyOF9IRE1JX1NDTDVWX0dS RiB8CisJCQkJIFJLMzMyOF9IRE1JX0hQRDVWX0dSRiB8IFJLMzMyOF9IRE1JX0NFQzVWX0dSRikp OworCXJlZ21hcF93cml0ZShoZG1pLT5yZWdtYXAsCisJCVJLMzMyOF9HUkZfU09DX0NPTjIsCisJ CUhJV09SRF9VUERBVEUoUkszMzI4X0hETUlfU0RBSU5fTVNLIHwgUkszMzI4X0hETUlfU0NMSU5f TVNLLAorCQkJICAgICAgUkszMzI4X0hETUlfU0RBSU5fTVNLIHwgUkszMzI4X0hETUlfU0NMSU5f TVNLIHwKKwkJCSAgICAgIFJLMzMyOF9IRE1JX0hQRF9JT0UpKTsKK30KKwogc3RhdGljIHN0cnVj dCByb2NrY2hpcF9oZG1pX2NoaXBfZGF0YSByazMyODhfY2hpcF9kYXRhID0gewogCS5sY2RzZWxf Z3JmX3JlZyA9IFJLMzI4OF9HUkZfU09DX0NPTjYsCiAJLmxjZHNlbF9iaWcgPSBISVdPUkRfVVBE QVRFKDAsIFJLMzI4OF9IRE1JX0xDRENfU0VMKSwKQEAgLTMwNiw2ICszODYsMjkgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBkd19oZG1pX3BsYXRfZGF0YSByazMyODhfaGRtaV9kcnZfZGF0YSA9IHsK IAkucGh5X2RhdGEgPSAmcmszMjg4X2NoaXBfZGF0YSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHdfaGRtaV9waHlfb3BzIHJrMzMyOF9oZG1pX3BoeV9vcHMgPSB7CisJLmluaXQJCT0gZHdf aGRtaV9yb2NrY2hpcF9nZW5waHlfaW5pdCwKKwkuZGlzYWJsZQk9IGR3X2hkbWlfcm9ja2NoaXBf Z2VucGh5X2Rpc2FibGUsCisJLnJlYWRfaHBkCT0gZHdfaGRtaV9yazMzMjhfcmVhZF9ocGQsCisJ LnVwZGF0ZV9ocGQJPSBkd19oZG1pX3BoeV91cGRhdGVfaHBkLAorCS5zZXR1cF9ocGQJPSBkd19o ZG1pX3JrMzMyOF9zZXR1cF9ocGQsCit9OworCitzdGF0aWMgc3RydWN0IHJvY2tjaGlwX2hkbWlf Y2hpcF9kYXRhIHJrMzMyOF9jaGlwX2RhdGEgPSB7CisJLmxjZHNlbF9ncmZfcmVnID0gLTEsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGR3X2hkbWlfcGxhdF9kYXRhIHJrMzMyOF9oZG1pX2Ry dl9kYXRhID0geworCS5tb2RlX3ZhbGlkID0gZHdfaGRtaV9yb2NrY2hpcF9tb2RlX3ZhbGlkLAor CS5tcGxsX2NmZyA9IHJvY2tjaGlwX21wbGxfY2ZnLAorCS5jdXJfY3RyID0gcm9ja2NoaXBfY3Vy X2N0ciwKKwkucGh5X2NvbmZpZyA9IHJvY2tjaGlwX3BoeV9jb25maWcsCisJLnBoeV9kYXRhID0g JnJrMzMyOF9jaGlwX2RhdGEsCisJLnBoeV9vcHMgPSAmcmszMzI4X2hkbWlfcGh5X29wcywKKwku cGh5X25hbWUgPSAiaW5ub19kd19oZG1pX3BoeTIiLAorCS5waHlfZm9yY2VfdmVuZG9yID0gdHJ1 ZSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfaGRtaV9jaGlwX2RhdGEgcmszMzk5X2No aXBfZGF0YSA9IHsKIAkubGNkc2VsX2dyZl9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMCwKIAku bGNkc2VsX2JpZyA9IEhJV09SRF9VUERBVEUoMCwgUkszMzk5X0hETUlfTENEQ19TRUwpLApAQCAt MzI0LDYgKzQyNyw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X2hkbWlf cm9ja2NoaXBfZHRfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgt ZHctaGRtaSIsCiAJICAuZGF0YSA9ICZyazMyODhfaGRtaV9kcnZfZGF0YQogCX0sCisJeyAuY29t cGF0aWJsZSA9ICJyb2NrY2hpcCxyazMzMjgtZHctaGRtaSIsCisJICAuZGF0YSA9ICZyazMzMjhf aGRtaV9kcnZfZGF0YQorCX0sCiAJeyAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMzOTktZHct aGRtaSIsCiAJICAuZGF0YSA9ICZyazMzOTlfaGRtaV9kcnZfZGF0YQogCX0sCi0tIAoyLjE3LjAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: heiko@sntech.de (Heiko Stuebner) Date: Mon, 10 Sep 2018 11:22:23 +0200 Subject: [PATCH v4 6/6] drm/rockchip: dw_hdmi: add dw-hdmi support for the rk3328 In-Reply-To: <20180910092223.1106-1-heiko@sntech.de> References: <20180910092223.1106-1-heiko@sntech.de> Message-ID: <20180910092223.1106-7-heiko@sntech.de> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org The rk3328 uses a dw-hdmi controller with an external hdmi phy from Innosilicon which uses the generic phy framework for access. Add the necessary data and the compatible for the rk3328 to the rockchip dw-hdmi driver. Signed-off-by: Heiko Stuebner Tested-by: Robin Murphy Acked-by: Rob Herring changes in v3: - reword as suggested by Rob to show that it's a dw-hdmi + Inno phy --- .../display/rockchip/dw_hdmi-rockchip.txt | 1 + drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 106 ++++++++++++++++++ 2 files changed, 107 insertions(+) diff --git a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt index 937bfb472e1d..39143424a474 100644 --- a/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt +++ b/Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt @@ -13,6 +13,7 @@ Required properties: - compatible: should be one of the following: "rockchip,rk3288-dw-hdmi" + "rockchip,rk3328-dw-hdmi" "rockchip,rk3399-dw-hdmi" - reg: See dw_hdmi.txt. - reg-io-width: See dw_hdmi.txt. Shall be 4. diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index 19f002fa0a09..237f31fd8403 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -25,6 +25,24 @@ #define RK3288_GRF_SOC_CON6 0x025C #define RK3288_HDMI_LCDC_SEL BIT(4) +#define RK3328_GRF_SOC_CON2 0x0408 + +#define RK3328_HDMI_SDAIN_MSK BIT(11) +#define RK3328_HDMI_SCLIN_MSK BIT(10) +#define RK3328_HDMI_HPD_IOE BIT(2) +#define RK3328_GRF_SOC_CON3 0x040c +/* need to be unset if hdmi or i2c should control voltage */ +#define RK3328_HDMI_SDA5V_GRF BIT(15) +#define RK3328_HDMI_SCL5V_GRF BIT(14) +#define RK3328_HDMI_HPD5V_GRF BIT(13) +#define RK3328_HDMI_CEC5V_GRF BIT(12) +#define RK3328_GRF_SOC_CON4 0x0410 +#define RK3328_HDMI_HPD_SARADC BIT(13) +#define RK3328_HDMI_CEC_5V BIT(11) +#define RK3328_HDMI_SDA_5V BIT(10) +#define RK3328_HDMI_SCL_5V BIT(9) +#define RK3328_HDMI_HPD_5V BIT(8) + #define RK3399_GRF_SOC_CON20 0x6250 #define RK3399_HDMI_LCDC_SEL BIT(6) @@ -292,6 +310,68 @@ static const struct drm_encoder_helper_funcs dw_hdmi_rockchip_encoder_helper_fun .atomic_check = dw_hdmi_rockchip_encoder_atomic_check, }; +static int dw_hdmi_rockchip_genphy_init(struct dw_hdmi *dw_hdmi, void *data, + struct drm_display_mode *mode) +{ + struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data; + + return phy_power_on(hdmi->phy); +} + +static void dw_hdmi_rockchip_genphy_disable(struct dw_hdmi *dw_hdmi, void *data) +{ + struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data; + + phy_power_off(hdmi->phy); +} + +static enum drm_connector_status +dw_hdmi_rk3328_read_hpd(struct dw_hdmi *dw_hdmi, void *data) +{ + struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data; + enum drm_connector_status status; + + status = dw_hdmi_phy_read_hpd(dw_hdmi, data); + + if (status == connector_status_connected) + regmap_write(hdmi->regmap, + RK3328_GRF_SOC_CON4, + HIWORD_UPDATE(RK3328_HDMI_CEC_5V | RK3328_HDMI_SDA_5V | + RK3328_HDMI_SCL_5V, + RK3328_HDMI_CEC_5V | RK3328_HDMI_SDA_5V | + RK3328_HDMI_SCL_5V)); + else + regmap_write(hdmi->regmap, + RK3328_GRF_SOC_CON4, + HIWORD_UPDATE(0, + RK3328_HDMI_CEC_5V | RK3328_HDMI_SDA_5V | + RK3328_HDMI_SCL_5V)); + return status; +} + +static void dw_hdmi_rk3328_setup_hpd(struct dw_hdmi *dw_hdmi, void *data) +{ + struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data; + + dw_hdmi_phy_setup_hpd(dw_hdmi, data); + + /* Enable and map pins to 3V grf-controlled io-voltage */ + regmap_write(hdmi->regmap, + RK3328_GRF_SOC_CON4, + HIWORD_UPDATE(0, RK3328_HDMI_HPD_SARADC | RK3328_HDMI_CEC_5V | + RK3328_HDMI_SDA_5V | RK3328_HDMI_SCL_5V | + RK3328_HDMI_HPD_5V)); + regmap_write(hdmi->regmap, + RK3328_GRF_SOC_CON3, + HIWORD_UPDATE(0, RK3328_HDMI_SDA5V_GRF | RK3328_HDMI_SCL5V_GRF | + RK3328_HDMI_HPD5V_GRF | RK3328_HDMI_CEC5V_GRF)); + regmap_write(hdmi->regmap, + RK3328_GRF_SOC_CON2, + HIWORD_UPDATE(RK3328_HDMI_SDAIN_MSK | RK3328_HDMI_SCLIN_MSK, + RK3328_HDMI_SDAIN_MSK | RK3328_HDMI_SCLIN_MSK | + RK3328_HDMI_HPD_IOE)); +} + static struct rockchip_hdmi_chip_data rk3288_chip_data = { .lcdsel_grf_reg = RK3288_GRF_SOC_CON6, .lcdsel_big = HIWORD_UPDATE(0, RK3288_HDMI_LCDC_SEL), @@ -306,6 +386,29 @@ static const struct dw_hdmi_plat_data rk3288_hdmi_drv_data = { .phy_data = &rk3288_chip_data, }; +static const struct dw_hdmi_phy_ops rk3328_hdmi_phy_ops = { + .init = dw_hdmi_rockchip_genphy_init, + .disable = dw_hdmi_rockchip_genphy_disable, + .read_hpd = dw_hdmi_rk3328_read_hpd, + .update_hpd = dw_hdmi_phy_update_hpd, + .setup_hpd = dw_hdmi_rk3328_setup_hpd, +}; + +static struct rockchip_hdmi_chip_data rk3328_chip_data = { + .lcdsel_grf_reg = -1, +}; + +static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = { + .mode_valid = dw_hdmi_rockchip_mode_valid, + .mpll_cfg = rockchip_mpll_cfg, + .cur_ctr = rockchip_cur_ctr, + .phy_config = rockchip_phy_config, + .phy_data = &rk3328_chip_data, + .phy_ops = &rk3328_hdmi_phy_ops, + .phy_name = "inno_dw_hdmi_phy2", + .phy_force_vendor = true, +}; + static struct rockchip_hdmi_chip_data rk3399_chip_data = { .lcdsel_grf_reg = RK3399_GRF_SOC_CON20, .lcdsel_big = HIWORD_UPDATE(0, RK3399_HDMI_LCDC_SEL), @@ -324,6 +427,9 @@ static const struct of_device_id dw_hdmi_rockchip_dt_ids[] = { { .compatible = "rockchip,rk3288-dw-hdmi", .data = &rk3288_hdmi_drv_data }, + { .compatible = "rockchip,rk3328-dw-hdmi", + .data = &rk3328_hdmi_drv_data + }, { .compatible = "rockchip,rk3399-dw-hdmi", .data = &rk3399_hdmi_drv_data }, -- 2.17.0