lowlevel.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.  * Driver for the Brooktree/Rockwell/Conexant BT865 TV encoder chip
  39.  * Register get/set functions
  40.  *
  41.  */
  42. #include <linux/errno.h>
  43. #include <bt865.h>
  44. /**
  45.  *
  46.  * Get register from the BT865
  47.  *
  48.  * @param instance Instance of the BT865 to use
  49.  * @param reg Register to retrieve
  50.  * @return The register's value (or negative on error)
  51.  *
  52.  */
  53. extern int bt865_get_reg (bt865_t* instance, int reg)
  54. {
  55.   // if the register == -1 => do readback
  56.   if (reg == -1) {
  57.     
  58.     return (*instance->ops->get_reg) (instance, 0xfe);
  59.   }
  60.   
  61.   // check register valid
  62.   if ((reg <0) || (reg > 255)) {
  63.     return(-EINVAL);
  64.   }
  65.   // return stored values
  66.   return(instance->regValues[reg]);
  67. }
  68. /**
  69.  *
  70.  * Set register on the BT865
  71.  *
  72.  * @param instance Instance of the BT865 to use
  73.  * @param reg Register to retrieve
  74.  * @param val Value to set
  75.  *
  76.  */
  77. extern void bt865_set_reg (bt865_t* instance, int reg, int val)
  78. {
  79.   if ((reg < 0) || (reg > 255)) {
  80.     
  81.     return;
  82.   }
  83.   
  84.   // write it
  85.   (*instance->ops->set_reg) (instance, reg, val);
  86.   
  87.   // remember it
  88.   instance->regValues[reg] = val;
  89. }
  90. /**
  91.  *
  92.  * Get specified bitmask of a register from BT865
  93.  *
  94.  * @param instance Instance of the BT865 to use
  95.  * @param reg Register to retrieve
  96.  * @param bitmask Bitmask of bits to retrive from that register
  97.  *
  98.  * @return The register bitvalues
  99.  *
  100.  */
  101. extern int bt865_get_bits(bt865_t* instance, int reg, int bitmask)
  102. {
  103.   return (bt865_get_reg(instance, reg) & bitmask);
  104. }
  105. /**
  106.  *
  107.  * Set specified bits of a register on BT865
  108.  *
  109.  * @param instance Instance of the BT865 to use
  110.  * @param reg Register to retrieve
  111.  * @param bitmask Bitmask of bits to set from that register
  112.  * @param valuemask Values of the bits in the bitmask
  113.  *
  114.  */
  115. extern void bt865_set_bits(bt865_t* instance, int reg, int bitmask, int valuemask)
  116. {
  117.   // get the current register value
  118.   int value = bt865_get_reg(instance, reg);
  119.   
  120.   // set it on the hardware
  121.   bt865_set_reg(instance, reg, (value & (~bitmask)) | valuemask);
  122. }