OSDN Git Service

リポジトリのトップディレクトリの名前を変更
[uzume/uzume_bfin.git] / uzumeapp / kernel / uzume / ssm2603.c
1 /**
2  * @file ssm2603.c
3  * @author: takemasa
4  * @brief Analog Devices SSM2603初期化プログラム
5  * @details
6  * SSM2603の初期化を行う。I2Cを使って初期化を行う。
7  */
8
9 #include "i2s_subsystem.h"
10 #include "i2c_subsystem.h"
11 /**
12  * \brief コーデック初期化データ列の長さ
13  * \details
14  * TLV320AIC23に与える初期化データの長さである。長さはレジスタアドレスとデータの組が
15  * 何組であるかを示す。
16  */
17 #define     CODECINITDATALEN        11      /* TLV320AIC23B初期化データ長 */
18
19 /*
20  * CODECのI2Cポート。
21  * SSM2603が接続されているI2Cペリフェラルのポート番号。デフォルトは0である。他のポートを使いたい時には
22  * sys_config.hで宣言すると良い。なお、I2Cコントローラ・ペリフェラルがひとつしかない場合には0を指定
23  * する。
24  */
25 #ifndef     UZUME_SSM2603_I2C_PORT
26 #define     UZUME_SSM2603_I2C_PORT   0
27 #endif
28
29 /*
30  * TLV320AIC23 / SSM2603のI2Cデバイスアドレス(7bit右づめ)
31  */
32 #ifndef     UZUME_SSM2603_I2C_ADRS
33 #define     UZUME_SSM2603_I2C_ADRS   0x1A
34 #endif
35
36 /**
37  * \brief CODEC初期化データ列
38  * \details
39  * TLV320AIC23Bを初期化するためのデータ列である。
40  */
41 static unsigned char tlv320aic23init[CODECINITDATALEN][2] =
42 {
43                 { 30 | 0x00, 0x00 },     /* RESET. */
44                 { 0 | 0x01, 0x17 },     /* L_in vol : LR simul-update, unmute, 0dB */
45                 { 2 | 0x01, 0x17 },     /* R_in vol : LR simul-update, unmute, 0dB */
46                 { 4 | 0x01, 0xF9 },     /* L_HP vol : LR simul-update, zero-cross, 0dB */
47                 { 6 | 0x01, 0xF9 },     /* R_HP vol : LR simul-update, zero-cross, 0dB */
48                 { 8 | 0x00, 0x12 },     /* Analog Audio Path : No Sidetone, No bypass, DAC for Out, Line out for ADC, Mic Mute */
49                 { 10 | 0x00, 0x00 },    /* Digital Path: DAC unmute, De-emphasis 48k, ADC HPF enable */
50                 { 12 | 0x00, 0x02 },    /* Power Down : Only Mic is down*/
51                 { 14 | 0x00, 0x4E },    /* Digital Audio Format : Master, 32bit, I2S */
52                 { 16 | 0x00, 0x01 },    /* Sanmpling Rate, 48kHz, USB mode*/
53 //                { 16 | 0x00, 0x00 },    /* Sanmpling Rate, 48kHz, NORMAL mode*/
54                 { 18 | 0x00, 0x01 }     /* Activateion : Active. */
55
56 };
57
58
59 /**
60  * @brief コーデックの初期化
61  * @details
62  * TLV32AIC23Bに初期化数値列をI2C経由で送り込む。タスクコンテキストで呼び出さなければならない。
63  * 初期化後、TLV32AIC23Bはクロック信号を生成して動作を開始する。
64  */
65 void init_codec()
66 {
67         int i;
68
69
70                 /* TLV320AIC23Bに初期化データを送信する */
71         for ( i=0; i< CODECINITDATALEN; i++){
72                 i2ccall(i2c_master_write( UZUME_SSM2603_I2C_PORT, UZUME_SSM2603_I2C_ADRS, tlv320aic23init[i], 2 ));
73         }
74 }
75
76