Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
54 | pj | 1 | /* |
2 | * ramdac.c: |
||
3 | * |
||
4 | * This file contains RAMDAC definitions of type DacMethods for |
||
5 | * various DACs. |
||
6 | * |
||
7 | * Note that the restoreState function is the only function that |
||
8 | * should program the DAC registers; the initializeState function |
||
9 | * should merely define the values that will be written in a |
||
10 | * subsequent call of the restore funtion. |
||
11 | */ |
||
12 | |||
13 | #include <stdlib.h> |
||
14 | //#include <stdio.h> |
||
15 | #include "libvga.h" |
||
16 | |||
17 | #include "timing.h" |
||
18 | #include "vgaregs.h" |
||
19 | #include "driver.h" /* for __svgalib_driver_report */ |
||
20 | #include "ramdac.h" |
||
21 | |||
22 | /* |
||
23 | * The following function probes the DACs in daclist, which must be |
||
24 | * terminated by NULL. It returns the detected DAC if successful, NULL |
||
25 | * otherwise. The detected DAC is also initialized. |
||
26 | */ |
||
27 | |||
28 | DacMethods *__svgalib_probeDacs(DacMethods ** dacs_to_probe) |
||
29 | { |
||
30 | /* Probe for a RAMDAC. */ |
||
31 | for (;;) { |
||
32 | DacMethods *dac; |
||
33 | dac = *dacs_to_probe; |
||
34 | if (dac == NULL) |
||
35 | /* None found. */ |
||
36 | return NULL; |
||
37 | if (dac->probe()) { |
||
38 | dac->initialize(); |
||
39 | return dac; |
||
40 | } |
||
41 | dacs_to_probe++; |
||
42 | } |
||
43 | } |
||
44 | |||
45 | int __svgalib_setDacSpeed(int dacspeed, int defspeed) |
||
46 | { |
||
47 | if (!dacspeed) { |
||
48 | if (__svgalib_driver_report) |
||
49 | printk(KERN_INFO "svgalib: Assuming %dMHz DAC.\n", defspeed / 1000); |
||
50 | dacspeed = defspeed; |
||
51 | } else { |
||
52 | if (__svgalib_driver_report) |
||
53 | printk(KERN_INFO "svgalib: DAC speed set to %dMHz.\n", dacspeed / 1000); |
||
54 | } |
||
55 | return dacspeed; |
||
56 | } |
||
57 | |||
58 | #ifndef __OPTIMIZE__ /* otherwise inlined from ramdac.h */ |
||
59 | void _ramdac_dactocomm(void) |
||
60 | { |
||
61 | inb(PEL_IW); |
||
62 | inb(PEL_MSK); |
||
63 | inb(PEL_MSK); |
||
64 | inb(PEL_MSK); |
||
65 | inb(PEL_MSK); |
||
66 | } |
||
67 | |||
68 | void _ramdac_dactopel(void) |
||
69 | { |
||
70 | inb(PEL_IW); |
||
71 | } |
||
72 | |||
73 | unsigned char _ramdac_setcomm(unsigned char data) |
||
74 | { |
||
75 | _ramdac_dactocomm(); |
||
76 | outb(PEL_MSK, data); |
||
77 | _ramdac_dactocomm(); |
||
78 | return inb(PEL_MSK); |
||
79 | } |
||
80 | #endif |
||
81 | |||
82 | /* |
||
83 | * List of all DACs. |
||
84 | */ |
||
85 | |||
86 | DacMethods *__svgalib_all_dacs[] = |
||
87 | { |
||
88 | #ifdef INCLUDE_NORMAL_DAC |
||
89 | &__svgalib_normal_dac_methods, |
||
90 | #endif |
||
91 | #ifdef INCLUDE_S3_SDAC_DAC |
||
92 | &__svgalib_S3_SDAC_methods, |
||
93 | #endif |
||
94 | #ifdef INCLUDE_S3_GENDAC_DAC |
||
95 | &__svgalib_S3_GENDAC_methods, |
||
96 | #endif |
||
97 | #ifdef INCLUDE_S3_TRIO64_DAC |
||
98 | &__svgalib_Trio64_methods, |
||
99 | #endif |
||
100 | #ifdef INCLUDE_SIERRA_DAC |
||
101 | &__svgalib_Sierra_32K_methods, |
||
102 | #endif |
||
103 | #ifdef INCLUDE_SC15025_DAC |
||
104 | &__svgalib_SC15025_methods, |
||
105 | #endif |
||
106 | #ifdef INCLUDE_ATT20C490_DAC |
||
107 | &__svgalib_ATT20C490_methods, |
||
108 | #endif |
||
109 | #ifdef INCLUDE_ATT20C498_DAC |
||
110 | &__svgalib_ATT20C498_methods, |
||
111 | #endif |
||
112 | #ifdef INCLUDE_ICW_DAC |
||
113 | &__svgalib_ICW_methods, |
||
114 | #endif |
||
115 | #ifdef INCLUDE_SC1148X_DAC |
||
116 | &__svgalib_SC1148X_methods, |
||
117 | #endif |
||
118 | #ifdef INCLUDE_ICS_GENDAC_DAC |
||
119 | &__svgalib_ICS_GENDAC_methods, |
||
120 | #endif |
||
121 | NULL |
||
122 | }; |