static inline void imx7ulp_suspend(void __iomem *ocram_vbase) {}
void pm_vlls_notify_m4(bool enter) {}
#endif
+void pm_shutdown_notify_m4(void);
void imx6_pm_ccm_init(const char *ccm_compat);
void imx6q_pm_init(void);
/*
* Copyright (C) 2015 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
*
* derived from the omap-rpmsg implementation.
*
#include <linux/virtio_ids.h>
#include <linux/virtio_ring.h>
#include <linux/imx_rpmsg.h>
+#include "common.h"
struct imx_virdev {
struct virtio_device vdev;
return 0;
}
+static void imx_rpmsg_shutdown(struct platform_device *pdev)
+{
+ pm_shutdown_notify_m4();
+ pr_info("shutdown imx rpmsg.\n");
+}
+
static struct platform_driver imx_rpmsg_driver = {
.driver = {
.owner = THIS_MODULE,
},
.probe = imx_rpmsg_probe,
.remove = imx_rpmsg_remove,
+ .shutdown = imx_rpmsg_shutdown,
};
static int __init imx_rpmsg_init(void)
PM_RPMSG_WAIT,
PM_RPMSG_VLPS,
PM_RPMSG_VLLS,
+ PM_RPMSG_SHUTDOWN,
};
struct pm_rpmsg_info {
pm_send_message(&msg, &pm_rpmsg);
}
+void pm_shutdown_notify_m4(void)
+{
+ struct pm_rpmsg_data msg;
+
+ msg.header.cate = IMX_RMPSG_LIFECYCLE;
+ msg.header.major = IMX_RMPSG_MAJOR;
+ msg.header.minor = IMX_RMPSG_MINOR;
+ msg.header.type = PM_RPMSG_TYPE;
+ msg.header.cmd = PM_RPMSG_MODE;
+ msg.data = PM_RPMSG_SHUTDOWN;
+
+ pm_send_message(&msg, &pm_rpmsg);
+
+}
+
static void pm_heart_beat_work_handler(struct work_struct *work)
{
struct pm_rpmsg_data msg;