Commit 4143e919 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie

drm/radeon/kms: store sink type in atom dig connector

This will be used laster when the encoder and transmitters
are set up.
Signed-off-by: default avatarAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 6a93cb25
...@@ -78,7 +78,7 @@ bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes, ...@@ -78,7 +78,7 @@ bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes,
return true; return true;
} }
int radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clock, static u8 radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clock,
uint8_t ucconfig, uint8_t lane_num) uint8_t ucconfig, uint8_t lane_num)
{ {
DP_ENCODER_SERVICE_PARAMETERS args; DP_ENCODER_SERVICE_PARAMETERS args;
...@@ -95,7 +95,7 @@ int radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clo ...@@ -95,7 +95,7 @@ int radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clo
return args.ucStatus; return args.ucStatus;
} }
int radeon_dp_getsinktype(struct radeon_connector *radeon_connector) u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector)
{ {
struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
struct drm_device *dev = radeon_connector->base.dev; struct drm_device *dev = radeon_connector->base.dev;
......
...@@ -908,13 +908,9 @@ static int radeon_dp_get_modes(struct drm_connector *connector) ...@@ -908,13 +908,9 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
static enum drm_connector_status radeon_dp_detect(struct drm_connector *connector) static enum drm_connector_status radeon_dp_detect(struct drm_connector *connector)
{ {
struct radeon_connector *radeon_connector = to_radeon_connector(connector); struct radeon_connector *radeon_connector = to_radeon_connector(connector);
struct drm_encoder *encoder = NULL;
struct drm_encoder_helper_funcs *encoder_funcs;
struct drm_mode_object *obj;
int i;
enum drm_connector_status ret = connector_status_disconnected; enum drm_connector_status ret = connector_status_disconnected;
int sink_type; struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
bool dret; u8 sink_type;
if (radeon_connector->edid) { if (radeon_connector->edid) {
kfree(radeon_connector->edid); kfree(radeon_connector->edid);
...@@ -924,8 +920,17 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto ...@@ -924,8 +920,17 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto
sink_type = radeon_dp_getsinktype(radeon_connector); sink_type = radeon_dp_getsinktype(radeon_connector);
if (sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { if (sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
radeon_dp_getdpcd(radeon_connector); radeon_dp_getdpcd(radeon_connector);
radeon_dig_connector->dp_sink_type = sink_type;
ret = connector_status_connected;
} else {
radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
if (radeon_ddc_probe(radeon_connector)) {
radeon_dig_connector->dp_sink_type = sink_type;
ret = connector_status_connected; ret = connector_status_connected;
} }
radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);
}
return ret; return ret;
} }
......
...@@ -339,8 +339,10 @@ struct radeon_encoder { ...@@ -339,8 +339,10 @@ struct radeon_encoder {
struct radeon_connector_atom_dig { struct radeon_connector_atom_dig {
uint32_t igp_lane_info; uint32_t igp_lane_info;
bool linkb; bool linkb;
/* displayport */
struct radeon_i2c_chan *dp_i2c_bus; struct radeon_i2c_chan *dp_i2c_bus;
u8 dpcd[8]; u8 dpcd[8];
u8 dp_sink_type;
}; };
struct radeon_connector { struct radeon_connector {
...@@ -364,7 +366,7 @@ struct radeon_framebuffer { ...@@ -364,7 +366,7 @@ struct radeon_framebuffer {
struct drm_gem_object *obj; struct drm_gem_object *obj;
}; };
extern int radeon_dp_getsinktype(struct radeon_connector *radeon_connector); extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
extern void radeon_dp_getdpcd(struct radeon_connector *radeon_connector); extern void radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
extern int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, extern int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
uint8_t write_byte, uint8_t *read_byte); uint8_t write_byte, uint8_t *read_byte);
......
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