staging: dwc2: Make dwc2_set_uninitialized more specific
authorMatthijs Kooijman <matthijs@stdin.nl>
Thu, 11 Apr 2013 16:43:47 +0000 (18:43 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Apr 2013 20:27:39 +0000 (13:27 -0700)
Before, it was a function that would set all members of a given struct
containing only int members to -1. Now, it is renamed to
dwc_set_all_params and it works only on the dwc2_core_params struct.
This makes sure that all of the slightly dubious casting and assumptions
happen inside the function instead of by the caller.

Signed-off-by: Matthijs Kooijman <matthijs@stdin.nl>
Acked-by: Paul Zimmerman <paulz@synopsys.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/dwc2/core.h
drivers/staging/dwc2/hcd.c
drivers/staging/dwc2/hcd.h

index 320ed00b6ce7f4dfc6fd2db06bafd52a7814987c..fc075a7c1de5f132f8ea917bc6188d85afee210b 100644 (file)
@@ -162,6 +162,10 @@ enum dwc2_lx_state {
  * parameters define how the DWC_otg controller should be configured.
  */
 struct dwc2_core_params {
+       /*
+        * Don't add any non-int members here, this will break
+        * dwc2_set_all_params!
+        */
        int otg_cap;
        int otg_ver;
        int dma_enable;
index 4d5f34e72edb54acc57c458d4628edd767c8fe26..bc9c3c51be7590681be88fb492783ab19ac01c7c 100644 (file)
@@ -2679,8 +2679,15 @@ static void dwc2_hcd_release(struct dwc2_hsotg *hsotg)
        dwc2_hcd_free(hsotg);
 }
 
-static void dwc2_set_uninitialized(int *p, int size)
+/*
+ * 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++)
@@ -2789,8 +2796,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
        if (!hsotg->core_params)
                goto error1;
 
-       dwc2_set_uninitialized((int *)hsotg->core_params,
-                              sizeof(*hsotg->core_params) / sizeof(int));
+       dwc2_set_all_params(hsotg->core_params, -1);
 
        /* Validate parameter values */
        dwc2_set_parameters(hsotg, params);
index b9f8780a38de4a5837f6cea638d205ac86553546..d071f1a05df154e12c2213e9c6a524d9f90718b5 100644 (file)
@@ -452,6 +452,7 @@ extern int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
 extern void dwc2_hcd_remove(struct dwc2_hsotg *hsotg);
 extern int dwc2_set_parameters(struct dwc2_hsotg *hsotg,
                               struct dwc2_core_params *params);
+extern void dwc2_set_all_params(struct dwc2_core_params *params, int value);
 
 /* Transaction Execution Functions */
 extern enum dwc2_transaction_type dwc2_hcd_select_transactions(