Re: [PATCH v2] staging: olpc_dcon: ->read_status() API change

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Perfect, thank you!

Acked-by: Andres Salomon <dilinger@xxxxxxxxxx>


On Thu, 1 Dec 2011 19:54:55 -0500
Xi Wang <xi.wang@xxxxxxxxx> wrote:

> Change ->read_status() by separating the error handling and the
> status bits.  This also fixes a signedness bug in dcon_interrupt().
> 
> Signed-off-by: Xi Wang <xi.wang@xxxxxxxxx>
> Cc: Andres Salomon <dilinger@xxxxxxxxxx>
> ---
>  drivers/staging/olpc_dcon/olpc_dcon.c        |    4 ++--
>  drivers/staging/olpc_dcon/olpc_dcon.h        |    2 +-
>  drivers/staging/olpc_dcon/olpc_dcon_xo_1.c   |   10 ++++------
>  drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c |   10 ++++------
>  4 files changed, 11 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/staging/olpc_dcon/olpc_dcon.c
> b/drivers/staging/olpc_dcon/olpc_dcon.c index af24ddf..c379bba 100644
> --- a/drivers/staging/olpc_dcon/olpc_dcon.c
> +++ b/drivers/staging/olpc_dcon/olpc_dcon.c
> @@ -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) == -1)
>  		return IRQ_NONE;
>  
>  	switch (status & 3) {
> diff --git a/drivers/staging/olpc_dcon/olpc_dcon.h
> b/drivers/staging/olpc_dcon/olpc_dcon.h index 0264c94..167a417 100644
> --- a/drivers/staging/olpc_dcon/olpc_dcon.h
> +++ b/drivers/staging/olpc_dcon/olpc_dcon.h
> @@ -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>
> diff --git a/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
> b/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c index 2245213..cb6ce0c
> 100644 --- a/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
> +++ b/drivers/staging/olpc_dcon/olpc_dcon_xo_1.c
> @@ -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 = {
> diff --git a/drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c
> b/drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c index a6a6cf2..69415ee
> 100644 --- a/drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c
> +++ b/drivers/staging/olpc_dcon/olpc_dcon_xo_1_5.c
> @@ -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 = {

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel


[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux