@@ -1461,7 +1461,7 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
1461
1461
const char * consumer_dev_name ,
1462
1462
const char * supply )
1463
1463
{
1464
- struct regulator_map * node ;
1464
+ struct regulator_map * node , * new_node ;
1465
1465
int has_dev ;
1466
1466
1467
1467
if (supply == NULL )
@@ -1472,6 +1472,22 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
1472
1472
else
1473
1473
has_dev = 0 ;
1474
1474
1475
+ new_node = kzalloc (sizeof (struct regulator_map ), GFP_KERNEL );
1476
+ if (new_node == NULL )
1477
+ return - ENOMEM ;
1478
+
1479
+ new_node -> regulator = rdev ;
1480
+ new_node -> supply = supply ;
1481
+
1482
+ if (has_dev ) {
1483
+ new_node -> dev_name = kstrdup (consumer_dev_name , GFP_KERNEL );
1484
+ if (new_node -> dev_name == NULL ) {
1485
+ kfree (new_node );
1486
+ return - ENOMEM ;
1487
+ }
1488
+ }
1489
+
1490
+ mutex_lock (& regulator_list_mutex );
1475
1491
list_for_each_entry (node , & regulator_map_list , list ) {
1476
1492
if (node -> dev_name && consumer_dev_name ) {
1477
1493
if (strcmp (node -> dev_name , consumer_dev_name ) != 0 )
@@ -1489,26 +1505,19 @@ static int set_consumer_device_supply(struct regulator_dev *rdev,
1489
1505
node -> regulator -> desc -> name ,
1490
1506
supply ,
1491
1507
dev_name (& rdev -> dev ), rdev_get_name (rdev ));
1492
- return - EBUSY ;
1508
+ goto fail ;
1493
1509
}
1494
1510
1495
- node = kzalloc (sizeof (struct regulator_map ), GFP_KERNEL );
1496
- if (node == NULL )
1497
- return - ENOMEM ;
1498
-
1499
- node -> regulator = rdev ;
1500
- node -> supply = supply ;
1501
-
1502
- if (has_dev ) {
1503
- node -> dev_name = kstrdup (consumer_dev_name , GFP_KERNEL );
1504
- if (node -> dev_name == NULL ) {
1505
- kfree (node );
1506
- return - ENOMEM ;
1507
- }
1508
- }
1511
+ list_add (& new_node -> list , & regulator_map_list );
1512
+ mutex_unlock (& regulator_list_mutex );
1509
1513
1510
- list_add (& node -> list , & regulator_map_list );
1511
1514
return 0 ;
1515
+
1516
+ fail :
1517
+ mutex_unlock (& regulator_list_mutex );
1518
+ kfree (new_node -> dev_name );
1519
+ kfree (new_node );
1520
+ return - EBUSY ;
1512
1521
}
1513
1522
1514
1523
static void unset_regulator_supplies (struct regulator_dev * rdev )
@@ -5269,19 +5278,16 @@ regulator_register(const struct regulator_desc *regulator_desc,
5269
5278
5270
5279
/* add consumers devices */
5271
5280
if (init_data ) {
5272
- mutex_lock (& regulator_list_mutex );
5273
5281
for (i = 0 ; i < init_data -> num_consumer_supplies ; i ++ ) {
5274
5282
ret = set_consumer_device_supply (rdev ,
5275
5283
init_data -> consumer_supplies [i ].dev_name ,
5276
5284
init_data -> consumer_supplies [i ].supply );
5277
5285
if (ret < 0 ) {
5278
- mutex_unlock (& regulator_list_mutex );
5279
5286
dev_err (dev , "Failed to set supply %s\n" ,
5280
5287
init_data -> consumer_supplies [i ].supply );
5281
5288
goto unset_supplies ;
5282
5289
}
5283
5290
}
5284
- mutex_unlock (& regulator_list_mutex );
5285
5291
}
5286
5292
5287
5293
if (!rdev -> desc -> ops -> get_voltage &&
0 commit comments