mirror of https://gitee.com/openkylin/linux.git
drm/i915: add opregion function to notify bios of adapter power state
Notifying the bios lets it enter power saving states. Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
9c4b0a6831
commit
ecbc5cf340
|
@ -2197,6 +2197,8 @@ extern void intel_opregion_fini(struct drm_device *dev);
|
|||
extern void intel_opregion_asle_intr(struct drm_device *dev);
|
||||
extern int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
|
||||
bool enable);
|
||||
extern int intel_opregion_notify_adapter(struct drm_device *dev,
|
||||
pci_power_t state);
|
||||
#else
|
||||
static inline void intel_opregion_init(struct drm_device *dev) { return; }
|
||||
static inline void intel_opregion_fini(struct drm_device *dev) { return; }
|
||||
|
@ -2206,6 +2208,11 @@ intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, bool enable)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int
|
||||
intel_opregion_notify_adapter(struct drm_device *dev, pci_power_t state)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* intel_acpi.c */
|
||||
|
|
|
@ -342,6 +342,33 @@ int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder,
|
|||
return swsci(dev, SWSCI_SBCB_DISPLAY_POWER_STATE, parm, NULL);
|
||||
}
|
||||
|
||||
static const struct {
|
||||
pci_power_t pci_power_state;
|
||||
u32 parm;
|
||||
} power_state_map[] = {
|
||||
{ PCI_D0, 0x00 },
|
||||
{ PCI_D1, 0x01 },
|
||||
{ PCI_D2, 0x02 },
|
||||
{ PCI_D3hot, 0x04 },
|
||||
{ PCI_D3cold, 0x04 },
|
||||
};
|
||||
|
||||
int intel_opregion_notify_adapter(struct drm_device *dev, pci_power_t state)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!HAS_DDI(dev))
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(power_state_map); i++) {
|
||||
if (state == power_state_map[i].pci_power_state)
|
||||
return swsci(dev, SWSCI_SBCB_ADAPTER_POWER_STATE,
|
||||
power_state_map[i].parm, NULL);
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||
|
|
Loading…
Reference in New Issue