Merge tag 'pm-6.9-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
[linux-block.git] / drivers / nvmem / mtk-efuse.c
index 84f05b40a4112ed7878e94504de48eec3737e3ad..9caf046673410129e5fd595e23adceb6bd0772a8 100644 (file)
@@ -68,6 +68,7 @@ static int mtk_efuse_probe(struct platform_device *pdev)
        struct nvmem_config econfig = {};
        struct mtk_efuse_priv *priv;
        const struct mtk_efuse_pdata *pdata;
+       struct platform_device *socinfo;
 
        priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
        if (!priv)
@@ -88,8 +89,16 @@ static int mtk_efuse_probe(struct platform_device *pdev)
        if (pdata->uses_post_processing)
                econfig.fixup_dt_cell_info = &mtk_efuse_fixup_dt_cell_info;
        nvmem = devm_nvmem_register(dev, &econfig);
+       if (IS_ERR(nvmem))
+               return PTR_ERR(nvmem);
 
-       return PTR_ERR_OR_ZERO(nvmem);
+       socinfo = platform_device_register_data(&pdev->dev, "mtk-socinfo",
+                                               PLATFORM_DEVID_AUTO, NULL, 0);
+       if (IS_ERR(socinfo))
+               dev_info(dev, "MediaTek SoC Information will be unavailable\n");
+
+       platform_set_drvdata(pdev, socinfo);
+       return 0;
 }
 
 static const struct mtk_efuse_pdata mtk_mt8186_efuse_pdata = {
@@ -108,8 +117,17 @@ static const struct of_device_id mtk_efuse_of_match[] = {
 };
 MODULE_DEVICE_TABLE(of, mtk_efuse_of_match);
 
+static void mtk_efuse_remove(struct platform_device *pdev)
+{
+       struct platform_device *socinfo = platform_get_drvdata(pdev);
+
+       if (!IS_ERR_OR_NULL(socinfo))
+               platform_device_unregister(socinfo);
+}
+
 static struct platform_driver mtk_efuse_driver = {
        .probe = mtk_efuse_probe,
+       .remove_new = mtk_efuse_remove,
        .driver = {
                .name = "mediatek,efuse",
                .of_match_table = mtk_efuse_of_match,