⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tvp5150_ti.c

📁 tvp5150数据手册和TI的C文件,对tvp5150驱动开发有帮助
💻 C
📖 第 1 页 / 共 4 页
字号:
  /*
    * tvp5150 - Texas Instruments TVP5150A/AM1 video decoder driver
    *
    * Copyright (c) 2005,2006 Mauro Carvalho Chehab (mchehab@infradead.org)
    * This code is placed under the terms of the GNU General Public License v2
    */
   
 #include <linux/i2c.h>
 #include <linux/videodev.h>
 #include <linux/delay.h>
 11 #include <linux/video_decoder.h>
 12 #include <media/v4l2-common.h>
 13 
 14 #include "tvp5150_reg.h"
 15 
 16 MODULE_DESCRIPTION("Texas Instruments TVP5150A video decoder driver");
 17 MODULE_AUTHOR("Mauro Carvalho Chehab");
 18 MODULE_LICENSE("GPL");
 19 
 20 /* standard i2c insmod options */
 21 static unsigned short normal_i2c[] = {
 22         0xb8 >> 1,
 23         0xba >> 1,
 24         I2C_CLIENT_END
 25 };
 26 
 27 I2C_CLIENT_INSMOD;
 28 
 29 static int debug = 0;
 30 module_param(debug, int, 0);
 31 MODULE_PARM_DESC(debug, "Debug level (0-1)");
 32 
 33 #define tvp5150_err(fmt, arg...) do { \
 34         printk(KERN_ERR "%s %d-%04x: " fmt, c->driver->driver.name, \
 35                i2c_adapter_id(c->adapter), c->addr , ## arg); } while (0)
 36 #define tvp5150_info(fmt, arg...) do { \
 37         printk(KERN_INFO "%s %d-%04x: " fmt, c->driver->driver.name, \
 38                i2c_adapter_id(c->adapter), c->addr , ## arg); } while (0)
 39 #define tvp5150_dbg(num, fmt, arg...) \
 40         do { \
 41                 if (debug >= num) \
 42                         printk(KERN_DEBUG "%s debug %d-%04x: " fmt,\
 43                                 c->driver->driver.name, \
 44                                 i2c_adapter_id(c->adapter), \
 45                                 c->addr , ## arg); } while (0)
 46 
 47 /* supported controls */
 48 static struct v4l2_queryctrl tvp5150_qctrl[] = {
 49         {
 50                 .id = V4L2_CID_BRIGHTNESS,
 51                 .type = V4L2_CTRL_TYPE_INTEGER,
 52                 .name = "Brightness",
 53                 .minimum = 0,
 54                 .maximum = 255,
 55                 .step = 1,
 56                 .default_value = 128,
 57                 .flags = 0,
 58         }, {
 59                 .id = V4L2_CID_CONTRAST,
 60                 .type = V4L2_CTRL_TYPE_INTEGER,
 61                 .name = "Contrast",
 62                 .minimum = 0,
 63                 .maximum = 255,
 64                 .step = 0x1,
 65                 .default_value = 128,
 66                 .flags = 0,
 67         }, {
 68                  .id = V4L2_CID_SATURATION,
 69                  .type = V4L2_CTRL_TYPE_INTEGER,
 70                  .name = "Saturation",
 71                  .minimum = 0,
 72                  .maximum = 255,
 73                  .step = 0x1,
 74                  .default_value = 128,
 75                  .flags = 0,
 76         }, {
 77                 .id = V4L2_CID_HUE,
 78                 .type = V4L2_CTRL_TYPE_INTEGER,
 79                 .name = "Hue",
 80                 .minimum = -128,
 81                 .maximum = 127,
 82                 .step = 0x1,
 83                 .default_value = 0,
 84                 .flags = 0,
 85         }
 86 };
 87 
 88 struct tvp5150 {
 89         struct i2c_client *client;
 90 
 91         v4l2_std_id norm;       /* Current set standard */
 92         int input;
 93         int enable;
 94         int bright;
 95         int contrast;
 96         int hue;
 97         int sat;
 98 };
 99 
100 static int tvp5150_read(struct i2c_client *c, unsigned char addr)
101 {
102         unsigned char buffer[1];
103         int rc;
104 
105         buffer[0] = addr;
106         if (1 != (rc = i2c_master_send(c, buffer, 1)))
107                 tvp5150_dbg(0, "i2c i/o error: rc == %d (should be 1)\n", rc);
108 
109         msleep(10);
110 
111         if (1 != (rc = i2c_master_recv(c, buffer, 1)))
112                 tvp5150_dbg(0, "i2c i/o error: rc == %d (should be 1)\n", rc);
113 
114         tvp5150_dbg(2, "tvp5150: read 0x%02x = 0x%02x\n", addr, buffer[0]);
115 
116         return (buffer[0]);
117 }
118 
119 static inline void tvp5150_write(struct i2c_client *c, unsigned char addr,
120                                  unsigned char value)
121 {
122         unsigned char buffer[2];
123         int rc;
124 
125         buffer[0] = addr;
126         buffer[1] = value;
127         tvp5150_dbg(2, "tvp5150: writing 0x%02x 0x%02x\n", buffer[0], buffer[1]);
128         if (2 != (rc = i2c_master_send(c, buffer, 2)))
129                 tvp5150_dbg(0, "i2c i/o error: rc == %d (should be 2)\n", rc);
130 }
131 
132 static void dump_reg_range(struct i2c_client *c, char *s, u8 init, const u8 end,int max_line)
133 {
134         int i=0;
135 
136         while (init!=(u8)(end+1)) {
137                 if ((i%max_line) == 0) {
138                         if (i>0)
139                                 printk("\n");
140                         printk("tvp5150: %s reg 0x%02x = ",s,init);
141                 }
142                 printk("%02x ",tvp5150_read(c, init));
143 
144                 init++;
145                 i++;
146         }
147         printk("\n");
148 }
149 
150 static void dump_reg(struct i2c_client *c)
151 {
152         printk("tvp5150: Video input source selection #1 = 0x%02x\n",
153                                         tvp5150_read(c, TVP5150_VD_IN_SRC_SEL_1));
154         printk("tvp5150: Analog channel controls = 0x%02x\n",
155                                         tvp5150_read(c, TVP5150_ANAL_CHL_CTL));
156         printk("tvp5150: Operation mode controls = 0x%02x\n",
157                                         tvp5150_read(c, TVP5150_OP_MODE_CTL));
158         printk("tvp5150: Miscellaneous controls = 0x%02x\n",
159                                         tvp5150_read(c, TVP5150_MISC_CTL));
160         printk("tvp5150: Autoswitch mask= 0x%02x\n",
161                                         tvp5150_read(c, TVP5150_AUTOSW_MSK));
162         printk("tvp5150: Color killer threshold control = 0x%02x\n",
163                                         tvp5150_read(c, TVP5150_COLOR_KIL_THSH_CTL));
164         printk("tvp5150: Luminance processing controls #1 #2 and #3 = %02x %02x %02x\n",
165                                         tvp5150_read(c, TVP5150_LUMA_PROC_CTL_1),
166                                         tvp5150_read(c, TVP5150_LUMA_PROC_CTL_2),
167                                         tvp5150_read(c, TVP5150_LUMA_PROC_CTL_3));
168         printk("tvp5150: Brightness control = 0x%02x\n",
169                                         tvp5150_read(c, TVP5150_BRIGHT_CTL));
170         printk("tvp5150: Color saturation control = 0x%02x\n",
171                                         tvp5150_read(c, TVP5150_SATURATION_CTL));
172         printk("tvp5150: Hue control = 0x%02x\n",
173                                         tvp5150_read(c, TVP5150_HUE_CTL));
174         printk("tvp5150: Contrast control = 0x%02x\n",
175                                         tvp5150_read(c, TVP5150_CONTRAST_CTL));
176         printk("tvp5150: Outputs and data rates select = 0x%02x\n",
177                                         tvp5150_read(c, TVP5150_DATA_RATE_SEL));
178         printk("tvp5150: Configuration shared pins = 0x%02x\n",
179                                         tvp5150_read(c, TVP5150_CONF_SHARED_PIN));
180         printk("tvp5150: Active video cropping start = 0x%02x%02x\n",
181                                         tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_MSB),
182                                         tvp5150_read(c, TVP5150_ACT_VD_CROP_ST_LSB));
183         printk("tvp5150: Active video cropping stop  = 0x%02x%02x\n",
184                                         tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_MSB),
185                                         tvp5150_read(c, TVP5150_ACT_VD_CROP_STP_LSB));
186         printk("tvp5150: Genlock/RTC = 0x%02x\n",
187                                         tvp5150_read(c, TVP5150_GENLOCK));
188         printk("tvp5150: Horizontal sync start = 0x%02x\n",
189                                         tvp5150_read(c, TVP5150_HORIZ_SYNC_START));
190         printk("tvp5150: Vertical blanking start = 0x%02x\n",
191                                         tvp5150_read(c, TVP5150_VERT_BLANKING_START));
192         printk("tvp5150: Vertical blanking stop = 0x%02x\n",
193                                         tvp5150_read(c, TVP5150_VERT_BLANKING_STOP));
194         printk("tvp5150: Chrominance processing control #1 and #2 = %02x %02x\n",
195                                         tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_1),
196                                         tvp5150_read(c, TVP5150_CHROMA_PROC_CTL_2));
197         printk("tvp5150: Interrupt reset register B = 0x%02x\n",
198                                         tvp5150_read(c, TVP5150_INT_RESET_REG_B));
199         printk("tvp5150: Interrupt enable register B = 0x%02x\n",
200                                         tvp5150_read(c, TVP5150_INT_ENABLE_REG_B));
201         printk("tvp5150: Interrupt configuration register B = 0x%02x\n",
202                                         tvp5150_read(c, TVP5150_INTT_CONFIG_REG_B));
203         printk("tvp5150: Video standard = 0x%02x\n",
204                                         tvp5150_read(c, TVP5150_VIDEO_STD));
205         printk("tvp5150: Chroma gain factor: Cb=0x%02x Cr=0x%02x\n",
206                                         tvp5150_read(c, TVP5150_CB_GAIN_FACT),
207                                         tvp5150_read(c, TVP5150_CR_GAIN_FACTOR));
208         printk("tvp5150: Macrovision on counter = 0x%02x\n",
209                                         tvp5150_read(c, TVP5150_MACROVISION_ON_CTR));
210         printk("tvp5150: Macrovision off counter = 0x%02x\n",
211                                         tvp5150_read(c, TVP5150_MACROVISION_OFF_CTR));
212         printk("tvp5150: ITU-R BT.656.%d timing(TVP5150AM1 only)\n",
213                                         (tvp5150_read(c, TVP5150_REV_SELECT)&1)?3:4);
214         printk("tvp5150: Device ID = %02x%02x\n",
215                                         tvp5150_read(c, TVP5150_MSB_DEV_ID),
216                                         tvp5150_read(c, TVP5150_LSB_DEV_ID));
217         printk("tvp5150: ROM version = (hex) %02x.%02x\n",
218                                         tvp5150_read(c, TVP5150_ROM_MAJOR_VER),
219                                         tvp5150_read(c, TVP5150_ROM_MINOR_VER));
220         printk("tvp5150: Vertical line count = 0x%02x%02x\n",
221                                         tvp5150_read(c, TVP5150_VERT_LN_COUNT_MSB),
222                                         tvp5150_read(c, TVP5150_VERT_LN_COUNT_LSB));
223         printk("tvp5150: Interrupt status register B = 0x%02x\n",
224                                         tvp5150_read(c, TVP5150_INT_STATUS_REG_B));
225         printk("tvp5150: Interrupt active register B = 0x%02x\n",
226                                         tvp5150_read(c, TVP5150_INT_ACTIVE_REG_B));
227         printk("tvp5150: Status regs #1 to #5 = %02x %02x %02x %02x %02x\n",
228                                         tvp5150_read(c, TVP5150_STATUS_REG_1),
229                                         tvp5150_read(c, TVP5150_STATUS_REG_2),
230                                         tvp5150_read(c, TVP5150_STATUS_REG_3),
231                                         tvp5150_read(c, TVP5150_STATUS_REG_4),
232                                         tvp5150_read(c, TVP5150_STATUS_REG_5));
233 
234         dump_reg_range(c,"Teletext filter 1",   TVP5150_TELETEXT_FIL1_INI,
235                                                 TVP5150_TELETEXT_FIL1_END,8);
236         dump_reg_range(c,"Teletext filter 2",   TVP5150_TELETEXT_FIL2_INI,
237                                                 TVP5150_TELETEXT_FIL2_END,8);
238 
239         printk("tvp5150: Teletext filter enable = 0x%02x\n",
240                                         tvp5150_read(c, TVP5150_TELETEXT_FIL_ENA));
241         printk("tvp5150: Interrupt status register A = 0x%02x\n",
242                                         tvp5150_read(c, TVP5150_INT_STATUS_REG_A));
243         printk("tvp5150: Interrupt enable register A = 0x%02x\n",
244                                         tvp5150_read(c, TVP5150_INT_ENABLE_REG_A));
245         printk("tvp5150: Interrupt configuration = 0x%02x\n",
246                                         tvp5150_read(c, TVP5150_INT_CONF));
247         printk("tvp5150: VDP status register = 0x%02x\n",
248                                         tvp5150_read(c, TVP5150_VDP_STATUS_REG));
249         printk("tvp5150: FIFO word count = 0x%02x\n",
250                                         tvp5150_read(c, TVP5150_FIFO_WORD_COUNT));
251         printk("tvp5150: FIFO interrupt threshold = 0x%02x\n",
252                                         tvp5150_read(c, TVP5150_FIFO_INT_THRESHOLD));
253         printk("tvp5150: FIFO reset = 0x%02x\n",
254                                         tvp5150_read(c, TVP5150_FIFO_RESET));
255         printk("tvp5150: Line number interrupt = 0x%02x\n",
256                                         tvp5150_read(c, TVP5150_LINE_NUMBER_INT));
257         printk("tvp5150: Pixel alignment register = 0x%02x%02x\n",
258                                         tvp5150_read(c, TVP5150_PIX_ALIGN_REG_HIGH),
259                                         tvp5150_read(c, TVP5150_PIX_ALIGN_REG_LOW));
260         printk("tvp5150: FIFO output control = 0x%02x\n",
261                                         tvp5150_read(c, TVP5150_FIFO_OUT_CTRL));
262         printk("tvp5150: Full field enable = 0x%02x\n",
263                                         tvp5150_read(c, TVP5150_FULL_FIELD_ENA));
264         printk("tvp5150: Full field mode register = 0x%02x\n",
265                                         tvp5150_read(c, TVP5150_FULL_FIELD_MODE_REG));
266 
267         dump_reg_range(c,"CC   data",   TVP5150_CC_DATA_INI,
268                                         TVP5150_CC_DATA_END,8);
269 
270         dump_reg_range(c,"WSS  data",   TVP5150_WSS_DATA_INI,
271                                         TVP5150_WSS_DATA_END,8);
272 
273         dump_reg_range(c,"VPS  data",   TVP5150_VPS_DATA_INI,
274                                         TVP5150_VPS_DATA_END,8);
275 
276         dump_reg_range(c,"VITC data",   TVP5150_VITC_DATA_INI,
277                                         TVP5150_VITC_DATA_END,10);
278 
279         dump_reg_range(c,"Line mode",   TVP5150_LINE_MODE_INI,
280                                         TVP5150_LINE_MODE_END,8);
281 }
282 
283 /****************************************************************************
284                         Basic functions
285  ****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -