A_INT32 Ar9300_SWREG_PROGRAM_Set(int value)
{
	int status=VALUE_OK;
	unsigned int address, swregAddr;
	int low, high;
	int ngot;
	char regName[100];
	A_UINT32 reg;

	if (value==1) {
		ngot=FieldFind("REG_CONTROL0.SWREG_pwd",&swregAddr,&low,&high);
		if (ngot<1)
			return ERR_VALUE_BAD;

		sprintf(regName, "REG_CONTROL1.SWREG_PROGRAM"); 
		ngot=FieldFind(regName,&address,&low,&high);
		if (ngot==1) {
			// disable internal regulator program write.
			MyFieldWrite(address,low,high,0);	
			// set swreg from eep structure to HW
			reg = Ar9300EepromStructGet()->baseEepHeader.swreg; 
			MyRegisterWrite(swregAddr, reg);
			// apply internal regulator program write.
			MyFieldWrite(address,low,high,1);	
		} else 
			return ERR_VALUE_BAD;
	}
    return 0;
}
Beispiel #2
0
static void REGW(unsigned long devNum,unsigned long address, unsigned long value)
{
    devNum =0;
    MyRegisterWrite(address, value);
}
Beispiel #3
0
static int TemperatureRestart()
{
	unsigned int save;
	unsigned int reg;
    unsigned int txReg;
    unsigned int readbackReg=0;
    int i;
    int pass = 1;

    //
    //Look for interframe spacing
    //
/*    for(i = 0; i<NUM_TX_FRAME_READS;i++) {  
        MyRegisterRead(0x806c, &txReg);
        if(txReg & 0x200) {
            break;
        }
//        UserPrint("txReg = %d\n", txReg);
    }
*/    //read again to cause delay
 //   MyRegisterRead(0x806c, &txReg);
	//
	// read and remember value
	//
///////	MyRegisterRead(TemperatureAdc2Address,&save);
//	UserPrint("save=%x  ",save);
	//
	// set these two bits
	//
	MyRegisterRead(TemperatureLocalAddress,&reg);
    reg |= (1<<TemperatureLocalLow);
    reg |= (1<<TemperatureStartLow);
//	UserPrint("writing to set bits reg=%x ",reg);
	MyRegisterWrite(TemperatureLocalAddress, reg);

    for (i=0;i<20;i++) {
//        MyDelay(1);
        MyRegisterRead(TemperatureLocalAddress, &readbackReg);
//        UserPrint("in local set: resetReg = %x\n", readbackReg);
        if(readbackReg & ((1<<TemperatureLocalLow) | (1<<TemperatureStartLow)) )
        {
            break;
        }
    }

    if(i == 20) {
        UserPrint("!!!!!!!local_therm and/or thermStartbit not set, continue anyway reg = %x\n", readbackReg);
        pass = 0;
    }

/*
	MyRegisterWrite(TemperatureLocalAddress,(reg | (1<<TemperatureStartLow)));

    for (i=0;i<10;i++) {
//        MyDelay(1);
        MyRegisterRead(TemperatureLocalAddress, &readbackReg);
/////        UserPrint("in start set: resetReg = %x\n", readbackReg);
        if((readbackReg & (1<<TemperatureStartLow)))
        {
            break;
        }
    }

    if(i == 10) {
        UserPrint("!!!!!!!thermstart bit not set, continue anyway reg = %x\n", readbackReg);
        pass = 0;
    }
*/
	//
	// then clear them
	//
	reg &= ~(1<<TemperatureLocalLow);
	reg &= ~(1<<TemperatureStartLow);
	//UserPrint("writing to clear bits reg-> %x ",reg);
	MyRegisterWrite(TemperatureLocalAddress,reg);

    for (i=0;i<10;i++) {
//        MyDelay(1);
        MyRegisterRead(TemperatureLocalAddress, &readbackReg);
////        UserPrint("in local clear: resetReg = %x\n", readbackReg);
        if(((readbackReg >> TemperatureLocalLow) & 0x1)==0 )
        {
            break;
        }
    }
    if(i == 10) {
        UserPrint("!!!!!!!local bits not clear, continue anyway reg = %x\n", readbackReg);
        pass = 0;
    }

	TemperatureStuckCount=0;
////	UserPrint("temperature restart\n");
    return (pass);
}