* Copyright (c) 2000-2005 ZyDAS Technology Corporation
* Copyright (c) 2007-2009 Atheros Communications, Inc.
* Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
- * Copyright 2009, 2010 Christian Lamparter <chunkeey@googlemail.com>
+ * Copyright 2009-2011 Christian Lamparter <chunkeey@googlemail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "shared/phy.h"
#ifdef CONFIG_CARL9170FW_RADIO_FUNCTIONS
-static void set_channel_start(void)
-{
- /* Manipulate CCA threshold to stop transmission */
- set(AR9170_PHY_REG_CCA_THRESHOLD, 0x300);
- /* Enable Virtual CCA */
- orl(AR9170_MAC_REG_QOS_PRIORITY_VIRTUAL_CCA,
- AR9170_MAC_VIRTUAL_CCA_ALL);
-}
-
static void set_channel_end(void)
{
/* Manipulate CCA threshold to resume transmission */
/* Disable Virtual CCA */
andl(AR9170_MAC_REG_QOS_PRIORITY_VIRTUAL_CCA,
~AR9170_MAC_VIRTUAL_CCA_ALL);
+
+ fw.phy.state = CARL9170_PHY_ON;
}
void rf_notify_set_channel(void)
{
- set_channel_start();
+ /* Manipulate CCA threshold to stop transmission */
+ set(AR9170_PHY_REG_CCA_THRESHOLD, 0x300);
+ /* Enable Virtual CCA */
+ orl(AR9170_MAC_REG_QOS_PRIORITY_VIRTUAL_CCA,
+ AR9170_MAC_VIRTUAL_CCA_ALL);
+
+ /* reset CCA stats */
+ fw.tally.active = 0;
+ fw.tally.cca = 0;
+ fw.tally.tx_time = 0;
+ fw.phy.state = CARL9170_PHY_OFF;
}
/*
set(AR9170_PHY_REG_ANALOG_SWAP, AR9170_PHY_ANALOG_SWAP_AB |
AR9170_PHY_ANALOG_SWAP_ALT_CHAIN);
- /* configure mask */
- set(AR9170_PHY_REG_RX_CHAINMASK, 0x5); /* chain 0 + chain 2 */
- set(AR9170_PHY_REG_CAL_CHAINMASK, 0x5); /* chain 0 + chain 2 */
-
/* Activate BB */
set(AR9170_PHY_REG_ACTIVE, AR9170_PHY_ACTIVE_EN);
delay(10);
fw.phy.ht_settings = cmd->rf_init.ht_settings;
fw.phy.frequency = cmd->rf_init.freq;
+ /*
+ * Is the clock controlled by the PHY?
+ */
if ((fw.phy.ht_settings & EIGHTY_FLAG) == EIGHTY_FLAG)
- clock_set(true, AHB_80_88MHZ);
+ clock_set(AHB_80_88MHZ, true);
else
- clock_set(true, AHB_40_44MHZ);
+ clock_set(AHB_40_44MHZ, true);
ret = rf_init(le32_to_cpu(cmd->rf_init.delta_slope_coeff_exp),
le32_to_cpu(cmd->rf_init.delta_slope_coeff_man),
resp->rf_init_res.ret = cpu_to_le32(ret);
}
-#ifdef CONFIG_CARL9170FW_PSM
void rf_psm(void)
{
u32 bank3;
- /*
- * FIXME: Does not work on 5GHz band!
- */
-
if (fw.phy.psm.state == CARL9170_PSM_SOFTWARE) {
/* not enabled by the driver */
return;
/* Synthesizer off + RX off */
bank3 = 0x00400018;
- clock_set(true, AHB_20_22MHZ);
+ fw.phy.state = CARL9170_PHY_OFF;
} else {
/* advance to the next PSM step */
fw.phy.psm.state--;
/* Synthesizer on + RX on */
bank3 = 0x01420098;
- if ((fw.phy.ht_settings & EIGHTY_FLAG) == EIGHTY_FLAG)
- clock_set(true, AHB_80_88MHZ);
- else
- clock_set(true, AHB_40_44MHZ);
+ fw.phy.state = CARL9170_PHY_ON;
} else {
return ;
}
}
- if (fw.phy.frequency < 30000000)
+ if (fw.phy.frequency < 3000000)
bank3 |= 0x00800000;
set(0x1c58f0, bank3);
}
-#endif /* CONFIG_CARL9170FW_PSM */
#endif /* CONFIG_CARL9170FW_RADIO_FUNCTIONS */