tm6000-core.c revision 3169c9b26fffa180bc3bc81dc247df2f4824ee7d
19701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab/* 29701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000-core.c - driver for TM5600/TM6000 USB video capture devices 39701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 49701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab Copyright (C) 2006-2007 Mauro Carvalho Chehab <mchehab@infradead.org> 59701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 63169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig Copyright (C) 2007 Michel Ludwig <michel.ludwig@gmail.com> 73169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig - DVB-T support 83169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig 99701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab This program is free software; you can redistribute it and/or modify 109701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab it under the terms of the GNU General Public License as published by 119701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab the Free Software Foundation version 2 129701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 139701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab This program is distributed in the hope that it will be useful, 149701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab but WITHOUT ANY WARRANTY; without even the implied warranty of 159701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 169701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab GNU General Public License for more details. 179701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 189701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab You should have received a copy of the GNU General Public License 199701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab along with this program; if not, write to the Free Software 209701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 219701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab */ 229701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 239701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include <linux/module.h> 249701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include <linux/kernel.h> 259701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include <linux/usb.h> 269701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include <linux/i2c.h> 279701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include <linux/video_decoder.h> 289701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include "tm6000.h" 299701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include "tm6000-regs.h" 309701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include <media/v4l2-common.h> 319701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include <media/tuner.h> 329701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 339701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#ifdef HACK /* HACK */ 349701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#include "tm6000-hack.c" 359701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#endif 369701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 379701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#define USB_TIMEOUT 5*HZ /* ms */ 389701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 399701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_read_write_usb (struct tm6000_core *dev, u8 req_type, u8 req, 409701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab u16 value, u16 index, u8 *buf, u16 len) 419701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 429701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab int ret, i; 439701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab unsigned int pipe; 449701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab static int ini=0, last=0, n=0; 459701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab u8 *data=NULL; 469701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 479701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (len) 489701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab data = kzalloc(len, GFP_KERNEL); 499701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 509701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 519701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (req_type & USB_DIR_IN) 529701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab pipe=usb_rcvctrlpipe(dev->udev, 0); 539701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab else { 549701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab pipe=usb_sndctrlpipe(dev->udev, 0); 559701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab memcpy(data, buf, len); 569701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 579701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 589701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (tm6000_debug & V4L2_DEBUG_I2C) { 599701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (!ini) 609701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab last=ini=jiffies; 619701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 629701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk("%06i (dev %p, pipe %08x): ", n, dev->udev, pipe); 639701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 649701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk( "%s: %06u ms %06u ms %02x %02x %02x %02x %02x %02x %02x %02x ", 659701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab (req_type & USB_DIR_IN)?" IN":"OUT", 669701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab jiffies_to_msecs(jiffies-last), 679701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab jiffies_to_msecs(jiffies-ini), 689701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab req_type, req,value&0xff,value>>8, index&0xff, index>>8, 699701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab len&0xff, len>>8); 709701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab last=jiffies; 719701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab n++; 729701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 739701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if ( !(req_type & USB_DIR_IN) ) { 749701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk(">>> "); 759701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab for (i=0;i<len;i++) { 769701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk(" %02x",buf[i]); 779701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 789701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk("\n"); 799701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 809701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 819701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 829701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab ret = usb_control_msg(dev->udev, pipe, req, req_type, value, index, data, 839701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab len, USB_TIMEOUT); 849701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 859701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (req_type & USB_DIR_IN) 869701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab memcpy(buf, data, len); 879701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 889701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (tm6000_debug & V4L2_DEBUG_I2C) { 899701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (ret<0) { 909701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (req_type & USB_DIR_IN) 919701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk("<<< (len=%d)\n",len); 929701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 939701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk("%s: Error #%d\n", __FUNCTION__, ret); 949701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else if (req_type & USB_DIR_IN) { 959701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk("<<< "); 969701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab for (i=0;i<len;i++) { 979701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk(" %02x",buf[i]); 989701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 999701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk("\n"); 1009701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 1019701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 1029701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1039701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab kfree(data); 1049701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 105a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig msleep(5); 106a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig 1079701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return ret; 1089701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 1099701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1109701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_set_reg (struct tm6000_core *dev, u8 req, u16 value, u16 index) 1119701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 1129701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return 1139701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_read_write_usb (dev, USB_DIR_OUT | USB_TYPE_VENDOR, 1149701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab req, value, index, NULL, 0); 1159701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 1169701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1179701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_get_reg (struct tm6000_core *dev, u8 req, u16 value, u16 index) 1189701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 1199701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab int rc; 1209701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab u8 buf[1]; 1219701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1229701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab rc=tm6000_read_write_usb (dev, USB_DIR_IN | USB_TYPE_VENDOR, req, 1239701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab value, index, buf, 1); 1249701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1259701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (rc<0) 1269701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return rc; 1279701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1289701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return *buf; 1299701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 1309701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1319701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_get_reg16 (struct tm6000_core *dev, u8 req, u16 value, u16 index) 1329701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 1339701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab int rc; 1349701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab u8 buf[2]; 1359701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1369701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab rc=tm6000_read_write_usb (dev, USB_DIR_IN | USB_TYPE_VENDOR, req, 1379701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab value, index, buf, 2); 1389701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1399701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (rc<0) 1409701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return rc; 1419701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1429701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return buf[1]|buf[0]<<8; 1439701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 1449701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1459701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabvoid tm6000_set_fourcc_format(struct tm6000_core *dev) 1469701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 1479701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (dev->fourcc==V4L2_PIX_FMT_UYVY) { 1489701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Sets driver to UYUV */ 1499701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xc1, 0xd0); 1509701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 1519701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Sets driver to YUV2 */ 1529701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xc1, 0x90); 1539701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 1549701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 1559701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1569701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_init_analog_mode (struct tm6000_core *dev) 1579701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 1589701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1599701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Enables soft reset */ 1609701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x3f, 0x01); 1619701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1629701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (dev->scaler) { 1639701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xc0, 0x20); 1649701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 1659701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Enable Hfilter and disable TS Drop err */ 1669701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xc0, 0x80); 1679701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 1689701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xc3, 0x88); 1699701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xda, 0x23); 1709701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xd1, 0xc0); 1719701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xd2, 0xd8); 1729701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xd6, 0x06); 1739701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xdf, 0x1f); 1749701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1759701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* AP Software reset */ 1769701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xff, 0x08); 1779701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xff, 0x00); 1789701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1799701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_fourcc_format(dev); 1809701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1819701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Disables soft reset */ 1829701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x3f, 0x00); 1839701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1849701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* E3: Select input 0 - TV tuner */ 1859701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe3, 0x00); 1869701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xeb, 0x60); 1879701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1889701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Tuner firmware can now be loaded */ 1899701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1909701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_1, 0x00); 1919701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab msleep(11); 1929701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1939701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* This controls input */ 1949701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_2, 0x0); 1959701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_3, 0x01); 1969701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab msleep(20); 1979701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 1989701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /*FIXME: Hack!!! */ 1999701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab struct v4l2_frequency f; 2009701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab mutex_lock(&dev->lock); 2019701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab f.frequency=dev->freq; 2029701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_i2c_call_clients(dev,VIDIOC_S_FREQUENCY,&f); 2039701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab mutex_unlock(&dev->lock); 2049701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 2059701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab msleep(100); 2069701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_standard (dev, &dev->norm); 2079701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_audio_bitrate (dev,48000); 2089701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 2099701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 2109701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return 0; 2119701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 2129701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 2133169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwigint tm6000_init_digital_mode (struct tm6000_core *dev) 2143169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig{ 2153169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00ff, 0x08); 2163169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00ff, 0x00); 2173169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x003f, 0x01); 2183169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00df, 0x08); 2193169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00e2, 0x0c); 2203169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00e8, 0xff); 2213169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00eb, 0xd8); 2223169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00c0, 0x40); 2233169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00c1, 0xd0); 2243169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00c3, 0x09); 2253169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00da, 0x37); 2263169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00d1, 0xd8); 2273169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00d2, 0xc0); 2283169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00d6, 0x60); 2293169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig msleep(50); 2303169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig 2313169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x00); 2323169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x01); 2333169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x0020, 0x00); 2343169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig 2353169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig msleep(100); 2363169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig 2373169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig return 0; 2383169c9b26fffa180bc3bc81dc247df2f4824ee7dMichel Ludwig} 2399701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 2409701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab/* The meaning of those initializations are unknown */ 2419701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabu8 init_tab[][2] = { 2429701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* REG VALUE */ 2439701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xdf, 0x1f }, 2449701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xff, 0x08 }, 2459701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xff, 0x00 }, 2469701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xd5, 0x4f }, 2479701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xda, 0x23 }, 2489701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xdb, 0x08 }, 2499701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xe2, 0x00 }, 2509701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xe3, 0x10 }, 2519701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xe5, 0x00 }, 2529701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xe8, 0x00 }, 2539701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xeb, 0x64 }, /* 48000 bits/sample, external input */ 2549701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xee, 0xc2 }, 2559701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x3f, 0x01 }, /* Start of soft reset */ 2569701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x00, 0x00 }, 2579701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x01, 0x07 }, 2589701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x02, 0x5f }, 2599701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x03, 0x00 }, 2609701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x05, 0x64 }, 2619701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x07, 0x01 }, 2629701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x08, 0x82 }, 2639701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x09, 0x36 }, 2649701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x0a, 0x50 }, 2659701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x0c, 0x6a }, 2669701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x11, 0xc9 }, 2679701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x12, 0x07 }, 2689701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x13, 0x3b }, 2699701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x14, 0x47 }, 2709701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x15, 0x6f }, 2719701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x17, 0xcd }, 2729701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x18, 0x1e }, 2739701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x19, 0x8b }, 2749701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x1a, 0xa2 }, 2759701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x1b, 0xe9 }, 2769701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x1c, 0x1c }, 2779701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x1d, 0xcc }, 2789701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x1e, 0xcc }, 2799701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x1f, 0xcd }, 2809701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x20, 0x3c }, 2819701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x21, 0x3c }, 2829701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x2d, 0x48 }, 2839701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x2e, 0x88 }, 2849701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x30, 0x22 }, 2859701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x31, 0x61 }, 2869701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x32, 0x74 }, 2879701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x33, 0x1c }, 2889701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x34, 0x74 }, 2899701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x35, 0x1c }, 2909701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x36, 0x7a }, 2919701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x37, 0x26 }, 2929701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x38, 0x40 }, 2939701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x39, 0x0a }, 2949701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x42, 0x55 }, 2959701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x51, 0x11 }, 2969701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x55, 0x01 }, 2979701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x57, 0x02 }, 2989701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x58, 0x35 }, 2999701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x59, 0xa0 }, 3009701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x80, 0x15 }, 3019701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x82, 0x42 }, 3029701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xc1, 0xd0 }, 3039701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0xc3, 0x88 }, 3049701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { 0x3f, 0x00 }, /* End of the soft reset */ 3059701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab}; 3069701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3079701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_init (struct tm6000_core *dev) 3089701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 3099701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab int board, rc=0, i; 3109701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3119701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#ifdef HACK /* HACK */ 3129701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab init_tm6000(dev); 3139701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return 0; 3149701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#else 3159701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3169701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Load board's initialization table */ 3179701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab for (i=0; i< ARRAY_SIZE(init_tab); i++) { 3189701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab rc= tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 3199701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab init_tab[i][0],init_tab[i][1]); 3209701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (rc<0) { 3219701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk (KERN_ERR "Error %i while setting reg %d to value %d\n", 3229701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab rc, init_tab[i][0],init_tab[i][1]); 3239701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return rc; 3249701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 3259701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 3269701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3279701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Check board version - maybe 10Moons specific */ 3289701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab board=tm6000_get_reg16 (dev, 0x40, 0, 0); 3299701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (board >=0) { 3309701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk (KERN_INFO "Board version = 0x%04x\n",board); 3319701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 3329701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk (KERN_ERR "Error %i while retrieving board version\n",board); 3339701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 3349701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3359701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_05_SET_GET_USBREG, 0x18, 0x00); 3369701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab msleep(5); /* Just to be conservative */ 3379701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 338a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig /* Reset GPIO1 and GPIO4. */ 339a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig for (i=0; i< 2; i++) { 3409701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab rc=tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_1, 0); 3419701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (rc<0) { 3429701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk (KERN_ERR "Error %i doing GPIO1 reset\n",rc); 3439701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return rc; 3449701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 3459701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3469701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab msleep(10); /* Just to be conservative */ 3479701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab rc=tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_1, 1); 3489701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (rc<0) { 3499701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab printk (KERN_ERR "Error %i doing GPIO1 reset\n",rc); 3509701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return rc; 3519701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 3529701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 353a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig msleep(10); 354a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig rc=tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_4, 0); 355a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig if (rc<0) { 356a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig printk (KERN_ERR "Error %i doing GPIO4 reset\n",rc); 357a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig return rc; 358a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig } 359a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig 360a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig msleep(10); 361a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig rc=tm6000_set_reg (dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_4, 1); 362a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig if (rc<0) { 363a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig printk (KERN_ERR "Error %i doing GPIO4 reset\n",rc); 364a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig return rc; 365a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig } 366a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig 3679701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (!i) 3689701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab rc=tm6000_get_reg16(dev, 0x40,0,0); 3699701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 370a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig 371a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig msleep(50); 372a5adfbed09ffedb4ffa8e9a93dbd757096020470Michel Ludwig 3739701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return 0; 3749701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3759701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#endif /* HACK */ 3769701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 3779701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3789701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab#define tm6000_wrt(dev,req,reg,val, data...) \ 3799701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab { const static u8 _val[] = data; \ 3809701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_read_write_usb(dev,USB_DIR_OUT | USB_TYPE_VENDOR, \ 3819701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab req,reg, val, (u8 *) _val, ARRAY_SIZE(_val)); \ 3829701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 3839701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3849701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab/* 3859701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho ChehabTM5600/6000 register values to set video standards. 3869701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab There's an adjust, common to all, for composite video 3879701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab Additional adjustments are required for S-Video, based on std. 3889701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 3899701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab Standards values for TV S-Video Changes 3909701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho ChehabREG PAL PAL_M PAL_N SECAM NTSC Comp. PAL PAL_M PAL_N SECAM NTSC 3919701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0xdf 0x1f 0x1f 0x1f 0x1f 0x1f 3929701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0xe2 0x00 0x00 0x00 0x00 0x00 3939701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0xe8 0x0f 0x0f 0x0f 0x0f 0x0f 0x00 0x00 0x00 0x00 0x00 3949701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0xeb 0x60 0x60 0x60 0x60 0x60 0x64 0x64 0x64 0x64 0x64 0x64 3959701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0xd5 0x5f 0x5f 0x5f 0x4f 0x4f 0x4f 0x4f 0x4f 0x4f 0x4f 3969701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0xe3 0x00 0x00 0x00 0x00 0x00 0x10 0x10 0x10 0x10 0x10 0x10 3979701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0xe5 0x00 0x00 0x00 0x00 0x00 0x10 0x10 0x10 0x10 0x10 3989701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x3f 0x01 0x01 0x01 0x01 0x01 3999701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x00 0x32 0x04 0x36 0x38 0x00 0x33 0x05 0x37 0x39 0x01 4009701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x01 0x0e 0x0e 0x0e 0x0e 0x0f 4019701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x02 0x5f 0x5f 0x5f 0x5f 0x5f 4029701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x03 0x02 0x00 0x02 0x02 0x00 0x04 0x04 0x04 0x03 0x03 4039701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x07 0x01 0x01 0x01 0x01 0x01 0x00 0x00 4049701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x17 0xcd 0xcd 0xcd 0xcd 0xcd 0x8b 4059701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x18 0x25 0x1e 0x1e 0x24 0x1e 4069701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x19 0xd5 0x83 0x91 0x92 0x8b 4079701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x1a 0x63 0x0a 0x1f 0xe8 0xa2 4089701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x1b 0x50 0xe0 0x0c 0xed 0xe9 4099701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x1c 0x1c 0x1c 0x1c 0x1c 0x1c 4109701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x1d 0xcc 0xcc 0xcc 0xcc 0xcc 4119701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x1e 0xcc 0xcc 0xcc 0xcc 0xcc 4129701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x1f 0xcd 0xcd 0xcd 0xcd 0xcd 4139701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x2e 0x8c 0x88 0x8c 0x8c 0x88 0x88 4149701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x30 0x2c 0x20 0x2c 0x2c 0x22 0x2a 0x22 0x22 0x2a 4159701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x31 0xc1 0x61 0xc1 0xc1 0x61 4169701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x33 0x0c 0x0c 0x0c 0x2c 0x1c 4179701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x35 0x1c 0x1c 0x1c 0x18 0x1c 4189701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x82 0x52 0x52 0x52 0x42 0x42 4199701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x04 0xdc 0xdc 0xdc 0xdd 4209701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x0d 0x07 0x07 0x07 0x87 0x07 4219701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab0x3f 0x00 0x00 0x00 0x00 0x00 4229701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab*/ 4239701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4249701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_set_standard (struct tm6000_core *dev, v4l2_std_id *norm) 4259701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 4269701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab dev->norm=*norm; 4279701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4289701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* HACK: Should use, instead, the common code!!! */ 4299701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (*norm & V4L2_STD_PAL_M) { 4309701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xdf, 0x1f); 4319701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe2, 0x00); 4329701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe8, 0x0f); 4339701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xeb, 0x60); 4349701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xd5, 0x5f); 4359701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe3, 0x00); 4369701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe5, 0x00); 4379701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x3f, 0x01); 4389701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x04); 4399701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x01, 0x0e); 4409701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x02, 0x5f); 4419701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x00); 4429701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x07, 0x01); 4439701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x18, 0x1e); 4449701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x19, 0x83); 4459701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1a, 0x0a); 4469701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1b, 0xe0); 4479701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1c, 0x1c); 4489701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1d, 0xcc); 4499701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1e, 0xcc); 4509701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1f, 0xcd); 4519701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2e, 0x88); 4529701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x20); 4539701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x31, 0x61); 4549701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x33, 0x0c); 4559701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x35, 0x1c); 4569701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x82, 0x52); 4579701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x04, 0xdc); 4589701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x0d, 0x07); 4599701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x3f, 0x00); 4609701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return 0; 4619701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 4629701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4639701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* */ 4649701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab// tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x02, 0x01); 4659701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab// tm6000_set_reg (dev, REQ_04_EN_DISABLE_MCU_INT, 0x02, 0x00); 4669701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4679701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Set registers common to all standards */ 4689701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xdf, 0x1f); 4699701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe2, 0x00); 4709701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4719701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab switch (dev->input) { 4729701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab case TM6000_INPUT_TV: 4739701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Seems to disable ADC2 - needed for TV and RCA */ 4749701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe8, 0x0f); 4759701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4769701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xeb, 0x60); 4779701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4789701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (*norm & V4L2_STD_PAL) { 4799701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Enable UV_FLT_EN */ 4809701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xd5, 0x5f); 4819701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 4829701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xd5, 0x4f); 4839701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 4849701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4859701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* E3: Select input 0 */ 4869701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe3, 0x00); 4879701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4889701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe5, 0x10); 4899701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4909701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab break; 4919701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab case TM6000_INPUT_COMPOSITE: 4929701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xeb, 0x64); 4939701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* E3: Select input 1 */ 4949701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe3, 0x10); 4959701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab break; 4969701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab case TM6000_INPUT_SVIDEO: 4979701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe8, 0x00); 4989701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 4999701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xeb, 0x64); 5009701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5019701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xd5, 0x4f); 5029701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* E3: Select input 1 */ 5039701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe3, 0x10); 5049701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5059701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xe5, 0x10); 5069701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5079701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab break; 5089701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 5099701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5109701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Software reset */ 5119701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x3f, 0x01); 5129701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5139701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x02, 0x5f); 5149701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5159701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x07, 0x01); 5169701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab// tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x17, 0xcd); 5179701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5189701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Horizontal Sync DTO = 0x1ccccccd */ 5199701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1c, 0x1c); 5209701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1d, 0xcc); 5219701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1e, 0xcc); 5229701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1f, 0xcd); 5239701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5249701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Vertical Height */ 5259701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (*norm & V4L2_STD_525_60) { 5269701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x31, 0x61); 5279701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 5289701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x31, 0xc1); 5299701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 5309701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5319701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Horizontal Length */ 5329701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2f, 640/8); 5339701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5349701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (*norm & V4L2_STD_PAL) { 5359701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Common to All PAL Standards */ 5369701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5379701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x01, 0x0e); 5389701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5399701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Vsync Hsinc Lockout End */ 5409701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x33, 0x0c); 5419701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5429701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x35, 0x1c); 5439701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x82, 0x52); 5449701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x04, 0xdc); 5459701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x0d, 0x07); 5469701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (*norm & V4L2_STD_PAL_M) { 5479701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5489701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Chroma DTO */ 5499701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x18, 0x1e); 5509701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x19, 0x83); 5519701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1a, 0x0a); 5529701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1b, 0xe0); 5539701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5549701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Active Video Horiz Start Time */ 5559701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2e, 0x88); 5569701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5579701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (dev->input==TM6000_INPUT_SVIDEO) { 5589701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x05); 5599701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x04); 5609701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x22); 5619701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 5629701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x04); 5639701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x00); 5649701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x20); 5659701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 5669701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else if (*norm & V4L2_STD_PAL_N) { 5679701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* Chroma DTO */ 5689701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x18, 0x1e); 5699701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x19, 0x91); 5709701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1a, 0x1f); 5719701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1b, 0x0c); 5729701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5739701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (dev->input==TM6000_INPUT_SVIDEO) { 5749701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x37); 5759701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x04); 5769701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2e, 0x88); 5779701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x22); 5789701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 5799701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x36); 5809701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x02); 5819701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2e, 0x8c); 5829701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x2c); 5839701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 5849701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { // Other PAL standards 5859701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x18, 0x25); 5869701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x19, 0xd5); 5879701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1a, 0x63); 5889701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1b, 0x50); 5899701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2e, 0x8c); 5909701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5919701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (dev->input==TM6000_INPUT_SVIDEO) { 5929701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x33); 5939701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x04); 5949701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x2a); 5959701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 5969701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x2c); 5979701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 5989701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x32); 5999701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x02); 6009701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x2c); 6019701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 6029701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 6039701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } if (*norm & V4L2_STD_SECAM) { 6049701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x01, 0x0e); 6059701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x18, 0x24); 6069701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x19, 0x92); 6079701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1a, 0xe8); 6089701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1b, 0xed); 6099701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2e, 0x8c); 6109701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6119701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x33, 0x2c); 6129701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x35, 0x18); 6139701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x82, 0x42); 6149701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab // Register 0x04 is not initialized on SECAM 6159701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x0d, 0x87); 6169701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6179701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (dev->input==TM6000_INPUT_SVIDEO) { 6189701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x39); 6199701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x03); 6209701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x2a); 6219701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 6229701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x38); 6239701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x02); 6249701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x2c); 6259701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 6269701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { /* NTSC */ 6279701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x01, 0x0f); 6289701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x18, 0x1e); 6299701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x19, 0x8b); 6309701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1a, 0xa2); 6319701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x1b, 0xe9); 6329701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x2e, 0x88); 6339701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x30, 0x22); 6349701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6359701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x33, 0x1c); 6369701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x35, 0x1c); 6379701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x82, 0x42); 6389701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x0d, 0x07); 6399701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (dev->input==TM6000_INPUT_SVIDEO) { 6409701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x01); 6419701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x03); 6429701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6439701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x07, 0x00); 6449701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x17, 0x8b); 6459701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } else { 6469701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x00, 0x00); 6479701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x03, 0x00); 6489701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 6499701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 6509701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6519701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6529701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab /* End of software reset */ 6539701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0x3f, 0x00); 6549701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6559701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab msleep(40); 6569701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6579701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return 0; 6589701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 6599701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6609701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabint tm6000_set_audio_bitrate (struct tm6000_core *dev, int bitrate) 6619701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab{ 6629701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab int val; 6639701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6649701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab val=tm6000_get_reg (dev, REQ_07_SET_GET_AVREG, 0xeb, 0x0); 6659701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehabprintk("Original value=%d\n",val); 6669701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab if (val<0) 6679701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return val; 6689701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6699701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab val &= 0x0f; /* Preserve the audio input control bits */ 6709701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab switch (bitrate) { 6719701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab case 44100: 6729701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab val|=0xd0; 6739701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab break; 6749701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab case 48000: 6759701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab val|=0x60; 6769701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab break; 6779701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab } 6789701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab val=tm6000_set_reg (dev, REQ_07_SET_GET_AVREG, 0xeb, val); 6799701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab 6809701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab return val; 6819701dc94a14e54a33c3c99744ec3a761f6385fc6Mauro Carvalho Chehab} 682