Commit 8aa4d96f authored by Daniel Drake's avatar Daniel Drake Committed by Florian Tobias Schandinat

viafb: Automatic OLPC XO-1.5 configuration

Currently, a long set of viafb options are needed to get the XO-1.5
laptop to output video (there is only 1 configuration that works, that
can't really be autodetected).

This patch automatically detects and configures viafb for the XO-1.5
laptop, meaning all that is required for working display is that
viafb is loaded.
Signed-off-by: default avatarDaniel Drake <dsd@laptop.org>
Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
parent e01255d6
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/stat.h> #include <linux/stat.h>
#include <linux/via-core.h> #include <linux/via-core.h>
#include <asm/olpc.h>
#define _MASTER_FILE #define _MASTER_FILE
#include "global.h" #include "global.h"
...@@ -1011,8 +1012,13 @@ static int __init parse_active_dev(void) ...@@ -1011,8 +1012,13 @@ static int __init parse_active_dev(void)
/* Note: The previous of active_dev is primary device, /* Note: The previous of active_dev is primary device,
and the following is secondary device. */ and the following is secondary device. */
if (!viafb_active_dev) { if (!viafb_active_dev) {
viafb_CRT_ON = STATE_ON; if (machine_is_olpc()) { /* LCD only */
viafb_SAMM_ON = STATE_OFF; viafb_LCD_ON = STATE_ON;
viafb_SAMM_ON = STATE_OFF;
} else {
viafb_CRT_ON = STATE_ON;
viafb_SAMM_ON = STATE_OFF;
}
} else if (!strcmp(viafb_active_dev, "CRT+DVI")) { } else if (!strcmp(viafb_active_dev, "CRT+DVI")) {
/* CRT+DVI */ /* CRT+DVI */
viafb_CRT_ON = STATE_ON; viafb_CRT_ON = STATE_ON;
...@@ -1665,8 +1671,13 @@ static int parse_mode(const char *str, u32 *xres, u32 *yres) ...@@ -1665,8 +1671,13 @@ static int parse_mode(const char *str, u32 *xres, u32 *yres)
char *ptr; char *ptr;
if (!str) { if (!str) {
*xres = 640; if (machine_is_olpc()) {
*yres = 480; *xres = 1200;
*yres = 900;
} else {
*xres = 640;
*yres = 480;
}
return 0; return 0;
} }
...@@ -1922,11 +1933,16 @@ void __devexit via_fb_pci_remove(struct pci_dev *pdev) ...@@ -1922,11 +1933,16 @@ void __devexit via_fb_pci_remove(struct pci_dev *pdev)
} }
#ifndef MODULE #ifndef MODULE
static int __init viafb_setup(char *options) static int __init viafb_setup(void)
{ {
char *this_opt; char *this_opt;
char *options;
DEBUG_MSG(KERN_INFO "viafb_setup!\n"); DEBUG_MSG(KERN_INFO "viafb_setup!\n");
if (fb_get_options("viafb", &options))
return -ENODEV;
if (!options || !*options) if (!options || !*options)
return 0; return 0;
...@@ -2000,11 +2016,16 @@ static int __init viafb_setup(char *options) ...@@ -2000,11 +2016,16 @@ static int __init viafb_setup(char *options)
int __init viafb_init(void) int __init viafb_init(void)
{ {
u32 dummy_x, dummy_y; u32 dummy_x, dummy_y;
int r;
if (machine_is_olpc())
/* Apply XO-1.5-specific configuration. */
viafb_lcd_panel_id = 23;
#ifndef MODULE #ifndef MODULE
char *option = NULL; r = viafb_setup();
if (fb_get_options("viafb", &option)) if (r < 0)
return -ENODEV; return r;
viafb_setup(option);
#endif #endif
if (parse_mode(viafb_mode, &dummy_x, &dummy_y) if (parse_mode(viafb_mode, &dummy_x, &dummy_y)
|| !viafb_get_mode(dummy_x, dummy_y) || !viafb_get_mode(dummy_x, dummy_y)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment