Helps battery recharge, and gives this a new version string
since it's changed a lot since St. Patrick's Day.

Please merge.

- Dave

Just minor updates:

 - use usb_gadget_vbus_draw() when changing configs, so that USB can
   be used to recharge batteries (or whatever); and report power use.
   bMaxPower is now 100 mA except with OTG (where it's 8mA).

 - rename /proc/rndis/000 as /proc/driver/rndis-000, and only have it
   when a new CONFIG variable is set (added by a later patch)

 - minor fixes to make some debug-only rndis messages compile

 - version is now "Equinox 2004".

Signed-off-by: David Brownell <[EMAIL PROTECTED]>


--- xu26/drivers/usb/gadget/ether.c     2004-09-09 18:51:22.000000000 -0700
+++ gadget-2.6/drivers/usb/gadget/ether.c       2004-09-22 13:40:02.000000000 -0700
@@ -84,7 +84,7 @@
  */
 
 #define DRIVER_DESC            "Ethernet Gadget"
-#define DRIVER_VERSION         "St Patrick's Day 2004"
+#define DRIVER_VERSION         "Equinox 2004"
 
 static const char shortname [] = "ether";
 static const char driver_desc [] = DRIVER_DESC;
@@ -391,7 +391,7 @@
        .bConfigurationValue =  DEV_CONFIG_VALUE,
        .iConfiguration =       STRING_CDC,
        .bmAttributes =         USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
-       .bMaxPower =            1,
+       .bMaxPower =            50,
 };
 
 #ifdef CONFIG_USB_ETH_RNDIS
@@ -405,7 +405,7 @@
        .bConfigurationValue =  DEV_RNDIS_CONFIG_VALUE,
        .iConfiguration =       STRING_RNDIS,
        .bmAttributes =         USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
-       .bMaxPower =            1,
+       .bMaxPower =            50,
 };
 #endif
 
@@ -1202,13 +1202,20 @@
                result = -EINVAL;
                /* FALL THROUGH */
        case 0:
-               return result;
+               break;
        }
 
-       if (result)
-               eth_reset_config (dev);
-       else {
+       if (result) {
+               if (number)
+                       eth_reset_config (dev);
+               usb_gadget_vbus_draw(dev->gadget,
+                               dev->gadget->is_otg ? 8 : 100);
+       } else {
                char *speed;
+               unsigned power;
+
+               power = 2 * eth_config.bMaxPower;
+               usb_gadget_vbus_draw(dev->gadget, power);
 
                switch (gadget->speed) {
                case USB_SPEED_FULL:    speed = "full"; break;
@@ -1219,8 +1226,8 @@
                }
 
                dev->config = number;
-               INFO (dev, "%s speed config #%d: %s, using %s\n",
-                               speed, number, driver_desc,
+               INFO (dev, "%s speed config #%d: %d mA, %s, using %s\n",
+                               speed, number, power, driver_desc,
                                dev->rndis
                                        ? "RNDIS"
                                        : (dev->cdc
@@ -1379,8 +1386,9 @@
 static void rndis_response_complete (struct usb_ep *ep, struct usb_request *req)
 {
        if (req->status || req->actual != req->length)
-               DEBUG (dev, "rndis response complete --> %d, %d/%d\n",
-                      req->status, req->actual, req->length);
+               DEBUG ((struct eth_dev *) ep->driver_data,
+                       "rndis response complete --> %d, %d/%d\n",
+                       req->status, req->actual, req->length);
 
        /* done sending after CDC_GET_ENCAPSULATED_RESPONSE */
 }
@@ -2102,11 +2110,13 @@
        }
 }
 
-static void rndis_control_ack_complete (struct usb_ep *ep, struct usb_request *req)
+static void
+rndis_control_ack_complete (struct usb_ep *ep, struct usb_request *req)
 {
        if (req->status || req->actual != req->length)
-               DEBUG (dev, "rndis control ack complete --> %d, %d/%d\n",
-                      req->status, req->actual, req->length);
+               DEBUG ((struct eth_dev *) ep->driver_data,
+                       "rndis control ack complete --> %d, %d/%d\n",
+                       req->status, req->actual, req->length);
 
        usb_ep_free_buffer(ep, req->buf, req->dma, 8);
        usb_ep_free_request(ep, req);
@@ -2472,8 +2482,10 @@
        if (gadget->is_otg) {
                otg_descriptor.bmAttributes |= USB_OTG_HNP,
                eth_config.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+               eth_config.bMaxPower = 4;
 #ifdef CONFIG_USB_ETH_RNDIS
                rndis_config.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
+               rndis_config.bMaxPower = 4;
 #endif
        }
 
--- xu26/drivers/usb/gadget/rndis.c     2004-09-20 20:10:23.000000000 -0700
+++ gadget-2.6/drivers/usb/gadget/rndis.c       2004-09-20 21:59:00.000000000 -0700
@@ -70,8 +70,6 @@
 
 #define RNDIS_MAX_CONFIGS      1
 
-static struct proc_dir_entry *rndis_connect_dir;
-static struct proc_dir_entry *rndis_connect_state [RNDIS_MAX_CONFIGS];
 
 static rndis_params rndis_per_dev_params [RNDIS_MAX_CONFIGS];
 
@@ -1275,6 +1273,8 @@
        return 0;
 }
 
+#ifdef CONFIG_USB_GADGET_DEBUG_FILES
+
 int rndis_proc_read (char *page, char **start, off_t off, int count, int *eof, 
                     void *data)
 {
@@ -1365,43 +1365,40 @@
        return count;
 }
 
+#define        NAME_TEMPLATE   "driver/rndis-%03d"
+
+static struct proc_dir_entry *rndis_connect_state [RNDIS_MAX_CONFIGS];
+
+#endif /* CONFIG_USB_GADGET_DEBUG_FILES */
+
+
 int __init rndis_init (void)
 {
        u8 i;
-       char name [4];
 
-       /* FIXME this should probably be /proc/driver/rndis,
-        * and only if debugging is enabled
-        */
-       
-       if (!(rndis_connect_dir =  proc_mkdir ("rndis", NULL))) {
-               printk (KERN_ERR "%s: couldn't create /proc/rndis entry", 
-                       __FUNCTION__);
-               return -EIO;
-       }
-       
        for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
-               sprintf (name, "%03d", i);
+#ifdef CONFIG_USB_GADGET_DEBUG_FILES
+               char name [20];
+
+               sprintf (name, NAME_TEMPLATE, i);
                if (!(rndis_connect_state [i]
-                               = create_proc_entry (name, 0660,
-                                               rndis_connect_dir))) 
+                               = create_proc_entry (name, 0660, NULL))) 
                {
                        DEBUG ("%s :remove entries", __FUNCTION__);
-                       for (i--; i > 0; i--) {
-                               sprintf (name, "%03d", i);
-                               remove_proc_entry (name, rndis_connect_dir);
+                       while (i) {
+                               sprintf (name, NAME_TEMPLATE, --i);
+                               remove_proc_entry (name, NULL);
                        }
                        DEBUG ("\n");
-                       
-                       remove_proc_entry ("000", rndis_connect_dir);
-                       remove_proc_entry ("rndis", NULL);
                        return -EIO;
                }
+
                rndis_connect_state [i]->nlink = 1;
                rndis_connect_state [i]->write_proc = rndis_proc_write;
                rndis_connect_state [i]->read_proc = rndis_proc_read;
                rndis_connect_state [i]->data = (void *)
                                (rndis_per_dev_params + i);
+#endif
                rndis_per_dev_params [i].confignr = i;
                rndis_per_dev_params [i].used = 0;
                rndis_per_dev_params [i].state = RNDIS_UNINITIALIZED;
@@ -1415,14 +1412,14 @@
 
 void rndis_exit (void)
 {
+#ifdef CONFIG_USB_GADGET_DEBUG_FILES
        u8 i;
-       char name [4];
+       char name [20];
        
        for (i = 0; i < RNDIS_MAX_CONFIGS; i++) {
-               sprintf (name, "%03d", i);
-               remove_proc_entry (name, rndis_connect_dir);
+               sprintf (name, NAME_TEMPLATE, i);
+               remove_proc_entry (name, NULL);
        }
-       remove_proc_entry ("rndis", NULL);
-       return;
+#endif
 }
 

Reply via email to