diff options
-rw-r--r-- | drivers/staging/udlfb/udlfb.h | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/drivers/staging/udlfb/udlfb.h b/drivers/staging/udlfb/udlfb.h index 4affd4b4319e..70a165b46e54 100644 --- a/drivers/staging/udlfb/udlfb.h +++ b/drivers/staging/udlfb/udlfb.h | |||
@@ -1,11 +1,15 @@ | |||
1 | #define MAX_VMODES 4 | 1 | #ifndef UDLFB_H |
2 | #define FB_BPP 16 | 2 | #define UDLFB_H |
3 | 3 | ||
4 | #define STD_CHANNEL "\x57\xCD\xDC\xA7\x1C\x88\x5E\x15\x60\xFE\xC6\x97\x16\x3D\x47\xF2" | 4 | #define MAX_VMODES 4 |
5 | #define FB_BPP 16 | ||
5 | 6 | ||
6 | // as libdlo | 7 | #define STD_CHANNEL "\x57\xCD\xDC\xA7\x1C\x88\x5E\x15" \ |
7 | #define BUF_HIGH_WATER_MARK 1024 | 8 | "\x60\xFE\xC6\x97\x16\x3D\x47\xF2" |
8 | #define BUF_SIZE 64*1024 | 9 | |
10 | /* as libdlo */ | ||
11 | #define BUF_HIGH_WATER_MARK 1024 | ||
12 | #define BUF_SIZE (64*1024) | ||
9 | 13 | ||
10 | struct dlfb_data { | 14 | struct dlfb_data { |
11 | struct usb_device *udev; | 15 | struct usb_device *udev; |
@@ -26,7 +30,6 @@ struct dlfb_data { | |||
26 | }; | 30 | }; |
27 | 31 | ||
28 | struct dlfb_video_mode { | 32 | struct dlfb_video_mode { |
29 | |||
30 | uint8_t col; | 33 | uint8_t col; |
31 | uint32_t hclock; | 34 | uint32_t hclock; |
32 | uint32_t vclock; | 35 | uint32_t vclock; |
@@ -35,22 +38,18 @@ struct dlfb_video_mode { | |||
35 | uint8_t unknown2[6]; | 38 | uint8_t unknown2[6]; |
36 | uint16_t yres; | 39 | uint16_t yres; |
37 | uint8_t unknown3[4]; | 40 | uint8_t unknown3[4]; |
38 | |||
39 | } __attribute__ ((__packed__)); | 41 | } __attribute__ ((__packed__)); |
40 | 42 | ||
41 | struct dlfb_video_mode dlfb_video_modes[MAX_VMODES]; | 43 | struct dlfb_video_mode dlfb_video_modes[MAX_VMODES]; |
42 | 44 | ||
43 | static void dlfb_bulk_callback(struct urb *urb) | 45 | static void dlfb_bulk_callback(struct urb *urb) |
44 | { | 46 | { |
45 | |||
46 | struct dlfb_data *dev_info = urb->context; | 47 | struct dlfb_data *dev_info = urb->context; |
47 | complete(&dev_info->done); | 48 | complete(&dev_info->done); |
48 | |||
49 | } | 49 | } |
50 | 50 | ||
51 | static int dlfb_bulk_msg(struct dlfb_data *dev_info, int len) | 51 | static int dlfb_bulk_msg(struct dlfb_data *dev_info, int len) |
52 | { | 52 | { |
53 | |||
54 | int ret; | 53 | int ret; |
55 | 54 | ||
56 | init_completion(&dev_info->done); | 55 | init_completion(&dev_info->done); |
@@ -65,12 +64,10 @@ static int dlfb_bulk_msg(struct dlfb_data *dev_info, int len) | |||
65 | } | 64 | } |
66 | 65 | ||
67 | return dev_info->tx_urb->actual_length; | 66 | return dev_info->tx_urb->actual_length; |
68 | |||
69 | } | 67 | } |
70 | 68 | ||
71 | void dlfb_init_modes(void) | 69 | void dlfb_init_modes(void) |
72 | { | 70 | { |
73 | |||
74 | dlfb_video_modes[0].col = 0; | 71 | dlfb_video_modes[0].col = 0; |
75 | memcpy(&dlfb_video_modes[0].hclock, "\x20\x3C\x7A\xC9", 4); | 72 | memcpy(&dlfb_video_modes[0].hclock, "\x20\x3C\x7A\xC9", 4); |
76 | memcpy(&dlfb_video_modes[0].vclock, "\xF2\x6C\x48\xF9", 4); | 73 | memcpy(&dlfb_video_modes[0].vclock, "\xF2\x6C\x48\xF9", 4); |
@@ -106,24 +103,20 @@ void dlfb_init_modes(void) | |||
106 | memcpy(&dlfb_video_modes[3].unknown2, "\xC9\x4E\xFF\xFF\xFF\xF2", 6); | 103 | memcpy(&dlfb_video_modes[3].unknown2, "\xC9\x4E\xFF\xFF\xFF\xF2", 6); |
107 | dlfb_video_modes[3].yres = 1050; | 104 | dlfb_video_modes[3].yres = 1050; |
108 | memcpy(&dlfb_video_modes[3].unknown3, "\x04\x02\x1E\x5F", 4); | 105 | memcpy(&dlfb_video_modes[3].unknown3, "\x04\x02\x1E\x5F", 4); |
109 | |||
110 | } | 106 | } |
111 | 107 | ||
112 | char *dlfb_set_register(char *bufptr, uint8_t reg, uint8_t val) | 108 | char *dlfb_set_register(char *bufptr, uint8_t reg, uint8_t val) |
113 | { | 109 | { |
114 | |||
115 | *bufptr++ = 0xAF; | 110 | *bufptr++ = 0xAF; |
116 | *bufptr++ = 0x20; | 111 | *bufptr++ = 0x20; |
117 | *bufptr++ = reg; | 112 | *bufptr++ = reg; |
118 | *bufptr++ = val; | 113 | *bufptr++ = val; |
119 | 114 | ||
120 | return bufptr; | 115 | return bufptr; |
121 | |||
122 | } | 116 | } |
123 | 117 | ||
124 | int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height) | 118 | int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height) |
125 | { | 119 | { |
126 | |||
127 | int i, ret; | 120 | int i, ret; |
128 | unsigned char j; | 121 | unsigned char j; |
129 | char *bufptr = dev_info->buf; | 122 | char *bufptr = dev_info->buf; |
@@ -139,7 +132,7 @@ int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height) | |||
139 | 132 | ||
140 | dev_info->base8 = width * height * (FB_BPP / 8);; | 133 | dev_info->base8 = width * height * (FB_BPP / 8);; |
141 | 134 | ||
142 | // set encryption key (null) | 135 | /* set encryption key (null) */ |
143 | memcpy(dev_info->buf, STD_CHANNEL, 16); | 136 | memcpy(dev_info->buf, STD_CHANNEL, 16); |
144 | ret = | 137 | ret = |
145 | usb_control_msg(dev_info->udev, | 138 | usb_control_msg(dev_info->udev, |
@@ -148,10 +141,10 @@ int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height) | |||
148 | dev_info->buf, 16, 0); | 141 | dev_info->buf, 16, 0); |
149 | printk("ret control msg 1 (STD_CHANNEL): %d\n", ret); | 142 | printk("ret control msg 1 (STD_CHANNEL): %d\n", ret); |
150 | 143 | ||
151 | // set registers | 144 | /* set registers */ |
152 | bufptr = dlfb_set_register(bufptr, 0xFF, 0x00); | 145 | bufptr = dlfb_set_register(bufptr, 0xFF, 0x00); |
153 | 146 | ||
154 | // set addresses | 147 | /* set addresses */ |
155 | bufptr = | 148 | bufptr = |
156 | dlfb_set_register(bufptr, 0x20, | 149 | dlfb_set_register(bufptr, 0x20, |
157 | (char)(dev_info->base16 >> 16)); | 150 | (char)(dev_info->base16 >> 16)); |
@@ -172,24 +165,23 @@ int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height) | |||
172 | dlfb_set_register(bufptr, 0x28, | 165 | dlfb_set_register(bufptr, 0x28, |
173 | (char)(dev_info->base8)); | 166 | (char)(dev_info->base8)); |
174 | 167 | ||
175 | // set video mode | 168 | /* set video mode */ |
176 | vdata = (uint8_t *) & dlfb_video_modes[i]; | 169 | vdata = (uint8_t *)&dlfb_video_modes[i]; |
177 | for (j = 0; j < 29; j++) { | 170 | for (j = 0; j < 29; j++) |
178 | bufptr = dlfb_set_register(bufptr, j, vdata[j]); | 171 | bufptr = dlfb_set_register(bufptr, j, vdata[j]); |
179 | } | ||
180 | 172 | ||
181 | // blank | 173 | /* blank */ |
182 | bufptr = dlfb_set_register(bufptr, 0x1F, 0x00); | 174 | bufptr = dlfb_set_register(bufptr, 0x1F, 0x00); |
183 | 175 | ||
184 | // end registers | 176 | /* end registers */ |
185 | bufptr = dlfb_set_register(bufptr, 0xFF, 0xFF); | 177 | bufptr = dlfb_set_register(bufptr, 0xFF, 0xFF); |
186 | 178 | ||
187 | // send | 179 | /* send */ |
188 | ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf); | 180 | ret = dlfb_bulk_msg(dev_info, bufptr - dev_info->buf); |
189 | printk("ret bulk 2: %d %d\n", ret, | 181 | printk("ret bulk 2: %d %d\n", ret, |
190 | bufptr - dev_info->buf); | 182 | bufptr - dev_info->buf); |
191 | 183 | ||
192 | // flush | 184 | /* flush */ |
193 | ret = dlfb_bulk_msg(dev_info, 0); | 185 | ret = dlfb_bulk_msg(dev_info, 0); |
194 | printk("ret bulk 3: %d\n", ret); | 186 | printk("ret bulk 3: %d\n", ret); |
195 | 187 | ||
@@ -202,3 +194,5 @@ int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height) | |||
202 | 194 | ||
203 | return -1; | 195 | return -1; |
204 | } | 196 | } |
197 | |||
198 | #endif | ||