Commit edbfd672 authored by Jes Sorensen's avatar Jes Sorensen Committed by Greg Kroah-Hartman
Browse files

staging: rtl8723au: Call usb_write*() functions directly



This allows us to finally remove the ugly HAL interface for accessing
registers, and remove rtw_io.c

Signed-off-by: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 050abc45
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@ r8723au-y := \
		core/rtw_ap.o		\
		core/rtw_cmd.o		\
		core/rtw_efuse.o	\
		core/rtw_io.o		\
		core/rtw_ioctl_set.o	\
		core/rtw_ieee80211.o	\
		core/rtw_led.o		\
+27 −24
Original line number Diff line number Diff line
@@ -56,20 +56,20 @@ static void Efuse_PowerSwitch(struct rtw_adapter *padapter,
	u16 tmpV16;

	if (PwrState == true) {
		rtw_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON);
		rtl8723au_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON);

		/*  1.2V Power: From VDDON with Power
		    Cut(0x0000h[15]), defualt valid */
		tmpV16 = rtl8723au_read16(padapter, REG_SYS_ISO_CTRL);
		if (!(tmpV16 & PWC_EV12V)) {
			tmpV16 |= PWC_EV12V;
			rtw_write16(padapter, REG_SYS_ISO_CTRL, tmpV16);
			rtl8723au_write16(padapter, REG_SYS_ISO_CTRL, tmpV16);
		}
		/*  Reset: 0x0000h[28], default valid */
		tmpV16 = rtl8723au_read16(padapter, REG_SYS_FUNC_EN);
		if (!(tmpV16 & FEN_ELDR)) {
			tmpV16 |= FEN_ELDR;
			rtw_write16(padapter, REG_SYS_FUNC_EN, tmpV16);
			rtl8723au_write16(padapter, REG_SYS_FUNC_EN, tmpV16);
		}

		/*  Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) clock
@@ -77,7 +77,7 @@ static void Efuse_PowerSwitch(struct rtw_adapter *padapter,
		tmpV16 = rtl8723au_read16(padapter, REG_SYS_CLKR);
		if ((!(tmpV16 & LOADER_CLK_EN)) || (!(tmpV16 & ANA8M))) {
			tmpV16 |= (LOADER_CLK_EN | ANA8M);
			rtw_write16(padapter, REG_SYS_CLKR, tmpV16);
			rtl8723au_write16(padapter, REG_SYS_CLKR, tmpV16);
		}

		if (bWrite == true) {
@@ -85,15 +85,17 @@ static void Efuse_PowerSwitch(struct rtw_adapter *padapter,
			tempval = rtl8723au_read8(padapter, EFUSE_TEST + 3);
			tempval &= 0x0F;
			tempval |= (VOLTAGE_V25 << 4);
			rtw_write8(padapter, EFUSE_TEST + 3, (tempval | 0x80));
			rtl8723au_write8(padapter, EFUSE_TEST + 3,
					 tempval | 0x80);
		}
	} else {
		rtw_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF);
		rtl8723au_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF);

		if (bWrite == true) {
			/*  Disable LDO 2.5V after read/write action */
			tempval = rtl8723au_read8(padapter, EFUSE_TEST + 3);
			rtw_write8(padapter, EFUSE_TEST + 3, (tempval & 0x7F));
			rtl8723au_write8(padapter, EFUSE_TEST + 3,
					 tempval & 0x7F);
		}
	}
}
@@ -158,13 +160,14 @@ ReadEFuseByte23a(struct rtw_adapter *Adapter, u16 _offset, u8 *pbuf)
	u16	retry;

	/* Write Address */
	rtw_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff));
	rtl8723au_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff));
	readbyte = rtl8723au_read8(Adapter, EFUSE_CTRL+2);
	rtw_write8(Adapter, EFUSE_CTRL+2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc));
	rtl8723au_write8(Adapter, EFUSE_CTRL+2,
			 ((_offset >> 8) & 0x03) | (readbyte & 0xfc));

	/* Write bit 32 0 */
	readbyte = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
	rtw_write8(Adapter, EFUSE_CTRL+3, (readbyte & 0x7f));
	rtl8723au_write8(Adapter, EFUSE_CTRL+3, readbyte & 0x7f);

	/* Check bit 32 read-ready */
	retry = 0;
@@ -302,16 +305,16 @@ EFUSE_Read1Byte23a(struct rtw_adapter *Adapter, u16 Address)
	{
		/* Write E-fuse Register address bit0~7 */
		temp = Address & 0xFF;
		rtw_write8(Adapter, EFUSE_CTRL+1, temp);
		rtl8723au_write8(Adapter, EFUSE_CTRL+1, temp);
		Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+2);
		/* Write E-fuse Register address bit8~9 */
		temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);
		rtw_write8(Adapter, EFUSE_CTRL+2, temp);
		rtl8723au_write8(Adapter, EFUSE_CTRL+2, temp);

		/* Write 0x30[31]= 0 */
		Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
		temp = Bytetemp & 0x7F;
		rtw_write8(Adapter, EFUSE_CTRL+3, temp);
		rtl8723au_write8(Adapter, EFUSE_CTRL+3, temp);

		/* Wait Write-ready (0x30[31]= 1) */
		Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
@@ -372,21 +375,21 @@ EFUSE_Write1Byte(

	if (Address < contentLen)	/* E-fuse 512Byte */
	{
		rtw_write8(Adapter, EFUSE_CTRL, Value);
		rtl8723au_write8(Adapter, EFUSE_CTRL, Value);

		/* Write E-fuse Register address bit0~7 */
		temp = Address & 0xFF;
		rtw_write8(Adapter, EFUSE_CTRL+1, temp);
		rtl8723au_write8(Adapter, EFUSE_CTRL+1, temp);
		Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+2);

		/* Write E-fuse Register address bit8~9 */
		temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);
		rtw_write8(Adapter, EFUSE_CTRL+2, temp);
		rtl8723au_write8(Adapter, EFUSE_CTRL+2, temp);

		/* Write 0x30[31]= 1 */
		Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
		temp = Bytetemp | 0x80;
		rtw_write8(Adapter, EFUSE_CTRL+3, temp);
		rtl8723au_write8(Adapter, EFUSE_CTRL+3, temp);

		/* Wait Write-ready (0x30[31]= 0) */
		Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
@@ -412,11 +415,11 @@ efuse_OneByteRead23a(struct rtw_adapter *pAdapter, u16 addr, u8 *data)

	/*  -----------------e-fuse reg ctrl --------------------------------- */
	/* address */
	rtw_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff));
	rtw_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) &0x03)) |
	rtl8723au_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff));
	rtl8723au_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) &0x03)) |
	(rtl8723au_read8(pAdapter, EFUSE_CTRL+2)&0xFC));

	rtw_write8(pAdapter, EFUSE_CTRL+3,  0x72);/* read cmd */
	rtl8723au_write8(pAdapter, EFUSE_CTRL+3,  0x72);/* read cmd */

	while(!(0x80 &rtl8723au_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx<100))
		tmpidx++;
@@ -443,12 +446,12 @@ efuse_OneByteWrite23a(struct rtw_adapter *pAdapter, u16 addr, u8 data)

	/*  -----------------e-fuse reg ctrl --------------------------------- */
	/* address */
	rtw_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff));
	rtw_write8(pAdapter, EFUSE_CTRL+2,
	rtl8723au_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff));
	rtl8723au_write8(pAdapter, EFUSE_CTRL+2,
	(rtl8723au_read8(pAdapter, EFUSE_CTRL+2)&0xFC)|(u8)((addr>>8)&0x03));
	rtw_write8(pAdapter, EFUSE_CTRL, data);/* data */
	rtl8723au_write8(pAdapter, EFUSE_CTRL, data);/* data */

	rtw_write8(pAdapter, EFUSE_CTRL+3, 0xF2);/* write cmd */
	rtl8723au_write8(pAdapter, EFUSE_CTRL+3, 0xF2);/* write cmd */

	while((0x80 & rtl8723au_read8(pAdapter, EFUSE_CTRL+3)) &&
	      (tmpidx<100)) {
+0 −92
Original line number Diff line number Diff line
/******************************************************************************
 *
 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 ******************************************************************************/
/*

The purpose of rtw_io.c

a. provides the API

b. provides the protocol engine

c. provides the software interface between caller and the hardware interface

Compiler Flag Option:

1. For USB:
   a. USE_ASYNC_IRP: Both sync/async operations are provided.

jackson@realtek.com.tw

*/

#define _RTW_IO_C_
#include <osdep_service.h>
#include <drv_types.h>
#include <rtw_io.h>
#include <osdep_intf.h>

#include <usb_ops.h>

int _rtw_write823a(struct rtw_adapter *adapter, u32 addr, u8 val)
{
	struct _io_ops *io_ops = &adapter->io_ops;
	int ret;

	ret = io_ops->_write8(adapter, addr, val);

	if (ret < 0)
		return _FAIL;
	else
		return _SUCCESS;
}

int _rtw_write1623a(struct rtw_adapter *adapter, u32 addr, u16 val)
{
	struct _io_ops *io_ops = &adapter->io_ops;
	int ret;

	ret = io_ops->_write16(adapter, addr, val);

	if (ret < 0)
		return _FAIL;
	else
		return _SUCCESS;
}

int _rtw_write3223a(struct rtw_adapter *adapter, u32 addr, u32 val)
{
	struct _io_ops *io_ops = &adapter->io_ops;
	int ret;

	ret = io_ops->_write32(adapter, addr, val);

	if (ret < 0)
		return _FAIL;
	else
		return _SUCCESS;
}

int _rtw_writeN23a(struct rtw_adapter *adapter, u32 addr , u32 length , u8 *pdata)
{
	struct _io_ops *io_ops = &adapter->io_ops;
	int ret;

	ret = io_ops->_writeN(adapter, addr, length, pdata);

	if (ret < 0)
		return _FAIL;
	else
		return _SUCCESS;
}
+1 −1
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ static void sreset_restore_network_station(struct rtw_adapter *padapter)

	mlmeext_joinbss_event_callback23a(padapter, 1);
	/* restore Sequence No. */
	rtw_write8(padapter, 0x4dc, padapter->xmitpriv.nqos_ssn);
	rtl8723au_write8(padapter, 0x4dc, padapter->xmitpriv.nqos_ssn);

	sreset_restore_security_station(padapter);
}
+36 −31
Original line number Diff line number Diff line
@@ -271,23 +271,23 @@ odm_TXPowerTrackingCallback_ThermalMeter_92C(

			/* Adjust CCK according to IQK result */
			if (!pdmpriv->bCCKinCH14) {
				rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch1_Ch1323A[CCK_index][0]);
				rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch1_Ch1323A[CCK_index][1]);
				rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch1_Ch1323A[CCK_index][2]);
				rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch1_Ch1323A[CCK_index][3]);
				rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch1_Ch1323A[CCK_index][4]);
				rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch1_Ch1323A[CCK_index][5]);
				rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch1_Ch1323A[CCK_index][6]);
				rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch1_Ch1323A[CCK_index][7]);
				rtl8723au_write8(Adapter, 0xa22, CCKSwingTable_Ch1_Ch1323A[CCK_index][0]);
				rtl8723au_write8(Adapter, 0xa23, CCKSwingTable_Ch1_Ch1323A[CCK_index][1]);
				rtl8723au_write8(Adapter, 0xa24, CCKSwingTable_Ch1_Ch1323A[CCK_index][2]);
				rtl8723au_write8(Adapter, 0xa25, CCKSwingTable_Ch1_Ch1323A[CCK_index][3]);
				rtl8723au_write8(Adapter, 0xa26, CCKSwingTable_Ch1_Ch1323A[CCK_index][4]);
				rtl8723au_write8(Adapter, 0xa27, CCKSwingTable_Ch1_Ch1323A[CCK_index][5]);
				rtl8723au_write8(Adapter, 0xa28, CCKSwingTable_Ch1_Ch1323A[CCK_index][6]);
				rtl8723au_write8(Adapter, 0xa29, CCKSwingTable_Ch1_Ch1323A[CCK_index][7]);
			} else {
				rtw_write8(Adapter, 0xa22, CCKSwingTable_Ch1423A[CCK_index][0]);
				rtw_write8(Adapter, 0xa23, CCKSwingTable_Ch1423A[CCK_index][1]);
				rtw_write8(Adapter, 0xa24, CCKSwingTable_Ch1423A[CCK_index][2]);
				rtw_write8(Adapter, 0xa25, CCKSwingTable_Ch1423A[CCK_index][3]);
				rtw_write8(Adapter, 0xa26, CCKSwingTable_Ch1423A[CCK_index][4]);
				rtw_write8(Adapter, 0xa27, CCKSwingTable_Ch1423A[CCK_index][5]);
				rtw_write8(Adapter, 0xa28, CCKSwingTable_Ch1423A[CCK_index][6]);
				rtw_write8(Adapter, 0xa29, CCKSwingTable_Ch1423A[CCK_index][7]);
				rtl8723au_write8(Adapter, 0xa22, CCKSwingTable_Ch1423A[CCK_index][0]);
				rtl8723au_write8(Adapter, 0xa23, CCKSwingTable_Ch1423A[CCK_index][1]);
				rtl8723au_write8(Adapter, 0xa24, CCKSwingTable_Ch1423A[CCK_index][2]);
				rtl8723au_write8(Adapter, 0xa25, CCKSwingTable_Ch1423A[CCK_index][3]);
				rtl8723au_write8(Adapter, 0xa26, CCKSwingTable_Ch1423A[CCK_index][4]);
				rtl8723au_write8(Adapter, 0xa27, CCKSwingTable_Ch1423A[CCK_index][5]);
				rtl8723au_write8(Adapter, 0xa28, CCKSwingTable_Ch1423A[CCK_index][6]);
				rtl8723au_write8(Adapter, 0xa29, CCKSwingTable_Ch1423A[CCK_index][7]);
			}

			if (is2T) {
@@ -600,10 +600,10 @@ static void _PHY_ReloadMACRegisters(struct rtw_adapter *pAdapter, u32 *MACReg, u
{
	u32 i;

	for (i = 0 ; i < (IQK_MAC_REG_NUM - 1); i++) {
		rtw_write8(pAdapter, MACReg[i], (u8)MACBackup[i]);
	}
	rtw_write32(pAdapter, MACReg[i], MACBackup[i]);
	for (i = 0 ; i < (IQK_MAC_REG_NUM - 1); i++)
		rtl8723au_write8(pAdapter, MACReg[i], (u8)MACBackup[i]);

	rtl8723au_write32(pAdapter, MACReg[i], MACBackup[i]);
}

static void _PHY_PathADDAOn(struct rtw_adapter *pAdapter, u32 *ADDAReg, bool isPathAOn, bool is2T)
@@ -627,12 +627,13 @@ static void _PHY_MACSettingCalibration(struct rtw_adapter *pAdapter, u32 *MACReg
{
	u32 i = 0;

	rtw_write8(pAdapter, MACReg[i], 0x3F);
	rtl8723au_write8(pAdapter, MACReg[i], 0x3F);

	for (i = 1 ; i < (IQK_MAC_REG_NUM - 1); i++) {
		rtw_write8(pAdapter, MACReg[i], (u8)(MACBackup[i] & ~BIT(3)));
		rtl8723au_write8(pAdapter, MACReg[i],
				 (u8)(MACBackup[i] & ~BIT(3)));
	}
	rtw_write8(pAdapter, MACReg[i], (u8)(MACBackup[i] & ~BIT(5)));
	rtl8723au_write8(pAdapter, MACReg[i], (u8)(MACBackup[i] & ~BIT(5)));
}

static void _PHY_PathAStandBy(struct rtw_adapter *pAdapter)
@@ -881,10 +882,15 @@ static void _PHY_LCCalibrate(struct rtw_adapter *pAdapter, bool is2T)
	/* Check continuous TX and Packet TX */
	tmpReg = rtl8723au_read8(pAdapter, 0xd03);

	if ((tmpReg&0x70) != 0)			/* Deal with contisuous TX case */
		rtw_write8(pAdapter, 0xd03, tmpReg&0x8F);	/* disable all continuous TX */
	else							/*  Deal with Packet TX case */
		rtw_write8(pAdapter, REG_TXPAUSE, 0xFF);			/*  block all queues */
	if ((tmpReg&0x70) != 0) {
		/* Deal with contisuous TX case */
		/* disable all continuous TX */
		rtl8723au_write8(pAdapter, 0xd03, tmpReg&0x8F);
	} else {
		/*  Deal with Packet TX case */
		/*  block all queues */
		rtl8723au_write8(pAdapter, REG_TXPAUSE, 0xFF);
	}

	if ((tmpReg&0x70) != 0) {
		/* 1. Read original RF mode */
@@ -915,15 +921,14 @@ static void _PHY_LCCalibrate(struct rtw_adapter *pAdapter, bool is2T)
	/* Restore original situation */
	if ((tmpReg&0x70) != 0) {	/* Deal with contuous TX case  */
		/* Path-A */
		rtw_write8(pAdapter, 0xd03, tmpReg);
		rtl8723au_write8(pAdapter, 0xd03, tmpReg);
		PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits, RF_Amode);

		/* Path-B */
		if (is2T)
			PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode);
	} else { /*  Deal with Packet TX case */
		rtw_write8(pAdapter, REG_TXPAUSE, 0x00);
	}
	} else /*  Deal with Packet TX case */
		rtl8723au_write8(pAdapter, REG_TXPAUSE, 0x00);
}

/* Analog Pre-distortion calibration */
Loading