Commit 91762057 authored by Xi Wang's avatar Xi Wang Committed by Greg Kroah-Hartman

staging: olpc_dcon: ->read_status() API change

Change ->read_status() by separating the error handling and the
status bits.  This also fixes a signedness bug in dcon_interrupt()
that would break the error handling.
Signed-off-by: default avatarXi Wang <xi.wang@gmail.com>
Acked-by: default avatarAndres Salomon <dilinger@queued.net>
Cc: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent fb927284
...@@ -755,9 +755,9 @@ static int dcon_resume(struct i2c_client *client) ...@@ -755,9 +755,9 @@ static int dcon_resume(struct i2c_client *client)
irqreturn_t dcon_interrupt(int irq, void *id) irqreturn_t dcon_interrupt(int irq, void *id)
{ {
struct dcon_priv *dcon = id; struct dcon_priv *dcon = id;
int status = pdata->read_status(); u8 status;
if (status == -1) if (pdata->read_status(&status))
return IRQ_NONE; return IRQ_NONE;
switch (status & 3) { switch (status & 3) {
......
...@@ -84,7 +84,7 @@ struct dcon_platform_data { ...@@ -84,7 +84,7 @@ struct dcon_platform_data {
int (*init)(struct dcon_priv *); int (*init)(struct dcon_priv *);
void (*bus_stabilize_wiggle)(void); void (*bus_stabilize_wiggle)(void);
void (*set_dconload)(int); void (*set_dconload)(int);
u8 (*read_status)(void); int (*read_status)(u8 *);
}; };
#include <linux/interrupt.h> #include <linux/interrupt.h>
......
...@@ -183,17 +183,15 @@ static void dcon_set_dconload_1(int val) ...@@ -183,17 +183,15 @@ static void dcon_set_dconload_1(int val)
gpio_set_value(OLPC_GPIO_DCON_LOAD, val); gpio_set_value(OLPC_GPIO_DCON_LOAD, val);
} }
static u8 dcon_read_status_xo_1(void) static int dcon_read_status_xo_1(u8 *status)
{ {
u8 status; *status = gpio_get_value(OLPC_GPIO_DCON_STAT0);
*status |= gpio_get_value(OLPC_GPIO_DCON_STAT1) << 1;
status = gpio_get_value(OLPC_GPIO_DCON_STAT0);
status |= gpio_get_value(OLPC_GPIO_DCON_STAT1) << 1;
/* Clear the negative edge status for GPIO7 */ /* Clear the negative edge status for GPIO7 */
cs5535_gpio_set(OLPC_GPIO_DCON_IRQ, GPIO_NEGATIVE_EDGE_STS); cs5535_gpio_set(OLPC_GPIO_DCON_IRQ, GPIO_NEGATIVE_EDGE_STS);
return status; return 0;
} }
struct dcon_platform_data dcon_pdata_xo_1 = { struct dcon_platform_data dcon_pdata_xo_1 = {
......
...@@ -167,20 +167,18 @@ static void dcon_set_dconload_xo_1_5(int val) ...@@ -167,20 +167,18 @@ static void dcon_set_dconload_xo_1_5(int val)
gpio_set_value(VX855_GPIO(1), val); gpio_set_value(VX855_GPIO(1), val);
} }
static u8 dcon_read_status_xo_1_5(void) static int dcon_read_status_xo_1_5(u8 *status)
{ {
u8 status;
if (!dcon_was_irq()) if (!dcon_was_irq())
return -1; return -1;
/* i believe this is the same as "inb(0x44b) & 3" */ /* i believe this is the same as "inb(0x44b) & 3" */
status = gpio_get_value(VX855_GPI(10)); *status = gpio_get_value(VX855_GPI(10));
status |= gpio_get_value(VX855_GPI(11)) << 1; *status |= gpio_get_value(VX855_GPI(11)) << 1;
dcon_clear_irq(); dcon_clear_irq();
return status; return 0;
} }
struct dcon_platform_data dcon_pdata_xo_1_5 = { struct dcon_platform_data dcon_pdata_xo_1_5 = {
......
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