usb: dwc2: set parameter values in probe function
authorMian Yousaf Kaukab <yousaf.kaukab@intel.com>
Wed, 29 Apr 2015 20:09:05 +0000 (22:09 +0200)
committerFelipe Balbi <balbi@ti.com>
Wed, 29 Apr 2015 20:19:02 +0000 (15:19 -0500)
So the parameters can be used in both host and gadget modes.
Also consolidate param functions in the core.h

Acked-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@intel.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc2/core.c
drivers/usb/dwc2/core.h
drivers/usb/dwc2/hcd.c
drivers/usb/dwc2/hcd.h
drivers/usb/dwc2/platform.c

index 8c3bc84..6acbe90 100644 (file)
@@ -3044,6 +3044,7 @@ void dwc2_set_parameters(struct dwc2_hsotg *hsotg,
        dwc2_set_param_uframe_sched(hsotg, params->uframe_sched);
        dwc2_set_param_external_id_pin_ctl(hsotg, params->external_id_pin_ctl);
 }
+EXPORT_SYMBOL_GPL(dwc2_set_parameters);
 
 /**
  * During device initialization, read various hardware configuration
@@ -3210,6 +3211,24 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
 
        return 0;
 }
+EXPORT_SYMBOL_GPL(dwc2_get_hwparams);
+
+/*
+ * Sets all parameters to the given value.
+ *
+ * Assumes that the dwc2_core_params struct contains only integers.
+ */
+void dwc2_set_all_params(struct dwc2_core_params *params, int value)
+{
+       int *p = (int *)params;
+       size_t size = sizeof(*params) / sizeof(*p);
+       int i;
+
+       for (i = 0; i < size; i++)
+               p[i] = value;
+}
+EXPORT_SYMBOL_GPL(dwc2_set_all_params);
+
 
 u16 dwc2_get_otg_version(struct dwc2_hsotg *hsotg)
 {
index e46304d..d7fb1f7 100644 (file)
@@ -1071,6 +1071,15 @@ extern void dwc2_set_param_ahbcfg(struct dwc2_hsotg *hsotg, int val);
 
 extern void dwc2_set_param_otg_ver(struct dwc2_hsotg *hsotg, int val);
 
+extern void dwc2_set_parameters(struct dwc2_hsotg *hsotg,
+                               const struct dwc2_core_params *params);
+
+extern void dwc2_set_all_params(struct dwc2_core_params *params, int value);
+
+extern int dwc2_get_hwparams(struct dwc2_hsotg *hsotg);
+
+
+
 /*
  * Dump core registers and SPRAM
  */
@@ -1119,14 +1128,12 @@ extern int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg);
 extern void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg);
 extern void dwc2_hcd_start(struct dwc2_hsotg *hsotg);
 #else
-static inline void dwc2_set_all_params(struct dwc2_core_params *params, int value) {}
 static inline int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
 { return 0; }
 static inline void dwc2_hcd_disconnect(struct dwc2_hsotg *hsotg) {}
 static inline void dwc2_hcd_start(struct dwc2_hsotg *hsotg) {}
 static inline void dwc2_hcd_remove(struct dwc2_hsotg *hsotg) {}
-static inline int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
-                               const struct dwc2_core_params *params)
+static inline int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq)
 { return 0; }
 #endif
 
index fbbbac2..8757f62 100644 (file)
@@ -2748,8 +2748,6 @@ static void dwc2_hcd_free(struct dwc2_hsotg *hsotg)
                destroy_workqueue(hsotg->wq_otg);
        }
 
-       kfree(hsotg->core_params);
-       hsotg->core_params = NULL;
        del_timer(&hsotg->wkp_timer);
 }
 
@@ -2762,29 +2760,12 @@ static void dwc2_hcd_release(struct dwc2_hsotg *hsotg)
 }
 
 /*
- * Sets all parameters to the given value.
- *
- * Assumes that the dwc2_core_params struct contains only integers.
- */
-void dwc2_set_all_params(struct dwc2_core_params *params, int value)
-{
-       int *p = (int *)params;
-       size_t size = sizeof(*params) / sizeof(*p);
-       int i;
-
-       for (i = 0; i < size; i++)
-               p[i] = value;
-}
-EXPORT_SYMBOL_GPL(dwc2_set_all_params);
-
-/*
  * Initializes the HCD. This function allocates memory for and initializes the
  * static parts of the usb_hcd and dwc2_hsotg structures. It also registers the
  * USB bus with the core and calls the hc_driver->start() function. It returns
  * a negative error on failure.
  */
-int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
-                 const struct dwc2_core_params *params)
+int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq)
 {
        struct usb_hcd *hcd;
        struct dwc2_host_chan *channel;
@@ -2797,12 +2778,6 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
 
        dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n");
 
-       /* Detect config values from hardware */
-       retval = dwc2_get_hwparams(hsotg);
-
-       if (retval)
-               return retval;
-
        retval = -ENOMEM;
 
        hcfg = readl(hsotg->regs + HCFG);
@@ -2821,15 +2796,6 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
        hsotg->last_frame_num = HFNUM_MAX_FRNUM;
 #endif
 
-       hsotg->core_params = kzalloc(sizeof(*hsotg->core_params), GFP_KERNEL);
-       if (!hsotg->core_params)
-               goto error1;
-
-       dwc2_set_all_params(hsotg->core_params, -1);
-
-       /* Validate parameter values */
-       dwc2_set_parameters(hsotg, params);
-
        /* Check if the bus driver or platform code has setup a dma_mask */
        if (hsotg->core_params->dma_enable > 0 &&
            hsotg->dev->dma_mask == NULL) {
index e69a843..7b5841c 100644 (file)
@@ -451,13 +451,8 @@ static inline u8 dwc2_hcd_is_pipe_out(struct dwc2_hcd_pipe_info *pipe)
        return !dwc2_hcd_is_pipe_in(pipe);
 }
 
-extern int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
-                        const struct dwc2_core_params *params);
+extern int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq);
 extern void dwc2_hcd_remove(struct dwc2_hsotg *hsotg);
-extern void dwc2_set_parameters(struct dwc2_hsotg *hsotg,
-                               const struct dwc2_core_params *params);
-extern void dwc2_set_all_params(struct dwc2_core_params *params, int value);
-extern int dwc2_get_hwparams(struct dwc2_hsotg *hsotg);
 
 /* Transaction Execution Functions */
 extern enum dwc2_transaction_type dwc2_hcd_select_transactions(
index ce39e8a..2562c90 100644 (file)
@@ -241,6 +241,21 @@ static int dwc2_driver_probe(struct platform_device *dev)
        spin_lock_init(&hsotg->lock);
        mutex_init(&hsotg->init_mutex);
 
+       /* Detect config values from hardware */
+       retval = dwc2_get_hwparams(hsotg);
+       if (retval)
+               return retval;
+
+       hsotg->core_params = devm_kzalloc(&dev->dev,
+                               sizeof(*hsotg->core_params), GFP_KERNEL);
+       if (!hsotg->core_params)
+               return -ENOMEM;
+
+       dwc2_set_all_params(hsotg->core_params, -1);
+
+       /* Validate parameter values */
+       dwc2_set_parameters(hsotg, params);
+
        if (hsotg->dr_mode != USB_DR_MODE_HOST) {
                retval = dwc2_gadget_init(hsotg, irq);
                if (retval)
@@ -249,7 +264,7 @@ static int dwc2_driver_probe(struct platform_device *dev)
        }
 
        if (hsotg->dr_mode != USB_DR_MODE_PERIPHERAL) {
-               retval = dwc2_hcd_init(hsotg, irq, params);
+               retval = dwc2_hcd_init(hsotg, irq);
                if (retval) {
                        if (hsotg->gadget_enabled)
                                s3c_hsotg_remove(hsotg);