changeset 2223:41234426f916

* src/usbs_at91_data.cxx: Change the initialization priority. The USB tty driver is initialized at priority CYG_INIT_IO, so the USB device has to be initialized before that. * src/usbs_at91.c: Rework pullup and power dectect to use the AT91 GPIO macros.
author asl
date Fri, 02 Jun 2006 18:46:13 +0000
parents 60a553e4f050
children de2bef46557a
files packages/devs/usb/at91/current/ChangeLog packages/devs/usb/at91/current/cdl/usbs_at91.cdl packages/devs/usb/at91/current/src/usbs_at91.c packages/devs/usb/at91/current/src/usbs_at91_data.cxx
diffstat 4 files changed, 43 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/usb/at91/current/ChangeLog
+++ b/packages/devs/usb/at91/current/ChangeLog
@@ -1,3 +1,14 @@
+2006-05-25  Andrew Lunn  <andrew.lunn@ascom.ch>
+
+	* src/usbs_at91_data.cxx: Change the initialization priority.  The
+	USB tty driver is initialized at priority CYG_INIT_IO, so the USB
+	device has to be initialized before that.
+
+2006-05-19  Andrew Lunn  <andrew.lunn@ascom.ch>
+
+	* src/usbs_at91.c: Rework pullup and power dectect to use the AT91
+	GPIO macros.
+
 2006-05-07  Andrew Lunn  <andrew.lunn@ascom.ch>
 
 	* Included into eCos anonymous CVS.
--- a/packages/devs/usb/at91/current/cdl/usbs_at91.cdl
+++ b/packages/devs/usb/at91/current/cdl/usbs_at91.cdl
@@ -84,6 +84,8 @@ cdl_package CYGPKG_DEVS_USB_AT91 {
         }   
 
         active_if CYGINT_DEVS_USB_AT91_HAS_USB
+        implements CYGHWR_IO_USB_SLAVE_OUT_ENDPOINTS
+        implements CYGHWR_IO_USB_SLAVE_IN_ENDPOINTS    
 
         compile       usbs_at91.c
         compile       -library=libextras.a usbs_at91_data.cxx
@@ -91,15 +93,14 @@ cdl_package CYGPKG_DEVS_USB_AT91 {
             Enable support for endpoint 0. If this support is disabled
             then the entire USB port is unusable."
     
-        cdl_option CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_PIN {
+        cdl_option CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN {
             display       "PIO-Pin who controls the pullup resistor"
             flavor        data
-            default_value 16
-            legal_values  { 0 to 32 }
+            default_value { "AT91_GPIO_PA16" }
             description "
-                   Every pin from the PIO is able to do it. If you don't
-                   need a pin because your HW has the pullup fixed wired
-                   then select 32."
+                   Every GPIO pin is able to do it. If you don't need
+                   a pin because your HW has the pullup fixed wired
+                   then select NONE"
         }
 
         cdl_option CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_INVERTED {
@@ -111,14 +112,13 @@ cdl_package CYGPKG_DEVS_USB_AT91 {
                    be inverted. ie VDD is active, VCC is inactive."
         }
 
-        cdl_option CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_PIN {
+        cdl_option CYGDAT_DEVS_USB_AT91_GPIO_READ_POWER_PIN {
             display       "PIO-Pin who see the USB-Power"
             flavor        data
-            default_value 13
-            legal_values  { 0 to 32 }
+            default_value { "AT91_GPIO_PA13"}
             description "
-                   Every pin from the PIO is able to do it. If you don't
-                   need a pin select 32."
+                   Every GPIO pin is able to do it. If you don't need
+                   a pin then select NONE"
         }
 
         cdl_option CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_INVERTED {
--- a/packages/devs/usb/at91/current/src/usbs_at91.c
+++ b/packages/devs/usb/at91/current/src/usbs_at91.c
@@ -277,19 +277,17 @@ static void
 usbs_at91_set_pullup (bool set)
 {                
 
-#if CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_PIN <= 31
+#ifndef CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN_NONE
   if (
-#ifdef CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_INVERTED
+#ifdef CYGNUM_DEVS_USB_AT91_GPIO_SET_PULLUP_INVERTED
       !set
 #else
       set
 #endif
       ) {
-    HAL_WRITE_UINT32 (AT91_PIO + AT91_PIO_SODR,
-                      (1 << CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_PIN));
+    HAL_ARM_AT91_GPIO_RESET(CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN);
   } else {
-    HAL_WRITE_UINT32 (AT91_PIO + AT91_PIO_CODR,
-                      (1 << CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_PIN));
+    HAL_ARM_AT91_GPIO_SET(CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN);
   }
 #endif
 }
@@ -297,14 +295,15 @@ usbs_at91_set_pullup (bool set)
 /* Is the USB powered? */
 bool
 usbs_at91_read_power (void)
-{                               
-#if CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_PIN <= 31
-#ifdef CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_INVERTED
-  return BITS_ARE_CLEARED ((cyg_addrword_t) (AT91_PIO + AT91_PIO_PDSR),
-                           (1 << CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_PIN));
+{
+#ifndef CYGDAT_DEVS_USB_AT91_GPIO_READ_POWER_PIN_NONE
+  cyg_bool state;
+  
+  HAL_ARM_AT91_GPIO_GET(CYGDAT_DEVS_USB_AT91_GPIO_READ_POWER_PIN, state);
+#ifdef CYGNUM_DEVS_USB_AT91_GPIO_READ_POWER_INVERTED
+  return !state;
 #else
-  return BITS_ARE_SET ((cyg_addrword_t) (AT91_PIO + AT91_PIO_PDSR),
-                       (1 << CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_PIN));
+  return state;
 #endif
 #endif
   return true;
@@ -1310,14 +1309,14 @@ usbs_at91_init (void)
   HAL_WRITE_UINT32 (AT91_PMC + AT91_PMC_PCER, AT91_PMC_PCER_UDP); 
 
   usbs_at91_set_pullup (false);
-  HAL_WRITE_UINT32 (AT91_PIO + AT91_PIO_PER,
-                    (1 << CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_PIN) |
-                    (1 << CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_PIN));
-  HAL_WRITE_UINT32 (AT91_PIO + AT91_PIO_OER,
-                    (1 << CYGNUM_DEVS_USB_AT91_PIO_SET_PULLUP_PIN));
-  HAL_WRITE_UINT32 (AT91_PIO + AT91_PIO_ODR,
-                    (1 << CYGNUM_DEVS_USB_AT91_PIO_READ_POWER_PIN));
-  
+#ifndef CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN_NONE
+  HAL_ARM_AT91_GPIO_CFG_DIRECTION(CYGDAT_DEVS_USB_AT91_GPIO_SET_PULLUP_PIN,
+                                  AT91_PIN_OUT);
+#endif
+#ifndef CYGDAT_DEVS_USB_AT91_GPIO_READ_POWER_PIN_NONE
+  HAL_ARM_AT91_GPIO_CFG_DIRECTION(CYGDAT_DEVS_USB_AT91_GPIO_READ_POWER_PIN,
+                                  AT91_PIN_IN);
+#endif
   usbs_at91_handle_reset ();
   
   cyg_drv_interrupt_create (CYGNUM_HAL_INTERRUPT_UDP, 
--- a/packages/devs/usb/at91/current/src/usbs_at91_data.cxx
+++ b/packages/devs/usb/at91/current/src/usbs_at91_data.cxx
@@ -78,7 +78,7 @@ public:
   }
 };
 
-static usbs_at91_initialization CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO) 
+static usbs_at91_initialization CYGBLD_ATTRIB_INIT_BEFORE(CYG_INIT_IO) 
   usbs_at91_init_object;
 #endif