Add helper function tegra_fuse_add_lookups() to register Tegra fuse
nvmem lookups. So, this can be shared between tegra_fuse_init() and
ACPI probe, which is to be introduced later.

Use kmemdup_array to duplicate fuse->soc->lookups.

Signed-off-by: Kartik <kkar...@nvidia.com>
---
v3 -> v4:
        * Use kmemdup_array to duplicate fuse->soc->lookups.
        * Return err at the end of tegra_fuse_probe to remove
          redundant code.
v1 -> v2:
        * Use size_mul to calculate lookups array size.
---
 drivers/soc/tegra/fuse/fuse-tegra.c | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/drivers/soc/tegra/fuse/fuse-tegra.c 
b/drivers/soc/tegra/fuse/fuse-tegra.c
index 98805885158e..4ebb5597a77b 100644
--- a/drivers/soc/tegra/fuse/fuse-tegra.c
+++ b/drivers/soc/tegra/fuse/fuse-tegra.c
@@ -113,6 +113,18 @@ static void tegra_fuse_restore(void *base)
        fuse->clk = NULL;
 }
 
+static int tegra_fuse_add_lookups(struct tegra_fuse *fuse)
+{
+       fuse->lookups = kmemdup_array(fuse->soc->lookups, 
sizeof(*fuse->lookups),
+                                     fuse->soc->num_lookups, GFP_KERNEL);
+       if (!fuse->lookups)
+               return -ENOMEM;
+
+       nvmem_add_cell_lookups(fuse->lookups, fuse->soc->num_lookups);
+
+       return 0;
+}
+
 static int tegra_fuse_probe(struct platform_device *pdev)
 {
        void __iomem *base = fuse->base;
@@ -398,6 +410,7 @@ static int __init tegra_init_fuse(void)
        const struct of_device_id *match;
        struct device_node *np;
        struct resource regs;
+       int err;
 
        tegra_init_apbmisc();
 
@@ -495,15 +508,11 @@ static int __init tegra_init_fuse(void)
        pr_debug("Tegra CPU Speedo ID %d, SoC Speedo ID %d\n",
                 tegra_sku_info.cpu_speedo_id, tegra_sku_info.soc_speedo_id);
 
-       if (fuse->soc->lookups) {
-               size_t size = sizeof(*fuse->lookups) * fuse->soc->num_lookups;
+       err = tegra_fuse_add_lookups(fuse);
+       if (err)
+               pr_err("failed to add FUSE lookups\n");
 
-               fuse->lookups = kmemdup(fuse->soc->lookups, size, GFP_KERNEL);
-               if (fuse->lookups)
-                       nvmem_add_cell_lookups(fuse->lookups, 
fuse->soc->num_lookups);
-       }
-
-       return 0;
+       return err;
 }
 early_initcall(tegra_init_fuse);
 
-- 
2.34.1


Reply via email to