static irqreturn_t detect_irq_handler(int irq, void *dev_id)
{
	int value1, value2;
	int retry_limit = 10;
	unsigned long flags = 0;

	AJ_DBG("");

	spin_lock_irqsave(&pjack_info->spin_lock, flags);
	pjack_info->hpin_jiffies = jiffies;
	spin_unlock_irqrestore(&pjack_info->spin_lock, flags);

	do {
		value1 = gpio_get_value(pjack_info->audio_jack_detect);
		set_irq_type(pjack_info->irq_jack, value1 ?
				IRQF_TRIGGER_LOW : IRQF_TRIGGER_HIGH);
		value2 = gpio_get_value(pjack_info->audio_jack_detect);
	} while (value1 != value2 && retry_limit-- > 0);

	AJ_DBG("value2 = %d (%d retries)", value2, (10-retry_limit));

	if ((pjack_info->audio_jack_flag == 0) ^ value2) {
		if (pjack_info->wake_lock_ready)
			wake_lock_timeout
			(&pjack_info->audiojack_wake_lock, 4*HZ);

		/* Do the rest of the work in timer context */
		hrtimer_start(&pjack_info->detection_timer,
		pjack_info->debounce_time, HRTIMER_MODE_REL);
	}

	return IRQ_HANDLED;
}
static irqreturn_t detect_irq_handler(int irq, void *dev_id)
{
	pr_info("DET IRQ Handler\n");
	int value1, value2;
	int retry_limit = 10;

	hs_notify_hpin_irq();

	AJ_DBG("");

	do {
		value1 = gpio_get_value(pjack_info->audio_jack_detect);
		set_irq_type(pjack_info->irq_jack, value1 ?
				IRQF_TRIGGER_LOW : IRQF_TRIGGER_HIGH);
		value2 = gpio_get_value(pjack_info->audio_jack_detect);
	} while (value1 != value2 && retry_limit-- > 0);

	AJ_DBG("value2 = %d (%d retries)", value2, (10-retry_limit));

	if ((pjack_info->audio_jack_flag == 0) ^ value2) {
		wake_lock_timeout(&pjack_info->audiojack_wake_lock, 4*HZ);

		/* Do the rest of the work in timer context */
		hrtimer_start(&pjack_info->detection_timer,
		pjack_info->debounce_time, HRTIMER_MODE_REL);
	}

	return IRQ_HANDLED;
}
static irqreturn_t mic_irq_handler(int irq, void *dev_id)
{
	pr_info("MIC IRQ Handler\n");
	int value1, value2;
	int retry_limit = 10;

	AJ_DBG("");

	do {
		value1 = gpio_get_value(pjack_info->mic_detect);
		set_irq_type(pjack_info->irq_mic, value1 ? IRQF_TRIGGER_LOW : IRQF_TRIGGER_HIGH);
		value2 = gpio_get_value(pjack_info->mic_detect);
	} while (value1 != value2 && retry_limit-- > 0);

	AJ_DBG("value2 = %d (%d retries)", value2, (10-retry_limit));

	schedule_work(&pjack_info->mic_work);
	return IRQ_HANDLED;
}
Example #4
0
static enum hrtimer_restart detect_35mm_event_timer_func(struct hrtimer *data)
{
	int state;

	AJ_DBG("");
	state = !gpio_get_value(pjack_info->audio_jack_detect);
	if (pjack_info->audio_jack_flag != state) {
		pjack_info->audio_jack_flag = state;
		schedule_work(&pjack_info->work);
	}

	return HRTIMER_NORESTART;
}
static enum hrtimer_restart detect_35mm_event_timer_func(struct hrtimer *data)
{
#ifdef CONFIG_HTC_HEADSET
	int state;

	AJ_DBG("");
	state = !gpio_get_value(pjack_info->audio_jack_detect);
	if (pjack_info->audio_jack_flag != state) {
		pjack_info->audio_jack_flag = state;
		schedule_work(&pjack_info->work);
	}

	if (pjack_info->audio_jack_flag)
		pjack_info->debounce_time = ktime_set(0, 200000000);
						/*plug-out: 200ms*/
	else
		pjack_info->debounce_time = ktime_set(0, 500000000);
						/*plug-in: 500ms*/
#endif
	return HRTIMER_NORESTART;
}