1185377Ssam/*
2185377Ssam * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
3185377Ssam * Copyright (c) 2002-2008 Atheros Communications, Inc.
4185377Ssam *
5185377Ssam * Permission to use, copy, modify, and/or distribute this software for any
6185377Ssam * purpose with or without fee is hereby granted, provided that the above
7185377Ssam * copyright notice and this permission notice appear in all copies.
8185377Ssam *
9185377Ssam * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10185377Ssam * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11185377Ssam * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12185377Ssam * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13185377Ssam * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14185377Ssam * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15185377Ssam * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16185377Ssam *
17204644Srpaulo * $FreeBSD$
18185377Ssam */
19185377Ssam#include "opt_ah.h"
20185377Ssam
21185377Ssam#include "ah.h"
22185377Ssam#include "ah_internal.h"
23185377Ssam#include "ah_devid.h"
24185377Ssam#ifdef AH_DEBUG
25185377Ssam#include "ah_desc.h"			/* NB: for HAL_PHYERR* */
26185377Ssam#endif
27185377Ssam
28185377Ssam#include "ar5212/ar5212.h"
29185377Ssam#include "ar5212/ar5212reg.h"
30185377Ssam#include "ar5212/ar5212phy.h"
31185377Ssam
32185377Ssam/*
33185377Ssam * Read 16 bits of data from offset into *data
34185377Ssam */
35185377SsamHAL_BOOL
36185377Ssamar5212EepromRead(struct ath_hal *ah, u_int off, uint16_t *data)
37185377Ssam{
38185377Ssam	OS_REG_WRITE(ah, AR_EEPROM_ADDR, off);
39185377Ssam	OS_REG_WRITE(ah, AR_EEPROM_CMD, AR_EEPROM_CMD_READ);
40185377Ssam
41185377Ssam	if (!ath_hal_wait(ah, AR_EEPROM_STS,
42185377Ssam	    AR_EEPROM_STS_READ_COMPLETE | AR_EEPROM_STS_READ_ERROR,
43185377Ssam	    AR_EEPROM_STS_READ_COMPLETE)) {
44185377Ssam		HALDEBUG(ah, HAL_DEBUG_ANY, "%s: read failed for entry 0x%x\n",
45185377Ssam		    __func__, off);
46185377Ssam		return AH_FALSE;
47185377Ssam	}
48185377Ssam	*data = OS_REG_READ(ah, AR_EEPROM_DATA) & 0xffff;
49185377Ssam	return AH_TRUE;
50185377Ssam}
51