]> git.karo-electronics.de Git - linux-beck.git/commitdiff
staging: olpc_dcon: ->read_status() API change
authorXi Wang <xi.wang@gmail.com>
Fri, 2 Dec 2011 21:28:43 +0000 (16:28 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 8 Dec 2011 23:00:43 +0000 (15:00 -0800)
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>
drivers/staging/olpc_dcon/olpc_dcon.c
drivers/staging/olpc_dcon/olpc_dcon.h
drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c

index af24ddfb58c9f39f8b6668c6da3ecace25bf76bd..c379bba4c1784c2948f62c4c6d3c8f55ebeb5d72 100644 (file)
@@ -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) {
index 0264c94375aa4fbe7728ffedf45cef9c0c4019e8..167a41778be61ef3dd11474e615143ac90f987e8 100644 (file)
@@ -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>
index 2245213df6078559b1a564f8b451b0ac732adf4c..cb6ce0cf92a03a3a571c491e77269b94d8ebae31 100644 (file)
@@ -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 = {
index a6a6cf2adc4d83439ccb68979a14038876aba464..69415eec425c8a3c18876f8304a87d0f3a115567 100644 (file)
@@ -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 = {