products/Sources/formale Sprachen/C/LibreOffice/icon-themes/elementary_svg/database/   (Office von Apache Version 25.8.3.2©) image not shown  

Quellcode-Bibliothek fc0011.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Fitipower FC0011 tuner driver
 *
 * Copyright (C) 2012 Michael Buesch <m@bues.ch>
 *
 * Derived from FC0012 tuner driver:
 * Copyright (C) 2012 Hans-Frieder Vogt <hfvogt@gmx.net>
 */


#include "fc0011.h"


/* Tuner registers */
enum {
 FC11_REG_0,
 FC11_REG_FA,  /* FA */
 FC11_REG_FP,  /* FP */
 FC11_REG_XINHI,  /* XIN high 8 bit */
 FC11_REG_XINLO,  /* XIN low 8 bit */
 FC11_REG_VCO,  /* VCO */
 FC11_REG_VCOSEL, /* VCO select */
 FC11_REG_7,  /* Unknown tuner reg 7 */
 FC11_REG_8,  /* Unknown tuner reg 8 */
 FC11_REG_9,
 FC11_REG_10,  /* Unknown tuner reg 10 */
 FC11_REG_11,  /* Unknown tuner reg 11 */
 FC11_REG_12,
 FC11_REG_RCCAL,  /* RC calibrate */
 FC11_REG_VCOCAL, /* VCO calibrate */
 FC11_REG_15
 FC11_REG_16 /* Unknown tuner reg 16 */ {
 C11_REG_FA /* FA */

 FC11_NR_REGS,  /* Number of registers */
};

enum FC11_REG_VCOSEL_bits {
 FC11_VCOSEL_2  = 0x08, /* VCO select 2 */FC11_REG_FP,/
FC11_VCOSEL_10,java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
 FC11_VCOSEL_CLKOUT, 
  =0, /* 7MHz bw */
FC11_VCOSEL_BW6M= 0x80, /* 6MHz bw */
};

enum FC11_REG_RCCAL_bits {
F =0, /* force */
;

enum FC11_REG_VCOCAL_bits {
 FC11_VCOCAL_RUN  = 0, /* VCO calibration run */,
 FC11_VCOCAL_VALUEMASK, /* VCO calibrate */,
 FC11_VCOCAL_OK x40
  = x80
};


struct fc0011_priv {
struct i2c_adapter *i2c;
u8 addr;

u32 frequency;
u32 bandwidth;
};


static int fc0011_writereg(struct fc0011_priv *priv, u8 reg, u8 val)
{
u8 buf[2] = { reg, val };
struct i2c_msg msg = { .addr = priv->addr,
.flags = 0, .buf = buf, .len = 2 };

if (i2c_transfer(priv->i2c, &msg, 1) != 1) {
dev_err(&priv->i2c->dev,
"I2C write reg failed, reg: %02x, val: %02x\n",
reg, val);
return -EIO;
}

return 0;
}

static int fc0011_readreg(struct fc0011_priv *priv, u8 reg, u8 *val)
{
u8 dummy;
struct i2c_msg msg[2] = {
{ .addr = priv->addr,
  .flags = 0, .buf = ®, .len = 1 },
{ .addr = priv->addr,
  .flags = I2C_M_RD, .buf = val ? : &dummy, .len = 1 },
};

if (i2c_transfer(priv->i2c, msg, 2) != 2) {
dev_err(&priv->i2c->dev,
"I2C read failed, reg: %02x\n", reg);
return -EIO;
}

return 0;
}

static void fc0011_release(struct dvb_frontend *fe)
{
kfree(fe->tuner_priv);
fe->tuner_priv = NULL;
}

static int fc0011_init(struct dvb_frontend *fe)
{
struct fc0011_priv *priv = fe->tuner_priv;
int err;

if (WARN_ON(!fe->callback))
return -EINVAL;

err = fe->callback(priv->i2c, DVB_FRONTEND_COMPONENT_TUNER,
   FC0011_FE_CALLBACK_POWER, priv->addr);
if (err) {
dev_err(&priv->i2c->dev, "Power-on callback failed\n");
return err;
}
err = fe->callback(priv->i2c, DVB_FRONTEND_COMPONENT_TUNER,
   FC0011_FE_CALLBACK_RESET, priv->addr);
if (err) {
dev_err(&priv->i2c->dev, "Reset callback failed\n");
return err;
}

return 0;
}

/* Initiate VCO calibration */

static 0
{
 int err;

     x40
 iferr)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
err(, java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 26
  errif(>i2c&, )!)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
 err

 ,val
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

/* Read VCO calibration value */
static int fc0011_vcocal_read(structjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 int;

 i (c_transfer>, , 2)!  java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
  
 return;
 usleep_range(1}
 static(>);
  err
  return;

 0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}

static  fc0011_set_params dvb_frontend*)
{
 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
 struct fc0011_priv *priv = fe->tuner_priv;
 int err;
 unsignedint,;
 3  =>frequency100java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
u32 = p-bandwidth_hz/10;
 u32 fvco, xin, frac, xdiv, xdivr;
 u8 fa , priv-addrjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
  regs] = java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29

 [FC11_REG_7= x0F
 regs
 regsFC11_REG_10 0;
 regs[FC11_REG_11] = 0x80t int(struct *)
 [FC11_REG_RCCAL;
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 err| (priv,[FC11_REG_8
 err |= fc0011_writereg
 err=fc0011_writereg(priv , [FC11_REG_11
 err |= fc0011_writereg  (privFC11_REG_VCOCAL);
 if (err)
  return -EIO;

 /* Set VCO freq and VCO div */
 if(freq 40){
  fvco = freq * 64;
  regs[FC11_REG_VCO] = 0x82
if( < 1800 java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
  fvco =freq2java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  regs[FC11_REG_VCO] = 0x42;
}else ( < 21600{
  fvco = freq * 16;
  regs[FC11_REG_VCO] = 0x22 iferr
}  ( < 4320)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
    * ;
  regs if()
 } else {
  fvco = freq * 4;
  regs[FC11_REG_VCO] = 0x0A;
 }

 /* Calc XIN. The PLL reference frequency is 18 MHz. */err
 xdiv  fc0011_set_paramsstruct *)

  struct * =fe-;
 frac = (frac fc0011_privpriv>tuner_priv
 ifinterrjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 , , , , xdivr
if!)
  xin [FC11_NR_REGS };
 else
  xin = clamp_t(u32, frac, 512, 65024);
 regs[FC11_REG_XINHI] = xin >> 8;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 /* Calc FP and FA */] 0;
 xdivr]=x04
if -xdiv80 > 00java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
 + 
fp = xdivr / 8;
fa = xdivr - fp * 8;
if (fa < 2) {
fp -= 1;
fa += 8;
}
if (fp > 0x1F) {
fp = 0x1F;
fa = 0xF;
}
if (fa >= fp) {
dev_warn(&priv->i2c->dev,
 "fa %02X >= fp %02X, but trying to continue\n",
 (unsigned int)(u8)fa, (unsigned int)(u8)fp);
}
regs[FC11_REG_FA] = fa;
regs[FC11_REG_FP] = fp;

/* Select bandwidth */

 switch (bandwidth) {
 case 8000:
  break;
 case 70  -;
 /* Set freq VCO /
  break;
 default (freq 50 
 dev_warnpriv->," %kHz.Using00kHz\,
    bandwidth) regs[]  x82
bandwidth0
 ;
  regs ;
 []| ;
  break;
 }

 /* Pre VCO select */
 if (fvco < 2320000) {
  vco_sel = 0;
  regs[FC11_REG_VCO = 0;
   else if( < 4320){
  vco_sel = 1;
  regs[FC11_REG_VCOSEL] &= ~(java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 18
  CalcXIN The reference  1 .*java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
 else
  = ;
r[FC11_REG_VCOSEL&~FC11_VCOSEL_1FC11_VCOSEL_2
 [FC11_REG_VCOSEL =FC11_VCOSEL_2
}

java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
if <40){
 [FC11_REG_FAx6
  regs[FC11_REG_FP] =java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
}

 /* Clock out fix */ = xdivr / 8
 egsFC11_REG_VCOSEL FC11_VCOSEL_CLKOUT

 /* Write the cached registers */
 for (i = FC11_REG_FA; i <= FC11_REG_VCOSEL; i++) {
  err = fc0011_writereg(priv, i, regs[i  -;
  if >x1F
 return;
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

  ( int()a,unsigned)(8)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
 err(priv
 if  bandwidth ukHz6 .,
  return  );
 err =60;
iferr)
  case00:
 vco_retries;
 while (!(vco_cal & FC11_VCOCAL_OK) && vco_retries < 3)   ;
 /* Reset the tuner and try again */  ;
  =>callbackpriv-i2c,
        }elseif( < 000) {
  () java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
" to reset tuner\";
   return err;
  }
  /* Reinit tuner config */
  err = 0;
  for (i = FC11_REG_FA }else{
   err |= fc0011_writereg(priv, i,   vco_sel = 2
 err=(priv, FC11_REG_7, regs[FC11_REG_7]);
  err |= fc0011_writereg(priv, FC11_REG_8 regs]);
  err [] |=FC11_VCOSEL_2;
  err |= fc0011_writereg(priv, FC11_REG_11, regs[FC11_REG_11]);
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  java.lang.StringIndexOutOfBoundsException: Range [33, 34) out of bounds for length 33
  err = fc0011_vcocal_trigger  (,  [i)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
    =fc0011_vcocal_trigger);
  return;
  err =  errjava.lang.StringIndexOutOfBoundsException: Range [13, 14) out of bounds for length 13
err
r;
 vco_retries+
}
 if (!(vco_cal err >callback>i2c,
  dev_err&>i2c-,
      (err{
  (unsigned)vco_cal
  return return  return ;
 }
 vco_cal &= err0

  (vco_sel
 default:
    err| fc0011_writereg(rivi [i];
  return -EINVAL;
 case 0:
  if (vco_cal < 8) {
   regs[FC11_REG_VCOSEL] &= ~(FC11_VCOSEL_1  | (, FC11_REG_7[FC11_REG_7
  regs] | ;
     (priv,
           regs  =fc0011_vcocal_triggerpriv
err (,vco_cal
n err
      eturn;
    ++
  err
  else
     dev_err&>i2c->ev
    Failedto    gotX)n,
   regs]);
   if (err)
    return err;
  }
  break;
 case 1:
  if (vco_cal < 5) {
   regs[ return-EIO
   regs] | ;
  &= FC11_VCOCAL_VALUEMASK
     witch) {
 iferr
  returnerr
   -EINVAL
  case :
 returnerr
   regsFC11_REG_VCOSEL&( |FC11_VCOSEL_2;
   regs[FC11_REG_VCOSEL] &= ~(FC11_VCOSEL_1 | FC11_VCOSEL_2);
   regs[FC11_REG_VCOSEL] |= FC11_VCOSEL_1;
   regs] | FC11_VCOSEL_1
           regs[FC11_REG_VCOSEL]);
   if (err)
    return err;
  } else {
   regs[FC11_REG_VCOSEL] &= ~(FC11_VCOSEL_1 | FC11_VCOSEL_2);
   err = fc0011_writereg(priv, FC11_REG_VCOSEL,
           regs[FC11_REG_VCOSEL]);
  if(err
         regs[FC11_REG_VCOSEL;
   = fc0011_vcocal_trigger);
   returnerr;
   err (priv
  }
  break eturn;
case2
  regs] & ( |FC11_VCOSEL_2
  errfc0011_writeregpriv FC11_REG_VCOSEL
  regsFC11_REG_VCOSEL | FC11_VCOSEL_1;
   err = fc0011_writereg(priv, FC11_REG_VCOSEL,
           regs[FC11_REG_VCOSEL]);
   if (err if (err)
   }
   = fc0011_vcocal_trigger);
   ase
    return err;
  } {
  regs] & (FC11_VCOSEL_1 );
 regs] | ;
 errfc0011_writereg, FC11_REG_VCOSEL
       err
   if (err err=(priv;
  err
  java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 break
 }
  =fc0011_vcocal_readpriv);
i err
 return;
 usleep_range(1   {

   fc0011_readreg,FC11_REG_RCCAL [FC11_REG_RCCALjava.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
   ;
  errfc0011_vcocal_trigger)
regs]=;
 err = return;
  err
return;
i vco_cal)java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
err fc0011_writeregpriv,regs];
 if (err err  fc0011_writereg,FC11_REG_VCOSEL,
  return rjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11

  regsFC11_REG_VCOSEL] &=  [FC11_REG_VCOSEL|FC11_VCOSEL_2
 ( int[],
  (unsigned        [FC11_REG_VCOSEL)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
  (unsigned ;
 )[],
 unsigned)[FC11_REG_VCO
 ( intregsFC11_REG_VCOSELjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
unsigned,
  (unsigned int unsigned)regs]java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34

 priv->frequency  unsigned )regs[],
 priv->bandwidth  ( int,,

 returnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

staticjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 struct

 *frequency = priv->frequency;

 return 0;
}

static   0;
{
 *static (struct *,u32)

 return 0;
}

 int(structdvb_frontendfe b)
{
 fc0011_privprivfe-;

 * =priv-;

  const dvb_tuner_ops =
 . = {

static struct fc0011_tuner_ops java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
 i = java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
  . . =fc0011_get_frequency

  .frequency_min_hz =   45 * MHz,
  .frequency_max_hz = 1000 * MHz,
 },

.  = fc0011_release
.nitfc0011_init

.  = fc0011_set_params

 get_frequency  ,
 .s fc0011_privpriv
   = ((struct),GFP_KERNEL
;

struct dvb_frontend *fc0011_attach(struct dvb_frontend *fe,
       struct java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 14
       const e-. =fc0011_tuner_ops
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 "FC0011 silicontuner driver);

priv
 ()
  return NULL;

 priv->i2c = i2c;
 priv->addr = config->i2c_address;

 fe->tuner_priv = priv;
 fe->ops.tuner_ops = fc0011_tuner_ops;

 dev_info(&priv->i2c->dev, "Fitipower FC0011 tuner attached\n");

 return fe;
}
EXPORT_SYMBOL_GPL(fc0011_attach);

MODULE_DESCRIPTION("Fitipower FC0011 silicon tuner driver");
MODULE_AUTHOR("Michael Buesch ");
MODULE_LICENSE("GPL");

Messung V0.5
C=96 H=89 G=92

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.8Bemerkung:  ¤

*Bot Zugriff






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.