usb: dwc3: Use of_property_read_variable_u32_array() to read "power"
Subsystems (2)
PATCH 1/1 usb: dwc3: Use of_property_read_variable_u32_array() to read "power"
There's no need to get the length of an DT array property before parsing the array. of_property_read_variable_u32_array() takes a minimum and maximum length and returns the actual length (or error code).
This is part of a larger effort to remove callers of of_find_property() and similar functions. of_find_property() leaks the DT struct property and data pointers which is a problem for dynamically allocated nodes which may be freed.
--- drivers/usb/dwc3/dwc3-octeon.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-)
drivers/usb/dwc3/dwc3-octeon.c +4 -15
@@ -419,7 +419,7 @@ static int dwc3_octeon_probe(struct platform_device *pdev)int ref_clk_sel, ref_clk_fsel, mpll_mul;int power_active_low, power_gpio;int err, len; -u32 clock_rate; +u32 clock_rate, gpio_pwr[3 ];if (of_property_read_u32 (node,"refclk-frequency" , &clock_rate)) {dev_err (dev,"No UCTL \"refclk-frequency\"\n" );
@@ -476,21 +476,10 @@ static int dwc3_octeon_probe(struct platform_device *pdev) power_gpio =DWC3_GPIO_POWER_NONE ; power_active_low =0 ; -if (of_find_property (node,"power" , &len)) { -u32 gpio_pwr[3 ]; - -switch (len) { -case 8 : -of_property_read_u32_array (node,"power" , gpio_pwr,2 ); -break ; -case 12 : -of_property_read_u32_array (node,"power" , gpio_pwr,3 ); + len =of_property_read_variable_u32_array (node,"power" , gpio_pwr,2 ,3 ); +if (len >0 ) { +if (len ==3 ) power_active_low = gpio_pwr[2 ] &0x01 ; -break ; -default : -dev_err (dev,"invalid power configuration\n" ); -return -EINVAL ; - } power_gpio = gpio_pwr[1 ]; }
Signature · 1 line
2.43.0
Quoted 55 lines · Rob Herring (Arm)
There's no need to get the length of an DT array property before parsing the array.
of_property_read_variable_u32_array()takes a minimum and maximum length and returns the actual length (or error code).This is part of a larger effort to remove callers of
of_find_property()and similar functions.of_find_property()leaks the DT struct property and data pointers which is a problem for dynamically allocated nodes which may be freed.Signed-off-by Rob Herring (Arm) <[email protected]>--- drivers/usb/dwc3/dwc3-octeon.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-)drivers/usb/dwc3/dwc3-octeon.c +4
-15@@ -419,7 +419,7 @@ static int dwc3_octeon_probe(struct platform_device *pdev)int ref_clk_sel, ref_clk_fsel, mpll_mul;int power_active_low, power_gpio;int err, len; -u32 clock_rate; +u32 clock_rate, gpio_pwr[3 ];if (of_property_read_u32 (node,"refclk-frequency" , &clock_rate)) {dev_err (dev,"No UCTL \"refclk-frequency\"\n" );@@ -476,21 +476,10 @@ static int dwc3_octeon_probe(struct platform_device *pdev) power_gpio =DWC3_GPIO_POWER_NONE ; power_active_low =0 ; -if (of_find_property (node,"power" , &len)) { -u32 gpio_pwr[3 ]; - -switch (len) { -case 8 : -of_property_read_u32_array (node,"power" , gpio_pwr,2 ); -break ; -case 12 : -of_property_read_u32_array (node,"power" , gpio_pwr,3 ); + len =of_property_read_variable_u32_array (node,"power" , gpio_pwr,2 ,3 ); +if (len >0 ) { +if (len ==3 ) power_active_low = gpio_pwr[2 ] &0x01 ; -break ; -default : -dev_err (dev,"invalid power configuration\n" ); -return -EINVAL ; - } power_gpio = gpio_pwr[1 ]; }Signature · 1 line
2.43.0
Thanks,
Thinh