/**
 * Handles transmission timer expiration.
 * @param data Not used.
 */
static void bluesleep_tx_timer_expire(unsigned long data)
{
	unsigned long irq_flags;

	if (debug_mask & DEBUG_VERBOSE)
		pr_info("Tx timer expired\n");

	spin_lock_irqsave(&rw_lock, irq_flags);

	/* were we silent during the last timeout? */
	if (!test_bit(BT_TXDATA, &flags)) {
		if (debug_mask & DEBUG_SUSPEND)
			pr_info("Tx has been idle\n");

		if (debug_mask & DEBUG_BTWAKE)
			pr_info("BT WAKE: set to sleep\n");

		if (bsi->has_ext_wake == 1)
			gpio_set_value(bsi->ext_wake, 1);

		set_bit(BT_EXT_WAKE, &flags);
		bluesleep_tx_idle();
	} else {
		if (debug_mask & DEBUG_SUSPEND)
			pr_info("Tx data during last period\n");
		mod_timer(&tx_timer, jiffies + (TX_TIMER_INTERVAL * HZ));
	}

	/* clear the incoming data flag */
	clear_bit(BT_TXDATA, &flags);

	spin_unlock_irqrestore(&rw_lock, irq_flags);
}
/**
 * Handles transmission	timer expiration.
 * @param data Not used.
 */
static void	bluesleep_tx_timer_expire(unsigned long	data)
{
	unsigned long irq_flags = 0;
	struct bluetooth_sleep_data *bs_data = (struct bluetooth_sleep_data *)data;

	if (NULL == bs_data) {
		pr_err("%s: bluetooth_sleep_data is null\n", __func__);
		return;
	}

	spin_lock_irqsave(&bs_data->rw_lock, irq_flags);

	pr_info("Tx timer expired\n");

	/* were	we silent during the last timeout? */
	if (!test_bit(BT_TXDATA, &bs_data->flags)) {
		pr_info("Tx has been idle\n");
		gpio_set_value(bs_data->gpio_host_wake_bt.gpio, LPM_BT_WAKE_DEASSERT);
		bluesleep_tx_idle();
	} else {
		pr_info("Tx data during last	period\n");
		mod_timer(&bs_data->tx_timer, jiffies + (TX_TIMER_INTERVAL*HZ));
	}

	/* clear the incoming data flag	*/
	spin_unlock_irqrestore(&bs_data->rw_lock, irq_flags);
}
Exemple #3
0
/**
 * Handles transmission timer expiration.
 * @param data Not used.
 */
static void bluesleep_tx_timer_expire(unsigned long data)
{
	/* were we silent during the last timeout? */
	if (!test_bit(BT_TXDATA, &flags)) {
		BT_DBG("Tx has been idle");

		bluesleep_tx_idle();
	} else {
		BT_DBG("Tx data during last period");
		mod_timer(&tx_timer, jiffies + (TX_TIMER_INTERVAL*HZ));
	}

	/* clear the incoming data flag */
	clear_bit(BT_TXDATA, &flags);
}