diff options
author | Andres Salomon <dilinger@queued.net> | 2011-02-10 17:53:24 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-02-18 12:33:21 -0800 |
commit | 097cd83a4c312e1ae0d9c14526f846666cab4f3a (patch) | |
tree | 9c8229a0684c4ef8583245d25dd10eab2e009a44 /drivers/staging/olpc_dcon/olpc_dcon.c | |
parent | 8f2fb16a9cd015072b3da9038084930287e11985 (diff) |
staging: olpc_dcon: add config options for XO_1 and XO_1_5, drop hardcoded XO-1 stuff
This adds CONFIG_FB_OLPC_DCON_1 and CONFIG_FB_OLPC_DCON_1_5 options for
allowing selection of XO-1 and/or XO-1.5 DCON support. In the process,
it also forces the xo_1.c and xo_1_5.c files to build as separate units,
correctly selects between XO-1 and XO-1.5 at runtime, and adds some
hacks to allow xo_1_5.c to build.
This isn't the cleanest patch, but it'll get better as more global
variables are dropped.
Signed-off-by: Andres Salomon <dilinger@queued.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/olpc_dcon/olpc_dcon.c')
-rw-r--r-- | drivers/staging/olpc_dcon/olpc_dcon.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c b/drivers/staging/olpc_dcon/olpc_dcon.c index 52b7b306a575..96b6fd26791b 100644 --- a/drivers/staging/olpc_dcon/olpc_dcon.c +++ b/drivers/staging/olpc_dcon/olpc_dcon.c @@ -4,7 +4,7 @@ * Copyright © 2006-2007 Red Hat, Inc. * Copyright © 2006-2007 Advanced Micro Devices, Inc. * Copyright © 2009 VIA Technology, Inc. - * Copyright (c) 2010 Andres Salomon <dilinger@queued.net> + * Copyright (c) 2010-2011 Andres Salomon <dilinger@queued.net> * * This program is free software. You can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public @@ -44,13 +44,6 @@ module_param(noinit, int, 0444); static int useaa = 1; module_param(useaa, int, 0444); -struct dcon_platform_data { - int (*init)(void); - void (*bus_stabilize_wiggle)(void); - void (*set_dconload)(int); - u8 (*read_status)(void); -}; - static struct dcon_platform_data *pdata; struct dcon_priv { @@ -73,8 +66,6 @@ struct dcon_priv { /* I2C structures */ -static struct i2c_driver dcon_driver; - /* Platform devices */ static struct platform_device *dcon_device; @@ -82,10 +73,10 @@ static struct platform_device *dcon_device; static struct backlight_device *dcon_bl_dev; /* Current source, initialized at probe time */ -static int dcon_source; +int dcon_source; /* Desired source */ -static int dcon_pending; +int dcon_pending; /* Variables used during switches */ static int dcon_switched; @@ -693,6 +684,9 @@ static int dcon_probe(struct i2c_client *client, const struct i2c_device_id *id) struct dcon_priv *dcon; int rc, i, j; + if (!pdata) + return -ENXIO; + dcon = kzalloc(sizeof(*dcon), GFP_KERNEL); if (!dcon) return -ENOMEM; @@ -830,7 +824,7 @@ static int dcon_resume(struct i2c_client *client) #endif -static irqreturn_t dcon_interrupt(int irq, void *id) +irqreturn_t dcon_interrupt(int irq, void *id) { int status = pdata->read_status(); @@ -877,7 +871,7 @@ static const struct i2c_device_id dcon_idtable[] = { MODULE_DEVICE_TABLE(i2c, dcon_idtable); -static struct i2c_driver dcon_driver = { +struct i2c_driver dcon_driver = { .driver = { .name = "olpc_dcon", }, @@ -893,11 +887,17 @@ static struct i2c_driver dcon_driver = { #endif }; -#include "olpc_dcon_xo_1.c" - static int __init olpc_dcon_init(void) { - pdata = &dcon_pdata_xo_1; +#ifdef CONFIG_FB_OLPC_DCON_1_5 + /* XO-1.5 */ + if (olpc_board_at_least(olpc_board(0xd0))) + pdata = &dcon_pdata_xo_1_5; +#endif +#ifdef CONFIG_FB_OLPC_DCON_1 + if (!pdata) + pdata = &dcon_pdata_xo_1; +#endif return i2c_add_driver(&dcon_driver); } |