The following reply was made to PR usb/188683; it has been noted by GNATS.

From: John Wehle <j...@feith.com>
To: i...@freebsd.org
Cc: freebsd-gnats-sub...@freebsd.org
Subject: Re: usb/188683: dwc_otg FDT support for specifying usb controller mode
Date: Thu, 17 Apr 2014 00:27:49 -0400 (EDT)

 > - dr_mode: tells Dual-Role USB controllers that we want to work on a
 > particular mode. Valid arguments are "host", "peripheral" and "otg". In
 > case this attribute isn't passed via DT, USB DRD controllers should
 > default to OTG.
 
 Patch revised per your comments attached below.
 
 -- John
 --------------------8<------------------------8<-------------------------
 Index: sys/dev/usb/controller/dwc_otg_fdt.c
 ===================================================================
 --- sys/dev/usb/controller/dwc_otg_fdt.c       (revision 264251)
 +++ sys/dev/usb/controller/dwc_otg_fdt.c       (working copy)
 @@ -91,9 +91,27 @@
  dwc_otg_attach(device_t dev)
  {
        struct dwc_otg_super_softc *sc = device_get_softc(dev);
 +      pcell_t *prop;
 +      phandle_t node;
 +      ssize_t len;
        int err;
        int rid;
  
 +      node = ofw_bus_get_node(dev);
 +      len = OF_getprop_alloc(node, "dr_mode", sizeof(char), (void **)&prop);
 +      if (len >= 0) {
 +              if (strcmp((char *)prop, "host") == 0)
 +                      sc->sc_otg.sc_mode = DWC_MODE_HOST;
 +              else if (strcmp((char *)prop, "peripheral") == 0)
 +                      sc->sc_otg.sc_mode = DWC_MODE_DEVICE;
 +              else if (strcmp((char *)prop, "otg") == 0)
 +                      ;
 +              else
 +                      device_printf(dev,
 +                        "ignoring unknown value for dr_mode attribute in 
FDT\n");
 +      }
 +      free(prop, M_OFWPROP);
 +
        /* initialise some bus fields */
        sc->sc_otg.sc_bus.parent = dev;
        sc->sc_otg.sc_bus.devices = sc->sc_otg.sc_devices;
 Index: sys/dev/usb/controller/dwc_otg.c
 ===================================================================
 --- sys/dev/usb/controller/dwc_otg.c   (revision 264251)
 +++ sys/dev/usb/controller/dwc_otg.c   (working copy)
 @@ -2332,7 +2332,7 @@
  
                DPRINTFN(5, "GOTGCTL=0x%08x\n", temp);
  
 -              dwc_otg_vbus_interrupt(sc,
 +              dwc_otg_vbus_interrupt(sc, (sc->sc_mode == DWC_MODE_HOST) ? 1 :
                    (temp & (GOTGCTL_ASESVLD | GOTGCTL_BSESVLD)) ? 1 : 0);
        }
  
 @@ -3182,7 +3182,7 @@
            sc->sc_host_ch_max);
  
        /* setup FIFO */
 -      if (dwc_otg_init_fifo(sc, DWC_MODE_OTG))
 +      if (dwc_otg_init_fifo(sc, sc->sc_mode))
                return (EINVAL);
  
        /* enable interrupts */
 @@ -3233,7 +3233,7 @@
  
        DPRINTFN(5, "GOTCTL=0x%08x\n", temp);
  
 -      dwc_otg_vbus_interrupt(sc,
 +      dwc_otg_vbus_interrupt(sc, (sc->sc_mode == DWC_MODE_HOST) ? 1 :
            (temp & (GOTGCTL_ASESVLD | GOTGCTL_BSESVLD)) ? 1 : 0);
  
        USB_BUS_UNLOCK(&sc->sc_bus);
 -------------------------------------------------------------------------
 |   Feith Systems  |   Voice: 1-215-646-8000  |  Email: j...@feith.com  |
 |    John Wehle    |     Fax: 1-215-540-5495  |                         |
 -------------------------------------------------------------------------
 
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to