Commit a5f9523c authored by Harry Wentland's avatar Harry Wentland Committed by Alex Deucher

drm/amd/display: Create amdgpu_dm_wb_connector

[WHY]
We need to track the dc_link and it would get confusing if
re-using the amdgpu_dm_connector.

[HOW]
Creating new amdgpu_dm_wb_connector.
Reviewed-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c4c182b5
...@@ -4536,14 +4536,14 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) ...@@ -4536,14 +4536,14 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev)
link = dc_get_link_at_index(dm->dc, i); link = dc_get_link_at_index(dm->dc, i);
if (link->connector_signal == SIGNAL_TYPE_VIRTUAL) { if (link->connector_signal == SIGNAL_TYPE_VIRTUAL) {
struct drm_writeback_connector *wbcon = kzalloc(sizeof(*wbcon), GFP_KERNEL); struct amdgpu_dm_wb_connector *wbcon = kzalloc(sizeof(*wbcon), GFP_KERNEL);
if (!wbcon) { if (!wbcon) {
DRM_ERROR("KMS: Failed to allocate writeback connector\n"); DRM_ERROR("KMS: Failed to allocate writeback connector\n");
continue; continue;
} }
if (amdgpu_dm_wb_connector_init(dm, wbcon)) { if (amdgpu_dm_wb_connector_init(dm, wbcon, i)) {
DRM_ERROR("KMS: Failed to initialize writeback connector\n"); DRM_ERROR("KMS: Failed to initialize writeback connector\n");
kfree(wbcon); kfree(wbcon);
continue; continue;
...@@ -7648,6 +7648,7 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm, ...@@ -7648,6 +7648,7 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,
struct dc_link *link = dc_get_link_at_index(dc, link_index); struct dc_link *link = dc_get_link_at_index(dc, link_index);
struct amdgpu_i2c_adapter *i2c; struct amdgpu_i2c_adapter *i2c;
/* Not needed for writeback connector */
link->priv = aconnector; link->priv = aconnector;
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <drm/drm_crtc.h> #include <drm/drm_crtc.h>
#include <drm/drm_plane.h> #include <drm/drm_plane.h>
#include "link_service_types.h" #include "link_service_types.h"
#include <drm/drm_writeback.h>
/* /*
* This file contains the definition for amdgpu_display_manager * This file contains the definition for amdgpu_display_manager
...@@ -714,6 +715,13 @@ static inline void amdgpu_dm_set_mst_status(uint8_t *status, ...@@ -714,6 +715,13 @@ static inline void amdgpu_dm_set_mst_status(uint8_t *status,
#define to_amdgpu_dm_connector(x) container_of(x, struct amdgpu_dm_connector, base) #define to_amdgpu_dm_connector(x) container_of(x, struct amdgpu_dm_connector, base)
struct amdgpu_dm_wb_connector {
struct drm_writeback_connector base;
struct dc_link *link;
};
#define to_amdgpu_dm_wb_connector(x) container_of(x, struct amdgpu_dm_wb_connector, base)
extern const struct amdgpu_ip_block_version dm_ip_block; extern const struct amdgpu_ip_block_version dm_ip_block;
struct dm_plane_state { struct dm_plane_state {
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include "amdgpu_dm.h" #include "amdgpu_dm.h"
#include "amdgpu_dm_wb.h" #include "amdgpu_dm_wb.h"
#include "amdgpu_display.h" #include "amdgpu_display.h"
#include "dc.h"
#include <drm/drm_atomic_state_helper.h> #include <drm/drm_atomic_state_helper.h>
#include <drm/drm_modeset_helper_vtables.h> #include <drm/drm_modeset_helper_vtables.h>
...@@ -183,13 +184,18 @@ static const struct drm_connector_helper_funcs amdgpu_dm_wb_conn_helper_funcs = ...@@ -183,13 +184,18 @@ static const struct drm_connector_helper_funcs amdgpu_dm_wb_conn_helper_funcs =
}; };
int amdgpu_dm_wb_connector_init(struct amdgpu_display_manager *dm, int amdgpu_dm_wb_connector_init(struct amdgpu_display_manager *dm,
struct drm_writeback_connector *wbcon) struct amdgpu_dm_wb_connector *wbcon,
uint32_t link_index)
{ {
struct dc *dc = dm->dc;
struct dc_link *link = dc_get_link_at_index(dc, link_index);
int res = 0; int res = 0;
drm_connector_helper_add(&wbcon->base, &amdgpu_dm_wb_conn_helper_funcs); wbcon->link = link;
res = drm_writeback_connector_init(&dm->adev->ddev, wbcon, drm_connector_helper_add(&wbcon->base.base, &amdgpu_dm_wb_conn_helper_funcs);
res = drm_writeback_connector_init(&dm->adev->ddev, &wbcon->base,
&amdgpu_dm_wb_connector_funcs, &amdgpu_dm_wb_connector_funcs,
&amdgpu_dm_wb_encoder_helper_funcs, &amdgpu_dm_wb_encoder_helper_funcs,
amdgpu_dm_wb_formats, amdgpu_dm_wb_formats,
...@@ -202,8 +208,8 @@ int amdgpu_dm_wb_connector_init(struct amdgpu_display_manager *dm, ...@@ -202,8 +208,8 @@ int amdgpu_dm_wb_connector_init(struct amdgpu_display_manager *dm,
* Some of the properties below require access to state, like bpc. * Some of the properties below require access to state, like bpc.
* Allocate some default initial connector state with our reset helper. * Allocate some default initial connector state with our reset helper.
*/ */
if (wbcon->base.funcs->reset) if (wbcon->base.base.funcs->reset)
wbcon->base.funcs->reset(&wbcon->base); wbcon->base.base.funcs->reset(&wbcon->base.base);
return 0; return 0;
} }
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <drm/drm_writeback.h> #include <drm/drm_writeback.h>
int amdgpu_dm_wb_connector_init(struct amdgpu_display_manager *dm, int amdgpu_dm_wb_connector_init(struct amdgpu_display_manager *dm,
struct drm_writeback_connector *wbcon); struct amdgpu_dm_wb_connector *dm_wbcon,
uint32_t link_index);
#endif #endif
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