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;
|
||||
int ret;
|
||||
|
||||
if (!length)
|
||||
if (!length || length > ULONG_MAX - sizeof(struct drm_property_blob))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
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. */
|
||||
mutex_lock(&dev->mode_config.blob_lock);
|
||||
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);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -237,6 +237,7 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder,
|
|||
backlight_update_status(bd);
|
||||
|
||||
DRM_INFO("radeon atom DIG backlight initialized\n");
|
||||
rdev->mode_info.bl_encoder = radeon_encoder;
|
||||
|
||||
return;
|
||||
|
||||
|
@ -1624,9 +1625,14 @@ radeon_atom_encoder_dpms_avivo(struct drm_encoder *encoder, int mode)
|
|||
} else
|
||||
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
|
||||
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;
|
||||
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))
|
||||
atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
|
||||
}
|
||||
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT))
|
||||
atombios_set_backlight_level(radeon_encoder, dig->backlight_level);
|
||||
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
|
||||
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)
|
||||
atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE);
|
||||
break;
|
||||
|
|
|
@ -194,7 +194,6 @@ static void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder,
|
|||
radeon_atom_backlight_init(radeon_encoder, connector);
|
||||
else
|
||||
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);
|
||||
|
||||
DRM_INFO("radeon legacy LVDS backlight initialized\n");
|
||||
rdev->mode_info.bl_encoder = radeon_encoder;
|
||||
|
||||
return;
|
||||
|
||||
|
|
Loading…
Reference in New Issue