aboutsummaryrefslogtreecommitdiff
path: root/util-linux/fbset.c
diff options
context:
space:
mode:
authorLinus Walleij <triad@df.lth.se>2012-07-01 22:34:42 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2012-07-07 19:58:15 +0200
commitb5c7220e7b2b6611fe5beca494c67bfe51fcfafb (patch)
treece818cd017121a94e49fcabecfdcdd169279f4db /util-linux/fbset.c
parent5345b8db8b30326d9ab0db9ac11fde9e7b9d3686 (diff)
downloadbusybox-w32-b5c7220e7b2b6611fe5beca494c67bfe51fcfafb.tar.gz
busybox-w32-b5c7220e7b2b6611fe5beca494c67bfe51fcfafb.tar.bz2
busybox-w32-b5c7220e7b2b6611fe5beca494c67bfe51fcfafb.zip
fbset: respect rgba configuration lines in fb.modes
The fbset utility would not respect "rgba" config entries in the fb.modes file such as this (for the ARM Integrator/CP): mode "640x480-60-clcd" # D: 25.175 MHz, H: 31.469 kHz, V: 59.94 Hz geometry 640 480 640 480 16 timings 39722 48 16 33 10 96 2 rgba 5/10,5/5,5/0,1/15 endmode This is important especially for this ARGB5551 device which is hopeless to configure otherwise. I noticed this lacking feature after the TI "fbtest" program managed to set up the the colormode correctly. Signed-off-by: Linus Walleij <triad@df.lth.se> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'util-linux/fbset.c')
-rw-r--r--util-linux/fbset.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/util-linux/fbset.c b/util-linux/fbset.c
index 196c2aa24..e9aacce4f 100644
--- a/util-linux/fbset.c
+++ b/util-linux/fbset.c
@@ -271,7 +271,7 @@ static int read_mode_db(struct fb_var_screeninfo *base, const char *fn,
271 } 271 }
272 p = token[1]; 272 p = token[1];
273 i = index_in_strings( 273 i = index_in_strings(
274 "geometry\0timings\0interlaced\0double\0vsync\0hsync\0csync\0extsync\0", 274 "geometry\0timings\0interlaced\0double\0vsync\0hsync\0csync\0extsync\0rgba\0",
275 token[0]); 275 token[0]);
276 switch (i) { 276 switch (i) {
277 case 0: 277 case 0:
@@ -342,6 +342,30 @@ static int read_mode_db(struct fb_var_screeninfo *base, const char *fn,
342 ss(&base->sync, FB_SYNC_EXT, p, "false"); 342 ss(&base->sync, FB_SYNC_EXT, p, "false");
343//bb_info_msg("EXTSYNC[%s]", p); 343//bb_info_msg("EXTSYNC[%s]", p);
344 break; 344 break;
345 case 8: {
346 int red_offset, red_length;
347 int green_offset, green_length;
348 int blue_offset, blue_length;
349 int transp_offset, transp_length;
350
351 sscanf(p, "%d/%d,%d/%d,%d/%d,%d/%d",
352 &red_offset, &red_length,
353 &green_offset, &green_length,
354 &blue_offset, &blue_length,
355 &transp_offset, &transp_length);
356 base->red.offset = red_offset;
357 base->red.length = red_length;
358 base->red.msb_right = 0;
359 base->green.offset = green_offset;
360 base->green.length = green_length;
361 base->green.msb_right = 0;
362 base->blue.offset = blue_offset;
363 base->blue.length = blue_length;
364 base->blue.msb_right = 0;
365 base->transp.offset = transp_offset;
366 base->transp.length = transp_length;
367 base->transp.msb_right = 0;
368 }
345 } 369 }
346 } 370 }
347 return 0; 371 return 0;