[Intel-gfx] [PATCH] drm/i915: Check and update LVDS connector status after receiving LID notification event
ykzhao
yakui.zhao at intel.com
Thu Dec 10 01:46:55 CET 2009
On Wed, 2009-12-02 at 10:54 +0800, Zhao, Yakui wrote:
> From: Zhao Yakui <yakui.zhao at intel.com>
Hi, Eric
Any comment about this patch?
If we don't update the status of LVDS connector in time, maybe
nothing is displayed on LVDS panel after close/reopen the LID.
Thanks.
>
> Now the LID state is used to check whether the LVDS is connected or
> disconnected. And when the LID is closed, it means that the LVDS is
> disconnected. When it is reopened, it means that the LVDS is connected.
>
> At the same time on some distributions the LID event is also used to put
> the system into suspend state. When the LID is closed, the system will enter
> the suspend state. When the LID is reopened, the system will be resumed.
>
> In such case when the LID is closed, the LVDS is detected as disconnected and
> then the system will enter the suspended state. When the LID is reopened, the
> system will be resumed. But as the LVDS status is not updated in course of
> resume, it will cause that the LVDS connector is marked as unused and
> disabled. Even when we try to configure the display mode for LVDS, it still
> can't work if we don't update the status of LVDS connector.
>
> check and update the status of LVDS connector after receiving the LID
> notication event. Then after the system is resumed from suspended state, we
> can set the display mode for LVDS correctly.
>
> Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
> Reported-by: Dirk Hohndel <hohndel at infradead.org>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 1 +
> drivers/gpu/drm/i915/intel_lvds.c | 9 +++++++++
> 2 files changed, 10 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index ca1ba42..cb97851 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -551,6 +551,7 @@ typedef struct drm_i915_private {
> u16 orig_clock;
> int child_dev_num;
> struct child_device_config *child_dev;
> + struct drm_connector *int_lvds_connector;
> } drm_i915_private_t;
>
> /** driver private structure attached to each drm_gem_object */
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index 02b813e..0eba2ea 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -679,7 +679,14 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
> struct drm_i915_private *dev_priv =
> container_of(nb, struct drm_i915_private, lid_notifier);
> struct drm_device *dev = dev_priv->dev;
> + struct drm_connector *connector = dev_priv->int_lvds_connector;
>
> + /*
> + * check and update the status of LVDS connector after receiving
> + * the LID nofication event.
> + */
> + if (connector)
> + connector->status = connector->funcs->detect(connector);
> if (!acpi_lid_open()) {
> dev_priv->modeset_on_lid = 1;
> return NOTIFY_OK;
> @@ -1180,6 +1187,8 @@ out:
> DRM_DEBUG_KMS("lid notifier registration failed\n");
> dev_priv->lid_notifier.notifier_call = NULL;
> }
> + /* keep the LVDS connector */
> + dev_priv->int_lvds_connector = connector;
> drm_sysfs_connector_add(connector);
> return;
>
More information about the Intel-gfx
mailing list