From: Jingoo Han <jg1.han@samsung.com>
To: 'Ajay Kumar' <ajaykumar.rs@samsung.com>
Cc: linux-samsung-soc@vger.kernel.org, seanpaul@google.com,
abrestic@chromium.org, joshi@samsung.com,
dri-devel@lists.freedesktop.org, a.hajda@samsung.com,
kyungmin.park@samsung.com, ajaynumb@gmail.com,
treding@nvidia.com, prashanth.g@samsung.com,
rahul.sharma@samsung.com
Subject: Re: [PATCH 7/7] drm/bridge: ptn3460: add drm_panel controls
Date: Fri, 18 Apr 2014 18:25:36 +0900 [thread overview]
Message-ID: <000501cf5ae8$27f19510$77d4bf30$%han@samsung.com> (raw)
In-Reply-To: <1397658786-26138-8-git-send-email-ajaykumar.rs@samsung.com>
On Wednesday, April 16, 2014 11:33 PM, Ajay Kumar wrote:
>
> attach ptn3460 connector to drm_panel and support drm_panel routines,
> if a valid drm_panel object is passed to ptn3460_init.
>
> Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com>
> ---
> drivers/gpu/drm/bridge/Kconfig | 1 +
> drivers/gpu/drm/bridge/ptn3460.c | 17 ++++++++++++++++-
> drivers/gpu/drm/exynos/exynos_dp_core.c | 15 +++++++++++----
> include/drm/bridge/ptn3460.h | 6 ++++--
> 4 files changed, 32 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
> index 884923f..3bc6845 100644
> --- a/drivers/gpu/drm/bridge/Kconfig
> +++ b/drivers/gpu/drm/bridge/Kconfig
> @@ -2,4 +2,5 @@ config DRM_PTN3460
> tristate "PTN3460 DP/LVDS bridge"
> depends on DRM
> select DRM_KMS_HELPER
> + select DRM_PANEL
> ---help---
> diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c
> index f1d2afc..736c7a8 100644
> --- a/drivers/gpu/drm/bridge/ptn3460.c
> +++ b/drivers/gpu/drm/bridge/ptn3460.c
> @@ -24,6 +24,7 @@
> #include "drm_edid.h"
> #include "drm_crtc.h"
> #include "drm_crtc_helper.h"
> +#include <drm/drm_panel.h>
Move '<drm/drm_panel.h>' as below.
#include <linux/gpio.h>
#include <linux/delay.h>
+#include <drm/drm_panel.h>
#include "drmP.h"
>
> #include "bridge/ptn3460.h"
>
> @@ -38,6 +39,7 @@ struct ptn3460_bridge {
> struct i2c_client *client;
> struct drm_encoder *encoder;
> struct drm_bridge *bridge;
> + struct drm_panel *panel;
> struct edid *edid;
> int gpio_pd_n;
> int gpio_rst_n;
> @@ -126,6 +128,8 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
> gpio_set_value(ptn_bridge->gpio_rst_n, 1);
> }
>
> + drm_panel_pre_enable(ptn_bridge->panel);
> +
> /*
> * There's a bug in the PTN chip where it falsely asserts hotplug before
> * it is fully functional. We're forced to wait for the maximum start up
> @@ -142,6 +146,9 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
>
> static void ptn3460_enable(struct drm_bridge *bridge)
> {
> + struct ptn3460_bridge *ptn_bridge = bridge->driver_private;
> +
> + drm_panel_enable(ptn_bridge->panel);
> }
>
> static void ptn3460_disable(struct drm_bridge *bridge)
> @@ -153,6 +160,8 @@ static void ptn3460_disable(struct drm_bridge *bridge)
>
> ptn_bridge->enabled = false;
>
> + drm_panel_disable(ptn_bridge->panel);
> +
> if (gpio_is_valid(ptn_bridge->gpio_rst_n))
> gpio_set_value(ptn_bridge->gpio_rst_n, 1);
>
> @@ -265,7 +274,8 @@ struct drm_connector_funcs ptn3460_connector_funcs = {
> };
>
> int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder,
> - struct i2c_client *client, struct device_node *node)
> + struct i2c_client *client, struct device_node *node,
> + struct drm_panel *panel)
> {
> int ret;
> struct drm_bridge *bridge;
> @@ -324,6 +334,11 @@ int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder,
> goto err;
> }
>
> + if (panel) {
> + ptn_bridge->panel = panel;
> + drm_panel_attach(ptn_bridge->panel, &ptn_bridge->connector);
> + }
> +
> bridge->driver_private = ptn_bridge;
> encoder->bridge = bridge;
> ptn_bridge->connector.polled = DRM_CONNECTOR_POLL_HPD;
> diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c
> index 6beeab6..7f550b6 100644
> --- a/drivers/gpu/drm/exynos/exynos_dp_core.c
> +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c
> @@ -989,13 +989,14 @@ static bool find_bridge(const char *compat, struct bridge_init *bridge)
>
> /* returns the number of bridges attached */
> static int exynos_drm_attach_lcd_bridge(struct drm_device *dev,
> - struct drm_encoder *encoder)
> + struct drm_encoder *encoder, struct drm_panel *panel)
> {
> struct bridge_init bridge;
> int ret;
>
> if (find_bridge("nxp,ptn3460", &bridge)) {
> - ret = ptn3460_init(dev, encoder, bridge.client, bridge.node);
> + ret = ptn3460_init(dev, encoder, bridge.client, bridge.node,
> + panel);
'panel' is too far. Please fix it as below.
if (find_bridge("nxp,ptn3460", &bridge)) {
ret = ptn3460_init(dev, encoder, bridge.client, bridge.node,
panel);
> if (!ret)
> return 1;
> }
> @@ -1012,9 +1013,15 @@ static int exynos_dp_create_connector(struct exynos_drm_display *display,
> dp->encoder = encoder;
>
> /* Pre-empt DP connector creation if there's a bridge */
> - ret = exynos_drm_attach_lcd_bridge(dp->drm_dev, encoder);
> - if (ret)
> + ret = exynos_drm_attach_lcd_bridge(dp->drm_dev, encoder, dp->drm_panel);
> + if (ret) {
> + /* Also set "dp->drm_panel = NULL" so that we don't end up
> + * controlling panel power both in exynos_dp and bridge
> + * DPMS routines.
> + */
Please fix it as below.
+ /*
+ * Also set "dp->drm_panel = NULL" so that we don't end up
+ * controlling panel power both in exynos_dp and bridge
+ * DPMS routines.
+ */
Best regards,
Jingoo Han
> + dp->drm_panel = NULL;
> return 0;
> + }
>
> connector->polled = DRM_CONNECTOR_POLL_HPD;
>
> diff --git a/include/drm/bridge/ptn3460.h b/include/drm/bridge/ptn3460.h
> index ff62344..570cebb 100644
> --- a/include/drm/bridge/ptn3460.h
> +++ b/include/drm/bridge/ptn3460.h
> @@ -18,16 +18,18 @@ struct drm_device;
> struct drm_encoder;
> struct i2c_client;
> struct device_node;
> +struct drm_panel;
>
> #if defined(CONFIG_DRM_PTN3460) || defined(CONFIG_DRM_PTN3460_MODULE)
>
> int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder,
> - struct i2c_client *client, struct device_node *node);
> + struct i2c_client *client, struct device_node *node,
> + struct drm_panel *panel);
> #else
>
> static inline int ptn3460_init(struct drm_device *dev,
> struct drm_encoder *encoder, struct i2c_client *client,
> - struct device_node *node)
> + struct device_node *node, struct drm_panel *panel)
> {
> return 0;
> }
> --
> 1.8.1.2
next prev parent reply other threads:[~2014-04-18 9:25 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-16 14:32 [PATCH 0/7] drm: exynos: few patches to enhance bridge chip support Ajay Kumar
2014-04-16 14:33 ` [PATCH 1/7] drm/exynos: dp: support hotplug detection via GPIO Ajay Kumar
2014-04-18 8:23 ` Jingoo Han
2014-04-18 19:33 ` Ajay kumar
2014-04-16 14:33 ` [PATCH 2/7] drm/panel: add pre_enable routine to drm panel Ajay Kumar
2014-04-16 14:33 ` [PATCH 3/7] drm/panel: Add driver for exynos_dp based panels Ajay Kumar
2014-04-18 8:47 ` Jingoo Han
2014-04-18 19:42 ` Ajay kumar
2014-04-21 0:34 ` Jingoo Han
2014-04-16 14:33 ` [PATCH 4/7] drm/exynos: add exynos_dp_panel driver registration to drm driver Ajay Kumar
2014-04-18 8:57 ` Jingoo Han
2014-04-18 19:50 ` Ajay kumar
2014-04-21 0:29 ` Jingoo Han
2014-04-16 14:33 ` [PATCH 5/7] drm/exynos: dp: modify driver to support drm_panel Ajay Kumar
2014-04-18 9:08 ` Jingoo Han
2014-04-18 19:52 ` Ajay kumar
2014-04-16 14:33 ` [PATCH 6/7] drm/bridge: ptn3460: enable polling based detection Ajay Kumar
2014-04-16 14:33 ` [PATCH 7/7] drm/bridge: ptn3460: add drm_panel controls Ajay Kumar
2014-04-18 9:25 ` Jingoo Han [this message]
2014-04-18 19:55 ` 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='000501cf5ae8$27f19510$77d4bf30$%han@samsung.com' \
--to=jg1.han@samsung.com \
--cc=a.hajda@samsung.com \
--cc=abrestic@chromium.org \
--cc=ajaykumar.rs@samsung.com \
--cc=ajaynumb@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=joshi@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=prashanth.g@samsung.com \
--cc=rahul.sharma@samsung.com \
--cc=seanpaul@google.com \
--cc=treding@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox