Lines Matching defs:opregion

131 	u64 rvda;	/* Physical (2.0) or relative from opregion (2.1+)
273 struct intel_opregion *opregion = i915->display.opregion;
277 if (!opregion)
280 swsci = opregion->swsci;
291 if ((opregion->swsci_sbcb_sub_functions &
295 if ((opregion->swsci_gbda_sub_functions &
316 swsci = dev_priv->display.opregion->swsci;
490 struct opregion_asle *asle = dev_priv->display.opregion->asle;
496 "opregion backlight request ignored\n");
513 drm_dbg_kms(&dev_priv->drm, "updating opregion backlight %d/255\n",
610 struct intel_opregion *opregion =
612 struct drm_i915_private *dev_priv = opregion->i915;
613 struct opregion_asle *asle = opregion->asle;
661 return i915->display.opregion && i915->display.opregion->asle;
666 struct intel_opregion *opregion = i915->display.opregion;
668 if (opregion && opregion->asle)
669 queue_work(i915->unordered_wq, &opregion->asle_work);
677 * The only video events relevant to opregion are 0x80. These indicate either a
684 struct intel_opregion *opregion = container_of(nb, struct intel_opregion,
693 acpi = opregion->acpi;
704 * Initialise the DIDL field in opregion. This passes a list of devices to
709 static void set_did(struct intel_opregion *opregion, int i, u32 val)
711 if (i < ARRAY_SIZE(opregion->acpi->didl)) {
712 opregion->acpi->didl[i] = val;
714 i -= ARRAY_SIZE(opregion->acpi->didl);
716 if (WARN_ON(i >= ARRAY_SIZE(opregion->acpi->did2)))
719 opregion->acpi->did2[i] = val;
725 struct intel_opregion *opregion = dev_priv->display.opregion;
731 * In theory, did2, the extended didl, gets added at opregion version
737 max_outputs = ARRAY_SIZE(opregion->acpi->didl) +
738 ARRAY_SIZE(opregion->acpi->did2);
745 set_did(opregion, i, connector->acpi_device_id);
759 set_did(opregion, i, 0);
764 struct intel_opregion *opregion = dev_priv->display.opregion;
781 if (i >= ARRAY_SIZE(opregion->acpi->cadl))
783 opregion->acpi->cadl[i++] = connector->acpi_device_id;
788 if (i < ARRAY_SIZE(opregion->acpi->cadl))
789 opregion->acpi->cadl[i] = 0;
794 struct intel_opregion *opregion = dev_priv->display.opregion;
799 opregion->swsci_gbda_sub_functions = 1;
800 opregion->swsci_sbcb_sub_functions = 1;
806 opregion->swsci_gbda_sub_functions |= tmp;
816 opregion->swsci_sbcb_sub_functions |= tmp;
833 u32 req = opregion->swsci_sbcb_sub_functions;
839 /* opregion->swsci_sbcb_sub_functions &= tmp; */
841 opregion->swsci_sbcb_sub_functions |= tmp;
847 opregion->swsci_gbda_sub_functions,
848 opregion->swsci_sbcb_sub_functions);
872 struct intel_opregion *opregion;
888 drm_dbg(&dev_priv->drm, "graphic opregion physical addr: 0x%x\n",
895 opregion = kzalloc(sizeof(*opregion), GFP_KERNEL);
896 if (!opregion)
899 opregion->i915 = dev_priv;
900 dev_priv->display.opregion = opregion;
902 INIT_WORK(&opregion->asle_work, asle_work);
913 drm_dbg(&dev_priv->drm, "opregion signature mismatch\n");
917 opregion->header = base;
920 opregion->header->over.major,
921 opregion->header->over.minor,
922 opregion->header->over.revision);
924 mboxes = opregion->header->mboxes;
927 opregion->acpi = base + OPREGION_ACPI_OFFSET;
934 opregion->acpi->chpd = 1;
938 u8 major = opregion->header->over.major;
941 drm_err(&dev_priv->drm, "SWSCI Mailbox #2 present for opregion v3.x, ignoring\n");
944 drm_dbg(&dev_priv->drm, "SWSCI Mailbox #2 present for opregion v2.x\n");
946 opregion->swsci = base + OPREGION_SWSCI_OFFSET;
953 opregion->asle = base + OPREGION_ASLE_OFFSET;
955 opregion->asle->ardy = ASLE_ARDY_NOT_READY;
960 opregion->asle_ext = base + OPREGION_ASLE_EXT_OFFSET;
970 if (opregion->header->over.major >= 2 && opregion->asle &&
971 opregion->asle->rvda && opregion->asle->rvds) {
972 resource_size_t rvda = opregion->asle->rvda;
975 * opregion 2.0: rvda is the physical VBT address.
977 * opregion 2.1+: rvda is unsigned, relative offset from
978 * opregion base, and should never point within opregion.
980 if (opregion->header->over.major > 2 ||
981 opregion->header->over.minor >= 1) {
987 opregion->rvda = memremap(rvda, opregion->asle->rvds,
990 vbt = opregion->rvda;
991 vbt_size = opregion->asle->rvds;
995 opregion->vbt = vbt;
996 opregion->vbt_size = vbt_size;
1001 memunmap(opregion->rvda);
1002 opregion->rvda = NULL;
1020 opregion->vbt = vbt;
1021 opregion->vbt_size = vbt_size;
1033 kfree(opregion);
1034 dev_priv->display.opregion = NULL;
1108 struct intel_opregion *opregion = i915->display.opregion;
1113 if (!opregion || !opregion->asle_ext)
1116 edid = opregion->asle_ext->bddc;
1119 len = (opregion->asle_ext->phed & ASLE_PHED_EDID_VALID_MASK) * 128;
1136 struct intel_opregion *opregion = i915->display.opregion;
1138 if (!opregion || !opregion->vbt)
1146 struct intel_opregion *opregion = i915->display.opregion;
1148 if (!opregion || !opregion->vbt)
1152 *size = opregion->vbt_size;
1154 return kmemdup(opregion->vbt, opregion->vbt_size, GFP_KERNEL);
1159 struct intel_opregion *opregion = i915->display.opregion;
1162 if (!opregion)
1165 header = opregion->header;
1171 return opregion->header->pcon & PCON_HEADLESS_SKU;
1176 struct intel_opregion *opregion = i915->display.opregion;
1178 if (!opregion)
1181 if (opregion->acpi) {
1182 opregion->acpi_notifier.notifier_call =
1184 register_acpi_notifier(&opregion->acpi_notifier);
1192 struct intel_opregion *opregion = i915->display.opregion;
1194 if (opregion->acpi) {
1203 opregion->acpi->csts = 0;
1204 opregion->acpi->drdy = 1;
1207 if (opregion->asle) {
1208 opregion->asle->tche = ASLE_TCHE_BLC_EN;
1209 opregion->asle->ardy = ASLE_ARDY_READY;
1218 struct intel_opregion *opregion = i915->display.opregion;
1220 if (!opregion)
1231 struct intel_opregion *opregion = i915->display.opregion;
1233 if (opregion->asle)
1234 opregion->asle->ardy = ASLE_ARDY_NOT_READY;
1236 cancel_work_sync(&opregion->asle_work);
1238 if (opregion->acpi)
1239 opregion->acpi->drdy = 0;
1244 struct intel_opregion *opregion = i915->display.opregion;
1246 if (!opregion)
1257 struct intel_opregion *opregion = i915->display.opregion;
1261 if (!opregion)
1264 if (opregion->acpi_notifier.notifier_call) {
1265 unregister_acpi_notifier(&opregion->acpi_notifier);
1266 opregion->acpi_notifier.notifier_call = NULL;
1272 struct intel_opregion *opregion = i915->display.opregion;
1274 if (!opregion)
1277 memunmap(opregion->header);
1278 if (opregion->rvda)
1279 memunmap(opregion->rvda);
1280 kfree(opregion);
1281 i915->display.opregion = NULL;
1287 struct intel_opregion *opregion = i915->display.opregion;
1289 if (opregion)
1290 seq_write(m, opregion->header, OPREGION_SIZE);