aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/udlfb/udlfb.h50
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
10struct dlfb_data { 14struct dlfb_data {
11 struct usb_device *udev; 15 struct usb_device *udev;
@@ -26,7 +30,6 @@ struct dlfb_data {
26}; 30};
27 31
28struct dlfb_video_mode { 32struct 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
41struct dlfb_video_mode dlfb_video_modes[MAX_VMODES]; 43struct dlfb_video_mode dlfb_video_modes[MAX_VMODES];
42 44
43static void dlfb_bulk_callback(struct urb *urb) 45static 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
51static int dlfb_bulk_msg(struct dlfb_data *dev_info, int len) 51static 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
71void dlfb_init_modes(void) 69void 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
112char *dlfb_set_register(char *bufptr, uint8_t reg, uint8_t val) 108char *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
124int dlfb_set_video_mode(struct dlfb_data *dev_info, int width, int height) 118int 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