int determine_lpm(void)
{
	if (exynos_check_aud_pwr() != AUD_PWR_LPA)
		return SYS_AFTR;

	if (check_hw_status(lpm_regs, lpm_reg_num)) {
		lpa_blocking_counter(1);
		return SYS_AFTR;
	}

	if (exynos_lpa_prepare()) {
		lpa_blocking_counter(0);
		return SYS_AFTR;
	}

#if defined(CONFIG_GPS_BCMxxxxx)
	if (check_gps_op())
		return SYS_AFTR;
#endif

	if (check_cp_status()) {
		lpa_blocking_counter(2);
		return SYS_AFTR;
	}
	return SYS_LPA;
}
bool is_lpc_available(unsigned int target_residency)
{
	if (!lpc_enabled)
		return false;

	if (is_busy(target_residency, cpu_online_mask))
		return false;

	if (check_hw_status(lpc_regs, lpc_reg_num))
		return false;

	if (exynos_lpc_prepare())
		return false;

	if (pwm_check_enable_cnt())
		return false;

#if defined(CONFIG_GPS_BCMxxxxx)
	if (check_gps_op())
		return false;
#endif

	if (check_cp_status())
		return false;

	return true;
}
static long spi_boot_ioctl(struct file *filp, unsigned int cmd,
			unsigned long arg)
{
	int ret = 0;
	struct modem_firmware img;
	struct modem_boot_spi *loader = filp->private_data;

	mutex_lock(&loader->lock);
	switch (cmd) {
	case IOCTL_MODEM_XMIT_BOOT:
		ret = copy_from_user(&img, (const void __user *)arg,
					sizeof(struct modem_firmware));
		if (ret) {
			mif_err("ERR! copy_from_user fail (err %d)\n", ret);
			ret = -EFAULT;
			goto exit_err;
		}
		mif_info("IOCTL_MODEM_XMIT_BOOT (size %d)\n", img.size);

		ret = spi_boot_write(loader, img.binary, img.size);
		if (ret < 0) {
			mif_err("ERR! spi_boot_write fail (err %d)\n", ret);
			break;
		}

		if (!loader->gpio_cp_status)
			break;

		ret = check_cp_status(loader->gpio_cp_status, 100);
		if (ret < 0) {
			mif_err("ERR! check_cp_status fail (err %d)\n", ret);
			c2c_reload();
		}

		break;

	default:
		mif_err("ioctl cmd error\n");
		ret = -ENOIOCTLCMD;

		break;
	}
	mutex_unlock(&loader->lock);

exit_err:
	return ret;
}