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: Xi Wang <xi.wang@gmail.com> Acked-by: Andres Salomon <dilinger@queued.net> Cc: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
fb927284e4
commit
91762057f4
|
@ -755,9 +755,9 @@ static int dcon_resume(struct i2c_client *client)
|
|||
irqreturn_t dcon_interrupt(int irq, void *id)
|
||||
{
|
||||
struct dcon_priv *dcon = id;
|
||||
int status = pdata->read_status();
|
||||
u8 status;
|
||||
|
||||
if (status == -1)
|
||||
if (pdata->read_status(&status))
|
||||
return IRQ_NONE;
|
||||
|
||||
switch (status & 3) {
|
||||
|
|
|
@ -84,7 +84,7 @@ struct dcon_platform_data {
|
|||
int (*init)(struct dcon_priv *);
|
||||
void (*bus_stabilize_wiggle)(void);
|
||||
void (*set_dconload)(int);
|
||||
u8 (*read_status)(void);
|
||||
int (*read_status)(u8 *);
|
||||
};
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
|
|
@ -183,17 +183,15 @@ static void dcon_set_dconload_1(int 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 */
|
||||
cs5535_gpio_set(OLPC_GPIO_DCON_IRQ, GPIO_NEGATIVE_EDGE_STS);
|
||||
|
||||
return status;
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct dcon_platform_data dcon_pdata_xo_1 = {
|
||||
|
|
|
@ -167,20 +167,18 @@ static void dcon_set_dconload_xo_1_5(int 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())
|
||||
return -1;
|
||||
|
||||
/* i believe this is the same as "inb(0x44b) & 3" */
|
||||
status = gpio_get_value(VX855_GPI(10));
|
||||
status |= gpio_get_value(VX855_GPI(11)) << 1;
|
||||
*status = gpio_get_value(VX855_GPI(10));
|
||||
*status |= gpio_get_value(VX855_GPI(11)) << 1;
|
||||
|
||||
dcon_clear_irq();
|
||||
|
||||
return status;
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct dcon_platform_data dcon_pdata_xo_1_5 = {
|
||||
|
|
Loading…
Reference in New Issue