5113f6f70
김현기
kernel add
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
/*
* Copyright (C) 2014 Texas Instruments
* Author : Tomi Valkeinen <tomi.valkeinen@ti.com>
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of any
* kind, whether express or implied.
*
*/
#ifndef __ENCODER_SII9022_H_
#define __ENCODER_SII9022_H_
#define SII9022_ID_902xA 0xb0
#define HDMI_I2C_MONITOR_ADDRESS 0x50
#define SII9022_VIDEO_DATA_BASE_REG 0x00
#define SII9022_PIXEL_CLK_LSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x00)
#define SII9022_PIXEL_CLK_MSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x01)
#define SII9022_VFREQ_LSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x02)
#define SII9022_VFREQ_MSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x03)
#define SII9022_PIXELS_LSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x04)
#define SII9022_PIXELS_MSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x05)
#define SII9022_LINES_LSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x06)
#define SII9022_LINES_MSB_REG (SII9022_VIDEO_DATA_BASE_REG + 0x07)
#define SII9022_PIXEL_REPETITION_REG 0x08
#define SII9022_AVI_IN_FORMAT_REG 0x09
#define SII9022_AVI_OUT_FORMAT_REG 0x0a
#define SII9022_AVI_INFOFRAME_BASE_REG 0x0c
#define SII9022_SYS_CTRL_DATA_REG 0x1a
#define SII9022_DEVICE_ID_REG 0x1b
#define SII9022_DEVICE_REV_ID_REG 0x1c
#define SII9022_DEVICE_TPI_ID_REG 0x1d
#define SII9022_POWER_STATE_CTRL_REG 0x1e
#define SII9022_IRQ_ENABLE_REG 0x3c
#define SII9022_IRQ_STATUS_REG 0x3d
#define SII9022_TPI_RQB_REG 0xc7
/* Indirect internal register access */
#define HDMI_IND_SET_PAGE 0xbc
#define HDMI_IND_OFFSET 0xbd
#define HDMI_IND_VALUE 0xbe
/* AVI InfoFrame */
#define HDMI_CPI_MISC_IF_SELECT_REG 0xbf
#define HDMI_CPI_MISC_IF_OFFSET 0xC0
/* Audio */
#define HDMI_TPI_I2S_ENABLE_MAPPING_REG 0x1f
#define HDMI_TPI_I2S_INPUT_CONFIG_REG 0x20
#define HDMI_TPI_I2S_STRM_HDR_BASE 0x21
#define HDMI_TPI_I2S_STRM_HDR_0_REG (HDMI_TPI_I2S_STRM_HDR_BASE + 0)
#define HDMI_TPI_I2S_STRM_HDR_1_REG (HDMI_TPI_I2S_STRM_HDR_BASE + 1)
#define HDMI_TPI_I2S_STRM_HDR_2_REG (HDMI_TPI_I2S_STRM_HDR_BASE + 2)
#define HDMI_TPI_I2S_STRM_HDR_3_REG (HDMI_TPI_I2S_STRM_HDR_BASE + 3)
#define HDMI_TPI_I2S_STRM_HDR_4_REG (HDMI_TPI_I2S_STRM_HDR_BASE + 4)
#define HDMI_TPI_AUDIO_CONFIG_BYTE2_REG 0x26
#define HDMI_TPI_AUDIO_CONFIG_BYTE3_REG 0x27
#define HDMI_TPI_AUDIO_CONFIG_BYTE4_REG 0x28
/* SII9022_SYS_CTRL_DATA_REG */
#define SII9022_SYS_CTRL_DDC_BUS_GRANTED BIT(1)
#define SII9022_SYS_CTRL_DDC_BUS_REQUEST BIT(2)
/* HDMI_TPI_AUDIO_CONFIG_BYTE2_REG */
#define TPI_AUDIO_CODING_STREAM_HEADER (0 << 0)
#define TPI_AUDIO_CODING_PCM (1 << 0)
#define TPI_AUDIO_CODING_AC3 (2 << 0)
#define TPI_AUDIO_CODING_MPEG1 (3 << 0)
#define TPI_AUDIO_CODING_MP3 (4 << 0)
#define TPI_AUDIO_CODING_MPEG2 (5 << 0)
#define TPI_AUDIO_CODING_AAC (6 << 0)
#define TPI_AUDIO_CODING_DTS (7 << 0)
#define TPI_AUDIO_CODING_ATRAC (8 << 0)
#define TPI_AUDIO_MUTE_DISABLE (0 << 4)
#define TPI_AUDIO_MUTE_ENABLE (1 << 4)
#define TPI_AUDIO_LAYOUT_2_CHANNELS (0 << 5)
#define TPI_AUDIO_LAYOUT_8_CHANNELS (1 << 5)
#define TPI_AUDIO_INTERFACE_DISABLE (0 << 6)
#define TPI_AUDIO_INTERFACE_SPDIF (1 << 6)
#define TPI_AUDIO_INTERFACE_I2S (2 << 6)
/* HDMI_TPI_AUDIO_CONFIG_BYTE3_REG */
#define TPI_AUDIO_CHANNEL_STREAM (0 << 0)
#define TPI_AUDIO_2_CHANNEL (1 << 0)
#define TPI_AUDIO_8_CHANNEL (7 << 0)
#define TPI_AUDIO_FREQ_STREAM (0 << 3)
#define TPI_AUDIO_FREQ_32KHZ (1 << 3)
#define TPI_AUDIO_FREQ_44KHZ (2 << 3)
#define TPI_AUDIO_FREQ_48KHZ (3 << 3)
#define TPI_AUDIO_FREQ_88KHZ (4 << 3)
#define TPI_AUDIO_FREQ_96KHZ (5 << 3)
#define TPI_AUDIO_FREQ_176KHZ (6 << 3)
#define TPI_AUDIO_FREQ_192KHZ (7 << 3)
#define TPI_AUDIO_SAMPLE_SIZE_STREAM (0 << 6)
#define TPI_AUDIO_SAMPLE_SIZE_16 (1 << 6)
#define TPI_AUDIO_SAMPLE_SIZE_20 (2 << 6)
#define TPI_AUDIO_SAMPLE_SIZE_24 (3 << 6)
/* HDMI_TPI_I2S_ENABLE_MAPPING_REG */
#define TPI_I2S_CONFIG_FIFO0 (0 << 0)
#define TPI_I2S_CONFIG_FIFO1 (1 << 0)
#define TPI_I2S_CONFIG_FIFO2 (2 << 0)
#define TPI_I2S_CONFIG_FIFO3 (3 << 0)
#define TPI_I2S_LEFT_RIGHT_SWAP (1 << 2)
#define TPI_I2S_AUTO_DOWNSAMPLE (1 << 3)
#define TPI_I2S_SELECT_SD0 (0 << 4)
#define TPI_I2S_SELECT_SD1 (1 << 4)
#define TPI_I2S_SELECT_SD2 (2 << 4)
#define TPI_I2S_SELECT_SD3 (3 << 4)
#define TPI_I2S_FIFO_ENABLE (1 << 7)
/* HDMI_TPI_I2S_INPUT_CONFIG_REG */
#define TPI_I2S_FIRST_BIT_SHIFT_YES (0 << 0)
#define TPI_I2S_FIRST_BIT_SHIFT_NO (1 << 0)
#define TPI_I2S_SD_DIRECTION_MSB_FIRST (0 << 1)
#define TPI_I2S_SD_DIRECTION_LSB_FIRST (1 << 1)
#define TPI_I2S_SD_JUSTIFY_LEFT (0 << 2)
#define TPI_I2S_SD_JUSTIFY_RIGHT (1 << 2)
#define TPI_I2S_WS_POLARITY_LOW (0 << 3)
#define TPI_I2S_WS_POLARITY_HIGH (1 << 3)
#define TPI_I2S_MCLK_MULTIPLIER_128 (0 << 4)
#define TPI_I2S_MCLK_MULTIPLIER_256 (1 << 4)
#define TPI_I2S_MCLK_MULTIPLIER_384 (2 << 4)
#define TPI_I2S_MCLK_MULTIPLIER_512 (3 << 4)
#define TPI_I2S_MCLK_MULTIPLIER_768 (4 << 4)
#define TPI_I2S_MCLK_MULTIPLIER_1024 (5 << 4)
#define TPI_I2S_MCLK_MULTIPLIER_1152 (6 << 4)
#define TPI_I2S_MCLK_MULTIPLIER_192 (7 << 4)
#define TPI_I2S_SCK_EDGE_FALLING (0 << 7)
#define TPI_I2S_SCK_EDGE_RISING (1 << 7)
/* SII9022_IRQ_ENABLE_REG / SII9022_IRQ_STATUS_REG */
#define SII9022_IRQ_HPE (1 << 0)
#define SII9022_IRQ_RXSENSE (1 << 1)
#define SII9022_IRQ_HP_STATE (1 << 2)
#define SII9022_IRQ_RXSENSE_STATE (1 << 3)
#define SII9022_IRQ_AUDIO_ERROR (1 << 4)
#define SII9022_IRQ_SEC_STATUS_CHANGE (1 << 5)
#define SII9022_IRQ_HDCP_AUTH_CHANGE (1 << 7)
#define SII9022_IRQ_MASK (SII9022_IRQ_HPE | SII9022_IRQ_RXSENSE | \
SII9022_IRQ_AUDIO_ERROR | \
SII9022_IRQ_SEC_STATUS_CHANGE | \
SII9022_IRQ_HDCP_AUTH_CHANGE)
enum sii9022_power_state {
SII9022_POWER_STATE_D0,
SII9022_POWER_STATE_D2,
SII9022_POWER_STATE_D3_HOT,
SII9022_POWER_STATE_D3_COLD,
};
struct sii9022_audio;
struct panel_drv_data {
struct omap_dss_device dssdev;
struct omap_dss_device *in;
struct i2c_client *i2c_client;
struct gpio_desc *reset_gpio;
struct regmap *regmap;
struct omap_video_timings timings;
struct delayed_work work;
struct sii9022_audio *audio;
struct mutex lock;
void (*hpd_cb)(void *cb_data, enum drm_connector_status status);
void *hpd_cb_data;
struct mutex hpd_lock;
int irq;
bool use_polling;
bool htplg_state;
bool rxsense_state;
bool hdmi_mode;
struct hdmi_avi_infoframe frame;
};
#define to_panel_data(x) container_of(x, struct panel_drv_data, dssdev)
int sii9022_hdmi_codec_register(struct device *dev);
void sii9022_hdmi_codec_unregister(struct device *dev);
#endif
|