diff options
author | Matthijs Kooijman <matthijs@stdin.nl> | 2013-04-11 16:43:47 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-04-11 20:27:39 (GMT) |
commit | 8284f93b3d8b21e30bd8fde97686433a52b49c58 (patch) | |
tree | 0a7963893ab3b1e1d16d2d1eba74dc95a244ab08 | |
parent | 050232a73c0d054750a9da92e071e26d4c571f12 (diff) | |
download | linux-8284f93b3d8b21e30bd8fde97686433a52b49c58.tar.xz |
staging: dwc2: Make dwc2_set_uninitialized more specific
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>
-rw-r--r-- | drivers/staging/dwc2/core.h | 4 | ||||
-rw-r--r-- | drivers/staging/dwc2/hcd.c | 12 | ||||
-rw-r--r-- | drivers/staging/dwc2/hcd.h | 1 |
3 files changed, 14 insertions, 3 deletions
diff --git a/drivers/staging/dwc2/core.h b/drivers/staging/dwc2/core.h index 320ed00..fc075a7 100644 --- a/drivers/staging/dwc2/core.h +++ b/drivers/staging/dwc2/core.h @@ -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; diff --git a/drivers/staging/dwc2/hcd.c b/drivers/staging/dwc2/hcd.c index 4d5f34e..bc9c3c5 100644 --- a/drivers/staging/dwc2/hcd.c +++ b/drivers/staging/dwc2/hcd.c @@ -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); diff --git a/drivers/staging/dwc2/hcd.h b/drivers/staging/dwc2/hcd.h index b9f8780..d071f1a 100644 --- a/drivers/staging/dwc2/hcd.h +++ b/drivers/staging/dwc2/hcd.h @@ -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( |