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

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.  * Functions for accessing the Creative ASIC
  40.  *
  41.  */
  42. #include <dxr2.h>
  43. #include <asm/io.h>
  44. #include <linux/delay.h>
  45. #include "asic.h"
  46. /**
  47.  *
  48.  * Initialise the ASIC
  49.  *
  50.  * @param instance dxr2 instance to use
  51.  *
  52.  * @return 0 on success, <0 on failure
  53.  *
  54.  */
  55. extern int dxr2_asic_init(dxr2_t* instance)
  56. {
  57.   dxr2_asic_set_reg(instance, 0x80);
  58.   udelay(1000);
  59.   dxr2_asic_set_reg(instance, 0x88);
  60.   udelay(5000);
  61.   dxr2_asic_set_bits(instance, 0x43, 0x43);
  62.   // OK
  63.   return(0);
  64. }
  65. /**
  66.  *
  67.  * Set the ASIC to the supplied value
  68.  *
  69.  * @param instance DXR2 instance to use
  70.  * @param val value to write
  71.  *
  72.  */
  73. extern void dxr2_asic_set_reg(dxr2_t* instance, int val)
  74. {  
  75.   // preserve the ASIC value for later
  76.   instance->asicValue = val;
  77.   
  78.   // write the value
  79.   writeb(val, instance->asicBase);
  80. }
  81. /**
  82.  *
  83.  * Set specified bits of the ASIC
  84.  *
  85.  * @param instance DXR2 instance to use
  86.  * @param bitmask Bitmask of bits to set
  87.  * @param valuemask Values of the bits in the bitmask
  88.  *
  89.  */
  90. extern void dxr2_asic_set_bits(dxr2_t* instance, int bitmask, int valuemask)
  91. {
  92.   // preserve the old ASIC value for later
  93.   instance->asicValue = (instance->asicValue & (~bitmask)) | valuemask;
  94.   
  95.   // set it on the hardware
  96.   writeb(instance->asicValue, instance->asicBase);
  97. }
  98. /**
  99.  *
  100.  * Set the i2c bus into normal mode
  101.  *
  102.  * @param instance DXR2 instance to use
  103.  *
  104.  */
  105. extern void dxr2_asic_set_i2c_normal_mode(dxr2_t* instance) 
  106. {
  107.   // clear bit 7 of ASIC
  108.   dxr2_asic_set_bits(instance, 0x80, 0);
  109.   // set bit 7 of ASIC
  110.   dxr2_asic_set_bits(instance, 0x80, 0x80);
  111.   
  112.   // close the i2c bus
  113.   vxp524_i2s_close(instance->vxp524Instance);
  114. }
  115. /**
  116.  *
  117.  * Set the i2c bus into PCM1723 mode
  118.  *
  119.  * @param instance DXR2 instance to use
  120.  *
  121.  */
  122. extern void dxr2_asic_set_i2c_pcm1723_mode(dxr2_t* instance) 
  123. {
  124.   // set bit 7 of ASIC
  125.   dxr2_asic_set_bits(instance, 0x80, 0x80);
  126.   
  127.   // open the i2c bus
  128.   vxp524_i2s_init(instance->vxp524Instance);
  129. }