tvp5150a.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:12k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2003 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  
  7.  */
  8. /* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */
  9. /**************************************************************************/
  10. /* tvp5150a.c file */
  11. /**************************************************************************/
  12. #include <std.h>
  13. #include <csl_i2c.h>      
  14. #include <csl_stdinc.h>
  15. #include <edc.h>
  16. #include <tvp5150a.h>
  17. #include "_iic.h"
  18. #include "_tvp5150a.h"
  19. typedef enum {INTERLACED = TRUE, PROGRESSIVE = FALSE} FrameType ;   
  20. static void configTVP5150A(Int decNum, TVP5150A_Mode inMode,                     
  21.     TVP5150A_Mode outMode, TVP5150A_AnalogFormat inFormat);
  22. static void configTVP5146(Int decNum, TVP5150A_Mode inMode,                     
  23.     TVP5150A_Mode outMode, TVP5150A_AnalogFormat inFormat);
  24. static void initTVP5150ADef(Uns channel);
  25. static void initTVP5146Def(Uns channel);
  26. static void powerdownTVP5150A(Int channel, Bool powerDownEnable);
  27. static void resetTVP5150A(Int channel);
  28. static void scalerReset(Uns channel);
  29. static void setTVP5150AInputFormat(Int channel, TVP5150A_AnalogFormat inFormat);
  30. static void setTVP5146InputFormat(Int channel, TVP5150A_AnalogFormat inFormat);
  31. static void setTVP5150ASyncMode(Int channel, Bool enableBT656Sync);
  32. static void setupUserDefResolution(Arg arg);
  33. static Int TVP5150A_ctrl(EDC_Handle handle, TVP5150A_Cmd cmd, Arg arg);
  34. static Int TVP5150A_close(EDC_Handle handle);
  35. static EDC_Handle TVP5150A_open(String devName, Arg optArg);
  36. EDC_Fxns TVP5150A_Fxns = {
  37.     TVP5150A_open,
  38.     TVP5150A_close,
  39.     TVP5150A_ctrl                   
  40. };
  41. static I2C_Handle hI2C[2] = {INV, INV};
  42. /*
  43.  * ======== configTVP5150A ========
  44.  */
  45. static void configTVP5150A(Int decNum, TVP5150A_Mode inMode, 
  46.         TVP5150A_Mode outMode, TVP5150A_AnalogFormat inFormat)
  47. {
  48.     initTVP5150ADef(decNum);  
  49.     setTVP5150AInputFormat(decNum, inFormat);
  50. }
  51. /*
  52.  * ======== configTVP5146 ========
  53.  */
  54. static void configTVP5146(Int decNum, TVP5150A_Mode inMode, 
  55.         TVP5150A_Mode outMode, TVP5150A_AnalogFormat inFormat)
  56. {
  57.     initTVP5146Def(decNum);  
  58.     setTVP5146InputFormat(decNum, inFormat);
  59. }
  60. /*
  61.  * ======== enableIPortOutput ========
  62.  */
  63. /*
  64. static void enableIPortOutput(Int channel, Bool iPortOutputEnable)
  65. {
  66.     _TVP5150A_settingsDef[channel].globals.iPortEnable = iPortOutputEnable;
  67.     _TVP5150A_settingsDef[channel].globals.xPortEnable = !iPortOutputEnable;
  68. }
  69. */
  70. /*
  71.  * ======== initTVP5150ADef ========
  72.  */
  73. static void initTVP5150ADef(Uns channel)
  74. {
  75.     Uint8 addrI2C;
  76. Uint8 misc_ctrl = 0x6D;
  77. Uint8 output_format = 0x47;
  78. // Uint8 input_sel = 0x01; // for svideo
  79. // Uint8 input_sel = 0x00; // for cvbs
  80. // Uint8 input_sel = 0x02;
  81. Uint8 pin_cfg = 0x00;
  82. //    addrI2C = (channel == 0) ? _TVP5150A_IIC_ADDR0 : _TVP5150A_IIC_ADDR1;
  83.     addrI2C = _TVP5150A_IIC_ADDR0;
  84. /* if(channel==0)
  85. input_sel = 0x0; //CVBS port1
  86. else if(channel==1)
  87. input_sel = 0x02; //CVBS port2
  88. else if(channel==2)
  89. input_sel = 0x01; //S-Video
  90. */
  91. //    _IIC_write(hI2C[0], addrI2C,0x00, &input_sel,0x1);
  92.     _IIC_write(hI2C[0], addrI2C,0x03, &misc_ctrl,0x1);
  93.     _IIC_write(hI2C[0], addrI2C,0x0D, &output_format,0x1);
  94.     _IIC_write(hI2C[0], addrI2C,0x0F, &pin_cfg,0x1);
  95. //    _IIC_write(hI2C[channel], addrI2C,0x16, &h_start,0x1);
  96.     
  97. }
  98. /*
  99.  * ======== initTVP5150ADef ========
  100.  */
  101. static void initTVP5146Def(Uns channel)
  102. {
  103.     Uint8 addrI2C;
  104. Uint8 input_sel = 0x0C;
  105. Uint8 autoswitch = 0x3F;
  106. Uint8 pedestal = 0x40;
  107. Uint8 luminance = 0x00;
  108. Uint8 chrominance = 0x04;
  109. Uint8 output2 = 0x11;
  110. Uint8 output3 = 0xFA;
  111. Uint8 output4 = 0xAF;
  112. Uint8 output1 = 0x40;//10bit BT.656
  113. if (channel >=9 && channel <=0xC)
  114. output1 = 0x41;//20bit YCbCr with separate syn
  115.     addrI2C = _TVP5150A_IIC_ADDR1;
  116.     _IIC_write(hI2C[1], addrI2C,0x00, &input_sel,0x1);
  117.     _IIC_write(hI2C[1], addrI2C,0x04, &autoswitch,0x1);
  118.     _IIC_write(hI2C[1], addrI2C,0x06, &pedestal,0x1);
  119.     _IIC_write(hI2C[1], addrI2C,0x08, &luminance,0x1);
  120.     _IIC_write(hI2C[1], addrI2C,0x0E, &chrominance,0x1);
  121.     _IIC_write(hI2C[1], addrI2C,0x33, &output1,0x1);
  122.     _IIC_write(hI2C[1], addrI2C,0x34, &output2,0x1);
  123.     _IIC_write(hI2C[1], addrI2C,0x35, &output3,0x1);
  124.     _IIC_write(hI2C[1], addrI2C,0x36, &output4,0x1);
  125.     
  126. }
  127. /*
  128.  * ======== powerdownTVP5150A ========
  129.  */
  130. static void powerdownTVP5150A(Int channel, Bool powerDownEnable)
  131. {
  132.     Uint8 addrI2C;
  133.     Uint8 powerdownSettings = 0x01;
  134.     /*Put _TVP5150A in power down mode */
  135.     if(!powerDownEnable) {
  136.         powerdownSettings = 0x00;
  137.     }
  138.     addrI2C = (channel == 0) ? _TVP5150A_IIC_ADDR0 : _TVP5150A_IIC_ADDR1;
  139.     _IIC_write(hI2C[channel], addrI2C,0x02,&powerdownSettings,1);
  140. }
  141. /*
  142.  * ======== resetTVP5150A ========
  143.  */
  144. static void resetTVP5150A(Int channel)
  145. {
  146. /***************************************************************/
  147. /* Reset 5150 */
  148. /***************************************************************/
  149.     scalerReset(channel);
  150.     powerdownTVP5150A(channel, FALSE);
  151. }
  152. /*
  153.  * ======== scalerReset ========
  154.  */
  155. static void scalerReset(Uns channel)
  156. {
  157.     _TVP5150A_Generics *genericPtr; 
  158.     Uint8 addrI2C;
  159.     addrI2C = (channel == 0) ? _TVP5150A_IIC_ADDR0 : _TVP5150A_IIC_ADDR1;
  160.     genericPtr = &_TVP5150A_settingsDef[channel].generics;
  161.     /* reset */
  162.     genericPtr->reset = 1;
  163.     _IIC_write( hI2C[channel], addrI2C, 0x05, (Uint8 *)genericPtr + 5, 1 );
  164.     /* unreset */
  165.     genericPtr->reset = 0;
  166.     _IIC_write( hI2C[channel], addrI2C, 0x05, (Uint8 *)genericPtr + 5, 1 );
  167. }
  168. /*
  169.  * ======== setTVP5150AInputFormat ========
  170.  */
  171. static void setTVP5150AInputFormat(Int channel, TVP5150A_AnalogFormat inFormat)
  172. {
  173. //    _TVP5150A_Generics *genericPtr; 
  174.     Uint8 addrI2C;
  175. // Uint8 temp=1;
  176. Uint8 input_format = 0;
  177. //    addrI2C = (channel == 0) ? _TVP5150A_IIC_ADDR0 : _TVP5150A_IIC_ADDR1;
  178.     addrI2C = _TVP5150A_IIC_ADDR0;
  179. //    genericPtr = &_TVP5150A_settingsDef[channel].generics;
  180.     if(inFormat == TVP5150A_AFMT_SVIDEO) {
  181. //        _TVP5150A_settingsDef[channel].generics.svideo_sel = 1; 
  182. input_format = 1;
  183.     }    
  184.     else if(channel == 0) {
  185.      input_format = 0;
  186.     }
  187.     else if(channel == 1) {
  188.      input_format = 2;
  189.     }
  190.     
  191.     _IIC_write(hI2C[0], addrI2C, 0x0, &input_format,1);
  192. //    _IIC_write(hI2C[channel], addrI2C, 0x0, &temp,1);
  193. }
  194. /*
  195.  * ======== setTVP5146InputFormat ========
  196.  */
  197. static void setTVP5146InputFormat(Int channel, TVP5150A_AnalogFormat inFormat)
  198. {
  199. //    _TVP5150A_Generics *genericPtr; 
  200.     Uint8 addrI2C;
  201. // Uint8 temp=1;
  202. Uint8 input_format = 0x0C;
  203. //    addrI2C = (channel == 0) ? _TVP5150A_IIC_ADDR0 : _TVP5150A_IIC_ADDR1;
  204.     addrI2C = _TVP5150A_IIC_ADDR1;
  205. //    genericPtr = &_TVP5150A_settingsDef[channel].generics;
  206.     if(inFormat == TVP5150A_AFMT_SVIDEO) {
  207. //        _TVP5150A_settingsDef[channel].generics.svideo_sel = 1; 
  208. input_format = 0x46;
  209.     }    
  210.     else if(channel == 3 || channel == 9 )
  211.      input_format = 0x01;
  212.     else if(channel == 4 || channel == 0xA)
  213.      input_format = 0x05;
  214.     else if(channel == 5 || channel == 0xB)
  215.      input_format = 0x09;
  216.     else if(channel == 6 || channel == 0xC)
  217.      input_format = 0x0C;
  218.     else if(channel == 8)             
  219.      input_format = 0x84;                 //RGB
  220.     
  221.     
  222.     
  223.     _IIC_write(hI2C[1], addrI2C, 0x0, &input_format,1);
  224. //    _IIC_write(hI2C[channel], addrI2C, 0x0, &temp,1);
  225. }
  226. /*
  227.   ======== setTVP5150ASyncMode ========
  228.  */
  229. /*static void setTVP5150ASyncMode(Int channel, Bool enableBT656Sync)
  230. {
  231.     _TVP5150A_Generics *genericPtr; 
  232.     Uint8 addrI2C;
  233.     addrI2C = (channel == 0) ? _TVP5150A_IIC_ADDR0 : _TVP5150A_IIC_ADDR1;
  234.     genericPtr = &_TVP5150A_settingsDef[channel].generics;
  235.     if(enableBT656Sync) {
  236.         _TVP5150A_settingsDef[channel].generics.ycrcb_output_format = 0x07;   
  237.     } else {
  238.         _TVP5150A_settingsDef[channel].generics.ycrcb_output_format = 0;   
  239.     
  240.         
  241.     }    
  242.     _IIC_write(hI2C[channel], addrI2C,0x0D,(Uint8 *)genericPtr + 0x0D,1);
  243.     
  244. }*/
  245.  
  246. /*
  247.  * ======== setupUserDefResolution ========
  248.  */
  249. /*static void setupUserDefResolution(Arg arg)
  250. {
  251.     TVP5150A_ConfParams *TVP5150AParams = (TVP5150A_ConfParams *)arg;    
  252.     if(TVP5150AParams->outMode == TVP5150A_MODE_USER) {
  253.         outModeTbl[TVP5150A_MODE_USER][0] = TVP5150AParams->hSize;
  254.         outModeTbl[TVP5150A_MODE_USER][1] = TVP5150AParams->vSize;
  255.         outModeTbl[TVP5150A_MODE_USER][2] = TVP5150AParams->interlaced;
  256.         
  257.         
  258.     }
  259.     
  260. }*/
  261. /*
  262.  * ======== TVP5150A_close ========
  263.  */
  264. static Int TVP5150A_close(EDC_Handle handle) 
  265. {
  266.     Int devId = (int)handle;
  267.     /*First Check if the Handle is correct */
  268.     if(devId == 0 || devId == 1) {
  269.         /*Put _TVP5150A in power down mode */
  270.         powerdownTVP5150A(devId, TRUE);
  271.         return EDC_SUCCESS;    
  272.     } else {
  273.         return EDC_FAILED;
  274.     }
  275. }
  276. /*
  277.  * ======== TVP5150A_ctrl ========
  278.  */
  279. static Int TVP5150A_ctrl(EDC_Handle handle, TVP5150A_Cmd cmd, Arg arg)
  280. {
  281.     Int devId = (int)handle;                    
  282. //    _TVP5150A_Generics *genericPtr; 
  283. //    Uint8 addrI2C;
  284.     
  285. //    addrI2C = (devId == 0) ? _TVP5150A_IIC_ADDR0 : _TVP5150A_IIC_ADDR1;
  286. //    genericPtr = &_TVP5150A_settingsDef[devId].generics;
  287.     /*First Check if the Handle is correct */
  288.     if(devId > 0xC || devId < 0) {
  289.         return EDC_FAILED;
  290.     }
  291.     
  292.     switch(cmd) {
  293.         case EDC_CONFIG: {
  294.             TVP5150A_ConfParams *TVP5150AParams = (TVP5150A_ConfParams *)arg;
  295. //            hI2C[devId] = TVP5150AParams->hI2C;
  296.             hI2C[0] = TVP5150AParams->hI2C;
  297.             hI2C[1] = TVP5150AParams->hI2C;
  298. //            setupUserDefResolution(arg);
  299. if(devId==0 || devId==1 || devId==2) {
  300.              configTVP5150A(devId, TVP5150AParams->inMode, TVP5150AParams->outMode, 
  301.                  TVP5150AParams->aFmt);
  302. //             setTVP5150ASyncMode(devId, TVP5150AParams->enableBT656Sync);
  303.             }
  304.             else {
  305.              configTVP5146(devId, TVP5150AParams->inMode, TVP5150AParams->outMode, 
  306.                  TVP5150AParams->aFmt);
  307.             }
  308.         }
  309.         break;
  310.         case EDC_RESET:
  311.         resetTVP5150A(devId);
  312.         break;
  313.         case TVP5150A_POWERDOWN:
  314.         powerdownTVP5150A(devId, TRUE);
  315.         break;                 
  316.         case TVP5150A_POWERUP:
  317.         powerdownTVP5150A(devId, FALSE);
  318.         break;
  319. /*
  320.         case TVP5150A_SET_AMUXMODE:
  321.         _TVP5150A_settingsDef[devId].generics.analogMuxMode = (int)arg; 
  322. */
  323.     }
  324.     return EDC_SUCCESS;
  325. }
  326.  
  327. /*
  328.  * ======== TVP5150A_open ========
  329.  */
  330. static EDC_Handle TVP5150A_open(String devName, Arg optArg)
  331. {
  332.     Int devId;
  333.     /* Check if the addresse is correct */
  334.     if(devName[0] != '/') {
  335.         devId = -1;
  336.     } else if(devName[1] == '0') {
  337.          devId = 0; //TVP5150A CVBS port1
  338.     } else if(devName[1] == '1'){
  339.          devId = 1; //TVP5150A CVBS port2
  340.     } else if(devName[1] == '2') {
  341.       devId = 2; //TVP5150A S-Video
  342.     } else if(devName[1] == '3') {
  343.          devId = 3; //TVP5146 CVBS port1
  344.     } else if(devName[1] == '4'){
  345.          devId = 4; //TVP5146 CVBS port2
  346.     } else if(devName[1] == '5') {
  347.       devId = 5; //TVP5146 CVBS port3
  348.     } else if(devName[1] == '6') {
  349.          devId = 6; //TVP5146 CVBS port4
  350.     } else if(devName[1] == '7'){
  351.          devId = 7; //TVP5146 S-Video
  352.     } else if(devName[1] == '8') {
  353.       devId = 8; //TVP5146 RGB    
  354.     } else if(devName[1] == '9') {
  355.       devId = 9; //TVP5146 CVBS port1 20bit YCbCr with separate syn
  356.     } else if(devName[1] == 'A') {
  357.       devId = 0xA;//TVP5146 CVBS port2 20bit YCbCr with separate syn
  358.     } else if(devName[1] == 'B') {
  359.       devId = 0xB; //TVP5146 CVBS port3 20bit YCbCr with separate syn
  360.     } else if(devName[1] == 'C') {
  361.       devId = 0xC; //TVP5146 CVBS port4 20bit YCbCr with separate syn
  362.     } else {
  363.          devId = -1;
  364.     }
  365.     return (EDC_Handle)devId;
  366. }
  367. /**************************************************************************/
  368. /* End of file                                                                            */
  369. /**************************************************************************/