Esempio n. 1
0
void modem_crash_shutdown(const struct subsys_desc *subsys)
{
	struct q6v4_modem *drv = desc_to_modem(subsys);

	drv->crash_shutdown = 1;
	smsm_reset_modem(SMSM_RESET);
}
Esempio n. 2
0
static int modem_ramdump(int enable, const struct subsys_desc *subsys)
{
	struct q6v4_modem *drv = desc_to_modem(subsys);
	int ret;

	if (!enable)
		return 0;

	ret = do_ramdump(drv->sw_ramdump_dev, sw_segments,
		ARRAY_SIZE(sw_segments));
	if (ret < 0)
		return ret;

	ret = do_ramdump(drv->fw_ramdump_dev, fw_segments,
		ARRAY_SIZE(fw_segments));
	if (ret < 0)
		return ret;

	ret = do_ramdump(drv->smem_ramdump_dev, smem_segments,
		ARRAY_SIZE(smem_segments));
	if (ret < 0)
		return ret;

	return 0;
}
static void modem_stop(const struct subsys_desc *desc)
{
	struct q6v4_modem *drv = desc_to_modem(desc);
	if (drv->loadable) {
		pil_shutdown(&drv->q6_sw.desc);
		pil_shutdown(&drv->q6_fw.desc);
	}
}
Esempio n. 4
0
static int modem_powerup(const struct subsys_desc *subsys)
{
	struct q6v4_modem *drv = desc_to_modem(subsys);

	if (drv->loadable) {
		pil_force_boot("modem_fw");
		pil_force_boot("modem");
	}
	enable_irq(drv->q6_fw.wdog_irq);
	enable_irq(drv->q6_sw.wdog_irq);
	return 0;
}
static int modem_start(const struct subsys_desc *desc)
{
	struct q6v4_modem *drv = desc_to_modem(desc);
	int ret = 0;

	if (drv->loadable) {
		ret = pil_boot(&drv->q6_fw.desc);
		if (ret)
			return ret;
		ret = pil_boot(&drv->q6_sw.desc);
		if (ret)
			pil_shutdown(&drv->q6_fw.desc);
	}
	return ret;
}
Esempio n. 6
0
static int modem_shutdown(const struct subsys_desc *subsys)
{
	struct q6v4_modem *drv = desc_to_modem(subsys);

	/* The watchdogs keep running even after the modem is shutdown */
	writel_relaxed(0x0, drv->q6_fw.wdog_base + 0x24);
	writel_relaxed(0x0, drv->q6_sw.wdog_base + 0x24);
	mb();

	if (drv->loadable) {
		pil_force_shutdown("modem");
		pil_force_shutdown("modem_fw");
	}

	disable_irq_nosync(drv->q6_fw.wdog_irq);
	disable_irq_nosync(drv->q6_sw.wdog_irq);

	return 0;
}
static int modem_powerup(const struct subsys_desc *subsys)
{
	struct q6v4_modem *drv = desc_to_modem(subsys);
	int ret;

	if (drv->loadable) {
		ret = pil_boot(&drv->q6_fw.desc);
		if (ret)
			return ret;
		ret = pil_boot(&drv->q6_sw.desc);
		if (ret) {
			pil_shutdown(&drv->q6_fw.desc);
			return ret;
		}
	}
	enable_irq(drv->q6_fw.wdog_irq);
	enable_irq(drv->q6_sw.wdog_irq);
	return 0;
}