Exemple #1
0
int mhi_suspend(struct pci_dev *pcie_dev, pm_message_t state)
{
	int r = 0;
	mhi_device_ctxt *mhi_dev_ctxt =
		*(mhi_device_ctxt **)((pcie_dev->dev).platform_data);
	mhi_log(MHI_MSG_ERROR, "[%s]\n", __func__);
	if (NULL == mhi_dev_ctxt)
		return -EINVAL;
	mhi_log(MHI_MSG_INFO, "Entered, sys state %d, MHI state %d\n",
			state.event, mhi_dev_ctxt->mhi_state);
	atomic_set(&mhi_dev_ctxt->flags.pending_resume, 1);
	r = cancel_work_sync(&mhi_dev_ctxt->m0_work);
	if (r) {
		atomic_set(&mhi_dev_ctxt->flags.m0_work_enabled, 0);
		mhi_log(MHI_MSG_INFO, "M0 work cancelled\n");
	}

	r = mhi_initiate_m3(mhi_dev_ctxt);
	if (!r)
		return r;

	atomic_set(&mhi_dev_ctxt->flags.pending_resume, 0);
	mhi_log(MHI_MSG_ERROR, "Failing suspend sequence ret: %d\n",
						r);
	return r;
}
void delayed_m3(struct work_struct *work)
{
	struct delayed_work *del_work = to_delayed_work(work);
	mhi_device_ctxt *mhi_dev_ctxt = container_of(del_work, mhi_device_ctxt, m3_work);
	mhi_initiate_m3(mhi_dev_ctxt);

}
Exemple #3
0
ssize_t sysfs_init_M3(struct device *dev, struct device_attribute *attr,
		const char *buf, size_t count)
{
	int r = 0;
	mhi_device_ctxt *mhi_dev_ctxt = mhi_devices.device_list[0].mhi_ctxt;
	r = mhi_initiate_m3(mhi_dev_ctxt);
	if (r) {
		mhi_log(MHI_MSG_CRITICAL | MHI_DBG_POWER,
				"Failed to suspend %d\n", r);
		return r;
	}
	return count;
}