1222301Sadrian/* 2222301Sadrian * Copyright (c) 2008-2010 Atheros Communications Inc. 3222301Sadrian * Copyright (c) 2011 Adrian Chadd, Xenion Pty Ltd. 4222301Sadrian * 5222301Sadrian * Redistribution and use in source and binary forms, with or without 6222301Sadrian * modification, are permitted provided that the following conditions 7222301Sadrian * are met: 8222301Sadrian * 1. Redistributions of source code must retain the above copyright 9222301Sadrian * notice, this list of conditions and the following disclaimer. 10222301Sadrian * 2. Redistributions in binary form must reproduce the above copyright 11222301Sadrian * notice, this list of conditions and the following disclaimer in the 12222301Sadrian * documentation and/or other materials provided with the distribution. 13222301Sadrian * 14222301Sadrian * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15222301Sadrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16222301Sadrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17222301Sadrian * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18222301Sadrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19222301Sadrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20222301Sadrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21222301Sadrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22222301Sadrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23222301Sadrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24222301Sadrian * SUCH DAMAGE. 25222301Sadrian * 26222301Sadrian * $FreeBSD$ 27222301Sadrian */ 28222301Sadrian#include "opt_ah.h" 29222301Sadrian#include "ah.h" 30222301Sadrian#include "ah_internal.h" 31222301Sadrian 32222301Sadrian#include "ah_eeprom_v4k.h" 33222301Sadrian 34222301Sadrian#include "ar9002/ar9285.h" 35222301Sadrian#include "ar5416/ar5416reg.h" 36222301Sadrian#include "ar5416/ar5416phy.h" 37222301Sadrian#include "ar9002/ar9002phy.h" 38222301Sadrian//#include "ar9002/ar9287phy.h" 39222301Sadrian 40222301Sadrian#include "ar9002/ar9287_cal.h" 41222301Sadrian 42222301Sadrian 43222301Sadrianvoid 44222301Sadrianar9287PACal(struct ath_hal *ah, HAL_BOOL is_reset) 45222301Sadrian{ 46222301Sadrian /* XXX not required */ 47222301Sadrian} 48222301Sadrian 49222301Sadrian/* 50222301Sadrian * This is like Merlin but without ADC disable 51222301Sadrian */ 52222301SadrianHAL_BOOL 53222301Sadrianar9287InitCalHardware(struct ath_hal *ah, const struct ieee80211_channel *chan) 54222301Sadrian{ 55222301Sadrian OS_REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL); 56222301Sadrian 57222301Sadrian /* Calibrate the AGC */ 58222301Sadrian OS_REG_WRITE(ah, AR_PHY_AGC_CONTROL, 59222301Sadrian OS_REG_READ(ah, AR_PHY_AGC_CONTROL) | AR_PHY_AGC_CONTROL_CAL); 60222301Sadrian 61222301Sadrian /* Poll for offset calibration complete */ 62222301Sadrian if (!ath_hal_wait(ah, AR_PHY_AGC_CONTROL, 63222301Sadrian AR_PHY_AGC_CONTROL_CAL, 0)) { 64222301Sadrian HALDEBUG(ah, HAL_DEBUG_RESET, 65222301Sadrian "%s: offset calibration failed to complete in 1ms; " 66222301Sadrian "noisy environment?\n", __func__); 67222301Sadrian return AH_FALSE; 68222301Sadrian } 69222301Sadrian 70222301Sadrian OS_REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL); 71222301Sadrian 72222301Sadrian return AH_TRUE; 73222301Sadrian} 74