diff --git a/software/kernel/spec-core.c b/software/kernel/spec-core.c
index 16b00dcf203b2ed600b23cf7433f6fbe1f9ebf30..a8ee61571a308921a183c2772e5add978ef08de4 100644
--- a/software/kernel/spec-core.c
+++ b/software/kernel/spec-core.c
@@ -82,16 +82,9 @@ static ssize_t spec_dbg_fw_write(struct file *file,
 	return count;
 }
 
-static int spec_dbg_fw_open(struct inode *inode, struct file *file)
-{
-	file->private_data = inode->i_private;
-
-	return 0;
-}
-
 static const struct file_operations spec_dbg_fw_ops = {
 	.owner = THIS_MODULE,
-	.open  = spec_dbg_fw_open,
+	.open  = simple_open,
 	.write = spec_dbg_fw_write,
 };
 
@@ -279,12 +272,10 @@ static int spec_gpio_init_table(struct spec_gn412x *spec_gn412x)
 	struct gpiod_lookup_table *lookup;
 	int err = 0;
 
-	lookup = kzalloc(spec_gpiod_table_size(), GFP_KERNEL);
+	lookup = kmemdup(&spec_gpiod_table, spec_gpiod_table_size(), GFP_KERNEL);
 	if (!lookup)
 		return -ENOMEM;
 
-	memcpy(lookup, &spec_gpiod_table, spec_gpiod_table_size());
-
 	lookup->dev_id = kstrdup(dev_name(&spec_gn412x->pdev->dev), GFP_KERNEL);
 	if (!lookup->dev_id)
 		goto err_dup;