diff --git a/kernel/spec-fmc.c b/kernel/spec-fmc.c
index ec8ad67d89961b2f970e339c4439a13962018541..5e56c5dd7efedd8544b22c0f118ceac595738c71 100644
--- a/kernel/spec-fmc.c
+++ b/kernel/spec-fmc.c
@@ -449,10 +449,12 @@ out_free:
 
 void spec_fmc_destroy(struct spec_dev *spec)
 {
+	/* undo the things in the reverse order, but pin the device first */
+	get_device(&spec->fmc->dev);
 	spec_gpio_exit(spec->fmc);
 	fmc_device_unregister(spec->fmc);
 	spec_irq_exit(spec->fmc);
 	spec_i2c_exit(spec->fmc);
-	kfree(spec->fmc);
+	put_device(&spec->fmc->dev);
 	spec->fmc = NULL;
 }