diff --git a/drivers/staging/greybus/power_supply.c b/drivers/staging/greybus/power_supply.c
index 3c9bb12351e447f422a4b3ba50e10dd011908934..d985e13b5a0de545074668a9d41c8874beb83cc4 100644
--- a/drivers/staging/greybus/power_supply.c
+++ b/drivers/staging/greybus/power_supply.c
@@ -544,13 +544,10 @@ static void _gb_power_supply_free(struct gb_power_supply *gbpsy)
 	kfree(gbpsy->manufacturer);
 	kfree(gbpsy->props_raw);
 	kfree(gbpsy->props);
-	kfree(gbpsy);
 }
 
 static void _gb_power_supply_release(struct gb_power_supply *gbpsy)
 {
-	if (!gbpsy)
-		return;
 
 	gbpsy->update_interval = 0;
 
@@ -576,6 +573,7 @@ static void _gb_power_supplies_release(struct gb_power_supplies *supplies)
 	mutex_lock(&supplies->supplies_lock);
 	for (i = 0; i < supplies->supplies_count; i++)
 		_gb_power_supply_release(&supplies->supply[i]);
+	kfree(supplies->supply);
 	mutex_unlock(&supplies->supplies_lock);
 	kfree(supplies);
 }