@ -535,7 +535,7 @@ static int mc13892_regulator_probe(struct platform_device *pdev)
struct mc13xxx_regulator_init_data * mc13xxx_data ;
struct regulator_config config = { } ;
int i , ret ;
int num_regulators = 0 , num_parsed ;
int num_regulators = 0 ;
u32 val ;
num_regulators = mc13xxx_get_num_regulators_dt ( pdev ) ;
@ -545,8 +545,6 @@ static int mc13892_regulator_probe(struct platform_device *pdev)
if ( num_regulators < = 0 )
return - EINVAL ;
num_parsed = num_regulators ;
priv = devm_kzalloc ( & pdev - > dev , sizeof ( * priv ) +
num_regulators * sizeof ( priv - > regulators [ 0 ] ) ,
GFP_KERNEL ) ;
@ -589,40 +587,9 @@ static int mc13892_regulator_probe(struct platform_device *pdev)
= mc13892_vcam_get_mode ;
mc13xxx_data = mc13xxx_parse_regulators_dt ( pdev , mc13892_regulators ,
ARRAY_SIZE ( mc13892_regulators ) ,
& num_parsed ) ;
/*
* Perform a little sanity check on the regulator tree - if we found
* a number of regulators from mc13xxx_get_num_regulators_dt and
* then parsed a smaller number in mc13xxx_parse_regulators_dt then
* there is a regulator defined in the regulators node which has
* not matched any usable regulator in the driver . In this case ,
* there is one missing and what will happen is the first regulator
* will get registered again .
*
* Fix this by basically making our number of registerable regulators
* equal to the number of regulators we parsed . We are allocating
* too much memory for priv , but this is unavoidable at this point .
*
* As an example of how this can happen , try making a typo in your
* regulators node ( vviohi { } instead of viohi { } ) so that the name
* does not match . .
*
* The check will basically pass for platform data ( non - DT ) because
* mc13xxx_parse_regulators_dt for ! CONFIG_OF will not touch num_parsed .
*
*/
if ( num_parsed ! = num_regulators ) {
dev_warn ( & pdev - > dev ,
" parsed %d != regulators %d - check your device tree! \n " ,
num_parsed , num_regulators ) ;
num_regulators = num_parsed ;
priv - > num_regulators = num_regulators ;
}
ARRAY_SIZE ( mc13892_regulators ) ) ;
for ( i = 0 ; i < num_regulators ; i + + ) {
for ( i = 0 ; i < priv - > num_regulators ; i + + ) {
struct regulator_init_data * init_data ;
struct regulator_desc * desc ;
struct device_node * node = NULL ;