diff options
author | Jens Rottmann <JRottmann@LiPPERT-AT.de> | 2008-04-28 05:15:22 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-28 11:58:39 -0400 |
commit | 3888d4639e78802c4ec1086127124e890461b9e4 (patch) | |
tree | 5a02c224f4a106ef43ba32b30771fa0829fad0d3 | |
parent | 5fb2d929a070fd31b8fb8f74cef8694a09853fdb (diff) |
lxfb: extend PLL table to support dotclocks below 25 MHz
Extends the PLL frequency table of the AMD Geode-LX frame buffer driver to
make use of the DIV4 bit, thus adding support for dotclocks between 6 and 25
MHz. These are needed for small LCDs (e.g. 320x240). Also inserts some
intermediate steps between pre-existing frequencies.
Signed-off-by: Jens Rottmann <JRottmann@LiPPERT-AT.de>
Cc: Jordan Crouse <jordan.crouse@amd.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/video/geode/lxfb_ops.c | 112 |
1 files changed, 81 insertions, 31 deletions
diff --git a/drivers/video/geode/lxfb_ops.c b/drivers/video/geode/lxfb_ops.c index a52c180062c8..afe8e33ac1c2 100644 --- a/drivers/video/geode/lxfb_ops.c +++ b/drivers/video/geode/lxfb_ops.c | |||
@@ -35,35 +35,85 @@ static const struct { | |||
35 | unsigned int pllval; | 35 | unsigned int pllval; |
36 | unsigned int freq; | 36 | unsigned int freq; |
37 | } pll_table[] = { | 37 | } pll_table[] = { |
38 | { 0x000031AC, 24923 }, | 38 | { 0x000131AC, 6231 }, |
39 | { 0x0000215D, 25175 }, | 39 | { 0x0001215D, 6294 }, |
40 | { 0x00001087, 27000 }, | 40 | { 0x00011087, 6750 }, |
41 | { 0x0000216C, 28322 }, | 41 | { 0x0001216C, 7081 }, |
42 | { 0x0000218D, 28560 }, | 42 | { 0x0001218D, 7140 }, |
43 | { 0x000010C9, 31200 }, | 43 | { 0x000110C9, 7800 }, |
44 | { 0x00003147, 31500 }, | 44 | { 0x00013147, 7875 }, |
45 | { 0x000010A7, 33032 }, | 45 | { 0x000110A7, 8258 }, |
46 | { 0x00002159, 35112 }, | 46 | { 0x00012159, 8778 }, |
47 | { 0x00004249, 35500 }, | 47 | { 0x00014249, 8875 }, |
48 | { 0x00000057, 36000 }, | 48 | { 0x00010057, 9000 }, |
49 | { 0x0000219A, 37889 }, | 49 | { 0x0001219A, 9472 }, |
50 | { 0x00002158, 39168 }, | 50 | { 0x00012158, 9792 }, |
51 | { 0x00000045, 40000 }, | 51 | { 0x00010045, 10000 }, |
52 | { 0x00000089, 43163 }, | 52 | { 0x00010089, 10791 }, |
53 | { 0x000010E7, 44900 }, | 53 | { 0x000110E7, 11225 }, |
54 | { 0x00002136, 45720 }, | 54 | { 0x00012136, 11430 }, |
55 | { 0x00003207, 49500 }, | 55 | { 0x00013207, 12375 }, |
56 | { 0x00002187, 50000 }, | 56 | { 0x00012187, 12500 }, |
57 | { 0x00004286, 56250 }, | 57 | { 0x00014286, 14063 }, |
58 | { 0x000010E5, 60065 }, | 58 | { 0x000110E5, 15016 }, |
59 | { 0x00004214, 65000 }, | 59 | { 0x00014214, 16250 }, |
60 | { 0x00001105, 68179 }, | 60 | { 0x00011105, 17045 }, |
61 | { 0x000031E4, 74250 }, | 61 | { 0x000131E4, 18563 }, |
62 | { 0x00003183, 75000 }, | 62 | { 0x00013183, 18750 }, |
63 | { 0x00004284, 78750 }, | 63 | { 0x00014284, 19688 }, |
64 | { 0x00001104, 81600 }, | 64 | { 0x00011104, 20400 }, |
65 | { 0x00006363, 94500 }, | 65 | { 0x00016363, 23625 }, |
66 | { 0x00005303, 97520 }, | 66 | { 0x00015303, 24380 }, |
67 | { 0x000031AC, 24923 }, | ||
68 | { 0x0000215D, 25175 }, | ||
69 | { 0x00001087, 27000 }, | ||
70 | { 0x0000216C, 28322 }, | ||
71 | { 0x0000218D, 28560 }, | ||
72 | { 0x00010041, 29913 }, | ||
73 | { 0x000010C9, 31200 }, | ||
74 | { 0x00003147, 31500 }, | ||
75 | { 0x000141A1, 32400 }, | ||
76 | { 0x000010A7, 33032 }, | ||
77 | { 0x00012182, 33375 }, | ||
78 | { 0x000141B1, 33750 }, | ||
79 | { 0x00002159, 35112 }, | ||
80 | { 0x00004249, 35500 }, | ||
81 | { 0x00000057, 36000 }, | ||
82 | { 0x000141E1, 37125 }, | ||
83 | { 0x0000219A, 37889 }, | ||
84 | { 0x00002158, 39168 }, | ||
85 | { 0x00000045, 40000 }, | ||
86 | { 0x000131A1, 40500 }, | ||
87 | { 0x00010061, 42301 }, | ||
88 | { 0x00000089, 43163 }, | ||
89 | { 0x00012151, 43875 }, | ||
90 | { 0x000010E7, 44900 }, | ||
91 | { 0x00002136, 45720 }, | ||
92 | { 0x000152E1, 47250 }, | ||
93 | { 0x00010071, 48000 }, | ||
94 | { 0x00003207, 49500 }, | ||
95 | { 0x00002187, 50000 }, | ||
96 | { 0x00014291, 50625 }, | ||
97 | { 0x00011101, 51188 }, | ||
98 | { 0x00017481, 54563 }, | ||
99 | { 0x00004286, 56250 }, | ||
100 | { 0x00014170, 57375 }, | ||
101 | { 0x00016210, 58500 }, | ||
102 | { 0x000010E5, 60065 }, | ||
103 | { 0x00013140, 62796 }, | ||
104 | { 0x00004214, 65000 }, | ||
105 | { 0x00016250, 65250 }, | ||
106 | { 0x00001105, 68179 }, | ||
107 | { 0x000141C0, 69600 }, | ||
108 | { 0x00015220, 70160 }, | ||
109 | { 0x00010050, 72000 }, | ||
110 | { 0x000031E4, 74250 }, | ||
111 | { 0x00003183, 75000 }, | ||
112 | { 0x00004284, 78750 }, | ||
113 | { 0x00012130, 80052 }, | ||
114 | { 0x00001104, 81600 }, | ||
115 | { 0x00006363, 94500 }, | ||
116 | { 0x00005303, 97520 }, | ||
67 | { 0x00002183, 100187 }, | 117 | { 0x00002183, 100187 }, |
68 | { 0x00002122, 101420 }, | 118 | { 0x00002122, 101420 }, |
69 | { 0x00001081, 108000 }, | 119 | { 0x00001081, 108000 }, |
@@ -138,7 +188,7 @@ static void lx_set_clock(struct fb_info *info) | |||
138 | unsigned int diff, min, best = 0; | 188 | unsigned int diff, min, best = 0; |
139 | unsigned int freq, i; | 189 | unsigned int freq, i; |
140 | 190 | ||
141 | freq = (unsigned int) (0x3b9aca00 / info->var.pixclock); | 191 | freq = (unsigned int) (1000000000 / info->var.pixclock); |
142 | 192 | ||
143 | min = abs(pll_table[0].freq - freq); | 193 | min = abs(pll_table[0].freq - freq); |
144 | 194 | ||
@@ -150,7 +200,7 @@ static void lx_set_clock(struct fb_info *info) | |||
150 | } | 200 | } |
151 | } | 201 | } |
152 | 202 | ||
153 | lx_set_dotpll(pll_table[best].pllval & 0x7FFF); | 203 | lx_set_dotpll(pll_table[best].pllval & 0x00017FFF); |
154 | } | 204 | } |
155 | 205 | ||
156 | static void lx_graphics_disable(struct fb_info *info) | 206 | static void lx_graphics_disable(struct fb_info *info) |