diff mbox

[U-Boot,v2,4/4] updates for DFU and atmel usba udc

Message ID 1297633988-15774-1-git-send-email-korgull@home.nl
State Rejected
Delegated to: Remy Bohmer
Headers show

Commit Message

Marcel Janssen Feb. 13, 2011, 9:53 p.m. UTC
From: Marcel <korgull@home.nl>

Signed-off-by: Marcel <korgull@home.nl>
---
 arch/arm/cpu/arm926ejs/at91/led.c   |  119 +++++++++++++++++++++++++++++++++-
 common/Makefile                     |    1 +
 common/update_dfu.c                 |    2 -
 drivers/usb/gadget/atmel_usba_udc.c |    8 +-
 drivers/usb/gadget/usbdfu.c         |   14 +++--
 5 files changed, 128 insertions(+), 16 deletions(-)

Comments

Marcel Janssen Feb. 13, 2011, 10:38 p.m. UTC | #1
Hi,

Sorry to post this one twice.
It's seems exactly the same patch.

> From: Marcel <korgull@home.nl>
> 
> Signed-off-by: Marcel <korgull@home.nl>
> ---
>  arch/arm/cpu/arm926ejs/at91/led.c   |  119
> +++++++++++++++++++++++++++++++++- common/Makefile                     |  
>  1 +
>  common/update_dfu.c                 |    2 -
>  drivers/usb/gadget/atmel_usba_udc.c |    8 +-
>  drivers/usb/gadget/usbdfu.c         |   14 +++--
>  5 files changed, 128 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/arm/cpu/arm926ejs/at91/led.c
> b/arch/arm/cpu/arm926ejs/at91/led.c index 0a315c4..0638a2e 100644
> --- a/arch/arm/cpu/arm926ejs/at91/led.c
> +++ b/arch/arm/cpu/arm926ejs/at91/led.c
> @@ -28,38 +28,149 @@
>  #include <asm/arch/gpio.h>
>  #include <asm/arch/io.h>
> 
> +static unsigned int saved_state[4] = {STATUS_LED_OFF, STATUS_LED_OFF,
> +		STATUS_LED_OFF, STATUS_LED_OFF};
> +
> +void coloured_LED_init(void)
> +{
> +	/* Enable clock */
> +	at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_PIODE);
> +
> +#ifdef CONFIG_RED_LED
> +	at91_set_gpio_output(CONFIG_RED_LED, 1);
> +	at91_set_gpio_value(CONFIG_RED_LED, 1);
> +#endif
> +#ifdef CONFIG_GREEN_LED
> +	at91_set_gpio_output(CONFIG_GREEN_LED, 1);
> +	at91_set_gpio_value(CONFIG_GREEN_LED, 1);
> +#endif
> +#ifdef CONFIG_YELLOW_LED
> +	at91_set_gpio_output(CONFIG_YELLOW_LED, 1);
> +	at91_set_gpio_value(CONFIG_YELLOW_LED, 1);
> +#endif
> +#ifdef CONFIG_BLUE_LED
> +	at91_set_gpio_output(CONFIG_BLUE_LED, 1);
> +	at91_set_gpio_value(CONFIG_BLUE_LED, 1);
> +#endif
> +}
> +
>  #ifdef CONFIG_RED_LED
>  void red_LED_on(void)
>  {
>  	at91_set_gpio_value(CONFIG_RED_LED, 1);
> +	saved_state[STATUS_LED_RED] = STATUS_LED_ON;
>  }
> 
>  void red_LED_off(void)
>  {
>  	at91_set_gpio_value(CONFIG_RED_LED, 0);
> +	saved_state[STATUS_LED_RED] = STATUS_LED_OFF;
>  }
>  #endif
> 
>  #ifdef CONFIG_GREEN_LED
>  void green_LED_on(void)
>  {
> -	at91_set_gpio_value(CONFIG_GREEN_LED, 0);
> +	at91_set_gpio_value(CONFIG_GREEN_LED, 1);
> +	saved_state[STATUS_LED_GREEN] = STATUS_LED_ON;
>  }
> 
>  void green_LED_off(void)
>  {
> -	at91_set_gpio_value(CONFIG_GREEN_LED, 1);
> +	at91_set_gpio_value(CONFIG_GREEN_LED, 0);
> +	saved_state[STATUS_LED_GREEN] = STATUS_LED_OFF;
>  }
>  #endif
> 
>  #ifdef CONFIG_YELLOW_LED
>  void yellow_LED_on(void)
>  {
> -	at91_set_gpio_value(CONFIG_YELLOW_LED, 0);
> +	at91_set_gpio_value(CONFIG_YELLOW_LED, 1);
> +	saved_state[STATUS_LED_YELLOW] = STATUS_LED_ON;
>  }
> 
>  void yellow_LED_off(void)
>  {
> -	at91_set_gpio_value(CONFIG_YELLOW_LED, 1);
> +	at91_set_gpio_value(CONFIG_YELLOW_LED, 0);
> +	saved_state[STATUS_LED_YELLOW] = STATUS_LED_OFF;
>  }
>  #endif
> +
> +void __led_init(led_id_t mask, int state)
> +{
> +	__led_set(mask, state);
> +}
> +
> +void __led_toggle(led_id_t mask)
> +{
> +
> +#ifdef CONFIG_RED_LED
> +	if (STATUS_LED_RED == mask) {
> +		if (STATUS_LED_ON == saved_state[STATUS_LED_RED])
> +			red_LED_off();
> +		else
> +			red_LED_on();
> +	}
> +#endif
> +#ifdef CONFIG_BLUE_LED
> +	else if (STATUS_LED_BLUE == mask) {
> +		if (STATUS_LED_ON == saved_state[STATUS_LED_BLUE])
> +			blue_LED_off();
> +		else
> +			blue_LED_on();
> +	}
> +#endif
> +#ifdef CONFIG_GREEN_LED
> +	else if (STATUS_LED_GREEN == mask) {
> +		if (STATUS_LED_ON == saved_state[STATUS_LED_GREEN])
> +			green_LED_off();
> +		else
> +			green_LED_on();
> +	}
> +#endif
> +#ifdef CONFIG_YELLOW_LED
> +	else if (STATUS_LED_YELLOW == mask) {
> +		if (STATUS_LED_ON == saved_state[STATUS_LED_YELLOW])
> +			yellow_LED_off();
> +		else
> +			yellow_LED_on();
> +	}
> +#endif
> +}
> +
> +void __led_set(led_id_t mask, int state)
> +{
> +#ifdef CONFIG_RED_LED
> +	if (STATUS_LED_RED == mask) {
> +		if (STATUS_LED_ON == state)
> +			red_LED_on();
> +		else
> +			red_LED_off();
> +	}
> +#endif
> +#ifdef CONFIG_BLUE_LED
> +        else if (STATUS_LED_BLUE == mask) {
> +		if (STATUS_LED_ON == state)
> +			blue_LED_on();
> +		else
> +			blue_LED_off();
> +	}
> +#endif
> +#ifdef CONFIG_GREEN_LED
> +	else if (STATUS_LED_GREEN == mask) {
> +		if (STATUS_LED_ON == state)
> +			green_LED_on();
> +		else
> +			green_LED_off();
> +	}
> +#endif
> +#ifdef CONFIG_YELLOW_LED
> +	else if (STATUS_LED_YELLOW == mask) {
> +		if (STATUS_LED_ON == state)
> +			yellow_LED_on();
> +		else
> +			yellow_LED_off();
> +	}
> +#endif
> +}
> +
> diff --git a/common/Makefile b/common/Makefile
> index 048df0c..a653c1e 100644
> --- a/common/Makefile
> +++ b/common/Makefile
> @@ -163,6 +163,7 @@ COBJS-$(CONFIG_LCD) += lcd.o
>  COBJS-$(CONFIG_LYNXKDI) += lynxkdi.o
>  COBJS-$(CONFIG_MODEM_SUPPORT) += modem.o
>  COBJS-$(CONFIG_UPDATE_TFTP) += update.o
> +COBJS-$(CONFIG_USBD_DFU)+= update_dfu.o
>  COBJS-$(CONFIG_USB_KEYBOARD) += usb_kbd.o
> 
> 
> diff --git a/common/update_dfu.c b/common/update_dfu.c
> index f1ceccf..ca2240b 100644
> --- a/common/update_dfu.c
> +++ b/common/update_dfu.c
> @@ -56,8 +56,6 @@ int dfu_loop(cmd_tbl_t *cmdtp, int flag, int argc, char *
> const argv[]) {
>  	int rcv;
> 
> -	dfu_finished = 0;
> -
>  	/* initialize the USBD controller */
>  #ifdef CONFIG_USB_GADGET_ATMEL_USBA
>  	usba_udc_probe(&dfubrd);
> diff --git a/drivers/usb/gadget/atmel_usba_udc.c
> b/drivers/usb/gadget/atmel_usba_udc.c index 6d02de6..45227c4 100644
> --- a/drivers/usb/gadget/atmel_usba_udc.c
> +++ b/drivers/usb/gadget/atmel_usba_udc.c
> @@ -349,12 +349,12 @@ static struct usba_request *alloc_request(void)
>  		if (!req_pool[i].in_use) {
>  			ptr = &req_pool[i];
>  			req_pool[i].in_use = 1;
> -			DBG("alloc_req: request[%d]\n", i);
> +			debug("alloc_req: request[%d]\n", i);
>  			break;
>  		}
>  	}
>  	if (!ptr)
> -		DBG("panic: no more free req buffers\n");
> +		debug("panic: no more free req buffers\n");
>  	return ptr;
>  }
> 
> @@ -412,7 +412,7 @@ usba_ep_queue(struct usb_ep *_ep,
>  	}
> 
>  	if (!_ep || (!ep->desc && ep->ep.name != ep0name)) {
> -		DBG("invalid ep\n");
> +		debug("invalid ep\n");
>  		return -EINVAL;
>  	}
> 
> @@ -457,7 +457,7 @@ static int usba_ep_dequeue(struct usb_ep *_ep, struct
> usb_request *_req) ep->ep.name, req);
> 
>  	if (!_ep || ep->ep.name == ep0name) {
> -		DBG("invalid dequeue request\n");
> +		debug("invalid dequeue request\n");
>  		if (!_ep)
>  			debug("NO ENDPOINT\n");
>  		if (ep->ep.name == ep0name)
> diff --git a/drivers/usb/gadget/usbdfu.c b/drivers/usb/gadget/usbdfu.c
> index 65f334a..a1e7316 100644
> --- a/drivers/usb/gadget/usbdfu.c
> +++ b/drivers/usb/gadget/usbdfu.c
> @@ -398,9 +398,10 @@ static int handle_dnload(struct usb_gadget *gadget,
>  		char *mtdp = getenv("mtdparts");
>  		if (mtdp)
>  			printf("Valid MTD partitions found\n");
> -		/*this used to be in the Openmoko driver */
> -		/*if (!mtdp)
> -			/*run_command("dynpart", 0); */
> +		/*this used to be in the Openmoko driver
> +		 *if (!mtdp)
> +		 *run_command("dynpart", 0);
> +		*/
>  		else {
>  			dev->dfu_state = DFU_STATE_dfuERROR;
>  			dev->dfu_status = DFU_STATUS_errADDRESS;
> @@ -477,9 +478,10 @@ static int handle_dnload(struct usb_gadget *gadget,
>  	red_LED_off();
>  #endif
>  			rc = nand_write_skip_bad(ds->nand,
> -						 ds->part->offset,
> -						 &rwsize,
> -						 (u_char *)addr);
> +						ds->part->offset,
> +						&rwsize,
> +						(u_char *)addr,
> +						0);
>  			if (rc) {
>  				printf("NAND write failed\n");
>  				break;
diff mbox

Patch

diff --git a/arch/arm/cpu/arm926ejs/at91/led.c b/arch/arm/cpu/arm926ejs/at91/led.c
index 0a315c4..0638a2e 100644
--- a/arch/arm/cpu/arm926ejs/at91/led.c
+++ b/arch/arm/cpu/arm926ejs/at91/led.c
@@ -28,38 +28,149 @@ 
 #include <asm/arch/gpio.h>
 #include <asm/arch/io.h>
 
+static unsigned int saved_state[4] = {STATUS_LED_OFF, STATUS_LED_OFF,
+		STATUS_LED_OFF, STATUS_LED_OFF};
+
+void coloured_LED_init(void)
+{
+	/* Enable clock */
+	at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_PIODE);
+
+#ifdef CONFIG_RED_LED	
+	at91_set_gpio_output(CONFIG_RED_LED, 1);
+	at91_set_gpio_value(CONFIG_RED_LED, 1);
+#endif	
+#ifdef CONFIG_GREEN_LED
+	at91_set_gpio_output(CONFIG_GREEN_LED, 1);
+	at91_set_gpio_value(CONFIG_GREEN_LED, 1);
+#endif
+#ifdef CONFIG_YELLOW_LED
+	at91_set_gpio_output(CONFIG_YELLOW_LED, 1);
+	at91_set_gpio_value(CONFIG_YELLOW_LED, 1);
+#endif
+#ifdef CONFIG_BLUE_LED	
+	at91_set_gpio_output(CONFIG_BLUE_LED, 1);
+	at91_set_gpio_value(CONFIG_BLUE_LED, 1);
+#endif  
+}
+
 #ifdef CONFIG_RED_LED
 void red_LED_on(void)
 {
 	at91_set_gpio_value(CONFIG_RED_LED, 1);
+	saved_state[STATUS_LED_RED] = STATUS_LED_ON;
 }
 
 void red_LED_off(void)
 {
 	at91_set_gpio_value(CONFIG_RED_LED, 0);
+	saved_state[STATUS_LED_RED] = STATUS_LED_OFF;
 }
 #endif
 
 #ifdef CONFIG_GREEN_LED
 void green_LED_on(void)
 {
-	at91_set_gpio_value(CONFIG_GREEN_LED, 0);
+	at91_set_gpio_value(CONFIG_GREEN_LED, 1);
+	saved_state[STATUS_LED_GREEN] = STATUS_LED_ON;
 }
 
 void green_LED_off(void)
 {
-	at91_set_gpio_value(CONFIG_GREEN_LED, 1);
+	at91_set_gpio_value(CONFIG_GREEN_LED, 0);
+	saved_state[STATUS_LED_GREEN] = STATUS_LED_OFF;
 }
 #endif
 
 #ifdef CONFIG_YELLOW_LED
 void yellow_LED_on(void)
 {
-	at91_set_gpio_value(CONFIG_YELLOW_LED, 0);
+	at91_set_gpio_value(CONFIG_YELLOW_LED, 1);
+	saved_state[STATUS_LED_YELLOW] = STATUS_LED_ON;
 }
 
 void yellow_LED_off(void)
 {
-	at91_set_gpio_value(CONFIG_YELLOW_LED, 1);
+	at91_set_gpio_value(CONFIG_YELLOW_LED, 0);
+	saved_state[STATUS_LED_YELLOW] = STATUS_LED_OFF;
 }
 #endif
+
+void __led_init(led_id_t mask, int state)
+{
+	__led_set(mask, state);
+}
+
+void __led_toggle(led_id_t mask)
+{
+
+#ifdef CONFIG_RED_LED	
+	if (STATUS_LED_RED == mask) {
+		if (STATUS_LED_ON == saved_state[STATUS_LED_RED])
+			red_LED_off();
+		else
+			red_LED_on();
+	} 
+#endif
+#ifdef CONFIG_BLUE_LED
+	else if (STATUS_LED_BLUE == mask) {
+		if (STATUS_LED_ON == saved_state[STATUS_LED_BLUE])
+			blue_LED_off();
+		else
+			blue_LED_on();
+	} 
+#endif
+#ifdef CONFIG_GREEN_LED
+	else if (STATUS_LED_GREEN == mask) {
+		if (STATUS_LED_ON == saved_state[STATUS_LED_GREEN])
+			green_LED_off();
+		else
+			green_LED_on();
+	} 
+#endif
+#ifdef CONFIG_YELLOW_LED
+	else if (STATUS_LED_YELLOW == mask) {
+		if (STATUS_LED_ON == saved_state[STATUS_LED_YELLOW])
+			yellow_LED_off();
+		else
+			yellow_LED_on();
+	}
+#endif
+}
+
+void __led_set(led_id_t mask, int state)
+{
+#ifdef CONFIG_RED_LED	  	
+	if (STATUS_LED_RED == mask) {
+		if (STATUS_LED_ON == state)
+			red_LED_on();
+		else
+			red_LED_off();
+	} 
+#endif
+#ifdef CONFIG_BLUE_LED	
+        else if (STATUS_LED_BLUE == mask) {
+		if (STATUS_LED_ON == state)
+			blue_LED_on();
+		else
+			blue_LED_off();
+	} 
+#endif
+#ifdef CONFIG_GREEN_LED	
+	else if (STATUS_LED_GREEN == mask) {
+		if (STATUS_LED_ON == state)
+			green_LED_on();
+		else
+			green_LED_off();
+	} 
+#endif
+#ifdef CONFIG_YELLOW_LED	
+	else if (STATUS_LED_YELLOW == mask) {
+		if (STATUS_LED_ON == state)
+			yellow_LED_on();
+		else
+			yellow_LED_off();
+	}
+#endif
+}
+
diff --git a/common/Makefile b/common/Makefile
index 048df0c..a653c1e 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -163,6 +163,7 @@  COBJS-$(CONFIG_LCD) += lcd.o
 COBJS-$(CONFIG_LYNXKDI) += lynxkdi.o
 COBJS-$(CONFIG_MODEM_SUPPORT) += modem.o
 COBJS-$(CONFIG_UPDATE_TFTP) += update.o
+COBJS-$(CONFIG_USBD_DFU)+= update_dfu.o
 COBJS-$(CONFIG_USB_KEYBOARD) += usb_kbd.o
 
 
diff --git a/common/update_dfu.c b/common/update_dfu.c
index f1ceccf..ca2240b 100644
--- a/common/update_dfu.c
+++ b/common/update_dfu.c
@@ -56,8 +56,6 @@  int dfu_loop(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 	int rcv;
 
-	dfu_finished = 0;
-
 	/* initialize the USBD controller */
 #ifdef CONFIG_USB_GADGET_ATMEL_USBA
 	usba_udc_probe(&dfubrd);
diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
index 6d02de6..45227c4 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -349,12 +349,12 @@  static struct usba_request *alloc_request(void)
 		if (!req_pool[i].in_use) {
 			ptr = &req_pool[i];
 			req_pool[i].in_use = 1;
-			DBG("alloc_req: request[%d]\n", i);
+			debug("alloc_req: request[%d]\n", i);
 			break;
 		}
 	}
 	if (!ptr)
-		DBG("panic: no more free req buffers\n");
+		debug("panic: no more free req buffers\n");
 	return ptr;
 }
 
@@ -412,7 +412,7 @@  usba_ep_queue(struct usb_ep *_ep,
 	}
 
 	if (!_ep || (!ep->desc && ep->ep.name != ep0name)) {
-		DBG("invalid ep\n");
+		debug("invalid ep\n");
 		return -EINVAL;
 	}
 
@@ -457,7 +457,7 @@  static int usba_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 			ep->ep.name, req);
 
 	if (!_ep || ep->ep.name == ep0name) {
-		DBG("invalid dequeue request\n");
+		debug("invalid dequeue request\n");
 		if (!_ep)
 			debug("NO ENDPOINT\n");
 		if (ep->ep.name == ep0name)
diff --git a/drivers/usb/gadget/usbdfu.c b/drivers/usb/gadget/usbdfu.c
index 65f334a..a1e7316 100644
--- a/drivers/usb/gadget/usbdfu.c
+++ b/drivers/usb/gadget/usbdfu.c
@@ -398,9 +398,10 @@  static int handle_dnload(struct usb_gadget *gadget,
 		char *mtdp = getenv("mtdparts");
 		if (mtdp)
 			printf("Valid MTD partitions found\n");
-		/*this used to be in the Openmoko driver */
-		/*if (!mtdp)
-			/*run_command("dynpart", 0); */
+		/*this used to be in the Openmoko driver 
+		 *if (!mtdp)
+		 *run_command("dynpart", 0); 
+		*/
 		else {
 			dev->dfu_state = DFU_STATE_dfuERROR;
 			dev->dfu_status = DFU_STATUS_errADDRESS;
@@ -477,9 +478,10 @@  static int handle_dnload(struct usb_gadget *gadget,
 	red_LED_off();
 #endif
 			rc = nand_write_skip_bad(ds->nand,
-						 ds->part->offset,
-						 &rwsize,
-						 (u_char *)addr);
+						ds->part->offset,
+						&rwsize,
+						(u_char *)addr,
+						0);
 			if (rc) {
 				printf("NAND write failed\n");
 				break;