From: Thierry Reding <thierry.reding@gmail.com>
To: Ajay Kumar <ajaykumar.rs@samsung.com>
Cc: linux-samsung-soc@vger.kernel.org, seanpaul@google.com,
daniel.vetter@ffwll.ch, joshi@samsung.com,
dri-devel@lists.freedesktop.org, ajaynumb@gmail.com,
javier@dowhile0.org, prashanth.g@samsung.com
Subject: Re: [RESEND PATCH V5 03/12] drm/exynos: dp: modify driver to support drm_panel
Date: Mon, 21 Jul 2014 10:14:51 +0200 [thread overview]
Message-ID: <20140721081450.GE8843@ulmo> (raw)
In-Reply-To: <1405629839-12086-4-git-send-email-ajaykumar.rs@samsung.com>
[-- Attachment #1.1: Type: text/plain, Size: 4677 bytes --]
On Fri, Jul 18, 2014 at 02:13:49AM +0530, Ajay Kumar wrote:
> Add drm_panel controls to support powerup/down of the
> eDP panel, if one is present at the sink side.
>
> Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com>
> ---
> .../devicetree/bindings/video/exynos_dp.txt | 2 +
> drivers/gpu/drm/exynos/Kconfig | 1 +
> drivers/gpu/drm/exynos/exynos_dp_core.c | 45 ++++++++++++++++----
> drivers/gpu/drm/exynos/exynos_dp_core.h | 2 +
> 4 files changed, 41 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/video/exynos_dp.txt b/Documentation/devicetree/bindings/video/exynos_dp.txt
> index 53dbccf..c029a09 100644
> --- a/Documentation/devicetree/bindings/video/exynos_dp.txt
> +++ b/Documentation/devicetree/bindings/video/exynos_dp.txt
> @@ -51,6 +51,8 @@ Required properties for dp-controller:
> LANE_COUNT1 = 1, LANE_COUNT2 = 2, LANE_COUNT4 = 4
> - display-timings: timings for the connected panel as described by
> Documentation/devicetree/bindings/video/display-timing.txt
> + -edp-panel:
> + phandle for the edp/lvds drm_panel node.
There's really no need for the edp- prefix here. Also please don't use
drm_panel in the binding description since it makes no sense outside of
DRM (and bindings need to be OS agnostic).
Also: "eDP" and "LVDS"
> diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c
> index a94b114..b3d0d9b 100644
> --- a/drivers/gpu/drm/exynos/exynos_dp_core.c
> +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c
> @@ -28,6 +28,7 @@
> #include <drm/drmP.h>
> #include <drm/drm_crtc.h>
> #include <drm/drm_crtc_helper.h>
> +#include <drm/drm_panel.h>
> #include <drm/bridge/ptn3460.h>
>
> #include "exynos_drm_drv.h"
> @@ -1029,6 +1030,9 @@ static int exynos_dp_create_connector(struct exynos_drm_display *display,
> drm_connector_register(connector);
> drm_mode_connector_attach_encoder(connector, encoder);
>
> + if (dp->edp_panel)
> + drm_panel_attach(dp->edp_panel, &dp->connector);
This function can fail, so you really need to do some error-checking
here.
> @@ -1063,11 +1067,13 @@ static void exynos_dp_poweron(struct exynos_dp_device *dp)
> if (dp->dpms_mode == DRM_MODE_DPMS_ON)
> return;
>
> + drm_panel_prepare(dp->edp_panel);
> clk_prepare_enable(dp->clock);
> exynos_dp_phy_init(dp);
> exynos_dp_init_dp(dp);
> enable_irq(dp->irq);
> exynos_dp_setup(dp);
> + drm_panel_enable(dp->edp_panel);
These two as well. clk_prepare_enable() can also fail by the way.
exynos_dp_init_dp() can also fail theoretically (it returns int) but
never returns anything other than 0, so it could just as well return
void.
> @@ -1075,10 +1081,12 @@ static void exynos_dp_poweroff(struct exynos_dp_device *dp)
> if (dp->dpms_mode != DRM_MODE_DPMS_ON)
> return;
>
> + drm_panel_disable(dp->edp_panel);
> disable_irq(dp->irq);
> flush_work(&dp->hotplug_work);
> exynos_dp_phy_exit(dp);
> clk_disable_unprepare(dp->clock);
> + drm_panel_unprepare(dp->edp_panel);
> }
And these two also.
> static void exynos_dp_dpms(struct exynos_drm_display *display, int mode)
> @@ -1209,8 +1217,17 @@ err:
> static int exynos_dp_dt_parse_panel(struct exynos_dp_device *dp)
> {
> int ret;
> + struct device_node *videomode_parent;
> +
> + /* Receive video timing info from panel node
> + * if there is a panel node
> + */
> + if (dp->panel_node)
> + videomode_parent = dp->panel_node;
> + else
> + videomode_parent = dp->dev->of_node;
>
> - ret = of_get_videomode(dp->dev->of_node, &dp->panel.vm,
> + ret = of_get_videomode(videomode_parent, &dp->panel.vm,
You shouldn't be grabbing the video timings from some random node like
this. Instead you should use the DRM panel's .get_modes() function to
query the supported modes. The panel may not (in fact, should not, at
least under most circumstances) define video timings in the device tree.
> @@ -1341,6 +1353,21 @@ static int exynos_dp_probe(struct platform_device *pdev)
> if (ret)
> return ret;
>
> + dp = devm_kzalloc(&pdev->dev, sizeof(struct exynos_dp_device),
> + GFP_KERNEL);
> + if (!dp)
> + return -ENOMEM;
> +
> + dp->panel_node = of_parse_phandle(dev->of_node, "edp-panel", 0);
There should be no need to store the struct device_node * obtained here
in the context like this.
> + if (dp->panel_node) {
> + dp->edp_panel = of_drm_find_panel(dp->panel_node);
> + of_node_put(dp->panel_node);
Especially since after this that pointer may become invalid.
Thierry
[-- Attachment #1.2: Type: application/pgp-signature, Size: 819 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2014-07-21 8:14 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-17 20:43 [PATCH V5 00/12] drm/exynos: few patches to enhance bridge chip support Ajay Kumar
2014-07-17 20:43 ` [RESEND PATCH V5 01/12] drm/exynos: Move DP setup out of hotplug workqueue Ajay Kumar
2014-07-22 14:59 ` Sean Paul
2014-07-23 11:22 ` Ajay kumar
2014-07-23 14:42 ` Sean Paul
2014-07-23 15:18 ` Ajay kumar
2014-07-24 20:16 ` Sean Paul
2014-07-17 20:43 ` [RESEND PATCH V5 02/12] drm/panel: add prepare and unprepare routines Ajay Kumar
2014-07-17 20:43 ` [RESEND PATCH V5 03/12] drm/exynos: dp: modify driver to support drm_panel Ajay Kumar
2014-07-21 8:02 ` Thierry Reding
2014-07-21 8:14 ` Thierry Reding [this message]
2014-07-21 12:18 ` Ajay kumar
2014-07-17 20:43 ` [PATCH V5 04/12] drm/panel: Add driver for lvds/edp based panels Ajay Kumar
2014-07-17 20:43 ` [PATCH V5 05/12] Documentation: Add DT bindings for panel-lvds driver Ajay Kumar
2014-07-17 20:50 ` Ajay kumar
2014-07-17 22:48 ` Thierry Reding
2014-07-18 6:48 ` Ajay kumar
2014-07-21 7:52 ` Thierry Reding
2014-07-21 12:30 ` Ajay kumar
2014-07-17 20:43 ` [RESEND PATCH V5 06/12] drm/bridge: add helper functions to support bridge chain Ajay Kumar
2014-07-17 20:43 ` [PATCH V5 07/12] drm/bridge: Add a driver which binds drm_bridge with drm_panel Ajay Kumar
2014-07-17 20:43 ` [RESEND PATCH V5 08/12] drm/bridge: ptn3460: Support bridge chaining Ajay Kumar
2014-07-21 7:55 ` Inki Dae
2014-07-21 8:22 ` Thierry Reding
2014-07-21 11:58 ` Ajay kumar
2014-07-21 12:40 ` Thierry Reding
2014-07-22 6:21 ` Ajay kumar
2014-07-17 20:43 ` [RESEND PATCH V5 09/12] drm/exynos: dp: create bridge chain using ptn3460 and panel_binder Ajay Kumar
2014-07-17 20:43 ` [PATCH V5 10/12] drm/bridge: Add ps8622/ps8625 bridge driver Ajay Kumar
2014-07-17 20:43 ` [PATCH V5 11/12] Documentation: Add DT bindings for " Ajay Kumar
2014-07-17 20:51 ` Ajay kumar
2014-07-21 7:06 ` Thierry Reding
2014-07-21 10:54 ` Ajay kumar
2014-07-17 20:43 ` [RESEND PATCH V5 12/12] drm/exynos: Add ps8622 lvds bridge discovery to DP driver Ajay Kumar
2014-07-21 7:10 ` Thierry Reding
2014-07-21 11:28 ` Ajay kumar
2014-07-21 12:54 ` Thierry Reding
2014-07-21 14:36 ` Ajay kumar
2014-07-21 14:44 ` Thierry Reding
2014-07-22 6:05 ` Ajay kumar
2014-07-22 7:51 ` Thierry Reding
2014-07-21 7:51 ` [PATCH V5 00/12] drm/exynos: few patches to enhance bridge chip support Inki Dae
2014-07-21 11:33 ` Ajay kumar
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=20140721081450.GE8843@ulmo \
--to=thierry.reding@gmail.com \
--cc=ajaykumar.rs@samsung.com \
--cc=ajaynumb@gmail.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=javier@dowhile0.org \
--cc=joshi@samsung.com \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=prashanth.g@samsung.com \
--cc=seanpaul@google.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.