if (IS_ERR(ao_cec->adap))
                return PTR_ERR(ao_cec->adap);
 
-       ao_cec->notify = cec_notifier_cec_adap_register(hdmi_dev, NULL,
-                                                       ao_cec->adap);
-       if (!ao_cec->notify) {
-               ret = -ENOMEM;
-               goto out_probe_adapter;
-       }
-
        ao_cec->adap->owner = THIS_MODULE;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        base = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(base)) {
                ret = PTR_ERR(base);
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        ao_cec->regmap = devm_regmap_init_mmio(&pdev->dev, base,
                                               &meson_ao_cec_g12a_regmap_conf);
        if (IS_ERR(ao_cec->regmap)) {
                ret = PTR_ERR(ao_cec->regmap);
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        ao_cec->regmap_cec = devm_regmap_init(&pdev->dev, NULL, ao_cec,
                                           &meson_ao_cec_g12a_cec_regmap_conf);
        if (IS_ERR(ao_cec->regmap_cec)) {
                ret = PTR_ERR(ao_cec->regmap_cec);
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        irq = platform_get_irq(pdev, 0);
                                        0, NULL, ao_cec);
        if (ret) {
                dev_err(&pdev->dev, "irq request failed\n");
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        ao_cec->oscin = devm_clk_get(&pdev->dev, "oscin");
        if (IS_ERR(ao_cec->oscin)) {
                dev_err(&pdev->dev, "oscin clock request failed\n");
                ret = PTR_ERR(ao_cec->oscin);
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        ret = meson_ao_cec_g12a_setup_clk(ao_cec);
        if (ret)
-               goto out_probe_notify;
+               goto out_probe_adapter;
 
        ret = clk_prepare_enable(ao_cec->core);
        if (ret) {
                dev_err(&pdev->dev, "core clock enable failed\n");
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        device_reset_optional(&pdev->dev);
 
        platform_set_drvdata(pdev, ao_cec);
 
+       ao_cec->notify = cec_notifier_cec_adap_register(hdmi_dev, NULL,
+                                                       ao_cec->adap);
+       if (!ao_cec->notify) {
+               ret = -ENOMEM;
+               goto out_probe_core_clk;
+       }
+
        ret = cec_register_adapter(ao_cec->adap, &pdev->dev);
        if (ret < 0)
-               goto out_probe_core_clk;
+               goto out_probe_notify;
 
        /* Setup Hardware */
        regmap_write(ao_cec->regmap, CECB_GEN_CNTL_REG, CECB_GEN_CNTL_RESET);
 
        return 0;
 
-out_probe_core_clk:
-       clk_disable_unprepare(ao_cec->core);
-
 out_probe_notify:
        cec_notifier_cec_adap_unregister(ao_cec->notify);
 
+out_probe_core_clk:
+       clk_disable_unprepare(ao_cec->core);
+
 out_probe_adapter:
        cec_delete_adapter(ao_cec->adap);
 
 
        if (IS_ERR(ao_cec->adap))
                return PTR_ERR(ao_cec->adap);
 
-       ao_cec->notify = cec_notifier_cec_adap_register(hdmi_dev, NULL,
-                                                       ao_cec->adap);
-       if (!ao_cec->notify) {
-               ret = -ENOMEM;
-               goto out_probe_adapter;
-       }
-
        ao_cec->adap->owner = THIS_MODULE;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        ao_cec->base = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(ao_cec->base)) {
                ret = PTR_ERR(ao_cec->base);
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        irq = platform_get_irq(pdev, 0);
                                        0, NULL, ao_cec);
        if (ret) {
                dev_err(&pdev->dev, "irq request failed\n");
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        ao_cec->core = devm_clk_get(&pdev->dev, "core");
        if (IS_ERR(ao_cec->core)) {
                dev_err(&pdev->dev, "core clock request failed\n");
                ret = PTR_ERR(ao_cec->core);
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        ret = clk_prepare_enable(ao_cec->core);
        if (ret) {
                dev_err(&pdev->dev, "core clock enable failed\n");
-               goto out_probe_notify;
+               goto out_probe_adapter;
        }
 
        ret = clk_set_rate(ao_cec->core, CEC_CLK_RATE);
        ao_cec->pdev = pdev;
        platform_set_drvdata(pdev, ao_cec);
 
+       ao_cec->notify = cec_notifier_cec_adap_register(hdmi_dev, NULL,
+                                                       ao_cec->adap);
+       if (!ao_cec->notify) {
+               ret = -ENOMEM;
+               goto out_probe_clk;
+       }
+
        ret = cec_register_adapter(ao_cec->adap, &pdev->dev);
        if (ret < 0)
-               goto out_probe_clk;
+               goto out_probe_notify;
 
        /* Setup Hardware */
        writel_relaxed(CEC_GEN_CNTL_RESET,
 
        return 0;
 
-out_probe_clk:
-       clk_disable_unprepare(ao_cec->core);
-
 out_probe_notify:
        cec_notifier_cec_adap_unregister(ao_cec->notify);
 
+out_probe_clk:
+       clk_disable_unprepare(ao_cec->core);
+
 out_probe_adapter:
        cec_delete_adapter(ao_cec->adap);