Home | History | Annotate | Line # | Download | only in ar5212
      1 /*
      2  * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
      3  * Copyright (c) 2002-2008 Atheros Communications, Inc.
      4  *
      5  * Permission to use, copy, modify, and/or distribute this software for any
      6  * purpose with or without fee is hereby granted, provided that the above
      7  * copyright notice and this permission notice appear in all copies.
      8  *
      9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     16  *
     17  * $Id: ar5212_eeprom.c,v 1.1.1.1 2008/12/11 04:46:40 alc Exp $
     18  */
     19 #include "opt_ah.h"
     20 
     21 #include "ah.h"
     22 #include "ah_internal.h"
     23 #include "ah_devid.h"
     24 #ifdef AH_DEBUG
     25 #include "ah_desc.h"			/* NB: for HAL_PHYERR* */
     26 #endif
     27 
     28 #include "ar5212/ar5212.h"
     29 #include "ar5212/ar5212reg.h"
     30 #include "ar5212/ar5212phy.h"
     31 
     32 /*
     33  * Read 16 bits of data from offset into *data
     34  */
     35 HAL_BOOL
     36 ar5212EepromRead(struct ath_hal *ah, u_int off, uint16_t *data)
     37 {
     38 	OS_REG_WRITE(ah, AR_EEPROM_ADDR, off);
     39 	OS_REG_WRITE(ah, AR_EEPROM_CMD, AR_EEPROM_CMD_READ);
     40 
     41 	if (!ath_hal_wait(ah, AR_EEPROM_STS,
     42 	    AR_EEPROM_STS_READ_COMPLETE | AR_EEPROM_STS_READ_ERROR,
     43 	    AR_EEPROM_STS_READ_COMPLETE)) {
     44 		HALDEBUG(ah, HAL_DEBUG_ANY, "%s: read failed for entry 0x%x\n",
     45 		    __func__, off);
     46 		return AH_FALSE;
     47 	}
     48 	*data = OS_REG_READ(ah, AR_EEPROM_DATA) & 0xffff;
     49 	return AH_TRUE;
     50 }
     51