From: Marcel <korg...@home.nl>

Signed-off-by: Marcel <korg...@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;
-- 
1.7.3.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to