diff mbox

[v2] viafb: Automatic OLPC XO-1.5 configuration

Message ID 20110510195546.728739D401C@zog.reactivated.net (mailing list archive)
State Not Applicable
Headers show

Commit Message

Daniel Drake May 10, 2011, 7:55 p.m. UTC
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: Daniel Drake <dsd@laptop.org>
---
 drivers/video/via/viafbdev.c |   41 ++++++++++++++++++++++++++++++++---------
 1 files changed, 32 insertions(+), 9 deletions(-)

v2: incorporates all feedback from Florian

Comments

Florian Tobias Schandinat May 10, 2011, 9:11 p.m. UTC | #1
Hi Daniel,

On 05/10/2011 07:55 PM, Daniel Drake wrote:
> 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: Daniel Drake<dsd@laptop.org>
> ---
>   drivers/video/via/viafbdev.c |   41 ++++++++++++++++++++++++++++++++---------
>   1 files changed, 32 insertions(+), 9 deletions(-)
>
> v2: incorporates all feedback from Florian

Thanks, this looks much saner, just one little thing (see below)

>
> diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
> index 7b4390e..7a4dd0e 100644
> --- a/drivers/video/via/viafbdev.c
> +++ b/drivers/video/via/viafbdev.c
> @@ -24,6 +24,7 @@
>   #include<linux/slab.h>
>   #include<linux/stat.h>
>   #include<linux/via-core.h>
> +#include<asm/olpc.h>
>
>   #define _MASTER_FILE
>   #include "global.h"
> @@ -1011,8 +1012,13 @@ static int __init parse_active_dev(void)
>   	/*    Note: The previous of active_dev is primary device,
>   	   and the following is secondary device. */
>   	if (!viafb_active_dev) {
> -		viafb_CRT_ON = STATE_ON;
> -		viafb_SAMM_ON = STATE_OFF;
> +		if (machine_is_olpc()) { /* LCD only */
> +			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")) {
>   		/* CRT+DVI */
>   		viafb_CRT_ON = STATE_ON;
> @@ -1665,8 +1671,13 @@ static int parse_mode(const char *str, u32 *xres, u32 *yres)
>   	char *ptr;
>
>   	if (!str) {
> -		*xres = 640;
> -		*yres = 480;
> +		if (machine_is_olpc()) {
> +			*xres = 1200;
> +			*yres = 900;
> +		} else {
> +			*xres = 640;
> +			*yres = 480;
> +		}
>   		return 0;
>   	}
>
> @@ -1922,11 +1933,16 @@ void __devexit via_fb_pci_remove(struct pci_dev *pdev)
>   }
>
>   #ifndef MODULE
> -static int __init viafb_setup(char *options)
> +static int __init viafb_setup(void)
>   {
>   	char *this_opt;
> +	char *options;
> +
>   	DEBUG_MSG(KERN_INFO "viafb_setup!\n");
>
> +	if (fb_get_options("viafb",&options))
> +		return -ENODEV;
> +
>   	if (!options || !*options)
>   		return 0;
>
> @@ -2000,11 +2016,18 @@ static int __init viafb_setup(char *options)
>   int __init viafb_init(void)
>   {
>   	u32 dummy_x, dummy_y;
> +	int r;
> +
> +	if (machine_is_olpc()) {
> +		/* Apply XO-1.5-specific configuration. */
> +		viafb_lcd_panel_id = 23;
> +		viafb_bpp = 24;

Can we just drop the viafb_bpp bit?
32=24 (they are the same) is the default anyway and other color depths should 
also work on the OLPC.

> +	}
> +
>   #ifndef MODULE
> -	char *option = NULL;
> -	if (fb_get_options("viafb",&option))
> -		return -ENODEV;
> -	viafb_setup(option);
> +	r = viafb_setup();
> +	if (r<  0)
> +		return r;
>   #endif
>   	if (parse_mode(viafb_mode,&dummy_x,&dummy_y)
>   		|| !viafb_get_mode(dummy_x, dummy_y)


Thank you very much,

Florian Tobias Schandinat
--
To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
index 7b4390e..7a4dd0e 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/via/viafbdev.c
@@ -24,6 +24,7 @@ 
 #include <linux/slab.h>
 #include <linux/stat.h>
 #include <linux/via-core.h>
+#include <asm/olpc.h>
 
 #define _MASTER_FILE
 #include "global.h"
@@ -1011,8 +1012,13 @@  static int __init parse_active_dev(void)
 	/*    Note: The previous of active_dev is primary device,
 	   and the following is secondary device. */
 	if (!viafb_active_dev) {
-		viafb_CRT_ON = STATE_ON;
-		viafb_SAMM_ON = STATE_OFF;
+		if (machine_is_olpc()) { /* LCD only */
+			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")) {
 		/* CRT+DVI */
 		viafb_CRT_ON = STATE_ON;
@@ -1665,8 +1671,13 @@  static int parse_mode(const char *str, u32 *xres, u32 *yres)
 	char *ptr;
 
 	if (!str) {
-		*xres = 640;
-		*yres = 480;
+		if (machine_is_olpc()) {
+			*xres = 1200;
+			*yres = 900;
+		} else {
+			*xres = 640;
+			*yres = 480;
+		}
 		return 0;
 	}
 
@@ -1922,11 +1933,16 @@  void __devexit via_fb_pci_remove(struct pci_dev *pdev)
 }
 
 #ifndef MODULE
-static int __init viafb_setup(char *options)
+static int __init viafb_setup(void)
 {
 	char *this_opt;
+	char *options;
+
 	DEBUG_MSG(KERN_INFO "viafb_setup!\n");
 
+	if (fb_get_options("viafb", &options))
+		return -ENODEV;
+
 	if (!options || !*options)
 		return 0;
 
@@ -2000,11 +2016,18 @@  static int __init viafb_setup(char *options)
 int __init viafb_init(void)
 {
 	u32 dummy_x, dummy_y;
+	int r;
+
+	if (machine_is_olpc()) {
+		/* Apply XO-1.5-specific configuration. */
+		viafb_lcd_panel_id = 23;
+		viafb_bpp = 24;
+	}
+
 #ifndef MODULE
-	char *option = NULL;
-	if (fb_get_options("viafb", &option))
-		return -ENODEV;
-	viafb_setup(option);
+	r = viafb_setup();
+	if (r < 0)
+		return r;
 #endif
 	if (parse_mode(viafb_mode, &dummy_x, &dummy_y)
 		|| !viafb_get_mode(dummy_x, dummy_y)