struct addr_set { int addr; int set_num; unsigned char set_bit[4]; int clear_num; unsigned char clear_bit[4]; }; struct i2s_pin { int addr_num; struct addr_set addr_s[5]; }; #if (CONFIG_CHIPID == 0x531) || (CONFIG_CHIPID == 0x533) /************************************************************ * SDO PIN Setting * *************************************************************/ #if (I2S_SD0_PIN == I2S_SET1) //LVA_TXP4 as I2S_SD0 struct i2s_pin sd0 = \ { 5, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 1, {4,}} , \ {0xbe000200, 0, {0,}, 1, {0,}} , \ {0xbe00013c, 1, {5,}, 1, {11,}} , \ {0xbe0001bc, 0, {0,}, 1, {31,}} , \ } \ }; #elif (I2S_SD0_PIN == I2S_SET2) //GPIO15 as I2S_SD02/3 struct i2s_pin sd0 = \ { 4, { \ {0xbe000600, 1, {31,}, 1, {30,}} , \ {0xbe0000e8, 1, {29,}, 0, {0,}} , \ {0xbe0001bc, 0, {0,}, 1, {31,}} , \ {0xbe00013c, 0, {0,}, 2, {11,18,}} , \ } \ }; #elif (I2S_SD0_PIN == I2S_SET3) //T2_FEF as I2S_SD02/3 struct i2s_pin sd0 = \ { 3, { \ {0xbe000244, 1, {29,}, 0, {0,}} , \ {0xbe00013c, 0, {0,}, 1, {11}} , \ {0xbe0001bc, 0, {0,}, 1, {31,}} , \ } \ }; #else struct i2s_pin sd0 = {0}; #endif /************************************************************ * WS PIN Setting * *************************************************************/ #if (I2S_WS_PIN == I2S_SET1) //LVA_TXN4 as I2S_WS struct i2s_pin ws = \ { 4, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 1, {4,}} , \ {0xbe000200, 0, {0,}, 1, {0,}} , \ {0xbe00013c, 1, {5,}, 0, {0,}} , \ } \ }; #elif (I2S_WS_PIN == I2S_SET2) //GPIO1 as I2S_WS2 struct i2s_pin ws = \ { 2, { \ {0xbe000600, 0, {0,}, 2, {2,3,}} , \ {0xbe00013c, 1, {26,}, 1, {27,}} , \ } \ }; #elif (I2S_WS_PIN == I2S_SET3) //RFGAIN as I2S_WS3 struct i2s_pin ws = \ { 1, { \ {0xbe000604, 1, {13,}, 1, {12,}} , \ } \ }; #else struct i2s_pin ws = {0}; #endif /************************************************************ * MCK PIN Setting * *************************************************************/ #if (I2S_MCK_PIN == I2S_SET1) //LVB_TXP4 as I2S_MCK struct i2s_pin mck = \ { 4, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 1, {9,}} , \ {0xbe000200, 0, {0,}, 1, {0,}} , \ {0xbe00013c, 1, {5,}, 4, {0,2,4,16,}} , \ } \ }; #elif (I2S_MCK_PIN == I2S_SET2) //KEY2 as I2S_MCK2 struct i2s_pin mck = \ { 3, { \ {0xbe000600, 0, {0,}, 2, {20,21,}} , \ {0xbe00012c, 0, {0,}, 1, {15,}} , \ {0xbe00013c, 1, {26,}, 4, {0,2,4,16,}} , \ } \ }; #elif (I2S_MCK_PIN == I2S_SET3) //NF_DQS as I2S_MCK3 as I2S_WCK3 struct i2s_pin mck = \ { 2, { \ {0xbe00013c, 0, {0,}, 4, {0,2,4,16,}} , \ {0xbe000250, 1, {29,}, 0, {0,}} , \ } \ }; #else struct i2s_pin mck = {0}; #endif /************************************************************ * SCK PIN Setting * *************************************************************/ #if (I2S_SCK_PIN == I2S_SET1) //LVB_TXN4 as I2S_SCK struct i2s_pin sck = \ { 4, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 1, {9,}} , \ {0xbe000200, 0, {0,}, 1, {1,}} , \ {0xbe00013c, 1, {5,}, 0, {0,}} , \ } \ }; #elif (I2S_SCK_PIN == I2S_SET2) //KEY3 as I2S_SCK2 struct i2s_pin sck = \ { 3, { \ {0xbe00012c, 0, {0,}, 1, {15,}} , \ {0xbe00013c, 1, {26,}, 1, {8,}} , \ {0xbe0f0600, 0, {0,}, 2, {22,23,}} , \ } \ }; #elif (I2S_SCK_PIN == I2S_SET3) //RMIIRXER as I2S_SCK3 struct i2s_pin sck = \ { 2, { \ {0xbe000210, 1, {26,}, 0, {0,}} , \ {0xbe00019c, 0, {0,}, 1, {15,}} , \ } \ }; #else struct i2s_pin sck = {0}; #endif #endif // #if (CONFIG_CHIPID == 0x531) #if (CONFIG_CHIPID == 0x331) || (CONFIG_CHIPID == 0x131) || (CONFIG_CHIPID == 0x8506) || (CONFIG_CHIPID == 0x6710) /************************************************************ * SDO PIN Setting * *************************************************************/ #if (I2S_SD0_PIN == I2S_SET1) //LVA_TXP4 as I2S_SD0 struct i2s_pin sd0 = \ { 5, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 2, {4,17,}} , \ {0xbe000200, 0, {0,}, 1, {0,}} , \ {0xbe00013c, 1, {5,}, 1, {11,}} , \ {0xbe0001bc, 0, {0,}, 1, {31,}} , \ } \ }; #elif (I2S_SD0_PIN == I2S_SET2) //I2S_SD0 struct i2s_pin sd0 = \ { 2, { \ {0xbe00013c, 0, {0,}, 2, {11,18,}} , \ {0xbe0001bc, 0, {0,}, 1, {31,}} , \ } \ }; #elif (I2S_SD0_PIN == I2S_SET3) //GPIO15 as I2S_SD02/3 struct i2s_pin sd0 = \ { 4, { \ {0xbe000600, 1, {31,}, 1, {30,}} , \ {0xbe0000e8, 1, {29,}, 0, {0,}} , \ {0xbe0001bc, 0, {0,}, 1, {31,}} , \ {0xbe00013c, 0, {0,}, 2, {11,18,}} , \ } \ }; #elif (I2S_SD0_PIN == I2S_SET4) //SPK_L struct i2s_pin sd0 = \ { 1, { \ {0xbe000134, 1, {11,}, 0, {0,}} , \ } \ }; #else struct i2s_pin sd0 = {0}; #endif /************************************************************ * WS PIN Setting * *************************************************************/ #if (I2S_WS_PIN == I2S_SET1) //LVA_TXN4 as I2S_WS struct i2s_pin ws = \ { 4, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 2, {4,17,}} , \ {0xbe000200, 0, {0,}, 1, {0,}} , \ {0xbe00013c, 1, {5,}, 0, {0,}} , \ } \ }; #elif (I2S_WS_PIN == I2S_SET2) //I2S_WS struct i2s_pin ws = \ { 1, { \ {0xbe00013c, 0, {0,}, 1, {8,}} , \ } \ }; #elif (I2S_WS_PIN == I2S_SET3) //GPIO1 as I2S_WS2 struct i2s_pin ws = \ { 2, { \ {0xbe000600, 0, {0,}, 2, {2,3,}} , \ {0xbe00013c, 1, {26,}, 1, {27,}} , \ } \ }; #elif (I2S_WS_PIN == I2S_SET4) //SPK_R struct i2s_pin ws = \ { 1, { \ {0xbe000134, 1, {10,}, 0, {0,}} , \ } \ }; #else struct i2s_pin ws = {0}; #endif /************************************************************ * MCK PIN Setting * *************************************************************/ #if (I2S_MCK_PIN == I2S_SET1) //LVB_TXP4 as I2S_MCK struct i2s_pin mck = \ { 4, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 2, {9,17,}} , \ {0xbe000200, 0, {0,}, 1, {1,}} , \ {0xbe00013c, 1, {5,}, 4, {0,2,4,16,}} , \ } \ }; #elif (I2S_MCK_PIN == I2S_SET2) //KEY2 as I2S_MCK2 struct i2s_pin mck = \ { 3, { \ {0xbe000600, 0, {0,}, 2, {20,21,}} , \ {0xbe00012c, 0, {0,}, 1, {15,}} , \ {0xbe00013c, 1, {26,}, 4, {0,2,4,16,}} , \ } \ }; #elif (I2S_MCK_PIN == I2S_SET3) //KEY1/I2S_MCK/GPIO10 as I2S_MCK_PIN struct i2s_pin mck = \ { 3, { \ {0xbe0f0600, 0, {0,}, 2, {20,21,}} , \ {0xbe00012c, 0, {0,}, 1, {15,}} , \ {0xbe00013c, 1, {26,}, 3, {0,8,27,}} , \ {0xbe000014, 0, {0,}, 1, {2,}} , \ } \ }; #elif (I2S_MCK_PIN == I2S_SET4) //GPIO42 struct i2s_pin mck = \ { 2, { \ {0xbe0f0608, 0, {0,}, 2, {20,21,}} , \ {0xbe00013c, 0, {0,}, 2, {0,16,}} , \ } \ }; #else struct i2s_pin mck = {0}; #endif /************************************************************ * SCK PIN Setting * *************************************************************/ #if (I2S_SCK_PIN == I2S_SET1) //LVB_TXN4 as I2S_SCK struct i2s_pin sck = \ { 4, { \ {0xbe00012c, 0, {0,}, 2, {13,14,}} , \ {0xbe00025c, 0, {0,}, 2, {9,17,}} , \ {0xbe000200, 0, {0,}, 1, {1,}} , \ {0xbe00013c, 1, {5,}, 0, {0,}} , \ } \ }; #elif (I2S_SCK_PIN == I2S_SET2) //KEY3 as I2S_SCK2 struct i2s_pin sck = \ { 3, { \ {0xbe00012c, 0, {0,}, 1, {15,}} , \ {0xbe00013c, 1, {26,}, 1, {8,}} , \ {0xbe0f0600, 0, {0,}, 2, {20,21,}} , \ } \ }; #elif (I2S_SCK_PIN == I2S_SET3) //PWM1/I2S_SCK/GPIO1 as I2S_SCK3 struct i2s_pin sck = \ { 4, { \ {0xbe0f0600, 0, {0,}, 2, {2,3,}} , \ {0xbe00012c, 0, {0,}, 1, {15,}} , \ {0xbe00013c, 1, {26,}, 2, {8,27,}} , \ {0xbe000014, 0, {0,}, 1, {2,}} , \ } \ }; #elif (I2S_SCK_PIN == I2S_SET4) //GPIO46 as I2S_SCK2 struct i2s_pin sck = \ { 3, { \ {0xbe000014, 0, {0,}, 1, {2,}} , \ {0xbe00013c, 0, {0,}, 1, {8,}} , \ {0xbe0f0608, 0, {0,}, 2, {28,29,}} , \ } \ }; #else struct i2s_pin sck = {0}; #endif #endif // #if (CONFIG_CHIPID == 0x331) || (CONFIG_CHIPID == 0x131) || (CONFIG_CHIPID == 0x8506) || (CONFIG_CHIPID == 0x6710) static void set_pin_as_i2s_pin(struct i2s_pin *pin) { int i,j; volatile unsigned int *addr; unsigned int value = 0; if (pin->addr_num == 0) return; for (i = 0; i < pin->addr_num; i++) { addr = (unsigned int *)pin->addr_s[i].addr; value = 0; for (j = 0; j < pin->addr_s[i].set_num; j++) value |= (1<addr_s[i].set_bit[j]); (*addr) = (*addr) | value; value = 0; for (j = 0; j < pin->addr_s[i].clear_num; j++) value |= (1<addr_s[i].clear_bit[j]); (*addr) = (*addr) & (~value); } }