From: Heiko Stuebner <heiko@sntech.de>
To: Philipp Zabel <p.zabel@pengutronix.de>,
Thierry Reding <thierry.reding@gmail.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
devicetree@vger.kernel.org,
Russell King - ARM Linux <linux@arm.linux.org.uk>,
Pawel Moll <pawel.moll@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
dianders@chromium.org, linux-rockchip@lists.infradead.org,
Rob Herring <robh+dt@kernel.org>,
dri-devel@lists.freedesktop.org, Yakir Yang <ykk@rock-chips.com>,
Andy Yan <andy.yan@rock-chips.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 1/2] drm/bridge: dw-hdmi: support optional supply regulators
Date: Mon, 23 Mar 2015 19:17:49 +0100 [thread overview]
Message-ID: <2619686.csNBBFyt8W@phil> (raw)
In-Reply-To: <4184159.j0iXe39dFB@phil>
Hi Philipp,
Am Donnerstag, 12. März 2015, 21:45:19 schrieb Heiko Stuebner:
> 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 <heiko@sntech.de>
does this look ok now?
And as we talked about in Chemnitz, who will be taking such bridge-related
changes, as you mentioned some last bridge-patches going through Thierry.
Heiko
> ---
> changes since v2:
> - rename supplies to the names found in the hdmi IP databook
> 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:
> +- vp-supply: 1.0V power supply
> +- vph-supply: 1.8V power supply
> +
> Example:
> hdmi: hdmi@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 <linux/platform_device.h>
> #include <linux/mfd/syscon.h>
> #include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
> #include <drm/drm_of.h>
> #include <drm/drmP.h>
> #include <drm/drm_crtc_helper.h>
> @@ -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 = "vp";
> + hdmi->supplies[1].supply = "vph";
> + 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);
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: heiko@sntech.de (Heiko Stuebner)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 1/2] drm/bridge: dw-hdmi: support optional supply regulators
Date: Mon, 23 Mar 2015 19:17:49 +0100 [thread overview]
Message-ID: <2619686.csNBBFyt8W@phil> (raw)
In-Reply-To: <4184159.j0iXe39dFB@phil>
Hi Philipp,
Am Donnerstag, 12. M?rz 2015, 21:45:19 schrieb Heiko Stuebner:
> 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 <heiko@sntech.de>
does this look ok now?
And as we talked about in Chemnitz, who will be taking such bridge-related
changes, as you mentioned some last bridge-patches going through Thierry.
Heiko
> ---
> changes since v2:
> - rename supplies to the names found in the hdmi IP databook
> 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:
> +- vp-supply: 1.0V power supply
> +- vph-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 <linux/platform_device.h>
> #include <linux/mfd/syscon.h>
> #include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
> #include <drm/drm_of.h>
> #include <drm/drmP.h>
> #include <drm/drm_crtc_helper.h>
> @@ -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 = "vp";
> + hdmi->supplies[1].supply = "vph";
> + 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);
next prev parent reply other threads:[~2015-03-23 18:17 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-12 20:45 [PATCH v3 1/2] drm/bridge: dw-hdmi: support optional supply regulators Heiko Stuebner
2015-03-12 20:45 ` Heiko Stuebner
2015-03-12 20:46 ` [PATCH v3 2/2] ARM: dts: rockchip: add hdmi analog power supplies to rk3288 boards Heiko Stuebner
2015-03-12 20:46 ` Heiko Stuebner
2015-03-23 18:17 ` Heiko Stuebner [this message]
2015-03-23 18:17 ` [PATCH v3 1/2] drm/bridge: dw-hdmi: support optional supply regulators Heiko Stuebner
2015-03-25 16:51 ` Philipp Zabel
2015-03-25 16:51 ` Philipp Zabel
2015-06-05 11:02 ` Thierry Reding
2015-06-05 11:02 ` Thierry Reding
2015-06-05 12:16 ` Heiko Stübner
2015-06-05 12:16 ` Heiko Stübner
2015-06-05 12:23 ` Thierry Reding
2015-06-05 12:23 ` Thierry Reding
[not found] ` <20150605122311.GA759-AwZRO8vwLAwmlAP/+Wk3EA@public.gmane.org>
2015-06-05 23:03 ` Heiko Stübner
2015-06-05 23:03 ` Heiko Stübner
2015-06-05 23:10 ` Russell King - ARM Linux
2015-06-05 23:10 ` Russell King - ARM Linux
2015-06-08 14:02 ` Thierry Reding
2015-06-08 14:02 ` Thierry Reding
2015-06-08 14:29 ` Russell King - ARM Linux
2015-06-08 14:29 ` Russell King - ARM Linux
2015-06-08 15:44 ` Thierry Reding
2015-06-08 15:44 ` Thierry Reding
2015-06-08 16:34 ` Russell King - ARM Linux
2015-06-08 16:34 ` Russell King - ARM Linux
2015-06-09 7:53 ` Thierry Reding
2015-06-09 7:53 ` Thierry Reding
2015-06-09 23:29 ` Heiko Stübner
2015-06-09 23:29 ` Heiko Stübner
2015-06-09 23:36 ` Russell King - ARM Linux
2015-06-09 23:36 ` Russell King - ARM Linux
2015-06-12 7:27 ` Heiko Stübner
2015-06-12 7:27 ` Heiko Stübner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2619686.csNBBFyt8W@phil \
--to=heiko@sntech.de \
--cc=andy.yan@rock-chips.com \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux@arm.linux.org.uk \
--cc=mark.rutland@arm.com \
--cc=p.zabel@pengutronix.de \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=thierry.reding@gmail.com \
--cc=ykk@rock-chips.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.