Lines 666-677
int drm_crtc_helper_set_config(struct drm_mode_set *set)
Link Here
|
666 |
ret = -EINVAL; |
666 |
ret = -EINVAL; |
667 |
goto fail; |
667 |
goto fail; |
668 |
} |
668 |
} |
669 |
DRM_DEBUG_KMS("Setting connector DPMS state to on\n"); |
|
|
670 |
for (i = 0; i < set->num_connectors; i++) { |
671 |
DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id, |
672 |
drm_get_connector_name(set->connectors[i])); |
673 |
set->connectors[i]->dpms = DRM_MODE_DPMS_ON; |
674 |
} |
675 |
} |
669 |
} |
676 |
drm_helper_disable_unused_functions(dev); |
670 |
drm_helper_disable_unused_functions(dev); |
677 |
} else if (fb_changed) { |
671 |
} else if (fb_changed) { |
Lines 689-694
int drm_crtc_helper_set_config(struct drm_mode_set *set)
Link Here
|
689 |
} |
683 |
} |
690 |
} |
684 |
} |
691 |
|
685 |
|
|
|
686 |
DRM_DEBUG_KMS("Setting connector DPMS state to on\n"); |
687 |
for (i = 0; i < set->num_connectors; i++) { |
688 |
struct drm_connector *connector = set->connectors[i]; |
689 |
DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", connector->base.id, |
690 |
drm_get_connector_name(connector)); |
691 |
drm_connector_set_dpms(connector, DRM_MODE_DPMS_ON); |
692 |
} |
693 |
|
692 |
kfree(save_connectors); |
694 |
kfree(save_connectors); |
693 |
kfree(save_encoders); |
695 |
kfree(save_encoders); |
694 |
kfree(save_crtcs); |
696 |
kfree(save_crtcs); |
Lines 718-723
fail:
Link Here
|
718 |
} |
720 |
} |
719 |
EXPORT_SYMBOL(drm_crtc_helper_set_config); |
721 |
EXPORT_SYMBOL(drm_crtc_helper_set_config); |
720 |
|
722 |
|
|
|
723 |
int drm_connector_get_dpms(struct drm_connector *connector) |
724 |
{ |
725 |
uint64_t val; |
726 |
struct drm_property *dpms_prop = |
727 |
connector->dev->mode_config.dpms_property; |
728 |
int ret; |
729 |
|
730 |
ret = drm_connector_property_get_value(connector, dpms_prop, &val); |
731 |
if (ret) |
732 |
DRM_DEBUG_KMS("failed to fetch DPMS state for connector\n"); |
733 |
return (int)val; |
734 |
} |
735 |
EXPORT_SYMBOL(drm_connector_get_dpms); |
736 |
|
737 |
int drm_connector_set_dpms(struct drm_connector *connector, int mode) |
738 |
{ |
739 |
struct drm_property *dpms_prop = |
740 |
connector->dev->mode_config.dpms_property; |
741 |
int ret; |
742 |
|
743 |
if (connector->funcs->dpms) |
744 |
(*connector->funcs->dpms)(connector, mode); |
745 |
ret = drm_connector_property_set_value(connector, dpms_prop, mode); |
746 |
|
747 |
return ret; |
748 |
} |
749 |
EXPORT_SYMBOL(drm_connector_set_dpms); |
750 |
|
721 |
static int drm_helper_choose_encoder_dpms(struct drm_encoder *encoder) |
751 |
static int drm_helper_choose_encoder_dpms(struct drm_encoder *encoder) |
722 |
{ |
752 |
{ |
723 |
int dpms = DRM_MODE_DPMS_OFF; |
753 |
int dpms = DRM_MODE_DPMS_OFF; |
Lines 726-733
static int drm_helper_choose_encoder_dpms(struct drm_encoder *encoder)
Link Here
|
726 |
|
756 |
|
727 |
list_for_each_entry(connector, &dev->mode_config.connector_list, head) |
757 |
list_for_each_entry(connector, &dev->mode_config.connector_list, head) |
728 |
if (connector->encoder == encoder) |
758 |
if (connector->encoder == encoder) |
729 |
if (connector->dpms < dpms) |
759 |
if (drm_connector_get_dpms(connector) < dpms) |
730 |
dpms = connector->dpms; |
760 |
dpms = drm_connector_get_dpms(connector); |
731 |
return dpms; |
761 |
return dpms; |
732 |
} |
762 |
} |
733 |
|
763 |
|
Lines 739-746
static int drm_helper_choose_crtc_dpms(struct drm_crtc *crtc)
Link Here
|
739 |
|
769 |
|
740 |
list_for_each_entry(connector, &dev->mode_config.connector_list, head) |
770 |
list_for_each_entry(connector, &dev->mode_config.connector_list, head) |
741 |
if (connector->encoder && connector->encoder->crtc == crtc) |
771 |
if (connector->encoder && connector->encoder->crtc == crtc) |
742 |
if (connector->dpms < dpms) |
772 |
if (drm_connector_get_dpms(connector) < dpms) |
743 |
dpms = connector->dpms; |
773 |
dpms = drm_connector_get_dpms(connector); |
744 |
return dpms; |
774 |
return dpms; |
745 |
} |
775 |
} |
746 |
|
776 |
|
Lines 758-768
void drm_helper_connector_dpms(struct drm_connector *connector, int mode)
Link Here
|
758 |
struct drm_crtc *crtc = encoder ? encoder->crtc : NULL; |
788 |
struct drm_crtc *crtc = encoder ? encoder->crtc : NULL; |
759 |
int old_dpms; |
789 |
int old_dpms; |
760 |
|
790 |
|
761 |
if (mode == connector->dpms) |
791 |
old_dpms = drm_connector_get_dpms(connector); |
|
|
792 |
|
793 |
if (mode == old_dpms) |
762 |
return; |
794 |
return; |
763 |
|
795 |
|
764 |
old_dpms = connector->dpms; |
796 |
drm_connector_set_dpms(connector, mode); |
765 |
connector->dpms = mode; |
|
|
766 |
|
797 |
|
767 |
/* from off to on, do crtc then encoder */ |
798 |
/* from off to on, do crtc then encoder */ |
768 |
if (mode < old_dpms) { |
799 |
if (mode < old_dpms) { |