bool SetConnectionState(uint32 ConnectionState, uint32 Input, uint32 Output)
{
	/* printk("SetinputConnection ConnectionState = %d
	Input = %d Output = %d\n", ConnectionState, Input, Output); */
	int connectReg = 0;

	switch (ConnectionState) {
	case Soc_Aud_InterCon_DisConnect:
	{
		/* printk("nConnectionState = %d\n", ConnectionState); */
		if ((mConnectionState[Input][Output] & Soc_Aud_InterCon_Connection)
			== Soc_Aud_InterCon_Connection) {

			/* here to disconnect connect bits */
			connectReg = mConnectionReg[Output];
			if (CheckBitsandReg(connectReg, Input)) {
				Afe_Set_Reg(connectReg, 0, 1 << Input);
				mConnectionState[Input][Output] &= ~(Soc_Aud_InterCon_Connection);
			}
		}
		if ((mConnectionState[Input][Output] & Soc_Aud_InterCon_ConnectionShift)
			== Soc_Aud_InterCon_ConnectionShift) {

			/* here to disconnect connect shift bits */
			if (CheckBitsandReg(AFE_CONN_RS, Input)) {
				Afe_Set_Reg(AFE_CONN_RS, 0, 1 << Input);
				mConnectionState[Input][Output] &= ~(Soc_Aud_InterCon_ConnectionShift);
			}
		}
		break;
	}
	case Soc_Aud_InterCon_Connection:
	{
		/* printk("nConnectionState = %d\n", ConnectionState); */
		connectReg = mConnectionReg[Output];
		if (CheckBitsandReg(connectReg, Input)) {
			Afe_Set_Reg(connectReg, 1 << Input, 1 << Input);
			mConnectionState[Input][Output] |= Soc_Aud_InterCon_Connection;
		}
		break;
	}
	case Soc_Aud_InterCon_ConnectionShift:
	{
		/* printk("nConnectionState = %d\n", ConnectionState); */
		if (CheckBitsandReg(AFE_CONN_RS, Input)) {
			Afe_Set_Reg(AFE_CONN_RS, 1 << Input, 1 << Input);
			mConnectionState[Input][Output] |= Soc_Aud_InterCon_ConnectionShift;
		}
		break;
	}
	default:
		pr_err("no this state ConnectionState = %d\n", ConnectionState);
		break;
	}

	return true;
}
bool SetConnectionState(uint32 ConnectionState, uint32 Input, uint32 Output)
{
    //printk("SetinputConnection ConnectionState = %d Input = %d Output = %d\n", ConnectionState, Input, Output);
    if ((mConnectionTable[Input][Output]) < 0)
    {
        printk("no connection mpConnectionTable[%d][%d] = %d\n", Input, Output, mConnectionTable[Input][Output]);
    }
    else if ((mConnectionTable[Input][Output]) == 0)
    {
        printk("test only !! mpConnectionTable[%d][%d] = %d\n", Input, Output, mConnectionTable[Input][Output]);
    }
    else
    {
        if (mConnectionTable[Input][Output])
        {
            int connectionBits = 0;
            int connectReg = 0;
            switch (ConnectionState)
            {
                case Soc_Aud_InterCon_DisConnect:
                {
                    //printk("nConnectionState = %d \n", ConnectionState);
                    if ((mConnectionState[Input][Output]&Soc_Aud_InterCon_Connection) == Soc_Aud_InterCon_Connection)
                    {
                        // here to disconnect connect bits
                        connectionBits = mConnectionbits[Input][Output];
                        connectReg = mConnectionReg[Input][Output];
                        if (CheckBitsandReg(connectReg, connectionBits))
                        {
                            Afe_Set_Reg(connectReg, 0 << connectionBits, 1 << connectionBits);
                            mConnectionState[Input][Output] &= ~(Soc_Aud_InterCon_Connection);
                        }
                    }
                    if ((mConnectionState[Input][Output]&Soc_Aud_InterCon_ConnectionShift) == Soc_Aud_InterCon_ConnectionShift)
                    {
                        // here to disconnect connect shift bits
                        connectionBits = mShiftConnectionbits[Input][Output];
                        connectReg = mShiftConnectionReg[Input][Output];
                        if (CheckBitsandReg(connectReg, connectionBits))
                        {
                            Afe_Set_Reg(connectReg, 0 << connectionBits, 1 << connectionBits);
                            mConnectionState[Input][Output] &= ~(Soc_Aud_InterCon_ConnectionShift);
                        }
                    }
                    break;
                }
                case Soc_Aud_InterCon_Connection:
                {
                    //printk("nConnectionState = %d \n", ConnectionState);
                    // here to disconnect connect shift bits
                    connectionBits = mConnectionbits[Input][Output];
                    connectReg = mConnectionReg[Input][Output];
                    if (CheckBitsandReg(connectReg, connectionBits))
                    {
                        Afe_Set_Reg(connectReg, 1 << connectionBits, 1 << connectionBits);
                        mConnectionState[Input][Output] |= Soc_Aud_InterCon_Connection;
                    }
                    break;
                }
                case Soc_Aud_InterCon_ConnectionShift:
                {
                    //printk("nConnectionState = %d \n", ConnectionState);
                    if ((mConnectionTable[Input][Output]&Soc_Aud_InterCon_ConnectionShift) != Soc_Aud_InterCon_ConnectionShift)
                    {
                        printk("donn't support shift opeartion");
                        break;
                    }
                    connectionBits = mShiftConnectionbits[Input][Output];
                    connectReg = mShiftConnectionReg[Input][Output];
                    if (CheckBitsandReg(connectReg, connectionBits))
                    {
                        Afe_Set_Reg(connectReg, 1 << connectionBits, 1 << connectionBits);
                        mConnectionState[Input][Output] |= Soc_Aud_InterCon_ConnectionShift;
                    }
                    break;
                }
                default:
                    printk("no this state ConnectionState = %d \n", ConnectionState);
                    break;
            }
        }
    }
    return true;
}
status_t AudioInterConnection::SetinputConnection(uint32 ConnectionState, uint32 Input, uint32 Output)
{
    ALOGD("SetinputConnection ConnectionState = %d Input = %d Output = %d\n", ConnectionState, Input, Output);
    if ((mConnectionTable[Input][Output]) < 0) {
        ALOGD("no connection mpConnectionTable[%d][%d] = %d\n", Input, Output, mConnectionTable[Input][Output]);
    }
    else if ((mConnectionTable[Input][Output]) == 0) {
        ALOGD("test only !! mpConnectionTable[%d][%d] = %d\n", Input, Output, mConnectionTable[Input][Output]);
    }
    else {
        if (mConnectionTable[Input][Output]) {
            int connectionBits = 0;
            int connectReg = 0;
            switch (ConnectionState) {
                case (int)AudioDigitalType::DisConnect: {
                    ALOGD("nConnectionState = %d \n", ConnectionState);
                    if ((mConnectionState[Input][Output]&AudioDigitalType::Connection) == AudioDigitalType::Connection) {
                        // here to disconnect connect bits
                        connectionBits = mConnectionbits[Input][Output];
                        connectReg = mConnectionReg[Input][Output];
                        if (CheckBitsandReg(connectReg, connectionBits)) {
                            mAduioAfeInstanse->SetAfeReg(connectReg, 0 << connectionBits, 1 << connectionBits);
                            mConnectionState[Input][Output] &= ~(AudioDigitalType::Connection);
                        }
                    }
                    if ((mConnectionState[Input][Output]&AudioDigitalType::ConnectionShift) == AudioDigitalType::ConnectionShift) {
                        // here to disconnect connect shift bits
                        connectionBits = mShiftConnectionbits[Input][Output];
                        connectReg = mShiftConnectionReg[Input][Output];
                        if (CheckBitsandReg(connectReg, connectionBits)) {
                            mAduioAfeInstanse->SetAfeReg(connectReg, 0 << connectionBits, 1 << connectionBits);
                            mConnectionState[Input][Output] &= ~(AudioDigitalType::ConnectionShift);
                        }
                    }
                    break;
                }
                case (int)AudioDigitalType::Connection: {
                    ALOGD("nConnectionState = %d \n", ConnectionState);
                    // here to disconnect connect shift bits
                    connectionBits = mConnectionbits[Input][Output];
                    connectReg = mConnectionReg[Input][Output];
                    if (CheckBitsandReg(connectReg, connectionBits)) {
                        mAduioAfeInstanse->SetAfeReg(connectReg, 1 << connectionBits, 1 << connectionBits);
                        mConnectionState[Input][Output] |= AudioDigitalType::Connection;
                    }
                    break;
                }
                case (int)AudioDigitalType::ConnectionShift: {
                    ALOGD("nConnectionState = %d \n", ConnectionState);
                    if ((mConnectionTable[Input][Output]&AudioDigitalType::ConnectionShift) != AudioDigitalType::ConnectionShift) {
                        ALOGD("donn't support shift opeartion");
                        break;
                    }
                    connectionBits = mShiftConnectionbits[Input][Output];
                    connectReg = mShiftConnectionReg[Input][Output];
                    if (CheckBitsandReg(connectReg, connectionBits)) {
                        mAduioAfeInstanse->SetAfeReg(connectReg, 1 << connectionBits, 1 << connectionBits);
                        mConnectionState[Input][Output] |= AudioDigitalType::ConnectionShift;
                    }
                    break;
                }
                default:
                    ALOGD("no this state ConnectionState = %d \n", ConnectionState);
                    break;
            }
        }
    }
    return NO_ERROR;
}