static int dvb_d0367_fe_qam_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) { struct dvb_d0367_fe_qam_state* state = fe->demodulator_priv; TUNER_IOREG_DeviceMap_t *DeviceMap; IOARCH_Handle_t IOHandle; DeviceMap = &state->DeviceMap; IOHandle = state->IOHandle; state->p = p; D0367qam_ScanFreq(DeviceMap, IOHandle); { BOOL bIsLocked; bIsLocked = FE_367qam_Status(&state->DeviceMap, state->IOHandle); printk("%d:bIsLocked = %d\n", __LINE__, bIsLocked); } state->p = NULL; return 0; }
static int dvb_d0367_fe_qam_read_status(struct dvb_frontend* fe, fe_status_t* status) { struct dvb_d0367_fe_qam_state* state = fe->demodulator_priv; //int iTunerLock = 0; BOOL bIsLocked; #if 0 if (fe->ops.tuner_ops.get_status) { if (fe->ops.tuner_ops.get_status(fe, &iTunerLock) < 0) { printk("1. Tuner get_status err\n"); } } if (iTunerLock) printk("1. Tuner phase locked\n"); else printk("1. Tuner unlocked\n"); if (fe->ops.i2c_gate_ctrl) { if (fe->ops.i2c_gate_ctrl(fe, 0) < 0) goto exit; } #endif /* 0 */ { bIsLocked = FE_367qam_Status(&state->DeviceMap, state->IOHandle); printk("bIsLocked = %d\n", bIsLocked); } if (bIsLocked) { *status = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK; } else { *status = 0; } #if 1 { U32 Quality; U32 Intensity; U32 Ber; FE_STV0367qam_GetSignalInfo(&state->DeviceMap, state->IOHandle, &Quality, &Intensity, &Ber, FirstTimeBER); printk("Quality = %d, Intensity = %d, Ber = %d\n", Quality, Intensity, Ber); } #endif /* 0 */ return 0; #if 0 exit: printk(KERN_ERR "%s: dvb_d0367_fe_qam_read_status Error\n", __func__); return -1; #endif /* 0 */ }
/*********************************************************************** 函数名称: demod_d0367qam_IsLocked 函数说明: 读取信号是否锁定 修改记录: 日 期 作 者 修定 --------- --------- ----- 2010.11.11 lwj 创建 ************************************************************************/ YW_ErrorType_T demod_d0367qam_IsLocked(U8 Handle, BOOL *IsLocked) { YW_ErrorType_T Error = YW_NO_ERROR; TUNER_ScanTaskParam_T *Inst; IOARCH_Handle_t IOHandle; TUNER_IOREG_DeviceMap_t *DeviceMap; Inst = TUNER_GetScanInfo(Handle); IOHandle = Inst->DriverParam.Cab.DemodIOHandle; DeviceMap = &Inst->DriverParam.Cab.Demod_DeviceMap; *IsLocked = FE_367qam_Status(DeviceMap, IOHandle); return(Error); }
struct dvb_frontend* dvb_d0367_fe_qam_attach(struct i2c_adapter* i2c) { struct dvb_d0367_fe_qam_state* state = NULL; TUNER_IOREG_DeviceMap_t *DeviceMap; IOARCH_Handle_t IOHandle; /* allocate memory for the internal state */ state = kzalloc(sizeof(struct dvb_d0367_fe_qam_state), GFP_KERNEL); if (state == NULL) goto error; /* create dvb_frontend */ memcpy(&state->frontend.ops, &dvb_d0367_fe_qam_ops, sizeof(struct dvb_frontend_ops)); state->frontend.demodulator_priv = state; state->i2c = i2c; state->IOHandle = (IOARCH_Handle_t)i2c; state->DeviceMap.Timeout = IOREG_DEFAULT_TIMEOUT; state->DeviceMap.Registers = STV0367qam_NBREGS; state->DeviceMap.Fields = STV0367qam_NBFIELDS; state->DeviceMap.Mode = IOREG_MODE_SUBADR_16; state->DeviceMap.RegExtClk = 27000000; //Demod External Crystal_HZ state->DeviceMap.RegMap = (TUNER_IOREG_Register_t *) kzalloc(state->DeviceMap.Registers * sizeof(TUNER_IOREG_Register_t), GFP_KERNEL); state->DeviceMap.priv = (void *)state; DeviceMap = &state->DeviceMap; IOHandle = state->IOHandle; { U8 data = 0xFF; data = ChipGetField_0367qam(DeviceMap, IOHandle, R367qam_ID); printk("set data = 0x%02x\n", data); } #if 0 { U32 Quality; U32 Intensity; U32 Ber; FE_STV0367qam_GetSignalInfo(DeviceMap, IOHandle, &Quality, &Intensity, &Ber, FirstTimeBER); printk("Quality = %d, Intensity = %d, Ber = %d\n", Quality, Intensity, Ber); } #if 0 { BOOL bIsLocked; bIsLocked = FE_367qam_Status(DeviceMap, IOHandle); printk("bIsLocked = %d\n", bIsLocked); } #endif /* 0 */ #endif /* 0 */ return &state->frontend; error: kfree(state); return NULL; }