rk2928 add phonepad support
[firefly-linux-kernel-4.4.55.git] / sound / soc / codecs / rk2928_codec.h
1 /*
2  * rk2928.h ALSA SoC RK2928 codec driver
3  *
4  * Copyright 2012 Rockchip
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 #ifndef __RK2928_CODEC_H__
12 #define __RK2928_CODEC_H__
13
14 #define CODEC_REG_ADC_DIGITAL_GIAN_L 0x08
15 #define CODEC_REG_ADC_DIGITAL_GIAN_H 0x09
16
17 #define CODEC_REG_ADC_PGA_GAIN  0x0b
18         #define m_MIC_GAIN_CHANNEL_L            (0x0F << 4)
19         #define m_MIC_GAIN_CHANNEL_R            (0x0F)
20         #define v_MIC_GAIN_CHANNEL_L(n)         ((n) << 4)
21         #define v_MIC_GAIN_CHANNEL_R(n)         (n)
22         
23 #define CODEC_REG_POWER                 0x0c
24         #define m_PD_CODEC                      (0x01)
25         #define m_PD_MIC_BIAS           (0x01 << 1)
26         #define m_PD_ADC_R                      (0x01 << 2)
27         #define m_PD_ADC_L                      (0x01 << 3)
28         #define m_PD_ADC                        (0x03 << 2)
29         #define m_PD_DAC                        (0x03 << 4)
30         #define v_PD_CODEC(n)           (n)
31         #define v_PD_MIC_BIAS(n)        (n << 1)
32         #define v_PD_ADC_R(n)           (n << 2)
33         #define v_PD_ADC_L(n)           (n << 3)
34         #define v_PD_DAC_R(n)           (n << 4)
35         #define v_PD_DAC_L(n)           (n << 5)
36         #define v_PD_ADC(n)                     (v_PD_ADC_L(n) | v_PD_ADC_R(n))
37         #define v_PD_DAC(n)                     (v_PD_DAC_L(n) | v_PD_DAC_R(n))
38         #define v_PWR_OFF                       v_PD_DAC_L(1) | v_PD_DAC_R(1) | v_PD_ADC_L(1) | v_PD_ADC_R(1) | v_PD_MIC_BIAS(0) | v_PD_CODEC(1) //²»¹Ø±Õmic_bias for phone_pad
39         
40 #define CODEC_REG_VCM_BIAS              0x0d
41         #define v_MIC_BIAS(n)           (n)
42         enum {
43                 VCM_RESISTOR_100K = 0,
44                 VCM_RESISTOR_25K
45         };
46         #define v_VCM_25K_100K(n)       (n << 2)
47         
48 #define CODEC_REG_DAC_MUTE              0x0e
49         #define v_MUTE_DAC_L(n)         (n << 1)
50         #define v_MUTE_DAC_R(n)         (n)
51         #define v_MUTE_DAC(n)   v_MUTE_DAC_L(n) | v_MUTE_DAC_R(n)
52         
53 #define CODEC_REG_ADC_SOURCE    0x0f
54         enum {
55                 ADC_SRC_MIC = 0,
56                 ADC_SRC_LINE_IN
57         };
58         #define v_SRC_ADC_L(n)          (n << 1)
59         #define v_SRC_ADC_R(n)          (n)
60         
61 #define CODEC_REG_DAC_GAIN              0x10
62         #define m_GAIN_DAC_L            (0x03 << 2)
63         #define m_GAIN_DAC_R            (0x03)
64         enum {
65                 DAC_GAIN_0DB = 0,
66                 DAC_GAIN_3DB_P = 0x2,   //3db
67                 DAC_GAIN_3DB_N                  //-3db
68         };
69         #define v_GAIN_DAC_L(n)         (n << 2)
70         #define v_GAIN_DAC_R(n)         (n)
71         #define v_GAIN_DAC(n)           (v_GAIN_DAC_L(n) | v_GAIN_DAC_R(n))
72         
73 //#ifndef DEBUG
74 //#define DEBUG
75 //#endif
76         
77 #ifdef DEBUG
78 #define DBG(format, ...) \
79                 printk(KERN_INFO "RK2928 CODEC: " format "\n", ## __VA_ARGS__)
80 #else
81 #define DBG(format, ...)
82 #endif
83
84 struct rk2928_codec_pdata {
85         int     hpctl;
86         int (*hpctl_io_init)(void);     
87 };
88
89 #endif /* __RK2928_CODEC_H__ */