1 /*
2 Haiku S3 Trio64 DPMS functions adapted from the X.org Virge driver.
3
4 Copyright (C) 1994-1999 The XFree86 Project, Inc. All Rights Reserved.
5
6 Copyright 2008 Haiku, Inc. All rights reserved.
7 Distributed under the terms of the MIT license.
8
9 Authors:
10 Gerald Zajac 2007-2008
11 */
12
13
14 #include "accel.h"
15 #include "trio64.h"
16
17
18
19 uint32
Trio64_DPMSCapabilities(void)20 Trio64_DPMSCapabilities(void)
21 {
22 // Return DPMS modes supported by this device.
23
24 return B_DPMS_ON | B_DPMS_STAND_BY | B_DPMS_SUSPEND | B_DPMS_OFF;
25 }
26
27
28 uint32
Trio64_GetDPMSMode(void)29 Trio64_GetDPMSMode(void)
30 {
31 // Return the current DPMS mode.
32
33 // Note: I do not know whether the following code is correctly reading
34 // the current DPMS mode. I'm assuming that reading back the bits that
35 // were set by function Trio64_SetDPMSMode will give the current DPMS mode.
36
37 uint32 mode = B_DPMS_ON;
38
39 switch (ReadSeqReg(0x0d) & 0x70) {
40 case 0:
41 mode = B_DPMS_ON;
42 break;
43 case 0x10:
44 mode = B_DPMS_STAND_BY;
45 break;
46 case 0x40:
47 mode = B_DPMS_SUSPEND;
48 break;
49 case 0x50:
50 mode = B_DPMS_OFF;
51 break;
52 default:
53 TRACE("Unknown DPMS mode, reg sr0D: 0x%X\n", ReadSeqReg(0x0d));
54 }
55
56 TRACE("Trio64_GetDPMSMode() mode: %d\n", mode);
57 return mode;
58 }
59
60
61 status_t
Trio64_SetDPMSMode(uint32 dpmsMode)62 Trio64_SetDPMSMode(uint32 dpmsMode)
63 {
64 // Set the display into one of the Display Power Management modes,
65 // and return B_OK if successful, else return B_ERROR.
66
67 TRACE("Trio64_SetDPMSMode() mode: %d\n", dpmsMode);
68
69 WriteSeqReg(0x08, 0x06); // unlock extended sequencer regs
70
71 uint8 sr0D = ReadSeqReg(0x0d) & 0x03;
72
73 switch (dpmsMode) {
74 case B_DPMS_ON:
75 break;
76 case B_DPMS_STAND_BY:
77 sr0D |= 0x10;
78 break;
79 case B_DPMS_SUSPEND:
80 sr0D |= 0x40;
81 break;
82 case B_DPMS_OFF:
83 sr0D |= 0x50;
84 break;
85 default:
86 TRACE("Invalid DPMS mode %d\n", dpmsMode);
87 return B_ERROR;
88 }
89
90 WriteSeqReg(0x0d, sr0D);
91
92 return B_OK;
93 }
94