1df0566a6SJani Nikula /* 2df0566a6SJani Nikula * Copyright © 2008-2017 Intel Corporation 3df0566a6SJani Nikula * 4df0566a6SJani Nikula * Permission is hereby granted, free of charge, to any person obtaining a 5df0566a6SJani Nikula * copy of this software and associated documentation files (the "Software"), 6df0566a6SJani Nikula * to deal in the Software without restriction, including without limitation 7df0566a6SJani Nikula * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8df0566a6SJani Nikula * and/or sell copies of the Software, and to permit persons to whom the 9df0566a6SJani Nikula * Software is furnished to do so, subject to the following conditions: 10df0566a6SJani Nikula * 11df0566a6SJani Nikula * The above copyright notice and this permission notice (including the next 12df0566a6SJani Nikula * paragraph) shall be included in all copies or substantial portions of the 13df0566a6SJani Nikula * Software. 14df0566a6SJani Nikula * 15df0566a6SJani Nikula * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16df0566a6SJani Nikula * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17df0566a6SJani Nikula * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18df0566a6SJani Nikula * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19df0566a6SJani Nikula * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20df0566a6SJani Nikula * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21df0566a6SJani Nikula * IN THE SOFTWARE. 22df0566a6SJani Nikula * 23df0566a6SJani Nikula */ 24df0566a6SJani Nikula 25df0566a6SJani Nikula #ifndef _INTEL_OPREGION_H_ 26df0566a6SJani Nikula #define _INTEL_OPREGION_H_ 27df0566a6SJani Nikula 28df0566a6SJani Nikula #include <linux/workqueue.h> 29df0566a6SJani Nikula #include <linux/pci.h> 30df0566a6SJani Nikula 31df0566a6SJani Nikula struct drm_i915_private; 32e35d8762SAnisse Astier struct intel_connector; 33df0566a6SJani Nikula struct intel_encoder; 34df0566a6SJani Nikula 35df0566a6SJani Nikula struct opregion_header; 36df0566a6SJani Nikula struct opregion_acpi; 37df0566a6SJani Nikula struct opregion_swsci; 38df0566a6SJani Nikula struct opregion_asle; 39e35d8762SAnisse Astier struct opregion_asle_ext; 40df0566a6SJani Nikula 41df0566a6SJani Nikula struct intel_opregion { 42df0566a6SJani Nikula struct opregion_header *header; 43df0566a6SJani Nikula struct opregion_acpi *acpi; 44df0566a6SJani Nikula struct opregion_swsci *swsci; 45df0566a6SJani Nikula u32 swsci_gbda_sub_functions; 46df0566a6SJani Nikula u32 swsci_sbcb_sub_functions; 47df0566a6SJani Nikula struct opregion_asle *asle; 48e35d8762SAnisse Astier struct opregion_asle_ext *asle_ext; 49df0566a6SJani Nikula void *rvda; 50df0566a6SJani Nikula void *vbt_firmware; 51df0566a6SJani Nikula const void *vbt; 52df0566a6SJani Nikula u32 vbt_size; 53df0566a6SJani Nikula u32 *lid_state; 54df0566a6SJani Nikula struct work_struct asle_work; 55df0566a6SJani Nikula struct notifier_block acpi_notifier; 56df0566a6SJani Nikula }; 57df0566a6SJani Nikula 58df0566a6SJani Nikula #define OPREGION_SIZE (8 * 1024) 59df0566a6SJani Nikula 60df0566a6SJani Nikula #ifdef CONFIG_ACPI 61df0566a6SJani Nikula 62df0566a6SJani Nikula int intel_opregion_setup(struct drm_i915_private *dev_priv); 63*3e226e4aSImre Deak void intel_opregion_cleanup(struct drm_i915_private *i915); 64df0566a6SJani Nikula 65df0566a6SJani Nikula void intel_opregion_register(struct drm_i915_private *dev_priv); 66df0566a6SJani Nikula void intel_opregion_unregister(struct drm_i915_private *dev_priv); 67df0566a6SJani Nikula 68df0566a6SJani Nikula void intel_opregion_resume(struct drm_i915_private *dev_priv); 69df0566a6SJani Nikula void intel_opregion_suspend(struct drm_i915_private *dev_priv, 70df0566a6SJani Nikula pci_power_t state); 71df0566a6SJani Nikula 72df0566a6SJani Nikula void intel_opregion_asle_intr(struct drm_i915_private *dev_priv); 73df0566a6SJani Nikula int intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, 74df0566a6SJani Nikula bool enable); 75df0566a6SJani Nikula int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv, 76df0566a6SJani Nikula pci_power_t state); 77df0566a6SJani Nikula int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv); 7891ec555fSJani Nikula const struct drm_edid *intel_opregion_get_edid(struct intel_connector *connector); 79df0566a6SJani Nikula 80eb2983c0SJouni Högander bool intel_opregion_headless_sku(struct drm_i915_private *i915); 81eb2983c0SJouni Högander 82df0566a6SJani Nikula #else /* CONFIG_ACPI*/ 83df0566a6SJani Nikula 84df0566a6SJani Nikula static inline int intel_opregion_setup(struct drm_i915_private *dev_priv) 85df0566a6SJani Nikula { 86df0566a6SJani Nikula return 0; 87df0566a6SJani Nikula } 88df0566a6SJani Nikula 89df0566a6SJani Nikula static inline void intel_opregion_register(struct drm_i915_private *dev_priv) 90df0566a6SJani Nikula { 91df0566a6SJani Nikula } 92df0566a6SJani Nikula 93df0566a6SJani Nikula static inline void intel_opregion_unregister(struct drm_i915_private *dev_priv) 94df0566a6SJani Nikula { 95df0566a6SJani Nikula } 96df0566a6SJani Nikula 97df0566a6SJani Nikula static inline void intel_opregion_resume(struct drm_i915_private *dev_priv) 98df0566a6SJani Nikula { 99df0566a6SJani Nikula } 100df0566a6SJani Nikula 101df0566a6SJani Nikula static inline void intel_opregion_suspend(struct drm_i915_private *dev_priv, 102df0566a6SJani Nikula pci_power_t state) 103df0566a6SJani Nikula { 104df0566a6SJani Nikula } 105df0566a6SJani Nikula 106df0566a6SJani Nikula static inline void intel_opregion_asle_intr(struct drm_i915_private *dev_priv) 107df0566a6SJani Nikula { 108df0566a6SJani Nikula } 109df0566a6SJani Nikula 110df0566a6SJani Nikula static inline int 111df0566a6SJani Nikula intel_opregion_notify_encoder(struct intel_encoder *intel_encoder, bool enable) 112df0566a6SJani Nikula { 113df0566a6SJani Nikula return 0; 114df0566a6SJani Nikula } 115df0566a6SJani Nikula 116df0566a6SJani Nikula static inline int 117df0566a6SJani Nikula intel_opregion_notify_adapter(struct drm_i915_private *dev, pci_power_t state) 118df0566a6SJani Nikula { 119df0566a6SJani Nikula return 0; 120df0566a6SJani Nikula } 121df0566a6SJani Nikula 122df0566a6SJani Nikula static inline int intel_opregion_get_panel_type(struct drm_i915_private *dev) 123df0566a6SJani Nikula { 124df0566a6SJani Nikula return -ENODEV; 125df0566a6SJani Nikula } 126df0566a6SJani Nikula 12791ec555fSJani Nikula static inline const struct drm_edid * 128e35d8762SAnisse Astier intel_opregion_get_edid(struct intel_connector *connector) 129e35d8762SAnisse Astier { 130e35d8762SAnisse Astier return NULL; 131e35d8762SAnisse Astier } 132e35d8762SAnisse Astier 133eb2983c0SJouni Högander static inline bool intel_opregion_headless_sku(struct drm_i915_private *i915) 134eb2983c0SJouni Högander { 135eb2983c0SJouni Högander return false; 136eb2983c0SJouni Högander } 137eb2983c0SJouni Högander 138df0566a6SJani Nikula #endif /* CONFIG_ACPI */ 139df0566a6SJani Nikula 140df0566a6SJani Nikula #endif 141