opregion.c (d0034a7a4ac7fae708146ac0059b9c47a1543f0d) opregion.c (f71635e893c3832790484f2e22b8d5825cc6ce1c)
1/*
2 * Copyright 2011 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the

--- 133 unchanged lines hidden (view full) ---

142#define ASLE_PFMB_PWM_VALID (1<<31)
143
144#define ASLE_CBLV_VALID (1<<31)
145
146static struct psb_intel_opregion *system_opregion;
147
148static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
149{
1/*
2 * Copyright 2011 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the

--- 133 unchanged lines hidden (view full) ---

142#define ASLE_PFMB_PWM_VALID (1<<31)
143
144#define ASLE_CBLV_VALID (1<<31)
145
146static struct psb_intel_opregion *system_opregion;
147
148static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
149{
150 struct drm_psb_private *dev_priv = dev->dev_private;
150 struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
151 struct opregion_asle *asle = dev_priv->opregion.asle;
152 struct backlight_device *bd = dev_priv->backlight_device;
153
154 DRM_DEBUG_DRIVER("asle set backlight %x\n", bclp);
155
156 if (!(bclp & ASLE_BCLP_VALID))
157 return ASLE_BACKLIGHT_FAILED;
158

--- 34 unchanged lines hidden (view full) ---

193 asle_stat |= asle_set_backlight(dev_priv->dev, asle->bclp);
194
195 asle->aslc = asle_stat;
196
197}
198
199void psb_intel_opregion_asle_intr(struct drm_device *dev)
200{
151 struct opregion_asle *asle = dev_priv->opregion.asle;
152 struct backlight_device *bd = dev_priv->backlight_device;
153
154 DRM_DEBUG_DRIVER("asle set backlight %x\n", bclp);
155
156 if (!(bclp & ASLE_BCLP_VALID))
157 return ASLE_BACKLIGHT_FAILED;
158

--- 34 unchanged lines hidden (view full) ---

193 asle_stat |= asle_set_backlight(dev_priv->dev, asle->bclp);
194
195 asle->aslc = asle_stat;
196
197}
198
199void psb_intel_opregion_asle_intr(struct drm_device *dev)
200{
201 struct drm_psb_private *dev_priv = dev->dev_private;
201 struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
202
203 if (dev_priv->opregion.asle)
204 schedule_work(&dev_priv->opregion.asle_work);
205}
206
207#define ASLE_ALS_EN (1<<0)
208#define ASLE_BLC_EN (1<<1)
209#define ASLE_PFIT_EN (1<<2)
210#define ASLE_PFMB_EN (1<<3)
211
212void psb_intel_opregion_enable_asle(struct drm_device *dev)
213{
202
203 if (dev_priv->opregion.asle)
204 schedule_work(&dev_priv->opregion.asle_work);
205}
206
207#define ASLE_ALS_EN (1<<0)
208#define ASLE_BLC_EN (1<<1)
209#define ASLE_PFIT_EN (1<<2)
210#define ASLE_PFMB_EN (1<<3)
211
212void psb_intel_opregion_enable_asle(struct drm_device *dev)
213{
214 struct drm_psb_private *dev_priv = dev->dev_private;
214 struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
215 struct opregion_asle *asle = dev_priv->opregion.asle;
216
217 if (asle && system_opregion ) {
218 /* Don't do this on Medfield or other non PC like devices, they
219 use the bit for something different altogether */
220 psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE);
221 psb_enable_pipestat(dev_priv, 1, PIPE_LEGACY_BLC_EVENT_ENABLE);
222

--- 30 unchanged lines hidden (view full) ---

253}
254
255static struct notifier_block psb_intel_opregion_notifier = {
256 .notifier_call = psb_intel_opregion_video_event,
257};
258
259void psb_intel_opregion_init(struct drm_device *dev)
260{
215 struct opregion_asle *asle = dev_priv->opregion.asle;
216
217 if (asle && system_opregion ) {
218 /* Don't do this on Medfield or other non PC like devices, they
219 use the bit for something different altogether */
220 psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE);
221 psb_enable_pipestat(dev_priv, 1, PIPE_LEGACY_BLC_EVENT_ENABLE);
222

--- 30 unchanged lines hidden (view full) ---

253}
254
255static struct notifier_block psb_intel_opregion_notifier = {
256 .notifier_call = psb_intel_opregion_video_event,
257};
258
259void psb_intel_opregion_init(struct drm_device *dev)
260{
261 struct drm_psb_private *dev_priv = dev->dev_private;
261 struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
262 struct psb_intel_opregion *opregion = &dev_priv->opregion;
263
264 if (!opregion->header)
265 return;
266
267 if (opregion->acpi) {
268 /* Notify BIOS we are ready to handle ACPI video ext notifs.
269 * Right now, all the events are handled by the ACPI video
270 * module. We don't actually need to do anything with them. */
271 opregion->acpi->csts = 0;
272 opregion->acpi->drdy = 1;
273
274 system_opregion = opregion;
275 register_acpi_notifier(&psb_intel_opregion_notifier);
276 }
277}
278
279void psb_intel_opregion_fini(struct drm_device *dev)
280{
262 struct psb_intel_opregion *opregion = &dev_priv->opregion;
263
264 if (!opregion->header)
265 return;
266
267 if (opregion->acpi) {
268 /* Notify BIOS we are ready to handle ACPI video ext notifs.
269 * Right now, all the events are handled by the ACPI video
270 * module. We don't actually need to do anything with them. */
271 opregion->acpi->csts = 0;
272 opregion->acpi->drdy = 1;
273
274 system_opregion = opregion;
275 register_acpi_notifier(&psb_intel_opregion_notifier);
276 }
277}
278
279void psb_intel_opregion_fini(struct drm_device *dev)
280{
281 struct drm_psb_private *dev_priv = dev->dev_private;
281 struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
282 struct psb_intel_opregion *opregion = &dev_priv->opregion;
283
284 if (!opregion->header)
285 return;
286
287 if (opregion->acpi) {
288 opregion->acpi->drdy = 0;
289

--- 9 unchanged lines hidden (view full) ---

299 opregion->acpi = NULL;
300 opregion->swsci = NULL;
301 opregion->asle = NULL;
302 opregion->vbt = NULL;
303}
304
305int psb_intel_opregion_setup(struct drm_device *dev)
306{
282 struct psb_intel_opregion *opregion = &dev_priv->opregion;
283
284 if (!opregion->header)
285 return;
286
287 if (opregion->acpi) {
288 opregion->acpi->drdy = 0;
289

--- 9 unchanged lines hidden (view full) ---

299 opregion->acpi = NULL;
300 opregion->swsci = NULL;
301 opregion->asle = NULL;
302 opregion->vbt = NULL;
303}
304
305int psb_intel_opregion_setup(struct drm_device *dev)
306{
307 struct drm_psb_private *dev_priv = dev->dev_private;
307 struct drm_psb_private *dev_priv = to_drm_psb_private(dev);
308 struct pci_dev *pdev = to_pci_dev(dev->dev);
309 struct psb_intel_opregion *opregion = &dev_priv->opregion;
310 u32 opregion_phy, mboxes;
311 void __iomem *base;
312 int err = 0;
313
314 pci_read_config_dword(pdev, PCI_ASLS, &opregion_phy);
315 if (opregion_phy == 0) {

--- 40 unchanged lines hidden ---
308 struct pci_dev *pdev = to_pci_dev(dev->dev);
309 struct psb_intel_opregion *opregion = &dev_priv->opregion;
310 u32 opregion_phy, mboxes;
311 void __iomem *base;
312 int err = 0;
313
314 pci_read_config_dword(pdev, PCI_ASLS, &opregion_phy);
315 if (opregion_phy == 0) {

--- 40 unchanged lines hidden ---