drm/nouveau/dp: make dp dpms function common, call from sor code instead
GF119 will use this too. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
e436d1bb0a
commit
f14d9a4dda
@ -475,6 +475,29 @@ nouveau_dp_link_train(struct drm_encoder *encoder, u32 datarate,
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
nouveau_dp_dpms(struct drm_encoder *encoder, int mode, u32 datarate,
|
||||
struct dp_train_func *func)
|
||||
{
|
||||
struct nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
|
||||
struct nouveau_i2c_chan *auxch;
|
||||
u8 status;
|
||||
|
||||
auxch = nouveau_i2c_find(encoder->dev, nv_encoder->dcb->i2c_index);
|
||||
if (!auxch)
|
||||
return;
|
||||
|
||||
if (mode == DRM_MODE_DPMS_ON)
|
||||
status = DP_SET_POWER_D0;
|
||||
else
|
||||
status = DP_SET_POWER_D3;
|
||||
|
||||
nouveau_dp_auxch(auxch, 8, DP_SET_POWER, &status, 1);
|
||||
|
||||
if (mode == DRM_MODE_DPMS_ON)
|
||||
nouveau_dp_link_train(encoder, datarate, func);
|
||||
}
|
||||
|
||||
bool
|
||||
nouveau_dp_detect(struct drm_encoder *encoder)
|
||||
{
|
||||
|
@ -90,8 +90,8 @@ get_slave_funcs(struct drm_encoder *enc)
|
||||
int nouveau_dp_auxch(struct nouveau_i2c_chan *auxch, int cmd, int addr,
|
||||
uint8_t *data, int data_nr);
|
||||
bool nouveau_dp_detect(struct drm_encoder *);
|
||||
bool nouveau_dp_link_train(struct drm_encoder *, u32 datarate,
|
||||
struct dp_train_func *);
|
||||
void nouveau_dp_dpms(struct drm_encoder *, int mode, u32 datarate,
|
||||
struct dp_train_func *);
|
||||
u8 *nouveau_dp_bios_data(struct drm_device *, struct dcb_entry *, u8 **);
|
||||
|
||||
struct nouveau_connector *
|
||||
|
@ -304,27 +304,13 @@ nv50_sor_dpms(struct drm_encoder *encoder, int mode)
|
||||
}
|
||||
|
||||
if (nv_encoder->dcb->type == OUTPUT_DP) {
|
||||
struct nouveau_i2c_chan *auxch;
|
||||
struct dp_train_func func = {
|
||||
.link_set = nv50_sor_dp_link_set,
|
||||
.train_set = nv50_sor_dp_train_set,
|
||||
.train_adj = nv50_sor_dp_train_adj
|
||||
};
|
||||
|
||||
auxch = nouveau_i2c_find(dev, nv_encoder->dcb->i2c_index);
|
||||
if (!auxch)
|
||||
return;
|
||||
|
||||
if (mode == DRM_MODE_DPMS_ON) {
|
||||
struct dp_train_func func = {
|
||||
.link_set = nv50_sor_dp_link_set,
|
||||
.train_set = nv50_sor_dp_train_set,
|
||||
.train_adj = nv50_sor_dp_train_adj
|
||||
};
|
||||
u32 rate = nv_encoder->dp.datarate;
|
||||
u8 status = DP_SET_POWER_D0;
|
||||
|
||||
nouveau_dp_auxch(auxch, 8, DP_SET_POWER, &status, 1);
|
||||
nouveau_dp_link_train(encoder, rate, &func);
|
||||
} else {
|
||||
u8 status = DP_SET_POWER_D3;
|
||||
nouveau_dp_auxch(auxch, 8, DP_SET_POWER, &status, 1);
|
||||
}
|
||||
nouveau_dp_dpms(encoder, mode, nv_encoder->dp.datarate, &func);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user