diff --git a/drivers/staging/dwc2/core.h b/drivers/staging/dwc2/core.h index 320ed00b6ce7..fc075a7c1de5 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 4d5f34e72edb..bc9c3c51be75 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 b9f8780a38de..d071f1a05df1 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(