OSDN Git Service

チケット #30493 , チケット #30494 , チケット #30502
[uzume/uzume_bfin.git] / uzumeapp / kernel / uzume / sgtl5000.c
1 /**
2  * @file sgtl5000.c
3  * @author: Shinichiro Nakamura
4  * @brief SGTL5000初期化プログラム
5  * @details
6  * SGTL5000の初期化を行う。I2Cを使って初期化を行う。
7  */
8
9 #include "i2s_subsystem.h"
10 #include "i2c_subsystem.h"
11
12 /**
13  * \brief コーデック初期化データ列の長さ
14  * \details
15  * SGTL5000に与える初期化データの長さである。長さはレジスタアドレスとデータの組が
16  * 何組であるかを示す。
17  */
18 #define     CODECINITDATALEN        18      /* SGTL5000初期化データ長 */
19
20 #ifndef     UZUME_SGTL5000_I2C_PORT
21     /**
22      * @brief CODECのI2Cポート。
23      * SGTL5000が接続されているI2Cペリフェラルのポート番号。デフォルトは0である。他のポートを使いたい時には
24      * sys_config.hで宣言すると良い。なお、I2Cコントローラ・ペリフェラルがひとつしかない場合には0を指定する。
25      */
26 #   define  UZUME_SGTL5000_I2C_PORT   0
27 #endif
28
29 #ifndef     UZUME_SGTL5000_I2C_ADRS
30     /**
31      * @brief SGTL5000のI2Cデバイスアドレス(7bit右づめ)
32      */
33 #   define  UZUME_SGTL5000_I2C_ADRS   0x0A
34 #endif
35
36 /* SGTL5000 TWI初期化データ列 */
37 static const unsigned char sgtl5000_initdata[CODECINITDATALEN][4] =
38 {
39     {0x00, 0x02, 0x00, 0x73}, // CHIP_DIG Power     0000-0000 0111-0011
40     {0x00, 0x30, 0x77, 0xFF}, // CHIP_ANA_POWER     0111-0111 1111-1111
41     {0x00, 0x32, 0x83, 0x12}, // CHIP_PLL_CTRL      1000-0011 0001-0010(16/786)
42     {0x00, 0x04, 0x00, 0x0B}, // CHIP_CLK_CTRL      0000-0000 0000-1011
43     {0x00, 0x06, 0x00, 0x80}, // CHIP_I2S_CTRL      0000-0000 1000-0000
44     {0x00, 0x0A, 0x00, 0x10}, // CHIP_SSS_CTRL      0000-0000 0001-0000
45     {0x00, 0x0E, 0x02, 0x00}, // CHIP_ADCDAC_CTRL   0000-0010 0000-0000
46     {0x00, 0x10, 0x3C, 0x3C}, // CHIP_DAC_VOL
47     {0x00, 0x14, 0x01, 0x5F}, // CHIP_PAD_STRENGTH  0000-0001 0101-1111
48     {0x00, 0x20, 0x01, 0x00}, // CHIP_ANA_ADC_CTRL  0000-0001 0000-0000
49     {0x00, 0x22, 0x18, 0x18}, // CHIP_ANA_HP_CTRL
50     {0x00, 0x24, 0x00, 0x04}, // CHIP_ANA_CTRL      0000-0000 0000-0100
51     {0x00, 0x26, 0x00, 0x00}, // CHIP_LINREG_CTRL   0000-0000 0000-0000
52     {0x00, 0x28, 0x00, 0x00}, // CHIP_REF_CTRL      0000-0000 0000-0000
53     {0x00, 0x2A, 0x00, 0x00}, // CHIP_MIC_CTRL      0000-0000 0000-0000
54     {0x00, 0x2C, 0x00, 0x00}, // CHIP_LINE_OUT_CTRL 0000-0000 0000-0000
55     {0x00, 0x2E, 0x06, 0x06}, // CHIP_LINE_OUT_VOL  0000-0110 0000-0110
56     {0x00, 0x34, 0x00, 0x00}, // CHIP_CLK_TOP_CTRL  0000-1000 0000-0000
57 };
58
59 /**
60  * @brief コーデックの初期化
61  * @details
62  * TLV32AIC23Bに初期化数値列をI2C経由で送り込む。タスクコンテキストで呼び出さなければならない。
63  * 初期化後、TLV32AIC23Bはクロック信号を生成して動作を開始する。
64  */
65 void init_codec()
66 {
67     int i;
68
69     /* SGTL5000に初期化データを送信する */
70     for ( i=0; i< CODECINITDATALEN; i++){
71         i2c_master_write(UZUME_SGTL5000_I2C_PORT, UZUME_SGTL5000_I2C_ADRS, sgtl5000_initdata[i], 4);
72     }
73 }
74