/** * 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); }
/** * 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); }