usb: dwc2: Get device properties
authorJohn Youn <John.Youn@synopsys.com>
Mon, 23 Jan 2017 22:55:35 +0000 (14:55 -0800)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 24 Jan 2017 14:19:05 +0000 (16:19 +0200)
After setting the default core parameter values, read in the device
properties and modify core parameter values if needed.

Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/params.c

index 6729f14d25de6905aef3a26661e6620b831a1f6c..4416eae096478dfbe37b2472d9aaea340ad13d60 100644 (file)
@@ -343,6 +343,40 @@ static void dwc2_set_default_params(struct dwc2_hsotg *hsotg)
        }
 }
 
+/**
+ * dwc2_get_device_properties() - Read in device properties.
+ *
+ * Read in the device properties and adjust core parameters if needed.
+ */
+static void dwc2_get_device_properties(struct dwc2_hsotg *hsotg)
+{
+       struct dwc2_core_params *p = &hsotg->params;
+       int num;
+
+       if ((hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) ||
+           (hsotg->dr_mode == USB_DR_MODE_OTG)) {
+               device_property_read_u32(hsotg->dev, "g-rx-fifo-size",
+                                        &p->g_rx_fifo_size);
+
+               device_property_read_u32(hsotg->dev, "g-np-tx-fifo-size",
+                                        &p->g_np_tx_fifo_size);
+
+               num = device_property_read_u32_array(hsotg->dev,
+                                                    "g-tx-fifo-size",
+                                                    NULL, 0);
+
+               if (num > 0) {
+                       num = min(num, 15);
+                       memset(p->g_tx_fifo_size, 0,
+                              sizeof(p->g_tx_fifo_size));
+                       device_property_read_u32_array(hsotg->dev,
+                                                      "g-tx-fifo-size",
+                                                      &p->g_tx_fifo_size[1],
+                                                      num);
+               }
+       }
+}
+
 /*
  * Gets host hardware parameters. Forces host mode if not currently in
  * host mode. Should be called immediately after a core soft reset in
@@ -555,6 +589,7 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
 int dwc2_init_params(struct dwc2_hsotg *hsotg)
 {
        dwc2_set_default_params(hsotg);
+       dwc2_get_device_properties(hsotg);
 
        return 0;
 }