media: dvb-frontends/stid135: Implemented frontend IOCTL for femod register reading.

This commit is contained in:
CrazyCat
2023-12-06 22:22:47 +02:00
parent be2c4a79d6
commit 1932d3cc06
6 changed files with 38 additions and 47 deletions

View File

@@ -2458,8 +2458,15 @@ static int dvb_frontend_handle_ioctl(struct file *file,
dev_dbg(fe->dvb->device, "%s:\n", __func__);
switch (cmd) {
case FE_REG_READ:
if (fe->ops.reg_read) {
struct reg_info *info = parg;
err = fe->ops.reg_read(fe, info);
}
err = 0;
break;
case FE_READ_TEMP:
case FE_READ_TEMP:
if (fe->ops.read_temp) {
err = fe->ops.read_temp(fe, parg);
}

View File

@@ -991,7 +991,6 @@ static int stid135_read_temp(struct dvb_frontend *fe, s16 *temp)
mutex_lock(&state->base->status_lock);
err = fe_stid135_get_soc_temperature(state->base->handle, temp);
fe_stid135_dump_regs(state->base->handle, state->rf_in + 1);
mutex_unlock(&state->base->status_lock);
if (err != FE_LLA_NO_ERROR)
@@ -1000,6 +999,20 @@ static int stid135_read_temp(struct dvb_frontend *fe, s16 *temp)
return 0;
}
static int stid135_reg_read(struct dvb_frontend *fe, struct reg_info *preg_info)
{
struct stv *state = fe->demodulator_priv;
fe_lla_error_t err = FE_LLA_NO_ERROR;
mutex_lock(&state->base->status_lock);
err = fe_stid135_reg_read(state->base->handle, preg_info->reg, &preg_info->data);
mutex_unlock(&state->base->status_lock);
if (err != FE_LLA_NO_ERROR)
dev_warn(&state->base->i2c->dev, "%s: fe_stid135_reg_read error %d !\n", __func__, err);
return 0;
}
static struct dvb_frontend_ops stid135_ops = {
.delsys = { SYS_DVBS, SYS_DVBS2, SYS_DSS },
@@ -1038,6 +1051,7 @@ static struct dvb_frontend_ops stid135_ops = {
.eeprom_read = eeprom_read,
.eeprom_write = eeprom_write,
.read_temp = stid135_read_temp,
.reg_read = stid135_reg_read,
};
static struct stv_base *match_base(struct i2c_adapter *i2c, u8 adr)

View File

@@ -11532,49 +11532,10 @@ fe_lla_error_t get_current_llr(fe_stid135_handle_t handle,enum fe_stid135_demod
return FE_LLA_NO_ERROR;
}
fe_lla_error_t fe_stid135_dump_regs(fe_stid135_handle_t handle, enum fe_stid135_demod demod_path)
fe_lla_error_t fe_stid135_reg_read(fe_stid135_handle_t handle, u16 reg_addr, u32* pdata)
{
struct fe_stid135_internal_param *pParams;
u32 reg_val;
pParams = (struct fe_stid135_internal_param *) handle;
printk("-----------------------------------------------------\n");
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATUS(demod_path), &reg_val);
printk("TSSTATUS = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATUS2(demod_path), &reg_val);
printk("TSSTATUS2 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_PDELSTATUS1(demod_path), &reg_val);
printk("PDELSTATUS1 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_BBFCRCKO1(demod_path), &reg_val);
printk("BBFCRCKO1 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_BBFCRCKO0(demod_path), &reg_val);
printk("BBFCRCKO0 = 0x%02X\n",reg_val);
ChipSetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATUS(demod_path), 0);
ChipSetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATUS2(demod_path), 0);
ChipSetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_PDELSTATUS1(demod_path), 0);
ChipSetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_BBFCRCKO1(demod_path), 0);
ChipSetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_BBFCRCKO0(demod_path), 0);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSCFG2(demod_path), &reg_val);
printk("TSCFG2 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSCFG1(demod_path), &reg_val);
printk("TSCFG1 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSCFG0(demod_path), &reg_val);
printk("TSCFG0 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATE1(demod_path), &reg_val);
printk("TSSTATE1 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATE0(demod_path), &reg_val);
printk("TSSTATE0 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSPEED(demod_path), &reg_val);
printk("TSSPEED = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSBITRATE1(demod_path), &reg_val);
printk("TSBITRATE1 = 0x%02X\n",reg_val);
ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSBITRATE0(demod_path), &reg_val);
printk("TSBITRATE0 = 0x%02X\n",reg_val);
return FE_LLA_NO_ERROR;
return ChipGetOneRegister(pParams->handle_demod, reg_addr, pdata);
}

View File

@@ -681,7 +681,7 @@ STCHIP_Error_t stvvglna_get_status(STCHIP_Handle_t hChip, U8 *Status);
STCHIP_Error_t stvvglna_get_gain(STCHIP_Handle_t hChip,S32 *Gain);
STCHIP_Error_t stvvglna_term(STCHIP_Handle_t hChip);
fe_lla_error_t get_current_llr(fe_stid135_handle_t handle,enum fe_stid135_demod demod_path,s32 *current_llr);
fe_lla_error_t fe_stid135_dump_regs(fe_stid135_handle_t handle, enum fe_stid135_demod demod_path);
fe_lla_error_t fe_stid135_reg_read(fe_stid135_handle_t handle, u16 reg_addr, u32* pdata);

View File

@@ -513,8 +513,10 @@ struct dvb_frontend_ops {
void(*eeprom_read)( struct dvb_frontend *fe,struct eeprom_info *peepinf);
void(*eeprom_write)( struct dvb_frontend *fe,struct eeprom_info *peepinf);
int (*read_temp)(struct dvb_frontend* fe, s16* temp);
int(*read_temp)(struct dvb_frontend* fe, s16* temp);
int(*reg_read)( struct dvb_frontend *fe,struct reg_info *preg_info);
};
#ifdef __DVB_CORE__

View File

@@ -1099,6 +1099,12 @@ struct eeprom_info
__u8 data;
};
struct reg_info
{
__u16 reg;
__u32 data;
};
#define FE_ECP3FW_READ _IOR('o', 90, struct ecp3_info)
#define FE_ECP3FW_WRITE _IOW('o', 91, struct ecp3_info)
@@ -1111,6 +1117,7 @@ struct eeprom_info
#define FE_EEPROM_READ _IOR('o', 96, struct eeprom_info)
#define FE_EEPROM_WRITE _IOW('o', 97, struct eeprom_info)
#define FE_READ_TEMP _IOR('o', 98, __s16)
#define FE_READ_TEMP _IOR('o', 98, __s16)
#define FE_REG_READ _IOR('o', 99, struct reg_info)
#endif /* _DVBFRONTEND_H_ */