Ejemplo n.º 1
0
static irqreturn_t cp2ap_status_handler(int irq, void *data)
{
	struct modem_link_pm *pm = (struct modem_link_pm *)data;
	int cp2ap_status = gpio_get_value(pm->gpio_cp2ap_status);

	if (cp2ap_status)
		run_pm_fsm(pm, PM_EVENT_CP2AP_STATUS_HIGH);
	else
		run_pm_fsm(pm, PM_EVENT_CP2AP_STATUS_LOW);

	change_irq_level(irq, cp2ap_status);

	return IRQ_HANDLED;
}
Ejemplo n.º 2
0
static void cp_free_work_func(struct work_struct *ws)
{
	struct modem_link_pm *pm;

	pm = container_of(ws, struct modem_link_pm, cp_free_dwork.work);

	run_pm_fsm(pm, PM_EVENT_CP_HOLD_TIMEOUT);
}
Ejemplo n.º 3
0
/**
@brief	interrupt handler for a wakeup interrupt

1) Reads the interrupt value\n
2) Performs interrupt handling\n

@param irq	the IRQ number
@param data	the pointer to a data
*/
static irqreturn_t cp2ap_wakeup_handler(int irq, void *data)
{
	struct modem_link_pm *pm = (struct modem_link_pm *)data;
	int cp2ap_wakeup = gpio_get_value(pm->gpio_cp2ap_wakeup);

	mif_debug("%s: cp2ap_wakeup[%d]\n", __func__, cp2ap_wakeup);
	if (cp2ap_wakeup) {
		run_pm_fsm(pm, PM_EVENT_CP2AP_WAKEUP_HIGH);
	}
	else {
		run_pm_fsm(pm, PM_EVENT_CP2AP_WAKEUP_LOW);
	}

	change_irq_level(irq, cp2ap_wakeup);

	return IRQ_HANDLED;
}
Ejemplo n.º 4
0
static void pm_wdog_bark(unsigned long data)
{
	struct pm_wdog *wdog = (struct pm_wdog *)data;
	struct modem_link_pm *pm = wdog_to_pm(wdog);
	struct pm_fsm *fsm = &pm->fsm;
	enum pm_state c_state;
	unsigned long flags;

	spin_lock_irqsave(&pm->lock, flags);
	c_state = fsm->state;
	spin_unlock_irqrestore(&pm->lock, flags);

	if (wdog->w_state == c_state) {
		mif_err("%s: PM WDOG lost event {%s@%s}\n", pm->link_name,
			pm_event2str(wdog->w_event), pm_state2str(wdog->state));
		return;
	}

	run_pm_fsm(pm, PM_EVENT_WDOG_TIMEOUT);
}
Ejemplo n.º 5
0
static inline void link_error_cb(void *owner)
{
	struct modem_link_pm *pm = (struct modem_link_pm *)owner;
	run_pm_fsm(pm, PM_EVENT_LINK_ERROR);
}
Ejemplo n.º 6
0
static inline void link_mount_cb(void *owner)
{
	struct modem_link_pm *pm = (struct modem_link_pm *)owner;
	run_pm_fsm(pm, PM_EVENT_LINK_MOUNTED);
}
Ejemplo n.º 7
0
static inline void link_resume_cb(void *owner)
{
	struct modem_link_pm *pm = (struct modem_link_pm *)owner;
	run_pm_fsm(pm, PM_EVENT_LINK_RESUMED);
}
Ejemplo n.º 8
0
static inline void link_suspend_cb(void *owner)
{
	struct modem_link_pm *pm = (struct modem_link_pm *)owner;
	run_pm_fsm(pm, PM_EVENT_LINK_SUSPENDED);
}
Ejemplo n.º 9
0
static void request_hold(struct modem_link_pm *pm)
{
	run_pm_fsm(pm, PM_EVENT_CP_HOLD_REQUEST);
}