From 1932d3cc06664a4e711a6af2c02e349d834a1ba0 Mon Sep 17 00:00:00 2001 From: CrazyCat Date: Wed, 6 Dec 2023 22:22:47 +0200 Subject: [PATCH] media: dvb-frontends/stid135: Implemented frontend IOCTL for femod register reading. --- drivers/media/dvb-core/dvb_frontend.c | 9 +++- .../media/dvb-frontends/stid135/stid135-fe.c | 16 ++++++- .../media/dvb-frontends/stid135/stid135_drv.c | 43 +------------------ .../media/dvb-frontends/stid135/stid135_drv.h | 2 +- include/media/dvb_frontend.h | 6 ++- include/uapi/linux/dvb/frontend.h | 9 +++- 6 files changed, 38 insertions(+), 47 deletions(-) diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c index 99192cf7fdc9..eddb2508b64d 100644 --- a/drivers/media/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb-core/dvb_frontend.c @@ -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); } diff --git a/drivers/media/dvb-frontends/stid135/stid135-fe.c b/drivers/media/dvb-frontends/stid135/stid135-fe.c index 3f5aa3518a5a..723bcd99889f 100644 --- a/drivers/media/dvb-frontends/stid135/stid135-fe.c +++ b/drivers/media/dvb-frontends/stid135/stid135-fe.c @@ -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) diff --git a/drivers/media/dvb-frontends/stid135/stid135_drv.c b/drivers/media/dvb-frontends/stid135/stid135_drv.c index 8f294b4b8ec3..488237e9d467 100644 --- a/drivers/media/dvb-frontends/stid135/stid135_drv.c +++ b/drivers/media/dvb-frontends/stid135/stid135_drv.c @@ -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), ®_val); - printk("TSSTATUS = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATUS2(demod_path), ®_val); - printk("TSSTATUS2 = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_PDELSTATUS1(demod_path), ®_val); - printk("PDELSTATUS1 = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_BBFCRCKO1(demod_path), ®_val); - printk("BBFCRCKO1 = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_PKTDELIN_BBFCRCKO0(demod_path), ®_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), ®_val); - printk("TSCFG2 = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSCFG1(demod_path), ®_val); - printk("TSCFG1 = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSCFG0(demod_path), ®_val); - printk("TSCFG0 = 0x%02X\n",reg_val); - - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATE1(demod_path), ®_val); - printk("TSSTATE1 = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSTATE0(demod_path), ®_val); - printk("TSSTATE0 = 0x%02X\n",reg_val); - - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSSPEED(demod_path), ®_val); - printk("TSSPEED = 0x%02X\n",reg_val); - - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSBITRATE1(demod_path), ®_val); - printk("TSBITRATE1 = 0x%02X\n",reg_val); - ChipGetOneRegister(pParams->handle_demod, (u16)REG_RC8CODEW_DVBSX_HWARE_TSBITRATE0(demod_path), ®_val); - printk("TSBITRATE0 = 0x%02X\n",reg_val); - - return FE_LLA_NO_ERROR; + return ChipGetOneRegister(pParams->handle_demod, reg_addr, pdata); } diff --git a/drivers/media/dvb-frontends/stid135/stid135_drv.h b/drivers/media/dvb-frontends/stid135/stid135_drv.h index ab311e1dc855..6404f3ea4ac8 100644 --- a/drivers/media/dvb-frontends/stid135/stid135_drv.h +++ b/drivers/media/dvb-frontends/stid135/stid135_drv.h @@ -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); diff --git a/include/media/dvb_frontend.h b/include/media/dvb_frontend.h index 5512939e3749..10aac1369d44 100644 --- a/include/media/dvb_frontend.h +++ b/include/media/dvb_frontend.h @@ -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__ diff --git a/include/uapi/linux/dvb/frontend.h b/include/uapi/linux/dvb/frontend.h index fb7fce97d199..0bd7b5923ab5 100644 --- a/include/uapi/linux/dvb/frontend.h +++ b/include/uapi/linux/dvb/frontend.h @@ -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_ */