这篇教程C++ tda_fail函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中tda_fail函数的典型用法代码示例。如果您正苦于以下问题:C++ tda_fail函数的具体用法?C++ tda_fail怎么用?C++ tda_fail使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了tda_fail函数的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: tda18271_ir_cal_initstatic int tda18271_ir_cal_init(struct dvb_frontend *fe){ struct tda18271_priv *priv = fe->tuner_priv; unsigned char *regs = priv->tda18271_regs; int ret; ret = tda18271_read_regs(fe); if (tda_fail(ret)) goto fail; /* test IR_CAL_OK to see if we need init */ if ((regs[R_EP1] & 0x08) == 0) ret = tda18271_init_regs(fe);fail: return ret;}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:16,
示例2: tda18271_toggle_outputstatic int tda18271_toggle_output(struct dvb_frontend *fe, int standby){ struct tda18271_priv *priv = fe->tuner_priv; int ret = tda18271_set_standby_mode(fe, standby ? 1 : 0, priv->output_opt & TDA18271_OUTPUT_LT_OFF ? 1 : 0, priv->output_opt & TDA18271_OUTPUT_XT_OFF ? 1 : 0); if (tda_fail(ret)) goto fail; tda_dbg("%s mode: xtal oscillator %s, slave tuner loop thru %s/n", standby ? "standby" : "active", priv->output_opt & TDA18271_OUTPUT_XT_OFF ? "off" : "on", priv->output_opt & TDA18271_OUTPUT_LT_OFF ? "off" : "on");fail: return ret;}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:18,
示例3: tda18271_set_paramsstatic int tda18271_set_params(struct dvb_frontend *fe){ struct dtv_frontend_properties *c = &fe->dtv_property_cache; u32 delsys = c->delivery_system; u32 bw = c->bandwidth_hz; u32 freq = c->frequency; struct tda18271_priv *priv = fe->tuner_priv; struct tda18271_std_map *std_map = &priv->std; struct tda18271_std_map_item *map; int ret; priv->mode = TDA18271_DIGITAL; switch (delsys) { case SYS_ATSC: map = &std_map->atsc_6; bw = 6000000; break; case SYS_ISDBT: case SYS_DVBT: case SYS_DVBT2: if (bw <= 6000000) { map = &std_map->dvbt_6; } else if (bw <= 7000000) { map = &std_map->dvbt_7; } else { map = &std_map->dvbt_8; } break; case SYS_DVBC_ANNEX_B: bw = 6000000; /* falltrough */ case SYS_DVBC_ANNEX_A: case SYS_DVBC_ANNEX_C: if (bw <= 6000000) { map = &std_map->qam_6; } else if (bw <= 7000000) { map = &std_map->qam_7; } else { map = &std_map->qam_8; } break; default: tda_warn("modulation type not supported!/n"); return -EINVAL; } /* When tuning digital, the analog demod must be tri-stated */ if (fe->ops.analog_ops.standby) fe->ops.analog_ops.standby(fe); ret = tda18271_tune(fe, map, freq, bw); if (tda_fail(ret)) goto fail; priv->if_freq = map->if_freq; priv->frequency = freq; priv->bandwidth = bw;fail: return ret;}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:62,
示例4: tda18271_channel_configurationstatic int tda18271_channel_configuration(struct dvb_frontend *fe, struct tda18271_std_map_item *map, u32 freq, u32 bw){ struct tda18271_priv *priv = fe->tuner_priv; unsigned char *regs = priv->tda18271_regs; int ret; u32 N; /* update TV broadcast parameters */ /* set standard */ regs[R_EP3] &= ~0x1f; /* clear std bits */ regs[R_EP3] |= (map->agc_mode << 3) | map->std; if (priv->id == TDA18271HDC2) { /* set rfagc to high speed mode */ regs[R_EP3] &= ~0x04; } /* set cal mode to normal */ regs[R_EP4] &= ~0x03; /* update IF output level */ regs[R_EP4] &= ~0x1c; /* clear if level bits */ regs[R_EP4] |= (map->if_lvl << 2); /* update FM_RFn */ regs[R_EP4] &= ~0x80; regs[R_EP4] |= map->fm_rfn << 7; /* update rf top / if top */ regs[R_EB22] = 0x00; regs[R_EB22] |= map->rfagc_top; ret = tda18271_write_regs(fe, R_EB22, 1); if (tda_fail(ret)) goto fail; /* --------------------------------------------------------------- */ /* disable Power Level Indicator */ regs[R_EP1] |= 0x40; /* make sure thermometer is off */ regs[R_TM] &= ~0x10; /* frequency dependent parameters */ tda18271_calc_ir_measure(fe, &freq); tda18271_calc_bp_filter(fe, &freq); tda18271_calc_rf_band(fe, &freq); tda18271_calc_gain_taper(fe, &freq); /* --------------------------------------------------------------- */ /* dual tuner and agc1 extra configuration */ switch (priv->role) { case TDA18271_MASTER: regs[R_EB1] |= 0x04; /* main vco */ break; case TDA18271_SLAVE: regs[R_EB1] &= ~0x04; /* cal vco */ break; } /* agc1 always active */ regs[R_EB1] &= ~0x02; /* agc1 has priority on agc2 */ regs[R_EB1] &= ~0x01; ret = tda18271_write_regs(fe, R_EB1, 1); if (tda_fail(ret)) goto fail; /* --------------------------------------------------------------- */ N = map->if_freq * 1000 + freq; switch (priv->role) { case TDA18271_MASTER: tda18271_calc_main_pll(fe, N); tda18271_set_if_notch(fe); tda18271_write_regs(fe, R_MPD, 4); break; case TDA18271_SLAVE: tda18271_calc_cal_pll(fe, N); tda18271_write_regs(fe, R_CPD, 4); regs[R_MPD] = regs[R_CPD] & 0x7f; tda18271_set_if_notch(fe); tda18271_write_regs(fe, R_MPD, 1); break; } ret = tda18271_write_regs(fe, R_TM, 7);//.........这里部分代码省略.........
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:101,
示例5: tda18271c1_rf_tracking_filter_calibrationstatic int tda18271c1_rf_tracking_filter_calibration(struct dvb_frontend *fe, u32 freq, u32 bw){ struct tda18271_priv *priv = fe->tuner_priv; unsigned char *regs = priv->tda18271_regs; int ret; u32 N = 0; /* calculate bp filter */ tda18271_calc_bp_filter(fe, &freq); tda18271_write_regs(fe, R_EP1, 1); regs[R_EB4] &= 0x07; regs[R_EB4] |= 0x60; tda18271_write_regs(fe, R_EB4, 1); regs[R_EB7] = 0x60; tda18271_write_regs(fe, R_EB7, 1); regs[R_EB14] = 0x00; tda18271_write_regs(fe, R_EB14, 1); regs[R_EB20] = 0xcc; tda18271_write_regs(fe, R_EB20, 1); /* set cal mode to RF tracking filter calibration */ regs[R_EP4] |= 0x03; /* calculate cal pll */ switch (priv->mode) { case TDA18271_ANALOG: N = freq - 1250000; break; case TDA18271_DIGITAL: N = freq + bw / 2; break; } tda18271_calc_cal_pll(fe, N); /* calculate main pll */ switch (priv->mode) { case TDA18271_ANALOG: N = freq - 250000; break; case TDA18271_DIGITAL: N = freq + bw / 2 + 1000000; break; } tda18271_calc_main_pll(fe, N); ret = tda18271_write_regs(fe, R_EP3, 11); if (tda_fail(ret)) return ret; msleep(5); /* RF tracking filter calibration initialization */ /* search for K,M,CO for RF calibration */ tda18271_calc_km(fe, &freq); tda18271_write_regs(fe, R_EB13, 1); /* search for rf band */ tda18271_calc_rf_band(fe, &freq); /* search for gain taper */ tda18271_calc_gain_taper(fe, &freq); tda18271_write_regs(fe, R_EP2, 1); tda18271_write_regs(fe, R_EP1, 1); tda18271_write_regs(fe, R_EP2, 1); tda18271_write_regs(fe, R_EP1, 1); regs[R_EB4] &= 0x07; regs[R_EB4] |= 0x40; tda18271_write_regs(fe, R_EB4, 1); regs[R_EB7] = 0x40; tda18271_write_regs(fe, R_EB7, 1); msleep(10); /* pll locking */ regs[R_EB20] = 0xec; tda18271_write_regs(fe, R_EB20, 1); msleep(60); /* RF tracking filter calibration completion */ regs[R_EP4] &= ~0x03; /* set cal mode to normal */ tda18271_write_regs(fe, R_EP4, 1); tda18271_write_regs(fe, R_EP1, 1); /* RF tracking filter correction for VHF_Low band */ if (0 == tda18271_calc_rf_cal(fe, &freq)) tda18271_write_regs(fe, R_EB14, 1); return 0;}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:98,
示例6: tda18271_rf_tracking_filters_initstatic int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq){ struct tda18271_priv *priv = fe->tuner_priv; struct tda18271_rf_tracking_filter_cal *map = priv->rf_cal_state; unsigned char *regs = priv->tda18271_regs; int bcal, rf, i; s32 divisor, dividend;#define RF1 0#define RF2 1#define RF3 2 u32 rf_default[3]; u32 rf_freq[3]; s32 prog_cal[3]; s32 prog_tab[3]; i = tda18271_lookup_rf_band(fe, &freq, NULL); if (tda_fail(i)) return i; rf_default[RF1] = 1000 * map[i].rf1_def; rf_default[RF2] = 1000 * map[i].rf2_def; rf_default[RF3] = 1000 * map[i].rf3_def; for (rf = RF1; rf <= RF3; rf++) { if (0 == rf_default[rf]) return 0; tda_cal("freq = %d, rf = %d/n", freq, rf); /* look for optimized calibration frequency */ bcal = tda18271_powerscan(fe, &rf_default[rf], &rf_freq[rf]); if (tda_fail(bcal)) return bcal; tda18271_calc_rf_cal(fe, &rf_freq[rf]); prog_tab[rf] = (s32)regs[R_EB14]; if (1 == bcal) prog_cal[rf] = (s32)tda18271_calibrate_rf(fe, rf_freq[rf]); else prog_cal[rf] = prog_tab[rf]; switch (rf) { case RF1: map[i].rf_a1 = 0; map[i].rf_b1 = (prog_cal[RF1] - prog_tab[RF1]); map[i].rf1 = rf_freq[RF1] / 1000; break; case RF2: dividend = (prog_cal[RF2] - prog_tab[RF2] - prog_cal[RF1] + prog_tab[RF1]); divisor = (s32)(rf_freq[RF2] - rf_freq[RF1]) / 1000; map[i].rf_a1 = (dividend / divisor); map[i].rf2 = rf_freq[RF2] / 1000; break; case RF3: dividend = (prog_cal[RF3] - prog_tab[RF3] - prog_cal[RF2] + prog_tab[RF2]); divisor = (s32)(rf_freq[RF3] - rf_freq[RF2]) / 1000; map[i].rf_a2 = (dividend / divisor); map[i].rf_b2 = (prog_cal[RF2] - prog_tab[RF2]); map[i].rf3 = rf_freq[RF3] / 1000; break; default: BUG(); } } return 0;}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:71,
示例7: tda18271_powerscanstatic int tda18271_powerscan(struct dvb_frontend *fe, u32 *freq_in, u32 *freq_out){ struct tda18271_priv *priv = fe->tuner_priv; unsigned char *regs = priv->tda18271_regs; int sgn, bcal, count, wait, ret; u8 cid_target; u16 count_limit; u32 freq; freq = *freq_in; tda18271_calc_rf_band(fe, &freq); tda18271_calc_rf_cal(fe, &freq); tda18271_calc_gain_taper(fe, &freq); tda18271_lookup_cid_target(fe, &freq, &cid_target, &count_limit); tda18271_write_regs(fe, R_EP2, 1); tda18271_write_regs(fe, R_EB14, 1); /* downconvert frequency */ freq += 1000000; tda18271_calc_main_pll(fe, freq); tda18271_write_regs(fe, R_MPD, 4); msleep(5); /* pll locking */ /* detection mode */ regs[R_EP4] &= ~0x03; regs[R_EP4] |= 0x01; tda18271_write_regs(fe, R_EP4, 1); /* launch power detection measurement */ tda18271_write_regs(fe, R_EP2, 1); /* read power detection info, stored in EB10 */ ret = tda18271_read_extended(fe); if (tda_fail(ret)) return ret; /* algorithm initialization */ sgn = 1; *freq_out = *freq_in; bcal = 0; count = 0; wait = false; while ((regs[R_EB10] & 0x3f) < cid_target) { /* downconvert updated freq to 1 MHz */ freq = *freq_in + (sgn * count) + 1000000; tda18271_calc_main_pll(fe, freq); tda18271_write_regs(fe, R_MPD, 4); if (wait) { msleep(5); /* pll locking */ wait = false; } else udelay(100); /* pll locking */ /* launch power detection measurement */ tda18271_write_regs(fe, R_EP2, 1); /* read power detection info, stored in EB10 */ ret = tda18271_read_extended(fe); if (tda_fail(ret)) return ret; count += 200; if (count <= count_limit) continue; if (sgn <= 0) break; sgn = -1 * sgn; count = 200; wait = true; } if ((regs[R_EB10] & 0x3f) >= cid_target) { bcal = 1; *freq_out = freq - 1000000; } else bcal = 0; tda_cal("bcal = %d, freq_in = %d, freq_out = %d (freq = %d)/n", bcal, *freq_in, *freq_out, freq); return bcal;}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:93,
示例8: tda18271_set_paramsstatic int tda18271_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params){ struct tda18271_priv *priv = fe->tuner_priv; struct tda18271_std_map *std_map = &priv->std; struct tda18271_std_map_item *map; int ret; u32 bw, freq = params->frequency; priv->mode = TDA18271_DIGITAL; if (fe->ops.info.type == FE_ATSC) { switch (params->u.vsb.modulation) { case VSB_8: case VSB_16: map = &std_map->atsc_6; break; case QAM_64: case QAM_256: map = &std_map->qam_6; break; default: tda_warn("modulation not set!/n"); return -EINVAL; }#if 0 /* keep */ /* userspace request is already center adjusted */ freq += 1750000; /* Adjust to center (+1.75MHZ) */#endif bw = 6000000; } else if (fe->ops.info.type == FE_OFDM) { switch (params->u.ofdm.bandwidth) { case BANDWIDTH_6_MHZ: bw = 6000000; map = &std_map->dvbt_6; break; case BANDWIDTH_7_MHZ: bw = 7000000; map = &std_map->dvbt_7; break; case BANDWIDTH_8_MHZ: bw = 8000000; map = &std_map->dvbt_8; break; default: tda_warn("bandwidth not set!/n"); return -EINVAL; } } else { tda_warn("modulation type not supported!/n"); return -EINVAL; } /* When tuning digital, the analog demod must be tri-stated */ if (fe->ops.analog_ops.standby) fe->ops.analog_ops.standby(fe); ret = tda18271_tune(fe, map, freq, bw); if (tda_fail(ret)) goto fail; priv->frequency = freq; priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0;fail: return ret;}
开发者ID:OpenStbV4l-dvb,项目名称:v4l-dvb,代码行数:68,
示例9: mutex_lockstruct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, struct i2c_adapter *i2c, struct tda18271_config *cfg){ struct tda18271_priv *priv = NULL; int instance, ret; mutex_lock(&tda18271_list_mutex); instance = hybrid_tuner_request_state(struct tda18271_priv, priv, hybrid_tuner_instance_list, i2c, addr, "tda18271"); switch (instance) { case 0: goto fail; case 1: /* new tuner instance */ fe->tuner_priv = priv; tda18271_setup_configuration(fe, cfg); priv->cal_initialized = false; mutex_init(&priv->lock); ret = tda18271_get_id(fe); if (tda_fail(ret)) goto fail; ret = tda18271_assign_map_layout(fe); if (tda_fail(ret)) goto fail; /* if delay_cal is set, delay IR & RF calibration until init() * module option 'cal' overrides this delay */ if ((cfg->delay_cal) && (!tda18271_need_cal_on_startup(cfg))) break; mutex_lock(&priv->lock); tda18271_init_regs(fe); if ((tda18271_need_cal_on_startup(cfg)) && (priv->id == TDA18271HDC2)) tda18271c2_rf_cal_init(fe); /* enter standby mode, with required output features enabled */ ret = tda18271_toggle_output(fe, 1); tda_fail(ret); mutex_unlock(&priv->lock); break; default: /* existing tuner instance */ fe->tuner_priv = priv; /* allow dvb driver to override configuration settings */ if (cfg) { if (cfg->gate != TDA18271_GATE_ANALOG) priv->gate = cfg->gate; if (cfg->role) priv->role = cfg->role; if (cfg->config) priv->config = cfg->config; if (cfg->small_i2c) priv->small_i2c = cfg->small_i2c; if (cfg->output_opt) priv->output_opt = cfg->output_opt; if (cfg->std_map) tda18271_update_std_map(fe, cfg->std_map); } if (tda18271_need_cal_on_startup(cfg)) tda18271_init(fe); break; } /* override default std map with values in config struct */ if ((cfg) && (cfg->std_map)) tda18271_update_std_map(fe, cfg->std_map); mutex_unlock(&tda18271_list_mutex); memcpy(&fe->ops.tuner_ops, &tda18271_tuner_ops, sizeof(struct dvb_tuner_ops)); if (tda18271_debug & (DBG_MAP | DBG_ADV)) tda18271_dump_std_map(fe); return fe;fail: mutex_unlock(&tda18271_list_mutex); tda18271_release(fe); return NULL;}
开发者ID:AdrianHuang,项目名称:linux-3.8.13,代码行数:93,
示例10: mutex_lockstruct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, struct i2c_adapter *i2c, struct tda18271_config *cfg){ struct tda18271_priv *priv = NULL; int instance, ret; mutex_lock(&tda18271_list_mutex); instance = hybrid_tuner_request_state(struct tda18271_priv, priv, hybrid_tuner_instance_list, i2c, addr, "tda18271"); switch (instance) { case 0: goto fail; case 1: /* */ fe->tuner_priv = priv; tda18271_setup_configuration(fe, cfg); priv->cal_initialized = false; mutex_init(&priv->lock); ret = tda18271_get_id(fe); if (tda_fail(ret)) goto fail; ret = tda18271_assign_map_layout(fe); if (tda_fail(ret)) goto fail; mutex_lock(&priv->lock); tda18271_init_regs(fe); if ((tda18271_need_cal_on_startup(cfg)) && (priv->id == TDA18271HDC2)) tda18271c2_rf_cal_init(fe); mutex_unlock(&priv->lock); break; default: /* */ fe->tuner_priv = priv; /* */ if (cfg) { if (cfg->gate != TDA18271_GATE_ANALOG) priv->gate = cfg->gate; if (cfg->role) priv->role = cfg->role; if (cfg->config) priv->config = cfg->config; if (cfg->small_i2c) priv->small_i2c = cfg->small_i2c; if (cfg->output_opt) priv->output_opt = cfg->output_opt; if (cfg->std_map) tda18271_update_std_map(fe, cfg->std_map); } if (tda18271_need_cal_on_startup(cfg)) tda18271_init(fe); break; } /* */ if ((cfg) && (cfg->std_map)) tda18271_update_std_map(fe, cfg->std_map); mutex_unlock(&tda18271_list_mutex); memcpy(&fe->ops.tuner_ops, &tda18271_tuner_ops, sizeof(struct dvb_tuner_ops)); if (tda18271_debug & (DBG_MAP | DBG_ADV)) tda18271_dump_std_map(fe); return fe;fail: mutex_unlock(&tda18271_list_mutex); tda18271_release(fe); return NULL;}
开发者ID:romanbb,项目名称:android_kernel_lge_d851,代码行数:84,
注:本文中的tda_fail函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ tdb_close函数代码示例 C++ tda18271_write_regs函数代码示例 |