_pcm1723.c
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:3k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.   **********************************************************************
  3.   *
  4.   *     Copyright 1999, 2000 Creative Labs, Inc.
  5.   *
  6.   **********************************************************************
  7.   *
  8.   *     Date                 Author               Summary of changes
  9.   *     ----                 ------               ------------------
  10.   *     October 20, 1999     Andrew de Quincey    Rewrote and extended
  11.   *                          Lucien Murray-Pitts  original incomplete 
  12.   *                                               driver.
  13.   *
  14.   *     April 18, 1999       Andrew Veliath       Original Driver
  15.   *                                               implementation
  16.   *
  17.   **********************************************************************
  18.   *
  19.   *     This program is free software; you can redistribute it and/or
  20.   *     modify it under the terms of the GNU General Public License as
  21.   *     published by the Free Software Foundation; either version 2 of
  22.   *     the License, or (at your option) any later version.
  23.   *
  24.   *     This program is distributed in the hope that it will be useful,
  25.   *     but WITHOUT ANY WARRANTY; without even the implied warranty of
  26.   *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27.   *     GNU General Public License for more details.
  28.   *
  29.   *     You should have received a copy of the GNU General Public
  30.   *     License along with this program; if not, write to the Free
  31.   *     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  32.   *     USA.
  33.   *
  34.   **********************************************************************
  35.   */
  36. /**
  37.  *
  38.  * Overall driver for the Creative DXR2 card
  39.  * Low level pcm1723 functions
  40.  *
  41.  */
  42. #include <dxr2.h>
  43. #include <pcm1723.h>
  44. #include "asic.h"
  45. static int dxr2_pcm1723_set_reg(pcm1723_t* instance, int val);
  46. static int dxr2_pcm1723_write_bits(pcm1723_t* instance, int val);
  47. pcm1723_ops_t pcm1723_ops_table = {
  48.   DXR2_LOGNAME,
  49.   dxr2_pcm1723_set_reg 
  50. };
  51. /**
  52.  *
  53.  * Set register on the pcm1723
  54.  *
  55.  * @param instance instance of the pcm1723 to use
  56.  * @param val value to set (already combined with the register to set)
  57.  *
  58.  * @return 0 on success, <0 on failure
  59.  *
  60.  */
  61. static int dxr2_pcm1723_set_reg(pcm1723_t* instance, int val)
  62. {
  63.   dxr2_t* dxr2Inst = (dxr2_t*) instance->data;
  64.   
  65.   // set pcm1723 mode
  66.   dxr2_asic_set_i2c_pcm1723_mode(dxr2Inst);
  67.   // output the bits
  68.   dxr2_pcm1723_write_bits(instance, val);
  69.   // back to normal mode
  70.   dxr2_asic_set_i2c_normal_mode(dxr2Inst);
  71.   
  72.   // OK
  73.   return(0);
  74. }
  75. /**
  76.  *
  77.  * Writes bits to the pcm1723 (on the vxp i2c bus)
  78.  *
  79.  * @param instance instance of the pcm1723 to use
  80.  * @param val value/register to write
  81.  *
  82.  * @return 0 on success, <0 on failure
  83.  *
  84.  */
  85.  
  86. static int dxr2_pcm1723_write_bits(pcm1723_t* instance, int val) 
  87. {
  88.   dxr2_t* dxr2Inst = (dxr2_t*) instance->data;
  89.   vxp524_t* vxp524Inst =(vxp524_t*) dxr2Inst->vxp524Instance;
  90.   int i;
  91.   // write each bit out
  92.   for(i=15; i>=0; i--) {
  93.     
  94.     // clear clock
  95.     vxp524_i2s_clear_scl(vxp524Inst);
  96.     // send data bit
  97.     if (val & (1<<i)) {
  98.       
  99.       vxp524_i2s_set_sda(vxp524Inst);
  100.     }
  101.     else {
  102.       
  103.       vxp524_i2s_clear_sda(vxp524Inst);
  104.     }
  105.     // set clock
  106.     vxp524_i2s_set_scl(vxp524Inst);
  107.   }
  108.   // OK
  109.   return(0);
  110. }
  111.