drm/radeon: add dpms connector functions

This commit is contained in:
Dave Airlie 2008-11-10 15:37:16 +10:00
parent 327631c8b5
commit 195cc0d817
4 changed files with 49 additions and 1 deletions

View file

@ -1423,7 +1423,7 @@ int drm_mode_setcrtc(struct drm_device *dev,
set.mode = mode;
set.connectors = connector_set;
set.num_connectors = crtc_req->count_connectors;
set.fb =fb;
set.fb = fb;
ret = crtc->funcs->set_config(&set);
out:

View file

@ -804,3 +804,30 @@ int drm_helper_resume_force_mode(struct drm_device *dev)
return 0;
}
EXPORT_SYMBOL(drm_helper_resume_force_mode);
void drm_helper_set_connector_dpms(struct drm_connector *connector,
int dpms_mode)
{
int i = 0;
struct drm_encoder *encoder;
struct drm_encoder_helper_funcs *encoder_funcs;
struct drm_mode_object *obj;
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
if (connector->encoder_ids[i] == 0)
break;
obj = drm_mode_object_find(connector->dev,
connector->encoder_ids[i],
DRM_MODE_OBJECT_ENCODER);
if (!obj)
continue;
encoder = obj_to_encoder(obj);
encoder_funcs = encoder->helper_private;
if (encoder_funcs->dpms)
encoder_funcs->dpms(encoder, dpms_mode);
}
}
EXPORT_SYMBOL(drm_helper_set_connector_dpms);

View file

@ -93,4 +93,6 @@ static inline void drm_connector_helper_add(struct drm_connector *connector, con
}
extern int drm_helper_resume_force_mode(struct drm_device *dev);
extern void drm_helper_set_connector_dpms(struct drm_connector *connector,
int dpms_mode);
#endif

View file

@ -77,6 +77,22 @@ static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encode
return mode;
}
int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
uint64_t val)
{
struct drm_device *dev = connector->dev;
if (property == dev->mode_config.dpms_property) {
if (val > 3)
return -EINVAL;
drm_helper_set_connector_dpms(connector, val);
}
return 0;
}
static int radeon_lvds_get_modes(struct drm_connector *connector)
{
struct radeon_connector *radeon_connector = to_radeon_connector(connector);
@ -146,6 +162,7 @@ struct drm_connector_funcs radeon_lvds_connector_funcs = {
.detect = radeon_lvds_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.destroy = radeon_connector_destroy,
.set_property = radeon_connector_set_property,
};
static int radeon_vga_get_modes(struct drm_connector *connector)
@ -197,6 +214,7 @@ struct drm_connector_funcs radeon_vga_connector_funcs = {
.detect = radeon_vga_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.destroy = radeon_connector_destroy,
.set_property = radeon_connector_set_property,
};
@ -289,6 +307,7 @@ struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
struct drm_connector_funcs radeon_dvi_connector_funcs = {
.detect = radeon_dvi_detect,
.fill_modes = drm_helper_probe_single_connector_modes,
.set_property = radeon_connector_set_property,
.destroy = radeon_connector_destroy,
};