diff options
author | Mauro Carvalho Chehab <mchehab@brturbo.com.br> | 2005-11-09 00:36:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-09 10:56:11 -0500 |
commit | cd4665c5dcf9916dc2f71d30c7e7830ee7cbf884 (patch) | |
tree | 5b13259c6f85d59ad0c33328c28b4b167265b8b0 | |
parent | 46a3a575bcc6a82b8538dd7a02fef634853ad31e (diff) |
[PATCH] v4l: 673: initial code for texas instruments tvp5150a and tvp5150am1
- Initial code for Texas Instruments TVP5150A and TVP5150AM1
Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/media/video/tvp5150.c | 378 | ||||
-rw-r--r-- | drivers/media/video/tvp5150_reg.h | 173 |
2 files changed, 551 insertions, 0 deletions
diff --git a/drivers/media/video/tvp5150.c b/drivers/media/video/tvp5150.c new file mode 100644 index 000000000000..e575877f8269 --- /dev/null +++ b/drivers/media/video/tvp5150.c | |||
@@ -0,0 +1,378 @@ | |||
1 | /* | ||
2 | * tvp5150 - Texas Instruments TVP5150A(M) video decoder driver | ||
3 | * | ||
4 | * Copyright (c) 2005 Mauro Carvalho Chehab (mchehab@brturbo.com.br) | ||
5 | * This code is placed under the terms of the GNU General Public License | ||
6 | */ | ||
7 | |||
8 | #include <linux/videodev.h> | ||
9 | #include <linux/i2c.h> | ||
10 | #include <linux/videodev.h> | ||
11 | #include <linux/delay.h> | ||
12 | |||
13 | #include "tvp5150_reg.h" | ||
14 | |||
15 | MODULE_DESCRIPTION("Texas Instruments TVP5150A video decoder driver");/* standard i2c insmod options */ | ||
16 | MODULE_AUTHOR("Mauro Carvalho Chehab"); | ||
17 | MODULE_LICENSE("GPL"); | ||
18 | |||
19 | static unsigned short normal_i2c[] = { | ||
20 | 0xb8 >>1, | ||
21 | 0xba >>1, | ||
22 | I2C_CLIENT_END | ||
23 | }; | ||
24 | |||
25 | I2C_CLIENT_INSMOD; | ||
26 | |||
27 | static int debug = 0; | ||
28 | module_param(debug, int, 0); | ||
29 | MODULE_PARM_DESC(debug, "Debug level (0-1)"); | ||
30 | |||
31 | #define dprintk(num, format, args...) \ | ||
32 | do { \ | ||
33 | if (debug >= num) \ | ||
34 | printk(format , ##args); \ | ||
35 | } while (0) | ||
36 | |||
37 | struct tvp5150 { | ||
38 | struct i2c_client *client; | ||
39 | }; | ||
40 | |||
41 | static inline int tvp5150_read(struct i2c_client *c,unsigned char addr) | ||
42 | { | ||
43 | unsigned char buffer[1]; | ||
44 | int rc; | ||
45 | /* struct tvp5150 *core = i2c_get_clientdata(c); */ | ||
46 | |||
47 | buffer[0] = addr; | ||
48 | if (1 != (rc = i2c_master_send(c, buffer, 1))) | ||
49 | dprintk(0,"i2c i/o error: rc == %d (should be 1)\n", rc); | ||
50 | |||
51 | msleep(10); | ||
52 | |||
53 | if (1 != (rc = i2c_master_recv(c, buffer, 1))) | ||
54 | dprintk(0,"i2c i/o error: rc == %d (should be 1)\n", rc); | ||
55 | |||
56 | return (buffer[0]); | ||
57 | } | ||
58 | |||
59 | static inline void tvp5150_write(struct i2c_client *c,unsigned char addr, unsigned char value) | ||
60 | { | ||
61 | unsigned char buffer[2]; | ||
62 | int rc; | ||
63 | /* struct tvp5150 *core = i2c_get_clientdata(c); */ | ||
64 | |||
65 | buffer[0] = addr; | ||
66 | buffer[2] = addr; | ||
67 | if (2 != (rc = i2c_master_send(c, buffer, 2))) | ||
68 | dprintk(0,"i2c i/o error: rc == %d (should be 2)\n", rc); | ||
69 | } | ||
70 | |||
71 | static void dump_reg (struct i2c_client *c) | ||
72 | { | ||
73 | dprintk (2, "tvp5150: Video input source selection #1 = 0x%02x\n", tvp5150_read(c,TVP5150_VD_IN_SRC_SEL_1)); | ||
74 | dprintk (2, "tvp5150: Analog channel controls = 0x%02x\n", tvp5150_read(c,TVP5150_ANAL_CHL_CTL)); | ||
75 | dprintk (2, "tvp5150: Operation mode controls = 0x%02x\n", tvp5150_read(c,TVP5150_OP_MODE_CTL)); | ||
76 | dprintk (2, "tvp5150: Miscellaneous controls = 0x%02x\n", tvp5150_read(c,TVP5150_MISC_CTL)); | ||
77 | dprintk (2, "tvp5150: Autoswitch mask: TVP5150A / TVP5150AM = 0x%02x\n", tvp5150_read(c,TVP5150_AUTOSW_MSK)); | ||
78 | dprintk (2, "tvp5150: Color killer threshold control = 0x%02x\n", tvp5150_read(c,TVP5150_COLOR_KIL_THSH_CTL)); | ||
79 | dprintk (2, "tvp5150: Luminance processing control #1 = 0x%02x\n", tvp5150_read(c,TVP5150_LUMA_PROC_CTL_1)); | ||
80 | dprintk (2, "tvp5150: Luminance processing control #2 = 0x%02x\n", tvp5150_read(c,TVP5150_LUMA_PROC_CTL_2)); | ||
81 | dprintk (2, "tvp5150: Brightness control = 0x%02x\n", tvp5150_read(c,TVP5150_BRIGHT_CTL)); | ||
82 | dprintk (2, "tvp5150: Color saturation control = 0x%02x\n", tvp5150_read(c,TVP5150_SATURATION_CTL)); | ||
83 | dprintk (2, "tvp5150: Hue control = 0x%02x\n", tvp5150_read(c,TVP5150_HUE_CTL)); | ||
84 | dprintk (2, "tvp5150: Contrast control = 0x%02x\n", tvp5150_read(c,TVP5150_CONTRAST_CTL)); | ||
85 | dprintk (2, "tvp5150: Outputs and data rates select = 0x%02x\n", tvp5150_read(c,TVP5150_DATA_RATE_SEL)); | ||
86 | dprintk (2, "tvp5150: Luminance processing control #3 = 0x%02x\n", tvp5150_read(c,TVP5150_LUMA_PROC_CTL_3)); | ||
87 | dprintk (2, "tvp5150: Configuration shared pins = 0x%02x\n", tvp5150_read(c,TVP5150_CONF_SHARED_PIN)); | ||
88 | dprintk (2, "tvp5150: Active video cropping start MSB = 0x%02x\n", tvp5150_read(c,TVP5150_ACT_VD_CROP_ST_MSB)); | ||
89 | dprintk (2, "tvp5150: Active video cropping start LSB = 0x%02x\n", tvp5150_read(c,TVP5150_ACT_VD_CROP_ST_LSB)); | ||
90 | dprintk (2, "tvp5150: Active video cropping stop MSB = 0x%02x\n", tvp5150_read(c,TVP5150_ACT_VD_CROP_STP_MSB)); | ||
91 | dprintk (2, "tvp5150: Active video cropping stop LSB = 0x%02x\n", tvp5150_read(c,TVP5150_ACT_VD_CROP_STP_LSB)); | ||
92 | dprintk (2, "tvp5150: Genlock/RTC = 0x%02x\n", tvp5150_read(c,TVP5150_GENLOCK)); | ||
93 | dprintk (2, "tvp5150: Horizontal sync start = 0x%02x\n", tvp5150_read(c,TVP5150_HORIZ_SYNC_START)); | ||
94 | dprintk (2, "tvp5150: Vertical blanking start = 0x%02x\n", tvp5150_read(c,TVP5150_VERT_BLANKING_START)); | ||
95 | dprintk (2, "tvp5150: Vertical blanking stop = 0x%02x\n", tvp5150_read(c,TVP5150_VERT_BLANKING_STOP)); | ||
96 | dprintk (2, "tvp5150: Chrominance processing control #1 = 0x%02x\n", tvp5150_read(c,TVP5150_CHROMA_PROC_CTL_1)); | ||
97 | dprintk (2, "tvp5150: Chrominance processing control #2 = 0x%02x\n", tvp5150_read(c,TVP5150_CHROMA_PROC_CTL_2)); | ||
98 | dprintk (2, "tvp5150: Interrupt reset register B = 0x%02x\n", tvp5150_read(c,TVP5150_INT_RESET_REG_B)); | ||
99 | dprintk (2, "tvp5150: Interrupt enable register B = 0x%02x\n", tvp5150_read(c,TVP5150_INT_ENABLE_REG_B)); | ||
100 | dprintk (2, "tvp5150: Interrupt configuration register B = 0x%02x\n", tvp5150_read(c,TVP5150_INTT_CONFIG_REG_B)); | ||
101 | dprintk (2, "tvp5150: Video standard = 0x%02x\n", tvp5150_read(c,TVP5150_VIDEO_STD)); | ||
102 | dprintk (2, "tvp5150: Cb gain factor = 0x%02x\n", tvp5150_read(c,TVP5150_CB_GAIN_FACT)); | ||
103 | dprintk (2, "tvp5150: Cr gain factor = 0x%02x\n", tvp5150_read(c,TVP5150_CR_GAIN_FACTOR)); | ||
104 | dprintk (2, "tvp5150: Macrovision on counter = 0x%02x\n", tvp5150_read(c,TVP5150_MACROVISION_ON_CTR)); | ||
105 | dprintk (2, "tvp5150: Macrovision off counter = 0x%02x\n", tvp5150_read(c,TVP5150_MACROVISION_OFF_CTR)); | ||
106 | dprintk (2, "tvp5150: revision select (TVP5150AM1 only) = 0x%02x\n", tvp5150_read(c,TVP5150_REV_SELECT)); | ||
107 | dprintk (2, "tvp5150: MSB of device ID = 0x%02x\n", tvp5150_read(c,TVP5150_MSB_DEV_ID)); | ||
108 | dprintk (2, "tvp5150: LSB of device ID = 0x%02x\n", tvp5150_read(c,TVP5150_LSB_DEV_ID)); | ||
109 | dprintk (2, "tvp5150: ROM major version = 0x%02x\n", tvp5150_read(c,TVP5150_ROM_MAJOR_VER)); | ||
110 | dprintk (2, "tvp5150: ROM minor version = 0x%02x\n", tvp5150_read(c,TVP5150_ROM_MINOR_VER)); | ||
111 | dprintk (2, "tvp5150: Vertical line count MSB = 0x%02x\n", tvp5150_read(c,TVP5150_VERT_LN_COUNT_MSB)); | ||
112 | dprintk (2, "tvp5150: Vertical line count LSB = 0x%02x\n", tvp5150_read(c,TVP5150_VERT_LN_COUNT_LSB)); | ||
113 | dprintk (2, "tvp5150: Interrupt status register B = 0x%02x\n", tvp5150_read(c,TVP5150_INT_STATUS_REG_B)); | ||
114 | dprintk (2, "tvp5150: Interrupt active register B = 0x%02x\n", tvp5150_read(c,TVP5150_INT_ACTIVE_REG_B)); | ||
115 | dprintk (2, "tvp5150: Status register #1 = 0x%02x\n", tvp5150_read(c,TVP5150_STATUS_REG_1)); | ||
116 | dprintk (2, "tvp5150: Status register #2 = 0x%02x\n", tvp5150_read(c,TVP5150_STATUS_REG_2)); | ||
117 | dprintk (2, "tvp5150: Status register #3 = 0x%02x\n", tvp5150_read(c,TVP5150_STATUS_REG_3)); | ||
118 | dprintk (2, "tvp5150: Status register #4 = 0x%02x\n", tvp5150_read(c,TVP5150_STATUS_REG_4)); | ||
119 | dprintk (2, "tvp5150: Status register #5 = 0x%02x\n", tvp5150_read(c,TVP5150_STATUS_REG_5)); | ||
120 | dprintk (2, "tvp5150: Closed caption data registers = 0x%02x\n", tvp5150_read(c,TVP5150_CC_DATA_REG1)); | ||
121 | dprintk (2, "tvp5150: Closed caption data registers = 0x%02x\n", tvp5150_read(c,TVP5150_CC_DATA_REG2)); | ||
122 | dprintk (2, "tvp5150: Closed caption data registers = 0x%02x\n", tvp5150_read(c,TVP5150_CC_DATA_REG3)); | ||
123 | dprintk (2, "tvp5150: Closed caption data registers = 0x%02x\n", tvp5150_read(c,TVP5150_CC_DATA_REG4)); | ||
124 | dprintk (2, "tvp5150: WSS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_WSS_DATA_REG1)); | ||
125 | dprintk (2, "tvp5150: WSS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_WSS_DATA_REG2)); | ||
126 | dprintk (2, "tvp5150: WSS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_WSS_DATA_REG3)); | ||
127 | dprintk (2, "tvp5150: WSS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_WSS_DATA_REG4)); | ||
128 | dprintk (2, "tvp5150: WSS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_WSS_DATA_REG5)); | ||
129 | dprintk (2, "tvp5150: WSS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_WSS_DATA_REG6)); | ||
130 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG1)); | ||
131 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG2)); | ||
132 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG3)); | ||
133 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG4)); | ||
134 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG5)); | ||
135 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG6)); | ||
136 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG7)); | ||
137 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG8)); | ||
138 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG9)); | ||
139 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG10)); | ||
140 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG11)); | ||
141 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG12)); | ||
142 | dprintk (2, "tvp5150: VPS data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VPS_DATA_REG13)); | ||
143 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG1)); | ||
144 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG2)); | ||
145 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG3)); | ||
146 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG4)); | ||
147 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG5)); | ||
148 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG6)); | ||
149 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG7)); | ||
150 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG8)); | ||
151 | dprintk (2, "tvp5150: VITC data registers = 0x%02x\n", tvp5150_read(c,TVP5150_VITC_DATA_REG9)); | ||
152 | dprintk (2, "tvp5150: VBI FIFO read data = 0x%02x\n", tvp5150_read(c,TVP5150_VBI_FIFO_READ_DATA)); | ||
153 | dprintk (2, "tvp5150: Teletext filter 1 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_1_1)); | ||
154 | dprintk (2, "tvp5150: Teletext filter 1 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_1_2)); | ||
155 | dprintk (2, "tvp5150: Teletext filter 1 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_1_3)); | ||
156 | dprintk (2, "tvp5150: Teletext filter 1 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_1_4)); | ||
157 | dprintk (2, "tvp5150: Teletext filter 1 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_1_5)); | ||
158 | dprintk (2, "tvp5150: Teletext filter 2 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_2_1)); | ||
159 | dprintk (2, "tvp5150: Teletext filter 2 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_2_2)); | ||
160 | dprintk (2, "tvp5150: Teletext filter 2 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_2_3)); | ||
161 | dprintk (2, "tvp5150: Teletext filter 2 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_2_4)); | ||
162 | dprintk (2, "tvp5150: Teletext filter 2 = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_2_5)); | ||
163 | dprintk (2, "tvp5150: Teletext filter enable = 0x%02x\n", tvp5150_read(c,TVP5150_TELETEXT_FIL_ENA)); | ||
164 | dprintk (2, "tvp5150: Interrupt status register A = 0x%02x\n", tvp5150_read(c,TVP5150_INT_STATUS_REG_A)); | ||
165 | dprintk (2, "tvp5150: Interrupt enable register A = 0x%02x\n", tvp5150_read(c,TVP5150_INT_ENABLE_REG_A)); | ||
166 | dprintk (2, "tvp5150: Interrupt configuration = 0x%02x\n", tvp5150_read(c,TVP5150_INT_CONF)); | ||
167 | dprintk (2, "tvp5150: VDP configuration RAM data = 0x%02x\n", tvp5150_read(c,TVP5150_VDP_CONF_RAM_DATA)); | ||
168 | dprintk (2, "tvp5150: Configuration RAM address low byte = 0x%02x\n", tvp5150_read(c,TVP5150_CONF_RAM_ADDR_LOW)); | ||
169 | dprintk (2, "tvp5150: Configuration RAM address high byte = 0x%02x\n", tvp5150_read(c,TVP5150_CONF_RAM_ADDR_HIGH)); | ||
170 | dprintk (2, "tvp5150: VDP status register = 0x%02x\n", tvp5150_read(c,TVP5150_VDP_STATUS_REG)); | ||
171 | dprintk (2, "tvp5150: FIFO word count = 0x%02x\n", tvp5150_read(c,TVP5150_FIFO_WORD_COUNT)); | ||
172 | dprintk (2, "tvp5150: FIFO interrupt threshold = 0x%02x\n", tvp5150_read(c,TVP5150_FIFO_INT_THRESHOLD)); | ||
173 | dprintk (2, "tvp5150: FIFO reset = 0x%02x\n", tvp5150_read(c,TVP5150_FIFO_RESET)); | ||
174 | dprintk (2, "tvp5150: Line number interrupt = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_NUMBER_INT)); | ||
175 | dprintk (2, "tvp5150: Pixel alignment register low byte = 0x%02x\n", tvp5150_read(c,TVP5150_PIX_ALIGN_REG_LOW)); | ||
176 | dprintk (2, "tvp5150: Pixel alignment register high byte = 0x%02x\n", tvp5150_read(c,TVP5150_PIX_ALIGN_REG_HIGH)); | ||
177 | dprintk (2, "tvp5150: FIFO output control = 0x%02x\n", tvp5150_read(c,TVP5150_FIFO_OUT_CTRL)); | ||
178 | dprintk (2, "tvp5150: Full field enable 1 = 0x%02x\n", tvp5150_read(c,TVP5150_FULL_FIELD_ENA_1)); | ||
179 | dprintk (2, "tvp5150: Full field enable 2 = 0x%02x\n", tvp5150_read(c,TVP5150_FULL_FIELD_ENA_2)); | ||
180 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_1)); | ||
181 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_2)); | ||
182 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_3)); | ||
183 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_4)); | ||
184 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_5)); | ||
185 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_6)); | ||
186 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_7)); | ||
187 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_8)); | ||
188 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_9)); | ||
189 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_10)); | ||
190 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_11)); | ||
191 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_12)); | ||
192 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_13)); | ||
193 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_14)); | ||
194 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_15)); | ||
195 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_16)); | ||
196 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_17)); | ||
197 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_18)); | ||
198 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_19)); | ||
199 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_20)); | ||
200 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_21)); | ||
201 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_22)); | ||
202 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_23)); | ||
203 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_24)); | ||
204 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_25)); | ||
205 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_27)); | ||
206 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_28)); | ||
207 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_29)); | ||
208 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_30)); | ||
209 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_31)); | ||
210 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_32)); | ||
211 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_33)); | ||
212 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_34)); | ||
213 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_35)); | ||
214 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_36)); | ||
215 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_37)); | ||
216 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_38)); | ||
217 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_39)); | ||
218 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_40)); | ||
219 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_41)); | ||
220 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_42)); | ||
221 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_43)); | ||
222 | dprintk (2, "tvp5150: Line mode registers = 0x%02x\n", tvp5150_read(c,TVP5150_LINE_MODE_REG_44)); | ||
223 | dprintk (2, "tvp5150: Full field mode register = 0x%02x\n", tvp5150_read(c,TVP5150_FULL_FIELD_MODE_REG)); | ||
224 | } | ||
225 | |||
226 | /**************************************************************************** | ||
227 | Basic functions | ||
228 | ****************************************************************************/ | ||
229 | enum tvp5150_input { | ||
230 | TVP5150_ANALOG_CH0 = 0, | ||
231 | TVP5150_SVIDEO = 1, | ||
232 | TVP5150_ANALOG_CH1 = 2, | ||
233 | TVP5150_BLACK_SCREEN = 8 | ||
234 | }; | ||
235 | |||
236 | static inline void tvp5150_selmux(struct i2c_client *c, enum tvp5150_input input) | ||
237 | { | ||
238 | tvp5150_write(c,TVP5150_VD_IN_SRC_SEL_1,input); | ||
239 | }; | ||
240 | |||
241 | static inline void tvp5150_reset(struct i2c_client *c) | ||
242 | { | ||
243 | /* Automatic offset and AGC enabled*/ | ||
244 | tvp5150_write(c,TVP5150_ANAL_CHL_CTL,0x15); | ||
245 | |||
246 | /* Normal Operation */ | ||
247 | tvp5150_write(c,TVP5150_OP_MODE_CTL,0x00); | ||
248 | |||
249 | /* Activate YCrCb output 0x9 or 0xd ? */ | ||
250 | tvp5150_write(c,TVP5150_MISC_CTL,0x09); | ||
251 | |||
252 | /* Activates video std autodetection for PAL/M and PAL/N */ | ||
253 | tvp5150_write(c,TVP5150_AUTOSW_MSK,0xf0); | ||
254 | |||
255 | /* Default format: 0x47, 4:2:2: 0x40 */ | ||
256 | tvp5150_write(c,TVP5150_DATA_RATE_SEL,0x47); | ||
257 | |||
258 | tvp5150_selmux(c,TVP5150_ANALOG_CH0); | ||
259 | }; | ||
260 | |||
261 | |||
262 | /**************************************************************************** | ||
263 | I2C Client & Driver | ||
264 | ****************************************************************************/ | ||
265 | static struct i2c_driver driver; | ||
266 | |||
267 | static struct i2c_client client_template = | ||
268 | { | ||
269 | .name = "(unset)", | ||
270 | .flags = I2C_CLIENT_ALLOW_USE, | ||
271 | .driver = &driver, | ||
272 | }; | ||
273 | |||
274 | static int | ||
275 | tvp5150_detect_client (struct i2c_adapter *adapter, | ||
276 | int address, | ||
277 | int kind) | ||
278 | { | ||
279 | struct i2c_client *client; | ||
280 | struct tvp5150 *core; | ||
281 | int rv; | ||
282 | |||
283 | dprintk(1, | ||
284 | KERN_INFO | ||
285 | "tvp5150.c: detecting tvp5150 client on address 0x%x\n", | ||
286 | address << 1); | ||
287 | |||
288 | client_template.adapter = adapter; | ||
289 | client_template.addr = address; | ||
290 | |||
291 | /* Check if the adapter supports the needed features */ | ||
292 | if (!i2c_check_functionality | ||
293 | (adapter, | ||
294 | I2C_FUNC_SMBUS_READ_BYTE | I2C_FUNC_SMBUS_WRITE_BYTE_DATA)) | ||
295 | return 0; | ||
296 | |||
297 | client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); | ||
298 | if (client == 0) | ||
299 | return -ENOMEM; | ||
300 | memcpy(client,&client_template,sizeof(struct i2c_client)); | ||
301 | |||
302 | core = kmalloc(sizeof(struct tvp5150), GFP_KERNEL); | ||
303 | if (core == 0) { | ||
304 | kfree(client); | ||
305 | return -ENOMEM; | ||
306 | } | ||
307 | memset(core, 0, sizeof(struct tvp5150)); | ||
308 | i2c_set_clientdata(client, core); | ||
309 | |||
310 | rv = i2c_attach_client(client); | ||
311 | |||
312 | if (rv) { | ||
313 | kfree(client); | ||
314 | kfree(core); | ||
315 | return rv; | ||
316 | } | ||
317 | |||
318 | tvp5150_reset(client); | ||
319 | dump_reg (client); | ||
320 | |||
321 | return 0; | ||
322 | } | ||
323 | |||
324 | static int | ||
325 | tvp5150_attach_adapter (struct i2c_adapter *adapter) | ||
326 | { | ||
327 | dprintk(1, | ||
328 | KERN_INFO | ||
329 | "tvp5150.c: starting probe for adapter %s (0x%x)\n", | ||
330 | adapter->name, adapter->id); | ||
331 | return i2c_probe(adapter, &addr_data, &tvp5150_detect_client); | ||
332 | } | ||
333 | |||
334 | static int | ||
335 | tvp5150_detach_client (struct i2c_client *client) | ||
336 | { | ||
337 | struct tvp5150 *decoder = i2c_get_clientdata(client); | ||
338 | int err; | ||
339 | |||
340 | err = i2c_detach_client(client); | ||
341 | if (err) { | ||
342 | return err; | ||
343 | } | ||
344 | |||
345 | kfree(decoder); | ||
346 | kfree(client); | ||
347 | |||
348 | return 0; | ||
349 | } | ||
350 | |||
351 | /* ----------------------------------------------------------------------- */ | ||
352 | |||
353 | static struct i2c_driver driver = { | ||
354 | .owner = THIS_MODULE, | ||
355 | .name = "tvp5150", | ||
356 | |||
357 | /* FIXME */ | ||
358 | .id = I2C_DRIVERID_SAA7110, | ||
359 | .flags = I2C_DF_NOTIFY, | ||
360 | |||
361 | .attach_adapter = tvp5150_attach_adapter, | ||
362 | .detach_client = tvp5150_detach_client, | ||
363 | }; | ||
364 | |||
365 | static int __init | ||
366 | tvp5150_init (void) | ||
367 | { | ||
368 | return i2c_add_driver(&driver); | ||
369 | } | ||
370 | |||
371 | static void __exit | ||
372 | tvp5150_exit (void) | ||
373 | { | ||
374 | i2c_del_driver(&driver); | ||
375 | } | ||
376 | |||
377 | module_init(tvp5150_init); | ||
378 | module_exit(tvp5150_exit); | ||
diff --git a/drivers/media/video/tvp5150_reg.h b/drivers/media/video/tvp5150_reg.h new file mode 100644 index 000000000000..cd45c1ded786 --- /dev/null +++ b/drivers/media/video/tvp5150_reg.h | |||
@@ -0,0 +1,173 @@ | |||
1 | #define TVP5150_VD_IN_SRC_SEL_1 0x00 /* Video input source selection #1 */ | ||
2 | #define TVP5150_ANAL_CHL_CTL 0x01 /* Analog channel controls */ | ||
3 | #define TVP5150_OP_MODE_CTL 0x02 /* Operation mode controls */ | ||
4 | #define TVP5150_MISC_CTL 0x03 /* Miscellaneous controls */ | ||
5 | #define TVP5150_AUTOSW_MSK 0x04 /* Autoswitch mask: TVP5150A / TVP5150AM */ | ||
6 | |||
7 | /* Reserved 05h */ | ||
8 | |||
9 | #define TVP5150_COLOR_KIL_THSH_CTL 0x06 /* Color killer threshold control */ | ||
10 | #define TVP5150_LUMA_PROC_CTL_1 0x07 /* Luminance processing control #1 */ | ||
11 | #define TVP5150_LUMA_PROC_CTL_2 0x08 /* Luminance processing control #2 */ | ||
12 | #define TVP5150_BRIGHT_CTL 0x09 /* Brightness control */ | ||
13 | #define TVP5150_SATURATION_CTL 0x0a /* Color saturation control */ | ||
14 | #define TVP5150_HUE_CTL 0x0b /* Hue control */ | ||
15 | #define TVP5150_CONTRAST_CTL 0x0c /* Contrast control */ | ||
16 | #define TVP5150_DATA_RATE_SEL 0x0d /* Outputs and data rates select */ | ||
17 | #define TVP5150_LUMA_PROC_CTL_3 0x0e /* Luminance processing control #3 */ | ||
18 | #define TVP5150_CONF_SHARED_PIN 0x0f /* Configuration shared pins */ | ||
19 | |||
20 | /* Reserved 10h */ | ||
21 | |||
22 | #define TVP5150_ACT_VD_CROP_ST_MSB 0x11 /* Active video cropping start MSB */ | ||
23 | #define TVP5150_ACT_VD_CROP_ST_LSB 0x12 /* Active video cropping start LSB */ | ||
24 | #define TVP5150_ACT_VD_CROP_STP_MSB 0x13 /* Active video cropping stop MSB */ | ||
25 | #define TVP5150_ACT_VD_CROP_STP_LSB 0x14 /* Active video cropping stop LSB */ | ||
26 | #define TVP5150_GENLOCK 0x15 /* Genlock/RTC */ | ||
27 | #define TVP5150_HORIZ_SYNC_START 0x16 /* Horizontal sync start */ | ||
28 | |||
29 | /* Reserved 17h */ | ||
30 | |||
31 | #define TVP5150_VERT_BLANKING_START 0x18 /* Vertical blanking start */ | ||
32 | #define TVP5150_VERT_BLANKING_STOP 0x19 /* Vertical blanking stop */ | ||
33 | #define TVP5150_CHROMA_PROC_CTL_1 0x1a /* Chrominance processing control #1 */ | ||
34 | #define TVP5150_CHROMA_PROC_CTL_2 0x1b /* Chrominance processing control #2 */ | ||
35 | #define TVP5150_INT_RESET_REG_B 0x1c /* Interrupt reset register B */ | ||
36 | #define TVP5150_INT_ENABLE_REG_B 0x1d /* Interrupt enable register B */ | ||
37 | #define TVP5150_INTT_CONFIG_REG_B 0x1e /* Interrupt configuration register B */ | ||
38 | |||
39 | /* Reserved 1Fh-27h */ | ||
40 | |||
41 | #define TVP5150_VIDEO_STD 0x28 /* Video standard */ | ||
42 | |||
43 | /* Reserved 29h-2bh */ | ||
44 | |||
45 | #define TVP5150_CB_GAIN_FACT 0x2c /* Cb gain factor */ | ||
46 | #define TVP5150_CR_GAIN_FACTOR 0x2d /* Cr gain factor */ | ||
47 | #define TVP5150_MACROVISION_ON_CTR 0x2e /* Macrovision on counter */ | ||
48 | #define TVP5150_MACROVISION_OFF_CTR 0x2f /* Macrovision off counter */ | ||
49 | #define TVP5150_REV_SELECT 0x30 /* revision select (TVP5150AM1 only) */ | ||
50 | |||
51 | /* Reserved 31h-7Fh */ | ||
52 | |||
53 | #define TVP5150_MSB_DEV_ID 0x80 /* MSB of device ID */ | ||
54 | #define TVP5150_LSB_DEV_ID 0x81 /* LSB of device ID */ | ||
55 | #define TVP5150_ROM_MAJOR_VER 0x82 /* ROM major version */ | ||
56 | #define TVP5150_ROM_MINOR_VER 0x83 /* ROM minor version */ | ||
57 | #define TVP5150_VERT_LN_COUNT_MSB 0x84 /* Vertical line count MSB */ | ||
58 | #define TVP5150_VERT_LN_COUNT_LSB 0x85 /* Vertical line count LSB */ | ||
59 | #define TVP5150_INT_STATUS_REG_B 0x86 /* Interrupt status register B */ | ||
60 | #define TVP5150_INT_ACTIVE_REG_B 0x87 /* Interrupt active register B */ | ||
61 | #define TVP5150_STATUS_REG_1 0x88 /* Status register #1 */ | ||
62 | #define TVP5150_STATUS_REG_2 0x89 /* Status register #2 */ | ||
63 | #define TVP5150_STATUS_REG_3 0x8a /* Status register #3 */ | ||
64 | #define TVP5150_STATUS_REG_4 0x8b /* Status register #4 */ | ||
65 | #define TVP5150_STATUS_REG_5 0x8c /* Status register #5 */ | ||
66 | /* Reserved 8Dh-8Fh */ | ||
67 | #define TVP5150_CC_DATA_REG1 0x90 /* Closed caption data registers */ | ||
68 | #define TVP5150_CC_DATA_REG2 0x91 /* Closed caption data registers */ | ||
69 | #define TVP5150_CC_DATA_REG3 0x92 /* Closed caption data registers */ | ||
70 | #define TVP5150_CC_DATA_REG4 0x93 /* Closed caption data registers */ | ||
71 | #define TVP5150_WSS_DATA_REG1 0X94 /* WSS data registers */ | ||
72 | #define TVP5150_WSS_DATA_REG2 0X95 /* WSS data registers */ | ||
73 | #define TVP5150_WSS_DATA_REG3 0X96 /* WSS data registers */ | ||
74 | #define TVP5150_WSS_DATA_REG4 0X97 /* WSS data registers */ | ||
75 | #define TVP5150_WSS_DATA_REG5 0X98 /* WSS data registers */ | ||
76 | #define TVP5150_WSS_DATA_REG6 0X99 /* WSS data registers */ | ||
77 | #define TVP5150_VPS_DATA_REG1 0x9a /* VPS data registers */ | ||
78 | #define TVP5150_VPS_DATA_REG2 0x9b /* VPS data registers */ | ||
79 | #define TVP5150_VPS_DATA_REG3 0x9c /* VPS data registers */ | ||
80 | #define TVP5150_VPS_DATA_REG4 0x9d /* VPS data registers */ | ||
81 | #define TVP5150_VPS_DATA_REG5 0x9e /* VPS data registers */ | ||
82 | #define TVP5150_VPS_DATA_REG6 0x9f /* VPS data registers */ | ||
83 | #define TVP5150_VPS_DATA_REG7 0xa0 /* VPS data registers */ | ||
84 | #define TVP5150_VPS_DATA_REG8 0xa1 /* VPS data registers */ | ||
85 | #define TVP5150_VPS_DATA_REG9 0xa2 /* VPS data registers */ | ||
86 | #define TVP5150_VPS_DATA_REG10 0xa3 /* VPS data registers */ | ||
87 | #define TVP5150_VPS_DATA_REG11 0xa4 /* VPS data registers */ | ||
88 | #define TVP5150_VPS_DATA_REG12 0xa5 /* VPS data registers */ | ||
89 | #define TVP5150_VPS_DATA_REG13 0xa6 /* VPS data registers */ | ||
90 | #define TVP5150_VITC_DATA_REG1 0xa7 /* VITC data registers */ | ||
91 | #define TVP5150_VITC_DATA_REG2 0xa8 /* VITC data registers */ | ||
92 | #define TVP5150_VITC_DATA_REG3 0xa9 /* VITC data registers */ | ||
93 | #define TVP5150_VITC_DATA_REG4 0xaa /* VITC data registers */ | ||
94 | #define TVP5150_VITC_DATA_REG5 0xab /* VITC data registers */ | ||
95 | #define TVP5150_VITC_DATA_REG6 0xac /* VITC data registers */ | ||
96 | #define TVP5150_VITC_DATA_REG7 0xad /* VITC data registers */ | ||
97 | #define TVP5150_VITC_DATA_REG8 0xae /* VITC data registers */ | ||
98 | #define TVP5150_VITC_DATA_REG9 0xaf /* VITC data registers */ | ||
99 | #define TVP5150_VBI_FIFO_READ_DATA 0xb0 /* VBI FIFO read data */ | ||
100 | #define TVP5150_TELETEXT_FIL_1_1 0xb1 /* Teletext filter 1 */ | ||
101 | #define TVP5150_TELETEXT_FIL_1_2 0xb2 /* Teletext filter 1 */ | ||
102 | #define TVP5150_TELETEXT_FIL_1_3 0xb3 /* Teletext filter 1 */ | ||
103 | #define TVP5150_TELETEXT_FIL_1_4 0xb4 /* Teletext filter 1 */ | ||
104 | #define TVP5150_TELETEXT_FIL_1_5 0xb5 /* Teletext filter 1 */ | ||
105 | #define TVP5150_TELETEXT_FIL_2_1 0xb6 /* Teletext filter 2 */ | ||
106 | #define TVP5150_TELETEXT_FIL_2_2 0xb7 /* Teletext filter 2 */ | ||
107 | #define TVP5150_TELETEXT_FIL_2_3 0xb8 /* Teletext filter 2 */ | ||
108 | #define TVP5150_TELETEXT_FIL_2_4 0xb9 /* Teletext filter 2 */ | ||
109 | #define TVP5150_TELETEXT_FIL_2_5 0xba /* Teletext filter 2 */ | ||
110 | #define TVP5150_TELETEXT_FIL_ENA 0xbb /* Teletext filter enable */ | ||
111 | /* Reserved BCh-BFh */ | ||
112 | #define TVP5150_INT_STATUS_REG_A 0xc0 /* Interrupt status register A */ | ||
113 | #define TVP5150_INT_ENABLE_REG_A 0xc1 /* Interrupt enable register A */ | ||
114 | #define TVP5150_INT_CONF 0xc2 /* Interrupt configuration */ | ||
115 | #define TVP5150_VDP_CONF_RAM_DATA 0xc3 /* VDP configuration RAM data */ | ||
116 | #define TVP5150_CONF_RAM_ADDR_LOW 0xc4 /* Configuration RAM address low byte */ | ||
117 | #define TVP5150_CONF_RAM_ADDR_HIGH 0xc5 /* Configuration RAM address high byte */ | ||
118 | #define TVP5150_VDP_STATUS_REG 0xc6 /* VDP status register */ | ||
119 | #define TVP5150_FIFO_WORD_COUNT 0xc7 /* FIFO word count */ | ||
120 | #define TVP5150_FIFO_INT_THRESHOLD 0xc8 /* FIFO interrupt threshold */ | ||
121 | #define TVP5150_FIFO_RESET 0xc9 /* FIFO reset */ | ||
122 | #define TVP5150_LINE_NUMBER_INT 0xca /* Line number interrupt */ | ||
123 | #define TVP5150_PIX_ALIGN_REG_LOW 0xcb /* Pixel alignment register low byte */ | ||
124 | #define TVP5150_PIX_ALIGN_REG_HIGH 0xcc /* Pixel alignment register high byte */ | ||
125 | #define TVP5150_FIFO_OUT_CTRL 0xcd /* FIFO output control */ | ||
126 | /* Reserved CEh */ | ||
127 | #define TVP5150_FULL_FIELD_ENA_1 0xcf /* Full field enable 1 */ | ||
128 | #define TVP5150_FULL_FIELD_ENA_2 0xd0 /* Full field enable 2 */ | ||
129 | #define TVP5150_LINE_MODE_REG_1 0xd1 /* Line mode registers */ | ||
130 | #define TVP5150_LINE_MODE_REG_2 0xd2 /* Line mode registers */ | ||
131 | #define TVP5150_LINE_MODE_REG_3 0xd3 /* Line mode registers */ | ||
132 | #define TVP5150_LINE_MODE_REG_4 0xd4 /* Line mode registers */ | ||
133 | #define TVP5150_LINE_MODE_REG_5 0xd5 /* Line mode registers */ | ||
134 | #define TVP5150_LINE_MODE_REG_6 0xd6 /* Line mode registers */ | ||
135 | #define TVP5150_LINE_MODE_REG_7 0xd7 /* Line mode registers */ | ||
136 | #define TVP5150_LINE_MODE_REG_8 0xd8 /* Line mode registers */ | ||
137 | #define TVP5150_LINE_MODE_REG_9 0xd9 /* Line mode registers */ | ||
138 | #define TVP5150_LINE_MODE_REG_10 0xda /* Line mode registers */ | ||
139 | #define TVP5150_LINE_MODE_REG_11 0xdb /* Line mode registers */ | ||
140 | #define TVP5150_LINE_MODE_REG_12 0xdc /* Line mode registers */ | ||
141 | #define TVP5150_LINE_MODE_REG_13 0xdd /* Line mode registers */ | ||
142 | #define TVP5150_LINE_MODE_REG_14 0xde /* Line mode registers */ | ||
143 | #define TVP5150_LINE_MODE_REG_15 0xdf /* Line mode registers */ | ||
144 | #define TVP5150_LINE_MODE_REG_16 0xe0 /* Line mode registers */ | ||
145 | #define TVP5150_LINE_MODE_REG_17 0xe1 /* Line mode registers */ | ||
146 | #define TVP5150_LINE_MODE_REG_18 0xe2 /* Line mode registers */ | ||
147 | #define TVP5150_LINE_MODE_REG_19 0xe3 /* Line mode registers */ | ||
148 | #define TVP5150_LINE_MODE_REG_20 0xe4 /* Line mode registers */ | ||
149 | #define TVP5150_LINE_MODE_REG_21 0xe5 /* Line mode registers */ | ||
150 | #define TVP5150_LINE_MODE_REG_22 0xe6 /* Line mode registers */ | ||
151 | #define TVP5150_LINE_MODE_REG_23 0xe7 /* Line mode registers */ | ||
152 | #define TVP5150_LINE_MODE_REG_24 0xe8 /* Line mode registers */ | ||
153 | #define TVP5150_LINE_MODE_REG_25 0xe9 /* Line mode registers */ | ||
154 | #define TVP5150_LINE_MODE_REG_27 0xea /* Line mode registers */ | ||
155 | #define TVP5150_LINE_MODE_REG_28 0xeb /* Line mode registers */ | ||
156 | #define TVP5150_LINE_MODE_REG_29 0xec /* Line mode registers */ | ||
157 | #define TVP5150_LINE_MODE_REG_30 0xed /* Line mode registers */ | ||
158 | #define TVP5150_LINE_MODE_REG_31 0xee /* Line mode registers */ | ||
159 | #define TVP5150_LINE_MODE_REG_32 0xef /* Line mode registers */ | ||
160 | #define TVP5150_LINE_MODE_REG_33 0xf0 /* Line mode registers */ | ||
161 | #define TVP5150_LINE_MODE_REG_34 0xf1 /* Line mode registers */ | ||
162 | #define TVP5150_LINE_MODE_REG_35 0xf2 /* Line mode registers */ | ||
163 | #define TVP5150_LINE_MODE_REG_36 0xf3 /* Line mode registers */ | ||
164 | #define TVP5150_LINE_MODE_REG_37 0xf4 /* Line mode registers */ | ||
165 | #define TVP5150_LINE_MODE_REG_38 0xf5 /* Line mode registers */ | ||
166 | #define TVP5150_LINE_MODE_REG_39 0xf6 /* Line mode registers */ | ||
167 | #define TVP5150_LINE_MODE_REG_40 0xf7 /* Line mode registers */ | ||
168 | #define TVP5150_LINE_MODE_REG_41 0xf8 /* Line mode registers */ | ||
169 | #define TVP5150_LINE_MODE_REG_42 0xf9 /* Line mode registers */ | ||
170 | #define TVP5150_LINE_MODE_REG_43 0xfa /* Line mode registers */ | ||
171 | #define TVP5150_LINE_MODE_REG_44 0xfb /* Line mode registers */ | ||
172 | #define TVP5150_FULL_FIELD_MODE_REG 0xfc /* Full field mode register */ | ||
173 | /* Reserved FDh-FFh */ | ||