Loading drivers/gpu/drm/nouveau/nouveau_dp.c +23 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading drivers/gpu/drm/nouveau/nouveau_encoder.h +2 −2 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ 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, 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 **); Loading drivers/gpu/drm/nouveau/nv50_sor.c +6 −20 Original line number Diff line number Diff line Loading @@ -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; 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 Loading
drivers/gpu/drm/nouveau/nouveau_dp.c +23 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
drivers/gpu/drm/nouveau/nouveau_encoder.h +2 −2 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ 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, 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 **); Loading
drivers/gpu/drm/nouveau/nv50_sor.c +6 −20 Original line number Diff line number Diff line Loading @@ -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; 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