in clients/ssi_protocol.c [716:747]
static void ssip_rx_waketest(struct hsi_client *cl, u32 cmd)
{
struct ssi_protocol *ssi = hsi_client_drvdata(cl);
unsigned int wkres = SSIP_PAYLOAD(cmd);
spin_lock_bh(&ssi->lock);
if (ssi->main_state != HANDSHAKE) {
dev_dbg(&cl->device, "wake lines test ignored M(%d)\n",
ssi->main_state);
spin_unlock_bh(&ssi->lock);
return;
}
spin_unlock_bh(&ssi->lock);
if (test_and_clear_bit(SSIP_WAKETEST_FLAG, &ssi->flags))
ssi_waketest(cl, 0); /* FIXME: To be removed */
spin_lock_bh(&ssi->lock);
ssi->main_state = ACTIVE;
del_timer(&ssi->tx_wd); /* Stop boot handshake timer */
spin_unlock_bh(&ssi->lock);
dev_notice(&cl->device, "WAKELINES TEST %s\n",
wkres & SSIP_WAKETEST_FAILED ? "FAILED" : "OK");
if (wkres & SSIP_WAKETEST_FAILED) {
ssip_error(cl);
return;
}
dev_dbg(&cl->device, "CMT is ONLINE\n");
netif_wake_queue(ssi->netdev);
netif_carrier_on(ssi->netdev);
}