2010-01-04 13:08:35

by Eirik Aanonsen

[permalink] [raw]
Subject: [PATCH 1/1] atmel uaba : Adding invert vbus_pin

Adding vbus_pin_inverted so that the usb detect pin can be active high or low.
This because depending on HW implementation it is better to have active low.
Also replaced the pio_get_value(udc->vbus_pin); with a call to vbus_is_present(udc);

Signed-off-by: Eirik Aanonsen <[email protected]>
---
drivers/usb/gadget/atmel_usba_udc.c | 16 +++++++++++++---
drivers/usb/gadget/atmel_usba_udc.h | 1 +
include/linux/usb/atmel_usba_udc.h | 1 +
3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
index 4e970cf..1c469d4 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -320,8 +320,17 @@ static inline void usba_cleanup_debugfs(struct usba_udc *udc)
static int vbus_is_present(struct usba_udc *udc)
{
if (gpio_is_valid(udc->vbus_pin))
- return gpio_get_value(udc->vbus_pin);
-
+ {
+ if(udc->vbus_pin_inverted)
+ {
+ if( gpio_get_value(udc->vbus_pin) == 1)
+ return 0;
+ else
+ return 1;
+ }
+ else
+ return gpio_get_value(udc->vbus_pin);
+ }
/* No Vbus detection: Assume always present */
return 1;
}
@@ -1763,7 +1772,7 @@ static irqreturn_t usba_vbus_irq(int irq, void *devid)
if (!udc->driver)
goto out;

- vbus = gpio_get_value(udc->vbus_pin);
+ vbus = vbus_is_present(udc);
if (vbus != udc->vbus_prev) {
if (vbus) {
toggle_bias(1);
@@ -2000,6 +2009,7 @@ static int __init usba_udc_probe(struct platform_device *pdev)
if (gpio_is_valid(pdata->vbus_pin)) {
if (!gpio_request(pdata->vbus_pin, "atmel_usba_udc")) {
udc->vbus_pin = pdata->vbus_pin;
+ udc->vbus_pin_inverted = pdata->vbus_pin_inverted;

ret = request_irq(gpio_to_irq(udc->vbus_pin),
usba_vbus_irq, 0,
diff --git a/drivers/usb/gadget/atmel_usba_udc.h b/drivers/usb/gadget/atmel_usba_udc.h
index f7baea3..88a2e07 100644
--- a/drivers/usb/gadget/atmel_usba_udc.h
+++ b/drivers/usb/gadget/atmel_usba_udc.h
@@ -323,6 +323,7 @@ struct usba_udc {
struct platform_device *pdev;
int irq;
int vbus_pin;
+ int vbus_pin_inverted;
struct clk *pclk;
struct clk *hclk;

diff --git a/include/linux/usb/atmel_usba_udc.h b/include/linux/usb/atmel_usba_udc.h
index 6311fa2..643c4c5 100644
--- a/include/linux/usb/atmel_usba_udc.h
+++ b/include/linux/usb/atmel_usba_udc.h
@@ -15,6 +15,7 @@ struct usba_ep_data {

struct usba_platform_data {
int vbus_pin;
+ unsigned char vbus_pin_inverted;
int num_ep;
struct usba_ep_data ep[0];
};
--
1.5.4.3


2010-01-04 21:37:31

by Sergei Shtylyov

[permalink] [raw]
Subject: Re: [PATCH 1/1] atmel uaba : Adding invert vbus_pin

Hello.

Eirik Aanonsen wrote:

> Adding vbus_pin_inverted so that the usb detect pin can be active high or low.
> This because depending on HW implementation it is better to have active low.
> Also replaced the pio_get_value(udc->vbus_pin); with a call to vbus_is_present(udc);
>
> Signed-off-by: Eirik Aanonsen <[email protected]>
>
[...]
> diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
> index 4e970cf..1c469d4 100644
> --- a/drivers/usb/gadget/atmel_usba_udc.c
> +++ b/drivers/usb/gadget/atmel_usba_udc.c
> @@ -320,8 +320,17 @@ static inline void usba_cleanup_debugfs(struct usba_udc *udc)
> static int vbus_is_present(struct usba_udc *udc)
> {
> if (gpio_is_valid(udc->vbus_pin))
> - return gpio_get_value(udc->vbus_pin);
> -
> + {
> + if(udc->vbus_pin_inverted)
>

Space missing after *if*.

> + {
> + if( gpio_get_value(udc->vbus_pin) == 1)
>

Space missing after *if* and there should be no space after (.

> + return 0;
> + else
> + return 1;
>

Why not simply:

return !gpio_get_value(udc->vbus_pin);


> + }
> + else
>

} and *else* should be on the same line.
Please run your patches thru scripts/checkpatch.pl before submitting...

WBR, Sergei

2010-01-04 21:54:18

by Ben Nizette

[permalink] [raw]
Subject: Re: [PATCH 1/1] atmel uaba : Adding invert vbus_pin


On 05/01/2010, at 12:01 AM, Eirik Aanonsen wrote:

> Adding vbus_pin_inverted so that the usb detect pin can be active high or low.
> This because depending on HW implementation it is better to have active low.
> Also replaced the pio_get_value(udc->vbus_pin); with a call to vbus_is_present(udc);
>
> Signed-off-by: Eirik Aanonsen <[email protected]>
> ---
> drivers/usb/gadget/atmel_usba_udc.c | 16 +++++++++++++---
> drivers/usb/gadget/atmel_usba_udc.h | 1 +
> include/linux/usb/atmel_usba_udc.h | 1 +
> 3 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
> index 4e970cf..1c469d4 100644
> --- a/drivers/usb/gadget/atmel_usba_udc.c
> +++ b/drivers/usb/gadget/atmel_usba_udc.c
> @@ -320,8 +320,17 @@ static inline void usba_cleanup_debugfs(struct usba_udc *udc)
> static int vbus_is_present(struct usba_udc *udc)
> {
> if (gpio_is_valid(udc->vbus_pin))
> - return gpio_get_value(udc->vbus_pin);
> -
> + {
> + if(udc->vbus_pin_inverted)
> + {
> + if( gpio_get_value(udc->vbus_pin) == 1)
> + return 0;
> + else
> + return 1;
> + }
> + else
> + return gpio_get_value(udc->vbus_pin);
> + }

return gpio_get_value(udc->vbus_pin) ^ udc->vbus_pin_inverted

--Ben.

2010-01-15 20:17:33

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH 1/1] atmel uaba : Adding invert vbus_pin

On Mon, Jan 04, 2010 at 02:01:59PM +0100, Eirik Aanonsen wrote:
> Adding vbus_pin_inverted so that the usb detect pin can be active high or low.
> This because depending on HW implementation it is better to have active low.
> Also replaced the pio_get_value(udc->vbus_pin); with a call to vbus_is_present(udc);
>
> Signed-off-by: Eirik Aanonsen <[email protected]>

Please always run your patches through 'scripts/checkpatch.pl' before
sending them so that you don't accidentally add coding style errors.

thanks,

greg k-h