static int am33xx_pm_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; int ret; if (!of_machine_is_compatible("ti,am33xx") && !of_machine_is_compatible("ti,am43")) return -ENODEV; pm_ops = dev->platform_data; if (!pm_ops) { dev_err(dev, "PM: Cannot get core PM ops!\n"); return -ENODEV; } pm_sram = pm_ops->get_sram_addrs(); if (!pm_sram) { dev_err(dev, "PM: Cannot get PM asm function addresses!!\n"); return -ENODEV; } pm33xx_dev = dev; ret = am33xx_pm_alloc_sram(); if (ret) return ret; ret = am33xx_push_sram_idle(); if (ret) goto err_free_sram; m3_ipc = wkup_m3_ipc_get(); if (!m3_ipc) { dev_dbg(dev, "PM: Cannot get wkup_m3_ipc handle\n"); ret = -EPROBE_DEFER; goto err_free_sram; } am33xx_pm_set_ipc_ops(); #ifdef CONFIG_SUSPEND suspend_set_ops(&am33xx_pm_ops); #endif /* CONFIG_SUSPEND */ ret = pm_ops->init(); if (ret) { dev_err(dev, "Unable to call core pm init!\n"); ret = -ENODEV; goto err_put_wkup_m3_ipc; } return 0; err_put_wkup_m3_ipc: wkup_m3_ipc_put(m3_ipc); err_free_sram: am33xx_pm_free_sram(); pm33xx_dev = NULL; return ret; }
static int am33xx_pm_probe(struct platform_device *pdev) { int ret; if (!of_machine_is_compatible("ti,am33xx") && !of_machine_is_compatible("ti,am43")) return -ENODEV; ret = am43xx_map_gic(); if (ret) { pr_err("PM: Could not ioremap SCU\n"); return ret; } pm_sram = amx3_get_sram_addrs(); if (!pm_sram) { pr_err("PM: Cannot get PM asm function addresses!!\n"); return -ENODEV; } pm_ops = amx3_get_pm_ops(); if (!pm_ops) { pr_err("PM: Cannot get core PM ops!\n"); return -ENODEV; } ret = am33xx_prepare_push_sram_idle(); if (ret) return ret; ret = am33xx_pm_rtc_setup(); if (ret) return ret; am33xx_push_sram_idle(); am33xx_pm_set_ipc_ops(); #ifdef CONFIG_SUSPEND suspend_set_ops(&am33xx_pm_ops); #endif /* CONFIG_SUSPEND */ suspend_wfi_flags = 0; suspend_wfi_flags |= WFI_FLAG_SELF_REFRESH; suspend_wfi_flags |= WFI_FLAG_SAVE_EMIF; suspend_wfi_flags |= WFI_FLAG_DISABLE_EMIF; suspend_wfi_flags |= WFI_FLAG_WAKE_M3; ret = pm_ops->init(am33xx_do_sram_idle); if (ret) { pr_err("Unable to call core pm init!\n"); return -ENODEV; } return 0; }