Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 293770
b: refs/heads/master
c: f14d9a4
h: refs/heads/master
v: v3
  • Loading branch information
Ben Skeggs committed Mar 13, 2012
1 parent 5173cfe commit 06e6fbf
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e436d1bb0a3e5ff27b190d0bf9173f4f6ad21d3f
refs/heads/master: f14d9a4dda65439d74326694db727c6d2a5df0ce
23 changes: 23 additions & 0 deletions trunk/drivers/gpu/drm/nouveau/nouveau_dp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/gpu/drm/nouveau/nouveau_encoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *
Expand Down
26 changes: 6 additions & 20 deletions trunk/drivers/gpu/drm/nouveau/nv50_sor.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down

0 comments on commit 06e6fbf

Please sign in to comment.