From mboxrd@z Thu Jan 1 00:00:00 1970 From: heiko@sntech.de (Heiko Stuebner) Date: Tue, 10 Mar 2015 22:45:29 +0100 Subject: [PATCH v2 1/2] drm/bridge: dw-hdmi: support optional supply regulators Message-ID: <2265807.RXHBN9kUi4@phil> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org At least the Rockchip variant of the dw_hdmi can have controllable power supplies providing 1.0 and 1.8V. Therefore add the possibility for the generic bridge driver to enable supplies provided by the hw-specific drivers. Signed-off-by: Heiko Stuebner --- changes since v1: - follow suggestion from Russell King to keep regulator handling local to the rockchip implementation for the time being and only generalize when a real second implementation needs regulator handling .../devicetree/bindings/drm/bridge/dw_hdmi.txt | 5 ++++ drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 32 +++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/drm/bridge/dw_hdmi.txt b/Documentation/devicetree/bindings/drm/bridge/dw_hdmi.txt index a905c14..bb74640 100644 --- a/Documentation/devicetree/bindings/drm/bridge/dw_hdmi.txt +++ b/Documentation/devicetree/bindings/drm/bridge/dw_hdmi.txt @@ -22,6 +22,11 @@ Optional properties - ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing - clocks, clock-names: phandle to the HDMI CEC clock, name should be "cec" +Optional supplies: +rockchip,rk3288-dw-hdmi handles two optional power supplies: +- avdd1v0-supply: 1.0V power supply +- avdd1v8-supply: 1.8V power supply + Example: hdmi: hdmi at 0120000 { compatible = "fsl,imx6q-hdmi"; diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index d236faa..647a240 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -28,6 +29,9 @@ struct rockchip_hdmi { struct device *dev; struct regmap *regmap; struct drm_encoder encoder; + struct regulator_bulk_data supplies[2]; + int nsupplies; + bool supplies_enabled; }; #define to_rockchip_hdmi(x) container_of(x, struct rockchip_hdmi, x) @@ -179,6 +183,12 @@ static struct drm_encoder_funcs dw_hdmi_rockchip_encoder_funcs = { static void dw_hdmi_rockchip_encoder_disable(struct drm_encoder *encoder) { + struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder); + + if (hdmi->nsupplies > 0 && hdmi->supplies_enabled) { + regulator_bulk_disable(hdmi->nsupplies, hdmi->supplies); + hdmi->supplies_enabled = false; + } } static bool @@ -199,7 +209,16 @@ static void dw_hdmi_rockchip_encoder_commit(struct drm_encoder *encoder) { struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder); u32 val; - int mux; + int mux, ret; + + if (hdmi->nsupplies > 0 && !hdmi->supplies_enabled) { + ret = regulator_bulk_enable(hdmi->nsupplies, hdmi->supplies); + if (ret) { + dev_err(hdmi->dev, "could not enable hdmi analog supplies\n"); + return; + } + hdmi->supplies_enabled = true; + } mux = rockchip_drm_encoder_get_mux_id(hdmi->dev->of_node, encoder); if (mux) @@ -275,6 +294,17 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, if (!iores) return -ENXIO; + hdmi->supplies[0].supply = "avdd1v0"; + hdmi->supplies[1].supply = "avdd1v8"; + hdmi->nsupplies = 2; + + ret = devm_regulator_bulk_get(hdmi->dev, + hdmi->nsupplies, hdmi->supplies); + if (ret == -EPROBE_DEFER) + return ret; + if (ret) + hdmi->nsupplies = 0; + platform_set_drvdata(pdev, hdmi); encoder->possible_crtcs = drm_of_find_possible_crtcs(drm, dev->of_node); -- 2.1.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Stuebner Subject: [PATCH v2 1/2] drm/bridge: dw-hdmi: support optional supply regulators Date: Tue, 10 Mar 2015 22:45:29 +0100 Message-ID: <2265807.RXHBN9kUi4@phil> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philipp Zabel , David Airlie , Mark Yao Cc: Mark Rutland , devicetree@vger.kernel.org, Russell King - ARM Linux , Pawel Moll , Ian Campbell , Kumar Gala , dianders@chromium.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Rob Herring , Yakir Yang , Andy Yan , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org QXQgbGVhc3QgdGhlIFJvY2tjaGlwIHZhcmlhbnQgb2YgdGhlIGR3X2hkbWkgY2FuIGhhdmUgY29u dHJvbGxhYmxlIHBvd2VyIHN1cHBsaWVzCnByb3ZpZGluZyAxLjAgYW5kIDEuOFYuIFRoZXJlZm9y ZSBhZGQgdGhlIHBvc3NpYmlsaXR5IGZvciB0aGUgZ2VuZXJpYyBicmlkZ2UKZHJpdmVyIHRvIGVu YWJsZSBzdXBwbGllcyBwcm92aWRlZCBieSB0aGUgaHctc3BlY2lmaWMgZHJpdmVycy4KClNpZ25l ZC1vZmYtYnk6IEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+Ci0tLQpjaGFuZ2VzIHNp bmNlIHYxOgotIGZvbGxvdyBzdWdnZXN0aW9uIGZyb20gUnVzc2VsbCBLaW5nIHRvIGtlZXAgcmVn dWxhdG9yIGhhbmRsaW5nIGxvY2FsCiAgdG8gdGhlIHJvY2tjaGlwIGltcGxlbWVudGF0aW9uIGZv ciB0aGUgdGltZSBiZWluZyBhbmQgb25seSBnZW5lcmFsaXplCiAgd2hlbiBhIHJlYWwgc2Vjb25k IGltcGxlbWVudGF0aW9uIG5lZWRzIHJlZ3VsYXRvciBoYW5kbGluZwoKIC4uLi9kZXZpY2V0cmVl L2JpbmRpbmdzL2RybS9icmlkZ2UvZHdfaGRtaS50eHQgICAgIHwgIDUgKysrKwogZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2R3X2hkbWktcm9ja2NoaXAuYyAgICAgICAgfCAzMiArKysrKysrKysr KysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRp b24oLSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZHJt L2JyaWRnZS9kd19oZG1pLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9k cm0vYnJpZGdlL2R3X2hkbWkudHh0CmluZGV4IGE5MDVjMTQuLmJiNzQ2NDAgMTAwNjQ0Ci0tLSBh L0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kcm0vYnJpZGdlL2R3X2hkbWkudHh0 CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kcm0vYnJpZGdlL2R3X2hk bWkudHh0CkBAIC0yMiw2ICsyMiwxMSBAQCBPcHRpb25hbCBwcm9wZXJ0aWVzCiAtIGRkYy1pMmMt YnVzOiBwaGFuZGxlIG9mIGFuIEkyQyBjb250cm9sbGVyIHVzZWQgZm9yIEREQyBFRElEIHByb2Jp bmcKIC0gY2xvY2tzLCBjbG9jay1uYW1lczogcGhhbmRsZSB0byB0aGUgSERNSSBDRUMgY2xvY2ss IG5hbWUgc2hvdWxkIGJlICJjZWMiCiAKK09wdGlvbmFsIHN1cHBsaWVzOgorcm9ja2NoaXAscmsz Mjg4LWR3LWhkbWkgaGFuZGxlcyB0d28gb3B0aW9uYWwgcG93ZXIgc3VwcGxpZXM6CistIGF2ZGQx djAtc3VwcGx5OiAxLjBWIHBvd2VyIHN1cHBseQorLSBhdmRkMXY4LXN1cHBseTogMS44ViBwb3dl ciBzdXBwbHkKKwogRXhhbXBsZToKIAloZG1pOiBoZG1pQDAxMjAwMDAgewogCQljb21wYXRpYmxl ID0gImZzbCxpbXg2cS1oZG1pIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9kd19oZG1pLXJvY2tjaGlwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHdfaGRtaS1y b2NrY2hpcC5jCmluZGV4IGQyMzZmYWEuLjY0N2EyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9kd19oZG1pLXJvY2tjaGlwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2R3X2hkbWktcm9ja2NoaXAuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KICNp bmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3Vt ZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX29mLmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CkBAIC0yOCw2ICsyOSw5IEBAIHN0cnVjdCBy b2NrY2hpcF9oZG1pIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHJlZ21hcCAqcmVn bWFwOwogCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVjdCByZWd1bGF0b3JfYnVs a19kYXRhIHN1cHBsaWVzWzJdOworCWludCBuc3VwcGxpZXM7CisJYm9vbCBzdXBwbGllc19lbmFi bGVkOwogfTsKIAogI2RlZmluZSB0b19yb2NrY2hpcF9oZG1pKHgpCWNvbnRhaW5lcl9vZih4LCBz dHJ1Y3Qgcm9ja2NoaXBfaGRtaSwgeCkKQEAgLTE3OSw2ICsxODMsMTIgQEAgc3RhdGljIHN0cnVj dCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19oZG1pX3JvY2tjaGlwX2VuY29kZXJfZnVuY3MgPSB7CiAK IHN0YXRpYyB2b2lkIGR3X2hkbWlfcm9ja2NoaXBfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKIHsKKwlzdHJ1Y3Qgcm9ja2NoaXBfaGRtaSAqaGRtaSA9IHRvX3Jv Y2tjaGlwX2hkbWkoZW5jb2Rlcik7CisKKwlpZiAoaGRtaS0+bnN1cHBsaWVzID4gMCAmJiBoZG1p LT5zdXBwbGllc19lbmFibGVkKSB7CisJCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoaGRtaS0+bnN1 cHBsaWVzLCBoZG1pLT5zdXBwbGllcyk7CisJCWhkbWktPnN1cHBsaWVzX2VuYWJsZWQgPSBmYWxz ZTsKKwl9CiB9CiAKIHN0YXRpYyBib29sCkBAIC0xOTksNyArMjA5LDE2IEBAIHN0YXRpYyB2b2lk IGR3X2hkbWlfcm9ja2NoaXBfZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQogewogCXN0cnVjdCByb2NrY2hpcF9oZG1pICpoZG1pID0gdG9fcm9ja2NoaXBfaGRtaShl bmNvZGVyKTsKIAl1MzIgdmFsOwotCWludCBtdXg7CisJaW50IG11eCwgcmV0OworCisJaWYgKGhk bWktPm5zdXBwbGllcyA+IDAgJiYgIWhkbWktPnN1cHBsaWVzX2VuYWJsZWQpIHsKKwkJcmV0ID0g cmVndWxhdG9yX2J1bGtfZW5hYmxlKGhkbWktPm5zdXBwbGllcywgaGRtaS0+c3VwcGxpZXMpOwor CQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGhkbWktPmRldiwgImNvdWxkIG5vdCBlbmFibGUgaGRt aSBhbmFsb2cgc3VwcGxpZXNcbiIpOworCQkJcmV0dXJuOworCQl9CisJCWhkbWktPnN1cHBsaWVz X2VuYWJsZWQgPSB0cnVlOworCX0KIAogCW11eCA9IHJvY2tjaGlwX2RybV9lbmNvZGVyX2dldF9t dXhfaWQoaGRtaS0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKIAlpZiAobXV4KQpAQCAtMjc1LDYg KzI5NCwxNyBAQCBzdGF0aWMgaW50IGR3X2hkbWlfcm9ja2NoaXBfYmluZChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAlpZiAoIWlvcmVzKQogCQlyZXR1cm4gLUVO WElPOwogCisJaGRtaS0+c3VwcGxpZXNbMF0uc3VwcGx5ID0gImF2ZGQxdjAiOworCWhkbWktPnN1 cHBsaWVzWzFdLnN1cHBseSA9ICJhdmRkMXY4IjsKKwloZG1pLT5uc3VwcGxpZXMgPSAyOworCisJ cmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoaGRtaS0+ZGV2LAorCQkJCSAgICAgIGhkbWkt Pm5zdXBwbGllcywgaGRtaS0+c3VwcGxpZXMpOworCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikK KwkJcmV0dXJuIHJldDsKKwlpZiAocmV0KQorCQloZG1pLT5uc3VwcGxpZXMgPSAwOworCiAJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGRtaSk7CiAKIAllbmNvZGVyLT5wb3NzaWJsZV9jcnRj cyA9IGRybV9vZl9maW5kX3Bvc3NpYmxlX2NydGNzKGRybSwgZGV2LT5vZl9ub2RlKTsKLS0gCjIu MS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK