mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-08 18:45:49 -04:00
drm/vkms: Switch to managed for writeback connector
The current VKMS driver uses non-managed function to create writeback connectors. It is not an issue yet, but in order to support multiple devices easily, convert this code to use drm and device managed helpers. Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Acked-by: Maxime Ripard <mripard@kernel.org> Reviewed-by: José Expósito <jose.exposito89@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250116-google-vkms-managed-v9-8-3e4ae1bd05a0@bootlin.com Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
This commit is contained in:
@@ -179,6 +179,7 @@ struct vkms_output {
|
||||
struct drm_encoder encoder;
|
||||
struct drm_connector connector;
|
||||
struct drm_writeback_connector wb_connector;
|
||||
struct drm_encoder wb_encoder;
|
||||
struct hrtimer vblank_hrtimer;
|
||||
ktime_t period_ns;
|
||||
struct workqueue_struct *composer_workq;
|
||||
@@ -275,6 +276,6 @@ void vkms_set_composer(struct vkms_output *out, bool enabled);
|
||||
void vkms_writeback_row(struct vkms_writeback_job *wb, const struct line_buffer *src_buffer, int y);
|
||||
|
||||
/* Writeback */
|
||||
int vkms_enable_writeback_connector(struct vkms_device *vkmsdev);
|
||||
int vkms_enable_writeback_connector(struct vkms_device *vkmsdev, struct drm_crtc *crtc);
|
||||
|
||||
#endif /* _VKMS_DRV_H_ */
|
||||
|
||||
@@ -95,7 +95,7 @@ int vkms_output_init(struct vkms_device *vkmsdev)
|
||||
}
|
||||
|
||||
if (vkmsdev->config->writeback) {
|
||||
writeback = vkms_enable_writeback_connector(vkmsdev);
|
||||
writeback = vkms_enable_writeback_connector(vkmsdev, crtc);
|
||||
if (writeback)
|
||||
DRM_ERROR("Failed to init writeback connector\n");
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@ static const u32 vkms_wb_formats[] = {
|
||||
|
||||
static const struct drm_connector_funcs vkms_wb_connector_funcs = {
|
||||
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||
.destroy = drm_connector_cleanup,
|
||||
.reset = drm_atomic_helper_connector_reset,
|
||||
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
|
||||
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
|
||||
@@ -163,16 +162,22 @@ static const struct drm_connector_helper_funcs vkms_wb_conn_helper_funcs = {
|
||||
.atomic_check = vkms_wb_atomic_check,
|
||||
};
|
||||
|
||||
int vkms_enable_writeback_connector(struct vkms_device *vkmsdev)
|
||||
int vkms_enable_writeback_connector(struct vkms_device *vkmsdev, struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_writeback_connector *wb = &vkmsdev->output.wb_connector;
|
||||
int ret;
|
||||
|
||||
ret = drmm_encoder_init(&vkmsdev->drm, &vkmsdev->output.wb_encoder,
|
||||
NULL, DRM_MODE_ENCODER_VIRTUAL, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
vkmsdev->output.wb_encoder.possible_crtcs |= drm_crtc_mask(crtc);
|
||||
|
||||
drm_connector_helper_add(&wb->base, &vkms_wb_conn_helper_funcs);
|
||||
|
||||
return drm_writeback_connector_init(&vkmsdev->drm, wb,
|
||||
&vkms_wb_connector_funcs,
|
||||
NULL,
|
||||
vkms_wb_formats,
|
||||
ARRAY_SIZE(vkms_wb_formats),
|
||||
1);
|
||||
return drmm_writeback_connector_init(&vkmsdev->drm, wb,
|
||||
&vkms_wb_connector_funcs,
|
||||
&vkmsdev->output.wb_encoder,
|
||||
vkms_wb_formats,
|
||||
ARRAY_SIZE(vkms_wb_formats));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user