ARM: imx: use device_initcall for imx_soc_device_init
authorPeng Fan <peng.fan@nxp.com>
Wed, 20 May 2020 05:51:27 +0000 (13:51 +0800)
committerShawn Guo <shawnguo@kernel.org>
Wed, 20 May 2020 15:03:42 +0000 (23:03 +0800)
This is preparation to move imx_soc_device_init to drivers/soc/imx/

There is no reason to must put dt devices under /sys/devices/soc0,
they could also be under /sys/devices/platform, so we could
pass NULL as parent when calling of_platform_default_populate.

Following soc-imx8.c soc-imx-scu.c using device_initcall, need
to change return type to int type for imx_soc_device_init.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm/mach-imx/common.h
arch/arm/mach-imx/cpu.c
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-imx/mach-imx6sl.c
arch/arm/mach-imx/mach-imx6sx.c
arch/arm/mach-imx/mach-imx6ul.c
arch/arm/mach-imx/mach-imx7d.c
arch/arm/mach-imx/mach-imx7ulp.c
arch/arm/mach-imx/mach-vf610.c

index 5aa5796cff0e19280208379ceae42df22da4c452..72c3fcc329106d271930acd80197e92fbb8b0d05 100644 (file)
@@ -49,7 +49,6 @@ void imx_aips_allow_unprivileged_access(const char *compat);
 int mxc_device_init(void);
 void imx_set_soc_revision(unsigned int rev);
 void imx_init_revision_from_anatop(void);
-struct device *imx_soc_device_init(void);
 void imx6_enable_rbc(bool enable);
 void imx_gpc_check_dt(void);
 void imx_gpc_set_arm_power_in_lpm(bool power_off);
index e3d12b21d6f6e41a0287537d6f2b1d8e50913cfa..75ffcba9f8788bdd476b019665a06e119680e649 100644 (file)
@@ -83,7 +83,7 @@ void __init imx_aips_allow_unprivileged_access(
        }
 }
 
-struct device * __init imx_soc_device_init(void)
+static int __init imx_soc_device_init(void)
 {
        struct soc_device_attribute *soc_dev_attr;
        const char *ocotp_compat = NULL;
@@ -97,7 +97,7 @@ struct device * __init imx_soc_device_init(void)
 
        soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
        if (!soc_dev_attr)
-               return NULL;
+               return -ENOMEM;
 
        soc_dev_attr->family = "Freescale i.MX";
 
@@ -224,18 +224,24 @@ struct device * __init imx_soc_device_init(void)
        soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%d.%d",
                                           (imx_soc_revision >> 4) & 0xf,
                                           imx_soc_revision & 0xf);
-       if (!soc_dev_attr->revision)
+       if (!soc_dev_attr->revision) {
+               ret = -ENOMEM;
                goto free_soc;
+       }
 
        soc_dev_attr->serial_number = kasprintf(GFP_KERNEL, "%016llX", soc_uid);
-       if (!soc_dev_attr->serial_number)
+       if (!soc_dev_attr->serial_number) {
+               ret = -ENOMEM;
                goto free_rev;
+       }
 
        soc_dev = soc_device_register(soc_dev_attr);
-       if (IS_ERR(soc_dev))
+       if (IS_ERR(soc_dev)) {
+               ret = PTR_ERR(soc_dev);
                goto free_serial_number;
+       }
 
-       return soc_device_to_device(soc_dev);
+       return 0;
 
 free_serial_number:
        kfree(soc_dev_attr->serial_number);
@@ -243,5 +249,6 @@ free_rev:
        kfree(soc_dev_attr->revision);
 free_soc:
        kfree(soc_dev_attr);
-       return NULL;
+       return ret;
 }
+device_initcall(imx_soc_device_init);
index 284bce1112d21d8e8ee98757c67ffa1024397912..85c084a716ab9b10e2838cc8077beeb61f3236ff 100644 (file)
@@ -245,21 +245,15 @@ static void __init imx6q_axi_init(void)
 
 static void __init imx6q_init_machine(void)
 {
-       struct device *parent;
-
        if (cpu_is_imx6q() && imx_get_soc_revision() == IMX_CHIP_REVISION_2_0)
                imx_print_silicon_rev("i.MX6QP", IMX_CHIP_REVISION_1_0);
        else
                imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q",
                                imx_get_soc_revision());
 
-       parent = imx_soc_device_init();
-       if (parent == NULL)
-               pr_warn("failed to initialize soc device\n");
-
        imx6q_enet_phy_init();
 
-       of_platform_default_populate(NULL, NULL, parent);
+       of_platform_default_populate(NULL, NULL, NULL);
 
        imx_anatop_init();
        cpu_is_imx6q() ?  imx6q_pm_init() : imx6dl_pm_init();
index e27a6889cc566634b673b3b9ecf589ce2d46eec2..f6e87363d605bd07bd3e5c0fe0d94f6f498a94a0 100644 (file)
@@ -45,13 +45,7 @@ static void __init imx6sl_init_late(void)
 
 static void __init imx6sl_init_machine(void)
 {
-       struct device *parent;
-
-       parent = imx_soc_device_init();
-       if (parent == NULL)
-               pr_warn("failed to initialize soc device\n");
-
-       of_platform_default_populate(NULL, NULL, parent);
+       of_platform_default_populate(NULL, NULL, NULL);
 
        if (cpu_is_imx6sl())
                imx6sl_fec_init();
index d5310bf307ffaa66c756378cd9b3625e0ba5e788..781e2a94fdd7497ac7d576c8609623e068fe32e4 100644 (file)
@@ -63,13 +63,7 @@ static inline void imx6sx_enet_init(void)
 
 static void __init imx6sx_init_machine(void)
 {
-       struct device *parent;
-
-       parent = imx_soc_device_init();
-       if (parent == NULL)
-               pr_warn("failed to initialize soc device\n");
-
-       of_platform_default_populate(NULL, NULL, parent);
+       of_platform_default_populate(NULL, NULL, NULL);
 
        imx6sx_enet_init();
        imx_anatop_init();
index 3b0e16ccd59d886218fa6705df0e860b4c360e2c..e018e716735f70f9dea2dcf4a00cbece329693f5 100644 (file)
@@ -55,13 +55,7 @@ static inline void imx6ul_enet_init(void)
 
 static void __init imx6ul_init_machine(void)
 {
-       struct device *parent;
-
-       parent = imx_soc_device_init();
-       if (parent == NULL)
-               pr_warn("failed to initialize soc device\n");
-
-       of_platform_default_populate(NULL, NULL, parent);
+       of_platform_default_populate(NULL, NULL, NULL);
        imx6ul_enet_init();
        imx_anatop_init();
        imx6ul_pm_init();
index ebb27592a9f754cce32cb15bb7a86938e5896843..879c35929a13fddb65589e43afa99e1fddb79a4f 100644 (file)
@@ -78,12 +78,6 @@ static inline void imx7d_enet_init(void)
 
 static void __init imx7d_init_machine(void)
 {
-       struct device *parent;
-
-       parent = imx_soc_device_init();
-       if (parent == NULL)
-               pr_warn("failed to initialize soc device\n");
-
        imx_anatop_init();
        imx7d_enet_init();
 }
index 11ac71aaf965a45c3eab9b43fb6b4512fb357451..128cf4c92aab7a15acb03377aa30dbf7571ace47 100644 (file)
@@ -57,7 +57,7 @@ static void __init imx7ulp_init_machine(void)
 
        mxc_set_cpu_type(MXC_CPU_IMX7ULP);
        imx7ulp_set_revision();
-       of_platform_default_populate(NULL, NULL, imx_soc_device_init());
+       of_platform_default_populate(NULL, NULL, NULL);
 }
 
 static const char *const imx7ulp_dt_compat[] __initconst = {
index 565dc08412a2e55b441b2fbce4862b10ab00d6e1..208ff640698dbef33597d3ce5097262741fd0a7d 100644 (file)
@@ -49,15 +49,9 @@ static void __init vf610_detect_cpu(void)
 
 static void __init vf610_init_machine(void)
 {
-       struct device *parent;
-
        vf610_detect_cpu();
 
-       parent = imx_soc_device_init();
-       if (parent == NULL)
-               pr_warn("failed to initialize soc device\n");
-
-       of_platform_default_populate(NULL, NULL, parent);
+       of_platform_default_populate(NULL, NULL, NULL);
 }
 
 static const char * const vf610_dt_compat[] __initconst = {