static int hall_suspend(struct device *dev)
{
	struct hall_drvdata *ddata = dev_get_drvdata(dev);
	struct input_dev *input = ddata->input;

	printk("%s start\n", __func__);

/* need to be change */
/* Without below one line, it is not able to get the irq during freezing */
#ifdef CONFIG_SENSORS_HALL_IRQ_CTRL
	/* gsm_area can be controlled only in hall_irq_set */
	if (!g_drvdata->cover_state && g_drvdata->gsm_area)
		disable_irq_wake(ddata->irq_flip_cover);
	else
		enable_irq_wake(ddata->irq_flip_cover);
#else
	enable_irq_wake(ddata->irq_flip_cover);
#endif

	if (device_may_wakeup(dev)) {
		enable_irq_wake(ddata->irq_flip_cover);
	} else {
		mutex_lock(&input->mutex);
		if (input->users)
			hall_close(input);
		mutex_unlock(&input->mutex);
	}

	return 0;
}
static int hall_suspend(struct device *dev)
{
	struct hall_drvdata *ddata = dev_get_drvdata(dev);
	struct input_dev *input = ddata->input;

	printk("%s start\n", __func__);

	enable_irq_wake(ddata->irq_accessory);

	if (device_may_wakeup(dev)) {
		enable_irq_wake(ddata->irq_accessory);
	} else {
		mutex_lock(&input->mutex);
		if (input->users)
			hall_close(input);
		mutex_unlock(&input->mutex);
	}

	return 0;
}
Esempio n. 3
0
static int hall_suspend(struct device *dev)
{
	struct hall_drvdata *ddata = dev_get_drvdata(dev);
	struct input_dev *input = ddata->input;

	printk("%s start\n", __func__);

/* need to be change */
/* Without below one line, it is not able to get the irq during freezing */
	enable_irq_wake(ddata->irq_flip_cover);

	if (device_may_wakeup(dev)) {
		enable_irq_wake(ddata->irq_flip_cover);
	} else {
		mutex_lock(&input->mutex);
		if (input->users)
			hall_close(input);
		mutex_unlock(&input->mutex);
	}

	return 0;
}