Commit 51973dc0 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-misc-fixes-2018-07-27' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes

drm-misc-fixes pull request for v4.18-rc7:
- Small fixes to  drm_atomic_helper_async_check(). (bbrezillon)
- Fix error handling in drm_legacy_addctx(). (Nicholas)
- Handle register reset on hotplug in adv7511. (seanpaul)
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

Link: https://patchwork.freedesktop.org/patch/msgid/90e0e966-bce5-15a4-286a-eda908788b03@linux.intel.com
parents acb18725 a6a00918
...@@ -429,6 +429,18 @@ static void adv7511_hpd_work(struct work_struct *work) ...@@ -429,6 +429,18 @@ static void adv7511_hpd_work(struct work_struct *work)
else else
status = connector_status_disconnected; status = connector_status_disconnected;
/*
* The bridge resets its registers on unplug. So when we get a plug
* event and we're already supposed to be powered, cycle the bridge to
* restore its state.
*/
if (status == connector_status_connected &&
adv7511->connector.status == connector_status_disconnected &&
adv7511->powered) {
regcache_mark_dirty(adv7511->regmap);
adv7511_power_on(adv7511);
}
if (adv7511->connector.status != status) { if (adv7511->connector.status != status) {
adv7511->connector.status = status; adv7511->connector.status = status;
if (status == connector_status_disconnected) if (status == connector_status_disconnected)
......
...@@ -1510,8 +1510,9 @@ int drm_atomic_helper_async_check(struct drm_device *dev, ...@@ -1510,8 +1510,9 @@ int drm_atomic_helper_async_check(struct drm_device *dev,
{ {
struct drm_crtc *crtc; struct drm_crtc *crtc;
struct drm_crtc_state *crtc_state; struct drm_crtc_state *crtc_state;
struct drm_plane *plane; struct drm_plane *plane = NULL;
struct drm_plane_state *old_plane_state, *new_plane_state; struct drm_plane_state *old_plane_state = NULL;
struct drm_plane_state *new_plane_state = NULL;
const struct drm_plane_helper_funcs *funcs; const struct drm_plane_helper_funcs *funcs;
int i, n_planes = 0; int i, n_planes = 0;
...@@ -1527,7 +1528,8 @@ int drm_atomic_helper_async_check(struct drm_device *dev, ...@@ -1527,7 +1528,8 @@ int drm_atomic_helper_async_check(struct drm_device *dev,
if (n_planes != 1) if (n_planes != 1)
return -EINVAL; return -EINVAL;
if (!new_plane_state->crtc) if (!new_plane_state->crtc ||
old_plane_state->crtc != new_plane_state->crtc)
return -EINVAL; return -EINVAL;
funcs = plane->helper_private; funcs = plane->helper_private;
......
...@@ -372,7 +372,7 @@ int drm_legacy_addctx(struct drm_device *dev, void *data, ...@@ -372,7 +372,7 @@ int drm_legacy_addctx(struct drm_device *dev, void *data,
ctx->handle = drm_legacy_ctxbitmap_next(dev); ctx->handle = drm_legacy_ctxbitmap_next(dev);
} }
DRM_DEBUG("%d\n", ctx->handle); DRM_DEBUG("%d\n", ctx->handle);
if (ctx->handle == -1) { if (ctx->handle < 0) {
DRM_DEBUG("Not enough free contexts.\n"); DRM_DEBUG("Not enough free contexts.\n");
/* Should this return -EBUSY instead? */ /* Should this return -EBUSY instead? */
return -ENOMEM; return -ENOMEM;
......
...@@ -320,6 +320,9 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state) ...@@ -320,6 +320,9 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
vc4_state->x_scaling[0] = VC4_SCALING_TPZ; vc4_state->x_scaling[0] = VC4_SCALING_TPZ;
if (vc4_state->y_scaling[0] == VC4_SCALING_NONE) if (vc4_state->y_scaling[0] == VC4_SCALING_NONE)
vc4_state->y_scaling[0] = VC4_SCALING_TPZ; vc4_state->y_scaling[0] = VC4_SCALING_TPZ;
} else {
vc4_state->x_scaling[1] = VC4_SCALING_NONE;
vc4_state->y_scaling[1] = VC4_SCALING_NONE;
} }
vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE && vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment