mirror of https://gitee.com/openkylin/linux.git
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "Two drm atomic core fixes. And two radeon patches needed to fix a backlight regression on some older hardware" * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux: drm: Correct arguments to list_tail_add in create blob ioctl drm: crtc: integer overflow in drm_property_create_blob() drm/radeon: fix dpms when driver backlight control is disabled drm/radeon: move bl encoder assignment into bl init
This commit is contained in:
commit
d59ebbf19b
|
@ -4105,7 +4105,7 @@ drm_property_create_blob(struct drm_device *dev, size_t length,
|
||||||
struct drm_property_blob *blob;
|
struct drm_property_blob *blob;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!length)
|
if (!length || length > ULONG_MAX - sizeof(struct drm_property_blob))
|
||||||
return ERR_PTR(-EINVAL);
|
return ERR_PTR(-EINVAL);
|
||||||
|
|
||||||
blob = kzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
|
blob = kzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL);
|
||||||
|
@ -4454,7 +4454,7 @@ int drm_mode_createblob_ioctl(struct drm_device *dev,
|
||||||
* not associated with any file_priv. */
|
* not associated with any file_priv. */
|
||||||
mutex_lock(&dev->mode_config.blob_lock);
|
mutex_lock(&dev->mode_config.blob_lock);
|
||||||
out_resp->blob_id = blob->base.id;
|
out_resp->blob_id = blob->base.id;
|
||||||
list_add_tail(&file_priv->blobs, &blob->head_file);
|
list_add_tail(&blob->head_file, &file_priv->blobs);
|
||||||
mutex_unlock(&dev->mode_config.blob_lock);
|
mutex_unlock(&dev->mode_config.blob_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -237,6 +237,7 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder,
|
||||||
backlight_update_status(bd);
|
backlight_update_status(bd);
|
||||||
|
|
||||||
DRM_INFO("radeon atom DIG backlight initialized\n");
|
DRM_INFO("radeon atom DIG backlight initialized\n");
|
||||||
|
rdev->mode_info.bl_encoder = radeon_encoder;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1624,9 +1625,14 @@ radeon_atom_encoder_dpms_avivo(struct drm_encoder *encoder, int mode)
|
||||||
} else
|
} else
|
||||||
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||||
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
|
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
|
||||||
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
if (rdev->mode_info.bl_encoder) {
|
||||||
|
struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
|
||||||
|
|
||||||
atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
|
atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
|
||||||
|
} else {
|
||||||
|
args.ucAction = ATOM_LCD_BLON;
|
||||||
|
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DRM_MODE_DPMS_STANDBY:
|
case DRM_MODE_DPMS_STANDBY:
|
||||||
|
@ -1706,8 +1712,13 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
|
||||||
if (ASIC_IS_DCE4(rdev))
|
if (ASIC_IS_DCE4(rdev))
|
||||||
atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
|
atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
|
||||||
}
|
}
|
||||||
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
|
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
|
||||||
atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
|
if (rdev->mode_info.bl_encoder)
|
||||||
|
atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
|
||||||
|
else
|
||||||
|
atombios_dig_transmitter_setup(encoder,
|
||||||
|
ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0);
|
||||||
|
}
|
||||||
if (ext_encoder)
|
if (ext_encoder)
|
||||||
atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE);
|
atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -194,7 +194,6 @@ static void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder,
|
||||||
radeon_atom_backlight_init(radeon_encoder, connector);
|
radeon_atom_backlight_init(radeon_encoder, connector);
|
||||||
else
|
else
|
||||||
radeon_legacy_backlight_init(radeon_encoder, connector);
|
radeon_legacy_backlight_init(radeon_encoder, connector);
|
||||||
rdev->mode_info.bl_encoder = radeon_encoder;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -441,6 +441,7 @@ void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
|
||||||
backlight_update_status(bd);
|
backlight_update_status(bd);
|
||||||
|
|
||||||
DRM_INFO("radeon legacy LVDS backlight initialized\n");
|
DRM_INFO("radeon legacy LVDS backlight initialized\n");
|
||||||
|
rdev->mode_info.bl_encoder = radeon_encoder;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue