From 068e94ea1700b1340ced1ea5dc7b3bdb41098613 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 16 Jan 2014 19:41:13 -0300 Subject: [PATCH] [media] drx-j: replace the ugly CHK_ERROR() macro Using return and goto inside macros is ugly and makes harder to understand the code and the labels. Remove those macros, and add a proper error debug message, when something bad happens. This was generated using the following coccinelle script: @@ @@ -DUMMY_READ(); +do { + u16 dummy; + RR16(demod->my_i2c_dev_addr, SCU_RAM_VERSION_HI__A, &dummy); +} while (0); @@ expression dev, addr, val; @@ -WR16(dev, addr, val) +CHK_ERROR(DRXJ_DAP.write_reg16func(dev, addr, val, 0)) @@ expression dev, addr, val; @@ -RR16(dev, addr, val) +CHK_ERROR(DRXJ_DAP.read_reg16func(dev, addr, val, 0)) @@ expression dev, addr, val; @@ -WR32(dev, addr, val) +CHK_ERROR(DRXJ_DAP.write_reg32func(dev, addr, val, 0)) @@ expression dev, addr, val; @@ -RR32(dev, addr, val) +CHK_ERROR(DRXJ_DAP.read_reg32func(dev, addr, val, 0)) @@ expression dev, addr, val, block; @@ -WRB(dev, addr, val, block) +CHK_ERROR(DRXJ_DAP.write_block_func(dev, addr, val, block, 0)) @@ expression dev, addr, val, block; @@ -RRB(dev, addr, val, block) +CHK_ERROR(DRXJ_DAP.read_block_func(dev, addr, val, block, 0)) @@ expression dev, addr, val; @@ -BCWR16(dev, addr, val) +CHK_ERROR(DRXJ_DAP.write_reg16func(dev, addr, val, DRXDAP_FASI_BROADCAST)) @@ expression dev, addr, val; @@ -ARR32(dev, addr, val) +CHK_ERROR(drxj_dap_atomic_read_reg32(dev, addr, val, 0)) @@ expression dev, addr, val; @@ -SARR16(dev, addr, val) +CHK_ERROR(drxj_dap_scu_atomic_read_reg16(dev, addr, val, 0)) @@ expression x; @@ -CHK_ERROR(x); +rc = x; +if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; +} Acked-by: Devin Heitmueller Signed-off-by: Mauro Carvalho Chehab --- drivers/media/dvb-frontends/drx39xyj/drxj.c | 8488 +++++++++++++++---- 1 file changed, 6758 insertions(+), 1730 deletions(-) diff --git a/drivers/media/dvb-frontends/drx39xyj/drxj.c b/drivers/media/dvb-frontends/drx39xyj/drxj.c index d51cea9bc5eb..13bb38193669 100644 --- a/drivers/media/dvb-frontends/drx39xyj/drxj.c +++ b/drivers/media/dvb-frontends/drx39xyj/drxj.c @@ -40,6 +40,8 @@ INCLUDE FILES ----------------------------------------------------------------------------*/ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include "drxj.h" #include "drxj_map.h" @@ -478,66 +480,6 @@ DEFINES /*=== REGISTER ACCESS MACROS =================================================*/ /*============================================================================*/ -#ifdef DRXJDRIVER_DEBUG -#include -#define CHK_ERROR(s) \ - do { \ - if ((s) != DRX_STS_OK) \ - { \ - fprintf(stderr, \ - "ERROR[\n file : %s\n line : %d\n]\n", \ - __FILE__, __LINE__); \ - goto rw_error; }; \ - } \ - while (0 != 0) -#else -#define CHK_ERROR(s) \ - do { \ - if ((s) != DRX_STS_OK) { goto rw_error; } \ - } while (0 != 0) -#endif - -#define CHK_ZERO(s) \ - do { \ - if ((s) == 0) return DRX_STS_ERROR; \ - } while (0) - -#define DUMMY_READ() \ - do { \ - u16 dummy; \ - RR16(demod->my_i2c_dev_addr, SCU_RAM_VERSION_HI__A, &dummy); \ - } while (0) - -#define WR16(dev, addr, val) \ - CHK_ERROR(DRXJ_DAP.write_reg16func((dev), (addr), (val), 0)) - -#define RR16(dev, addr, val) \ - CHK_ERROR(DRXJ_DAP.read_reg16func((dev), (addr), (val), 0)) - -#define WR32(dev, addr, val) \ - CHK_ERROR(DRXJ_DAP.write_reg32func((dev), (addr), (val), 0)) - -#define RR32(dev, addr, val) \ - CHK_ERROR(DRXJ_DAP.read_reg32func((dev), (addr), (val), 0)) - -#define WRB(dev, addr, len, block) \ - CHK_ERROR(DRXJ_DAP.write_block_func((dev), (addr), (len), (block), 0)) - -#define RRB(dev, addr, len, block) \ - CHK_ERROR(DRXJ_DAP.read_block_func((dev), (addr), (len), (block), 0)) - -#define BCWR16(dev, addr, val) \ - CHK_ERROR(DRXJ_DAP.write_reg16func((dev), (addr), (val), DRXDAP_FASI_BROADCAST)) - -#define ARR32(dev, addr, val) \ - CHK_ERROR(drxj_dap_atomic_read_reg32((dev), (addr), (val), 0)) - -#define SARR16(dev, addr, val) \ - CHK_ERROR(drxj_dap_scu_atomic_read_reg16((dev), (addr), (val), 0)) - -#define SAWR16(dev, addr, val) \ - CHK_ERROR(drxj_dap_scu_atomic_write_reg16((dev), (addr), (val), 0)) - /** * This macro is used to create byte arrays for block writes. * Block writes speed up I2C traffic between host and demod. @@ -2100,7 +2042,7 @@ int drxj_dap_atomic_read_write_block(struct i2c_device_addr *dev_addr, u8 *data, bool read_flag) { drxj_hi_cmd_t hi_cmd; - + int rc; u16 word; u16 dummy = 0; u16 i = 0; @@ -2141,7 +2083,11 @@ int drxj_dap_atomic_read_write_block(struct i2c_device_addr *dev_addr, } } - CHK_ERROR(hi_command(dev_addr, &hi_cmd, &dummy)); + rc = hi_command(dev_addr, &hi_cmd, &dummy); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (read_flag == true) { /* read data from buffer */ @@ -2227,6 +2173,7 @@ static int hi_cfg_command(const struct drx_demod_instance *demod) struct drxj_data *ext_attr = (struct drxj_data *) (NULL); drxj_hi_cmd_t hi_cmd; u16 result = 0; + int rc; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -2238,7 +2185,11 @@ static int hi_cfg_command(const struct drx_demod_instance *demod) hi_cmd.param5 = ext_attr->hi_cfg_ctrl; hi_cmd.param6 = ext_attr->hi_cfg_transmit; - CHK_ERROR(hi_command(demod->my_i2c_dev_addr, &hi_cmd, &result)); + rc = hi_command(demod->my_i2c_dev_addr, &hi_cmd, &result); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Reset power down flag (set one call only) */ ext_attr->hi_cfg_ctrl &= (~(SIO_HI_RA_RAM_PAR_5_CFG_SLEEP_ZZZ)); @@ -2266,20 +2217,45 @@ hi_command(struct i2c_device_addr *dev_addr, const pdrxj_hi_cmd_t cmd, u16 *resu u16 wait_cmd = 0; u16 nr_retries = 0; bool powerdown_cmd = false; + int rc; /* Write parameters */ switch (cmd->cmd) { case SIO_HI_RA_RAM_CMD_CONFIG: case SIO_HI_RA_RAM_CMD_ATOMIC_COPY: - WR16(dev_addr, SIO_HI_RA_RAM_PAR_6__A, cmd->param6); - WR16(dev_addr, SIO_HI_RA_RAM_PAR_5__A, cmd->param5); - WR16(dev_addr, SIO_HI_RA_RAM_PAR_4__A, cmd->param4); - WR16(dev_addr, SIO_HI_RA_RAM_PAR_3__A, cmd->param3); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_HI_RA_RAM_PAR_6__A, cmd->param6, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_HI_RA_RAM_PAR_5__A, cmd->param5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_HI_RA_RAM_PAR_4__A, cmd->param4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_HI_RA_RAM_PAR_3__A, cmd->param3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case SIO_HI_RA_RAM_CMD_BRDCTRL: - WR16(dev_addr, SIO_HI_RA_RAM_PAR_2__A, cmd->param2); - WR16(dev_addr, SIO_HI_RA_RAM_PAR_1__A, cmd->param1); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_HI_RA_RAM_PAR_2__A, cmd->param2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_HI_RA_RAM_PAR_1__A, cmd->param1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case SIO_HI_RA_RAM_CMD_NULL: /* No parameters */ @@ -2291,7 +2267,11 @@ hi_command(struct i2c_device_addr *dev_addr, const pdrxj_hi_cmd_t cmd, u16 *resu } /* Write command */ - WR16(dev_addr, SIO_HI_RA_RAM_CMD__A, cmd->cmd); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_HI_RA_RAM_CMD__A, cmd->cmd, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((cmd->cmd) == SIO_HI_RA_RAM_CMD_RESET) { /* Allow for HI to reset */ @@ -2311,11 +2291,19 @@ hi_command(struct i2c_device_addr *dev_addr, const pdrxj_hi_cmd_t cmd, u16 *resu goto rw_error; }; - RR16(dev_addr, SIO_HI_RA_RAM_CMD__A, &wait_cmd); + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_HI_RA_RAM_CMD__A, &wait_cmd, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } while (wait_cmd != 0); /* Read result */ - RR16(dev_addr, SIO_HI_RA_RAM_RES__A, result); + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_HI_RA_RAM_RES__A, result, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* if ( powerdown_cmd == true ) */ @@ -2342,13 +2330,18 @@ static int init_hi(const struct drx_demod_instance *demod) struct drxj_data *ext_attr = (struct drxj_data *) (NULL); struct drx_common_attr *common_attr = (struct drx_common_attr *) (NULL); struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); + int rc; ext_attr = (struct drxj_data *) demod->my_ext_attr; common_attr = (struct drx_common_attr *) demod->my_common_attr; dev_addr = demod->my_i2c_dev_addr; /* PATCH for bug 5003, HI ucode v3.1.0 */ - WR16(dev_addr, 0x4301D7, 0x801); + rc = DRXJ_DAP.write_reg16func(dev_addr, 0x4301D7, 0x801, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Timing div, 250ns/Psys */ /* Timing div, = ( delay (nano seconds) * sysclk (kHz) )/ 1000 */ @@ -2380,7 +2373,11 @@ static int init_hi(const struct drx_demod_instance *demod) /* transit mode time out delay and watch dog divider */ ext_attr->hi_cfg_transmit = SIO_HI_RA_RAM_PAR_6__PRE; - CHK_ERROR(hi_cfg_command(demod)); + rc = hi_cfg_command(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); @@ -2422,14 +2419,27 @@ static int get_device_capabilities(struct drx_demod_instance *demod) u16 sio_pdr_ohw_cfg = 0; u32 sio_top_jtagid_lo = 0; u16 bid = 0; + int rc; common_attr = (struct drx_common_attr *) demod->my_common_attr; ext_attr = (struct drxj_data *) demod->my_ext_attr; dev_addr = demod->my_i2c_dev_addr; - WR16(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); - RR16(dev_addr, SIO_PDR_OHW_CFG__A, &sio_pdr_ohw_cfg); - WR16(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_PDR_OHW_CFG__A, &sio_pdr_ohw_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch ((sio_pdr_ohw_cfg & SIO_PDR_OHW_CFG_FREF_SEL__M)) { case 0: @@ -2455,15 +2465,31 @@ static int get_device_capabilities(struct drx_demod_instance *demod) Determine device capabilities Based on pinning v47 */ - RR32(dev_addr, SIO_TOP_JTAGID_LO__A, &sio_top_jtagid_lo); + rc = DRXJ_DAP.read_reg32func(dev_addr, SIO_TOP_JTAGID_LO__A, &sio_top_jtagid_lo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->mfx = (u8) ((sio_top_jtagid_lo >> 29) & 0xF); switch ((sio_top_jtagid_lo >> 12) & 0xFF) { case 0x31: - WR16(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); - RR16(dev_addr, SIO_PDR_UIO_IN_HI__A, &bid); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_PDR_UIO_IN_HI__A, &bid, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } bid = (bid >> 10) & 0xf; - WR16(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->has_lna = true; ext_attr->has_ntsc = false; @@ -2600,9 +2626,11 @@ static int power_up_device(struct drx_demod_instance *demod) wake_up_addr.i2c_addr = DRXJ_WAKE_UP_KEY; wake_up_addr.i2c_dev_id = dev_addr->i2c_dev_id; wake_up_addr.user_data = dev_addr->user_data; - /* CHK_ERROR macro not used, I2C access may fail in this case: no ack - dummy write must be used to wake uop device, dummy read must be used to - reset HI state machine (avoiding actual writes) */ + /* + * I2C access may fail in this case: no ack + * dummy write must be used to wake uop device, dummy read must be used to + * reset HI state machine (avoiding actual writes) + */ do { data = 0; drxbsp_i2c_write_read(&wake_up_addr, 1, &data, @@ -2644,6 +2672,7 @@ ctrl_set_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); struct drxj_data *ext_attr = (struct drxj_data *) (NULL); struct drx_common_attr *common_attr = (struct drx_common_attr *) (NULL); + int rc; u16 fec_oc_reg_mode = 0; u16 fec_oc_reg_ipr_mode = 0; u16 fec_oc_reg_ipr_invert = 0; @@ -2657,6 +2686,7 @@ ctrl_set_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o FEC_OC_IPR_INVERT_MD5__M | FEC_OC_IPR_INVERT_MD4__M | FEC_OC_IPR_INVERT_MD3__M | FEC_OC_IPR_INVERT_MD2__M | FEC_OC_IPR_INVERT_MD1__M | FEC_OC_IPR_INVERT_MD0__M; + /* check arguments */ if ((demod == NULL) || (cfg_data == NULL)) { return (DRX_STS_INVALID_ARG); @@ -2693,19 +2723,55 @@ ctrl_set_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o return (DRX_STS_OK); } - WR16(dev_addr, FEC_OC_OCR_INVERT__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_OCR_INVERT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (ext_attr->standard) { case DRX_STANDARD_8VSB: - WR16(dev_addr, FEC_OC_FCT_USAGE__A, 7); /* 2048 bytes fifo ram */ - WR16(dev_addr, FEC_OC_TMD_CTL_UPD_RATE__A, 10); - WR16(dev_addr, FEC_OC_TMD_INT_UPD_RATE__A, 10); - WR16(dev_addr, FEC_OC_AVR_PARM_A__A, 5); - WR16(dev_addr, FEC_OC_AVR_PARM_B__A, 7); - WR16(dev_addr, FEC_OC_RCN_GAIN__A, 10); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_FCT_USAGE__A, 7, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* 2048 bytes fifo ram */ + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_TMD_CTL_UPD_RATE__A, 10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_TMD_INT_UPD_RATE__A, 10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_AVR_PARM_A__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_AVR_PARM_B__A, 7, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_RCN_GAIN__A, 10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Low Water Mark for synchronization */ - WR16(dev_addr, FEC_OC_SNC_LWM__A, 3); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_SNC_LWM__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* High Water Mark for synchronization */ - WR16(dev_addr, FEC_OC_SNC_HWM__A, 5); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_SNC_HWM__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_ITU_A: case DRX_STANDARD_ITU_C: @@ -2734,31 +2800,70 @@ ctrl_set_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o (ext_attr->curr_symbol_rate / 8) * nr_bits * 188; /* pass through b/c Annex A/c need following settings */ case DRX_STANDARD_ITU_B: - WR16(dev_addr, FEC_OC_FCT_USAGE__A, - FEC_OC_FCT_USAGE__PRE); - WR16(dev_addr, FEC_OC_TMD_CTL_UPD_RATE__A, - FEC_OC_TMD_CTL_UPD_RATE__PRE); - WR16(dev_addr, FEC_OC_TMD_INT_UPD_RATE__A, 5); - WR16(dev_addr, FEC_OC_AVR_PARM_A__A, - FEC_OC_AVR_PARM_A__PRE); - WR16(dev_addr, FEC_OC_AVR_PARM_B__A, - FEC_OC_AVR_PARM_B__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_FCT_USAGE__A, FEC_OC_FCT_USAGE__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_TMD_CTL_UPD_RATE__A, FEC_OC_TMD_CTL_UPD_RATE__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_TMD_INT_UPD_RATE__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_AVR_PARM_A__A, FEC_OC_AVR_PARM_A__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_AVR_PARM_B__A, FEC_OC_AVR_PARM_B__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (cfg_data->static_clk == true) { - WR16(dev_addr, FEC_OC_RCN_GAIN__A, 0xD); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_RCN_GAIN__A, 0xD, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { - WR16(dev_addr, FEC_OC_RCN_GAIN__A, - FEC_OC_RCN_GAIN__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_RCN_GAIN__A, FEC_OC_RCN_GAIN__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_SNC_LWM__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_SNC_HWM__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - WR16(dev_addr, FEC_OC_SNC_LWM__A, 2); - WR16(dev_addr, FEC_OC_SNC_HWM__A, 12); break; default: break; } /* swtich (standard) */ /* Check insertion of the Reed-Solomon parity bytes */ - RR16(dev_addr, FEC_OC_MODE__A, &fec_oc_reg_mode); - RR16(dev_addr, FEC_OC_IPR_MODE__A, &fec_oc_reg_ipr_mode); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_MODE__A, &fec_oc_reg_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_IPR_MODE__A, &fec_oc_reg_ipr_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (cfg_data->insert_rs_byte == true) { /* enable parity symbol forward */ fec_oc_reg_mode |= FEC_OC_MODE_PARITY__M; @@ -2918,97 +3023,287 @@ ctrl_set_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o dto_rate = frac28(bit_rate, common_attr->sys_clock_freq * 1000); dto_rate >>= 3; - WR16(dev_addr, FEC_OC_DTO_RATE_HI__A, - (u16) ((dto_rate >> 16) & FEC_OC_DTO_RATE_HI__M)); - WR16(dev_addr, FEC_OC_DTO_RATE_LO__A, - (u16) (dto_rate & FEC_OC_DTO_RATE_LO_RATE_LO__M)); - WR16(dev_addr, FEC_OC_DTO_MODE__A, - FEC_OC_DTO_MODE_DYNAMIC__M | - FEC_OC_DTO_MODE_OFFSET_ENABLE__M); - WR16(dev_addr, FEC_OC_FCT_MODE__A, - FEC_OC_FCT_MODE_RAT_ENA__M | - FEC_OC_FCT_MODE_VIRT_ENA__M); - WR16(dev_addr, FEC_OC_DTO_BURST_LEN__A, - fec_oc_dto_burst_len); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DTO_RATE_HI__A, (u16)((dto_rate >> 16) & FEC_OC_DTO_RATE_HI__M), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DTO_RATE_LO__A, (u16)(dto_rate & FEC_OC_DTO_RATE_LO_RATE_LO__M), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DTO_MODE__A, FEC_OC_DTO_MODE_DYNAMIC__M | FEC_OC_DTO_MODE_OFFSET_ENABLE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_FCT_MODE__A, FEC_OC_FCT_MODE_RAT_ENA__M | FEC_OC_FCT_MODE_VIRT_ENA__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DTO_BURST_LEN__A, fec_oc_dto_burst_len, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (ext_attr->mpeg_output_clock_rate != DRXJ_MPEGOUTPUT_CLOCK_RATE_AUTO) fec_oc_dto_period = ext_attr->mpeg_output_clock_rate - 1; - WR16(dev_addr, FEC_OC_DTO_PERIOD__A, fec_oc_dto_period); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DTO_PERIOD__A, fec_oc_dto_period, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { /* Dynamic mode */ - WR16(dev_addr, FEC_OC_DTO_MODE__A, - FEC_OC_DTO_MODE_DYNAMIC__M); - WR16(dev_addr, FEC_OC_FCT_MODE__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DTO_MODE__A, FEC_OC_DTO_MODE_DYNAMIC__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_FCT_MODE__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } - WR32(dev_addr, FEC_OC_RCN_CTL_RATE_LO__A, rcn_rate); + rc = DRXJ_DAP.write_reg32func(dev_addr, FEC_OC_RCN_CTL_RATE_LO__A, rcn_rate, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write appropriate registers with requested configuration */ - WR16(dev_addr, FEC_OC_MODE__A, fec_oc_reg_mode); - WR16(dev_addr, FEC_OC_IPR_MODE__A, fec_oc_reg_ipr_mode); - WR16(dev_addr, FEC_OC_IPR_INVERT__A, fec_oc_reg_ipr_invert); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_MODE__A, fec_oc_reg_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_IPR_MODE__A, fec_oc_reg_ipr_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_IPR_INVERT__A, fec_oc_reg_ipr_invert, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* enabling for both parallel and serial now */ /* Write magic word to enable pdr reg write */ - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Set MPEG TS pads to outputmode */ - WR16(dev_addr, SIO_PDR_MSTRT_CFG__A, 0x0013); - WR16(dev_addr, SIO_PDR_MERR_CFG__A, 0x0013); - WR16(dev_addr, SIO_PDR_MCLK_CFG__A, - MPEG_OUTPUT_CLK_DRIVE_STRENGTH << SIO_PDR_MCLK_CFG_DRIVE__B - | 0x03 << SIO_PDR_MCLK_CFG_MODE__B); - WR16(dev_addr, SIO_PDR_MVAL_CFG__A, 0x0013); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MSTRT_CFG__A, 0x0013, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MERR_CFG__A, 0x0013, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MCLK_CFG__A, MPEG_OUTPUT_CLK_DRIVE_STRENGTH << SIO_PDR_MCLK_CFG_DRIVE__B | 0x03 << SIO_PDR_MCLK_CFG_MODE__B, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MVAL_CFG__A, 0x0013, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } sio_pdr_md_cfg = MPEG_SERIAL_OUTPUT_PIN_DRIVE_STRENGTH << SIO_PDR_MD0_CFG_DRIVE__B | 0x03 << SIO_PDR_MD0_CFG_MODE__B; - WR16(dev_addr, SIO_PDR_MD0_CFG__A, sio_pdr_md_cfg); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD0_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (cfg_data->enable_parallel == true) { /* MPEG data output is paralel -> set MD1 to MD7 to output mode */ sio_pdr_md_cfg = MPEG_PARALLEL_OUTPUT_PIN_DRIVE_STRENGTH << SIO_PDR_MD0_CFG_DRIVE__B | 0x03 << SIO_PDR_MD0_CFG_MODE__B; - WR16(dev_addr, SIO_PDR_MD0_CFG__A, sio_pdr_md_cfg); - WR16(dev_addr, SIO_PDR_MD1_CFG__A, sio_pdr_md_cfg); - WR16(dev_addr, SIO_PDR_MD2_CFG__A, sio_pdr_md_cfg); - WR16(dev_addr, SIO_PDR_MD3_CFG__A, sio_pdr_md_cfg); - WR16(dev_addr, SIO_PDR_MD4_CFG__A, sio_pdr_md_cfg); - WR16(dev_addr, SIO_PDR_MD5_CFG__A, sio_pdr_md_cfg); - WR16(dev_addr, SIO_PDR_MD6_CFG__A, sio_pdr_md_cfg); - WR16(dev_addr, SIO_PDR_MD7_CFG__A, sio_pdr_md_cfg); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD0_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD1_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD2_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD3_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD4_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD5_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD6_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD7_CFG__A, sio_pdr_md_cfg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { /* MPEG data output is serial -> set MD1 to MD7 to tri-state */ - WR16(dev_addr, SIO_PDR_MD1_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD2_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD3_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD4_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD5_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD6_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD7_CFG__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD1_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD2_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD3_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD4_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD5_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD6_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD7_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* Enable Monitor Bus output over MPEG pads and ctl input */ - WR16(dev_addr, SIO_PDR_MON_CFG__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MON_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write nomagic word to enable pdr reg write */ - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { /* Write magic word to enable pdr reg write */ - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Set MPEG TS pads to inputmode */ - WR16(dev_addr, SIO_PDR_MSTRT_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MERR_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MCLK_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MVAL_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD0_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD1_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD2_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD3_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD4_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD5_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD6_CFG__A, 0x0000); - WR16(dev_addr, SIO_PDR_MD7_CFG__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MSTRT_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MERR_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MCLK_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MVAL_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD0_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD1_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD2_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD3_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD4_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD5_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD6_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD7_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Enable Monitor Bus output over MPEG pads and ctl input */ - WR16(dev_addr, SIO_PDR_MON_CFG__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MON_CFG__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write nomagic word to enable pdr reg write */ - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* save values for restore after re-acquire */ @@ -3046,6 +3341,7 @@ ctrl_get_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); struct drx_common_attr *common_attr = (struct drx_common_attr *) (NULL); enum drx_lock_status lock_status = DRX_NOT_LOCKED; + int rc; u32 rate_reg = 0; u32 data64hi = 0; u32 data64lo = 0; @@ -3067,9 +3363,17 @@ ctrl_get_cfg_mpeg_output(struct drx_demod_instance *demod, struct drx_cfg_mpeg_o cfg_data->static_clk = common_attr->mpeg_cfg.static_clk; cfg_data->bitrate = 0; - CHK_ERROR(ctrl_lock_status(demod, &lock_status)); + rc = ctrl_lock_status(demod, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((lock_status == DRX_LOCKED)) { - RR32(dev_addr, FEC_OC_RCN_DYN_RATE_LO__A, &rate_reg); + rc = DRXJ_DAP.read_reg32func(dev_addr, FEC_OC_RCN_DYN_RATE_LO__A, &rate_reg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Frcn_rate = rate_reg * Fsys / 2 ^ 25 */ mult32(rate_reg, common_attr->sys_clock_freq * 1000, &data64hi, &data64lo); @@ -3102,6 +3406,7 @@ static int set_mpegtei_handling(struct drx_demod_instance *demod) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); + int rc; u16 fec_oc_dpr_mode = 0; u16 fec_oc_snc_mode = 0; u16 fec_oc_ems_mode = 0; @@ -3109,9 +3414,21 @@ static int set_mpegtei_handling(struct drx_demod_instance *demod) dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; - RR16(dev_addr, FEC_OC_DPR_MODE__A, &fec_oc_dpr_mode); - RR16(dev_addr, FEC_OC_SNC_MODE__A, &fec_oc_snc_mode); - RR16(dev_addr, FEC_OC_EMS_MODE__A, &fec_oc_ems_mode); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_DPR_MODE__A, &fec_oc_dpr_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_SNC_MODE__A, &fec_oc_snc_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_EMS_MODE__A, &fec_oc_ems_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* reset to default, allow TEI bit to be changed */ fec_oc_dpr_mode &= (~FEC_OC_DPR_MODE_ERR_DISABLE__M); @@ -3127,9 +3444,21 @@ static int set_mpegtei_handling(struct drx_demod_instance *demod) fec_oc_ems_mode |= ((0x01) << (FEC_OC_EMS_MODE_MODE__B)); } - WR16(dev_addr, FEC_OC_DPR_MODE__A, fec_oc_dpr_mode); - WR16(dev_addr, FEC_OC_SNC_MODE__A, fec_oc_snc_mode); - WR16(dev_addr, FEC_OC_EMS_MODE__A, fec_oc_ems_mode); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DPR_MODE__A, fec_oc_dpr_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_SNC_MODE__A, fec_oc_snc_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_EMS_MODE__A, fec_oc_ems_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3150,12 +3479,17 @@ static int bit_reverse_mpeg_output(struct drx_demod_instance *demod) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); + int rc; u16 fec_oc_ipr_mode = 0; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; - RR16(dev_addr, FEC_OC_IPR_MODE__A, &fec_oc_ipr_mode); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_IPR_MODE__A, &fec_oc_ipr_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* reset to default (normal bit order) */ fec_oc_ipr_mode &= (~FEC_OC_IPR_MODE_REVERSE_ORDER__M); @@ -3165,7 +3499,11 @@ static int bit_reverse_mpeg_output(struct drx_demod_instance *demod) fec_oc_ipr_mode |= FEC_OC_IPR_MODE_REVERSE_ORDER__M; } - WR16(dev_addr, FEC_OC_IPR_MODE__A, fec_oc_ipr_mode); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_IPR_MODE__A, fec_oc_ipr_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3186,13 +3524,17 @@ static int set_mpeg_output_clock_rate(struct drx_demod_instance *demod) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; if (ext_attr->mpeg_output_clock_rate != DRXJ_MPEGOUTPUT_CLOCK_RATE_AUTO) { - WR16(dev_addr, FEC_OC_DTO_PERIOD__A, - ext_attr->mpeg_output_clock_rate - 1); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_DTO_PERIOD__A, ext_attr->mpeg_output_clock_rate - 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } return (DRX_STS_OK); @@ -3214,8 +3556,9 @@ static int set_mpeg_start_width(struct drx_demod_instance *demod) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); - u16 fec_oc_comm_mb = 0; struct drx_common_attr *common_attr = (struct drx_common_attr *) NULL; + int rc; + u16 fec_oc_comm_mb = 0; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -3223,12 +3566,20 @@ static int set_mpeg_start_width(struct drx_demod_instance *demod) if ((common_attr->mpeg_cfg.static_clk == true) && (common_attr->mpeg_cfg.enable_parallel == false)) { - RR16(dev_addr, FEC_OC_COMM_MB__A, &fec_oc_comm_mb); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_COMM_MB__A, &fec_oc_comm_mb, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } fec_oc_comm_mb &= ~FEC_OC_COMM_MB_CTL_ON; if (ext_attr->mpeg_start_width == DRXJ_MPEG_START_WIDTH_8CLKCYC) { fec_oc_comm_mb |= FEC_OC_COMM_MB_CTL_ON; } - WR16(dev_addr, FEC_OC_COMM_MB__A, fec_oc_comm_mb); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_COMM_MB__A, fec_oc_comm_mb, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } return (DRX_STS_OK); @@ -3253,6 +3604,7 @@ ctrl_set_cfg_mpeg_output_misc(struct drx_demod_instance *demod, struct drxj_cfg_mpeg_output_misc *cfg_data) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); + int rc; if (cfg_data == NULL) { return (DRX_STS_INVALID_ARG); @@ -3274,10 +3626,26 @@ ctrl_set_cfg_mpeg_output_misc(struct drx_demod_instance *demod, ext_attr->mpeg_output_clock_rate = cfg_data->mpeg_output_clock_rate; ext_attr->mpeg_start_width = cfg_data->mpeg_start_width; /* Don't care what the active standard is, activate setting immediatly */ - CHK_ERROR(set_mpegtei_handling(demod)); - CHK_ERROR(bit_reverse_mpeg_output(demod)); - CHK_ERROR(set_mpeg_output_clock_rate(demod)); - CHK_ERROR(set_mpeg_start_width(demod)); + rc = set_mpegtei_handling(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = bit_reverse_mpeg_output(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_mpeg_output_clock_rate(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_mpeg_start_width(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3303,6 +3671,7 @@ ctrl_get_cfg_mpeg_output_misc(struct drx_demod_instance *demod, struct drxj_cfg_mpeg_output_misc *cfg_data) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); + int rc; u16 data = 0; if (cfg_data == NULL) { @@ -3316,7 +3685,11 @@ ctrl_get_cfg_mpeg_output_misc(struct drx_demod_instance *demod, if (ext_attr->mpeg_output_clock_rate != DRXJ_MPEGOUTPUT_CLOCK_RATE_AUTO) { cfg_data->mpeg_output_clock_rate = ext_attr->mpeg_output_clock_rate; } else { - RR16(demod->my_i2c_dev_addr, FEC_OC_DTO_PERIOD__A, &data); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, FEC_OC_DTO_PERIOD__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } cfg_data->mpeg_output_clock_rate = (enum drxj_mpeg_output_clock_rate) (data + 1); } @@ -3343,14 +3716,27 @@ rw_error: static int ctrl_get_cfg_hw_cfg(struct drx_demod_instance *demod, struct drxj_cfg_hw_cfg *cfg_data) { + int rc; u16 data = 0; if (cfg_data == NULL) return (DRX_STS_INVALID_ARG); - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA); - RR16(demod->my_i2c_dev_addr, SIO_PDR_OHW_CFG__A, &data); - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_OHW_CFG__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } cfg_data->i2c_speed = (enum drxji2c_speed) ((data >> 6) & 0x1); cfg_data->xtal_freq = (enum drxj_xtal_freq) (data & 0x3); @@ -3377,6 +3763,7 @@ rw_error: static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg *uio_cfg) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); + int rc; if ((uio_cfg == NULL) || (demod == NULL)) { return DRX_STS_INVALID_ARG; @@ -3384,7 +3771,11 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg ext_attr = (struct drxj_data *) demod->my_ext_attr; /* Write magic word to enable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (uio_cfg->uio) { /*====================================================================*/ case DRX_UIO1: @@ -3400,7 +3791,11 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg case DRX_UIO_MODE_DISABLE: ext_attr->uio_sma_tx_mode = uio_cfg->mode; /* pad configuration register is set 0 - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, 0); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return DRX_STS_INVALID_ARG; @@ -3419,7 +3814,11 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg case DRX_UIO_MODE_DISABLE: ext_attr->uio_sma_rx_mode = uio_cfg->mode; /* pad configuration register is set 0 - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_RX_CFG__A, 0); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_RX_CFG__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return DRX_STS_INVALID_ARG; @@ -3439,7 +3838,11 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg case DRX_UIO_MODE_DISABLE: ext_attr->uio_gpio_mode = uio_cfg->mode; /* pad configuration register is set 0 - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_GPIO_CFG__A, 0); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_GPIO_CFG__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return DRX_STS_INVALID_ARG; @@ -3457,7 +3860,11 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg break; case DRX_UIO_MODE_DISABLE: /* pad configuration register is set 0 - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_IRQN_CFG__A, 0); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_IRQN_CFG__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->uio_irqn_mode = uio_cfg->mode; break; case DRX_UIO_MODE_FIRMWARE0: /* falltrough */ @@ -3472,7 +3879,11 @@ static int ctrl_set_uio_cfg(struct drx_demod_instance *demod, struct drxuio_cfg } /* switch ( uio_cfg->uio ) */ /* Write magic word to disable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3534,6 +3945,7 @@ static int ctrl_uio_write(struct drx_demod_instance *demod, struct drxuio_data *uio_data) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); + int rc; u16 pin_cfg_value = 0; u16 value = 0; @@ -3544,7 +3956,11 @@ ctrl_uio_write(struct drx_demod_instance *demod, struct drxuio_data *uio_data) ext_attr = (struct drxj_data *) demod->my_ext_attr; /* Write magic word to enable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (uio_data->uio) { /*====================================================================*/ case DRX_UIO1: @@ -3562,17 +3978,29 @@ ctrl_uio_write(struct drx_demod_instance *demod, struct drxuio_data *uio_data) /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - output mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* use corresponding bit in io data output registar */ - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (uio_data->value == false) { value &= 0x7FFF; /* write zero to 15th bit - 1st UIO */ } else { value |= 0x8000; /* write one to 15th bit - 1st UIO */ } /* write back to io data output register */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; /*======================================================================*/ case DRX_UIO2: @@ -3589,17 +4017,29 @@ ctrl_uio_write(struct drx_demod_instance *demod, struct drxuio_data *uio_data) /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - output mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_RX_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_RX_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* use corresponding bit in io data output registar */ - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (uio_data->value == false) { value &= 0xBFFF; /* write zero to 14th bit - 2nd UIO */ } else { value |= 0x4000; /* write one to 14th bit - 2nd UIO */ } /* write back to io data output register */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; /*====================================================================*/ case DRX_UIO3: @@ -3616,17 +4056,29 @@ ctrl_uio_write(struct drx_demod_instance *demod, struct drxuio_data *uio_data) /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - output mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_GPIO_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_GPIO_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* use corresponding bit in io data output registar */ - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_HI__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_HI__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (uio_data->value == false) { value &= 0xFFFB; /* write zero to 2nd bit - 3rd UIO */ } else { value |= 0x0004; /* write one to 2nd bit - 3rd UIO */ } /* write back to io data output register */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_HI__A, value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_HI__A, value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; /*=====================================================================*/ case DRX_UIO4: @@ -3644,17 +4096,29 @@ ctrl_uio_write(struct drx_demod_instance *demod, struct drxuio_data *uio_data) /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - output mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_IRQN_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_IRQN_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* use corresponding bit in io data output registar */ - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (uio_data->value == false) { value &= 0xEFFF; /* write zero to 12th bit - 4th UIO */ } else { value |= 0x1000; /* write one to 12th bit - 4th UIO */ } /* write back to io data output register */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_OUT_LO__A, value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; /*=====================================================================*/ default: @@ -3662,7 +4126,11 @@ ctrl_uio_write(struct drx_demod_instance *demod, struct drxuio_data *uio_data) } /* switch ( uio_data->uio ) */ /* Write magic word to disable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3679,6 +4147,7 @@ rw_error: static int ctrl_uio_read(struct drx_demod_instance *demod, struct drxuio_data *uio_data) { struct drxj_data *ext_attr = (struct drxj_data *) (NULL); + int rc; u16 pin_cfg_value = 0; u16 value = 0; @@ -3689,7 +4158,11 @@ static int ctrl_uio_read(struct drx_demod_instance *demod, struct drxuio_data *u ext_attr = (struct drxj_data *) demod->my_ext_attr; /* Write magic word to enable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (uio_data->uio) { /*====================================================================*/ case DRX_UIO1: @@ -3707,9 +4180,17 @@ static int ctrl_uio_read(struct drx_demod_instance *demod, struct drxuio_data *u /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_LO__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_LO__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((value & 0x8000) != 0) { /* check 15th bit - 1st UIO */ uio_data->value = true; } else { @@ -3732,9 +4213,17 @@ static int ctrl_uio_read(struct drx_demod_instance *demod, struct drxuio_data *u /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_RX_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_RX_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_LO__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_LO__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((value & 0x4000) != 0) { /* check 14th bit - 2nd UIO */ uio_data->value = true; @@ -3758,10 +4247,18 @@ static int ctrl_uio_read(struct drx_demod_instance *demod, struct drxuio_data *u /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_GPIO_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_GPIO_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* read io input data registar */ - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_HI__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_HI__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((value & 0x0004) != 0) { /* check 2nd bit - 3rd UIO */ uio_data->value = true; } else { @@ -3784,10 +4281,18 @@ static int ctrl_uio_read(struct drx_demod_instance *demod, struct drxuio_data *u /* io_pad_cfg_drive is set to power 2 (23 mA) */ /* write to io pad configuration register - input mode */ - WR16(demod->my_i2c_dev_addr, SIO_PDR_IRQN_CFG__A, pin_cfg_value); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_IRQN_CFG__A, pin_cfg_value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* read io input data registar */ - RR16(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_LO__A, &value); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SIO_PDR_UIO_IN_LO__A, &value, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((value & 0x1000) != 0) { /* check 12th bit - 4th UIO */ uio_data->value = true; } else { @@ -3800,7 +4305,11 @@ static int ctrl_uio_read(struct drx_demod_instance *demod, struct drxuio_data *u } /* switch ( uio_data->uio ) */ /* Write magic word to disable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3860,34 +4369,67 @@ ctrl_i2c_bridge(struct drx_demod_instance *demod, bool *bridge_closed) */ static int smart_ant_init(struct drx_demod_instance *demod) { - u16 data = 0; struct drxj_data *ext_attr = NULL; struct i2c_device_addr *dev_addr = NULL; struct drxuio_cfg uio_cfg = { DRX_UIO1, DRX_UIO_MODE_FIRMWARE_SMA }; + int rc; + u16 data = 0; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; /* Write magic word to enable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* init smart antenna */ - RR16(dev_addr, SIO_SA_TX_COMMAND__A, &data); - if (ext_attr->smart_ant_inverted) - WR16(dev_addr, SIO_SA_TX_COMMAND__A, - (data | SIO_SA_TX_COMMAND_TX_INVERT__M) - | SIO_SA_TX_COMMAND_TX_ENABLE__M); + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_SA_TX_COMMAND__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + if (ext_attr->smart_ant_inverted){ + + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_SA_TX_COMMAND__A, (data | SIO_SA_TX_COMMAND_TX_INVERT__M) | SIO_SA_TX_COMMAND_TX_ENABLE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } else - WR16(dev_addr, SIO_SA_TX_COMMAND__A, - (data & (~SIO_SA_TX_COMMAND_TX_INVERT__M)) - | SIO_SA_TX_COMMAND_TX_ENABLE__M); + { + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_SA_TX_COMMAND__A, (data & (~SIO_SA_TX_COMMAND_TX_INVERT__M)) | SIO_SA_TX_COMMAND_TX_ENABLE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } /* config SMA_TX pin to smart antenna mode */ - CHK_ERROR(ctrl_set_uio_cfg(demod, &uio_cfg)); - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, 0x13); - WR16(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_GPIO_FNC__A, 0x03); + rc = ctrl_set_uio_cfg(demod, &uio_cfg); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_CFG__A, 0x13, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_PDR_SMA_TX_GPIO_FNC__A, 0x03, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write magic word to disable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3906,8 +4448,9 @@ ctrl_set_cfg_smart_ant(struct drx_demod_instance *demod, struct drxj_cfg_smart_a { struct drxj_data *ext_attr = NULL; struct i2c_device_addr *dev_addr = NULL; - u16 data = 0; + int rc; u32 start_time = 0; + u16 data = 0; static bool bit_inverted; dev_addr = demod->my_i2c_dev_addr; @@ -3920,12 +4463,20 @@ ctrl_set_cfg_smart_ant(struct drx_demod_instance *demod, struct drxj_cfg_smart_a if (bit_inverted != ext_attr->smart_ant_inverted || ext_attr->uio_sma_tx_mode != DRX_UIO_MODE_FIRMWARE_SMA) { - CHK_ERROR(smart_ant_init(demod)); + rc = smart_ant_init(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } bit_inverted = ext_attr->smart_ant_inverted; } /* Write magic word to enable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (smart_ant->io) { case DRXJ_SMT_ANT_OUTPUT: @@ -3936,7 +4487,11 @@ ctrl_set_cfg_smart_ant(struct drx_demod_instance *demod, struct drxj_cfg_smart_a */ start_time = drxbsp_hst_clock(); do { - RR16(dev_addr, SIO_SA_TX_STATUS__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_SA_TX_STATUS__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } while ((data & SIO_SA_TX_STATUS_BUSY__M) && ((drxbsp_hst_clock() - start_time) < DRXJ_MAX_WAITTIME)); @@ -3946,30 +4501,33 @@ ctrl_set_cfg_smart_ant(struct drx_demod_instance *demod, struct drxj_cfg_smart_a } /* write to smart antenna configuration register */ - WR16(dev_addr, SIO_SA_TX_DATA0__A, 0x9200 - | ((smart_ant->ctrl_data & 0x0001) << 8) - | ((smart_ant->ctrl_data & 0x0002) << 10) - | ((smart_ant->ctrl_data & 0x0004) << 12) - ); - WR16(dev_addr, SIO_SA_TX_DATA1__A, 0x4924 - | ((smart_ant->ctrl_data & 0x0008) >> 2) - | ((smart_ant->ctrl_data & 0x0010)) - | ((smart_ant->ctrl_data & 0x0020) << 2) - | ((smart_ant->ctrl_data & 0x0040) << 4) - | ((smart_ant->ctrl_data & 0x0080) << 6) - ); - WR16(dev_addr, SIO_SA_TX_DATA2__A, 0x2492 - | ((smart_ant->ctrl_data & 0x0100) >> 8) - | ((smart_ant->ctrl_data & 0x0200) >> 6) - | ((smart_ant->ctrl_data & 0x0400) >> 4) - | ((smart_ant->ctrl_data & 0x0800) >> 2) - | ((smart_ant->ctrl_data & 0x1000)) - | ((smart_ant->ctrl_data & 0x2000) << 2) - ); - WR16(dev_addr, SIO_SA_TX_DATA3__A, 0xff8d); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_SA_TX_DATA0__A, 0x9200 | ((smart_ant->ctrl_data & 0x0001) << 8) | ((smart_ant->ctrl_data & 0x0002) << 10) | ((smart_ant->ctrl_data & 0x0004) << 12), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_SA_TX_DATA1__A, 0x4924 | ((smart_ant->ctrl_data & 0x0008) >> 2) | ((smart_ant->ctrl_data & 0x0010)) | ((smart_ant->ctrl_data & 0x0020) << 2) | ((smart_ant->ctrl_data & 0x0040) << 4) | ((smart_ant->ctrl_data & 0x0080) << 6), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_SA_TX_DATA2__A, 0x2492 | ((smart_ant->ctrl_data & 0x0100) >> 8) | ((smart_ant->ctrl_data & 0x0200) >> 6) | ((smart_ant->ctrl_data & 0x0400) >> 4) | ((smart_ant->ctrl_data & 0x0800) >> 2) | ((smart_ant->ctrl_data & 0x1000)) | ((smart_ant->ctrl_data & 0x2000) << 2), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_SA_TX_DATA3__A, 0xff8d, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* trigger the sending */ - WR16(dev_addr, SIO_SA_TX_LENGTH__A, 56); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_SA_TX_LENGTH__A, 56, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRXJ_SMT_ANT_INPUT: @@ -3982,7 +4540,11 @@ ctrl_set_cfg_smart_ant(struct drx_demod_instance *demod, struct drxj_cfg_smart_a return (DRX_STS_INVALID_ARG); } /* Write magic word to enable pdr reg write */ - WR16(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -3991,30 +4553,55 @@ rw_error: static int scu_command(struct i2c_device_addr *dev_addr, struct drxjscu_cmd *cmd) { - u16 cur_cmd = 0; + int rc; u32 start_time = 0; + u16 cur_cmd = 0; /* Check param */ if (cmd == NULL) return (DRX_STS_INVALID_ARG); /* Wait until SCU command interface is ready to receive command */ - RR16(dev_addr, SCU_RAM_COMMAND__A, &cur_cmd); + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_COMMAND__A, &cur_cmd, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (cur_cmd != DRX_SCU_READY) { return (DRX_STS_ERROR); } switch (cmd->parameter_len) { case 5: - WR16(dev_addr, SCU_RAM_PARAM_4__A, *(cmd->parameter + 4)); /* fallthrough */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_PARAM_4__A, *(cmd->parameter + 4), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 4: - WR16(dev_addr, SCU_RAM_PARAM_3__A, *(cmd->parameter + 3)); /* fallthrough */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_PARAM_3__A, *(cmd->parameter + 3), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 3: - WR16(dev_addr, SCU_RAM_PARAM_2__A, *(cmd->parameter + 2)); /* fallthrough */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_PARAM_2__A, *(cmd->parameter + 2), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 2: - WR16(dev_addr, SCU_RAM_PARAM_1__A, *(cmd->parameter + 1)); /* fallthrough */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_PARAM_1__A, *(cmd->parameter + 1), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 1: - WR16(dev_addr, SCU_RAM_PARAM_0__A, *(cmd->parameter + 0)); /* fallthrough */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_PARAM_0__A, *(cmd->parameter + 0), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 0: /* do nothing */ break; @@ -4022,12 +4609,20 @@ static int scu_command(struct i2c_device_addr *dev_addr, struct drxjscu_cmd *cmd /* this number of parameters is not supported */ return (DRX_STS_ERROR); } - WR16(dev_addr, SCU_RAM_COMMAND__A, cmd->command); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_COMMAND__A, cmd->command, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Wait until SCU has processed command */ start_time = drxbsp_hst_clock(); do { - RR16(dev_addr, SCU_RAM_COMMAND__A, &cur_cmd); + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_COMMAND__A, &cur_cmd, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } while (!(cur_cmd == DRX_SCU_READY) && ((drxbsp_hst_clock() - start_time) < DRXJ_MAX_WAITTIME)); @@ -4041,13 +4636,29 @@ static int scu_command(struct i2c_device_addr *dev_addr, struct drxjscu_cmd *cmd switch (cmd->result_len) { case 4: - RR16(dev_addr, SCU_RAM_PARAM_3__A, cmd->result + 3); /* fallthrough */ + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_PARAM_3__A, cmd->result + 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 3: - RR16(dev_addr, SCU_RAM_PARAM_2__A, cmd->result + 2); /* fallthrough */ + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_PARAM_2__A, cmd->result + 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 2: - RR16(dev_addr, SCU_RAM_PARAM_1__A, cmd->result + 1); /* fallthrough */ + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_PARAM_1__A, cmd->result + 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 1: - RR16(dev_addr, SCU_RAM_PARAM_0__A, cmd->result + 0); /* fallthrough */ + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_PARAM_0__A, cmd->result + 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* fallthrough */ case 0: /* do nothing */ break; @@ -4099,6 +4710,7 @@ int drxj_dap_scu_atomic_read_write_block(struct i2c_device_addr *dev_addr, u32 a u8 *data, bool read_flag) { struct drxjscu_cmd scu_cmd; + int rc; u16 set_param_parameters[15]; u16 cmd_result[15]; @@ -4131,7 +4743,11 @@ int drxj_dap_scu_atomic_read_write_block(struct i2c_device_addr *dev_addr, u32 a SCU_RAM_COMMAND_CMD_AUX_SCU_ATOMIC_ACCESS; scu_cmd.result = cmd_result; scu_cmd.parameter = set_param_parameters; - CHK_ERROR(scu_command(dev_addr, &scu_cmd)); + rc = scu_command(dev_addr, &scu_cmd); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (read_flag == true) { int i = 0; @@ -4218,28 +4834,53 @@ ctrl_i2c_write_read(struct drx_demod_instance *demod, struct drxi2c_data *i2c_da */ static int adc_sync_measurement(struct drx_demod_instance *demod, u16 *count) { - u16 data = 0; struct i2c_device_addr *dev_addr = NULL; + int rc; + u16 data = 0; dev_addr = demod->my_i2c_dev_addr; /* Start measurement */ - WR16(dev_addr, IQM_AF_COMM_EXEC__A, IQM_AF_COMM_EXEC_ACTIVE); - WR16(dev_addr, IQM_AF_START_LOCK__A, 1); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_COMM_EXEC__A, IQM_AF_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_START_LOCK__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Wait at least 3*128*(1/sysclk) <<< 1 millisec */ - CHK_ERROR(drxbsp_hst_sleep(1)); + rc = drxbsp_hst_sleep(1); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } *count = 0; - RR16(dev_addr, IQM_AF_PHASE0__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_PHASE0__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (data == 127) { *count = *count + 1; } - RR16(dev_addr, IQM_AF_PHASE1__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_PHASE1__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (data == 127) { *count = *count + 1; } - RR16(dev_addr, IQM_AF_PHASE2__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_PHASE2__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (data == 127) { *count = *count + 1; } @@ -4263,23 +4904,40 @@ rw_error: static int adc_synchronization(struct drx_demod_instance *demod) { - u16 count = 0; struct i2c_device_addr *dev_addr = NULL; + int rc; + u16 count = 0; dev_addr = demod->my_i2c_dev_addr; - CHK_ERROR(adc_sync_measurement(demod, &count)); + rc = adc_sync_measurement(demod, &count); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (count == 1) { /* Try sampling on a diffrent edge */ u16 clk_neg = 0; - RR16(dev_addr, IQM_AF_CLKNEG__A, &clk_neg); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_CLKNEG__A, &clk_neg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } clk_neg ^= IQM_AF_CLKNEG_CLKNEGDATA__M; - WR16(dev_addr, IQM_AF_CLKNEG__A, clk_neg); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_CLKNEG__A, clk_neg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(adc_sync_measurement(demod, &count)); + rc = adc_sync_measurement(demod, &count); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } if (count < 2) { @@ -4300,11 +4958,16 @@ rw_error: */ static int iqm_set_af(struct drx_demod_instance *demod, bool active) { - u16 data = 0; struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; + u16 data = 0; /* Configure IQM */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (!active) { data &= ((~IQM_AF_STDBY_STDBY_ADC_A2_ACTIVE) & (~IQM_AF_STDBY_STDBY_AMP_A2_ACTIVE) @@ -4319,7 +4982,11 @@ static int iqm_set_af(struct drx_demod_instance *demod, bool active) | IQM_AF_STDBY_STDBY_TAGC_IF_A2_ACTIVE | IQM_AF_STDBY_STDBY_TAGC_RF_A2_ACTIVE); } - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -4341,6 +5008,7 @@ ctrl_set_cfg_pdr_safe_mode(struct drx_demod_instance *demod, bool *enable) { struct drxj_data *ext_attr = NULL; struct i2c_device_addr *dev_addr = NULL; + int rc; if (enable == NULL) return (DRX_STS_INVALID_ARG); @@ -4349,87 +5017,215 @@ ctrl_set_cfg_pdr_safe_mode(struct drx_demod_instance *demod, bool *enable) ext_attr = (struct drxj_data *) demod->my_ext_attr; /* Write magic word to enable pdr reg write */ - WR16(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (*enable == true) { bool bridge_enabled = false; /* MPEG pins to input */ - WR16(dev_addr, SIO_PDR_MSTRT_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MERR_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MCLK_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MVAL_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD0_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD1_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD2_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD3_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD4_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD5_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD6_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_MD7_CFG__A, DRXJ_PIN_SAFE_MODE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MSTRT_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MERR_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MCLK_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MVAL_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD0_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD1_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD2_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD3_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD4_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD5_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD6_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_MD7_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PD_I2C_SDA2 Bridge off, Port2 Inactive PD_I2C_SCL2 Bridge off, Port2 Inactive */ - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_enabled)); - WR16(dev_addr, SIO_PDR_I2C_SDA2_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_I2C_SCL2_CFG__A, DRXJ_PIN_SAFE_MODE); + rc = ctrl_i2c_bridge(demod, &bridge_enabled); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2C_SDA2_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2C_SCL2_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PD_GPIO Store and set to input PD_VSYNC Store and set to input PD_SMA_RX Store and set to input PD_SMA_TX Store and set to input */ - RR16(dev_addr, SIO_PDR_GPIO_CFG__A, - &ext_attr->pdr_safe_restore_val_gpio); - RR16(dev_addr, SIO_PDR_VSYNC_CFG__A, - &ext_attr->pdr_safe_restore_val_v_sync); - RR16(dev_addr, SIO_PDR_SMA_RX_CFG__A, - &ext_attr->pdr_safe_restore_val_sma_rx); - RR16(dev_addr, SIO_PDR_SMA_TX_CFG__A, - &ext_attr->pdr_safe_restore_val_sma_tx); - WR16(dev_addr, SIO_PDR_GPIO_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_VSYNC_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_SMA_RX_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_SMA_TX_CFG__A, DRXJ_PIN_SAFE_MODE); + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_PDR_GPIO_CFG__A, &ext_attr->pdr_safe_restore_val_gpio, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_PDR_VSYNC_CFG__A, &ext_attr->pdr_safe_restore_val_v_sync, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_PDR_SMA_RX_CFG__A, &ext_attr->pdr_safe_restore_val_sma_rx, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_PDR_SMA_TX_CFG__A, &ext_attr->pdr_safe_restore_val_sma_tx, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_GPIO_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_VSYNC_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_SMA_RX_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_SMA_TX_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PD_RF_AGC Analog DAC outputs, cannot be set to input or tristate! PD_IF_AGC Analog DAC outputs, cannot be set to input or tristate! */ - CHK_ERROR(iqm_set_af(demod, false)); + rc = iqm_set_af(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PD_CVBS Analog DAC output, standby mode PD_SIF Analog DAC output, standby mode */ - WR16(dev_addr, ATV_TOP_STDBY__A, - (ATV_TOP_STDBY_SIF_STDBY_STANDBY & - (~ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE))); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STDBY__A, (ATV_TOP_STDBY_SIF_STDBY_STANDBY & (~ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE)), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PD_I2S_CL Input PD_I2S_DA Input PD_I2S_WS Input */ - WR16(dev_addr, SIO_PDR_I2S_CL_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_I2S_DA_CFG__A, DRXJ_PIN_SAFE_MODE); - WR16(dev_addr, SIO_PDR_I2S_WS_CFG__A, DRXJ_PIN_SAFE_MODE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2S_CL_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2S_DA_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2S_WS_CFG__A, DRXJ_PIN_SAFE_MODE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { /* No need to restore MPEG pins; is done in SetStandard/SetChannel */ /* PD_I2C_SDA2 Port2 active PD_I2C_SCL2 Port2 active */ - WR16(dev_addr, SIO_PDR_I2C_SDA2_CFG__A, - SIO_PDR_I2C_SDA2_CFG__PRE); - WR16(dev_addr, SIO_PDR_I2C_SCL2_CFG__A, - SIO_PDR_I2C_SCL2_CFG__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2C_SDA2_CFG__A, SIO_PDR_I2C_SDA2_CFG__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2C_SCL2_CFG__A, SIO_PDR_I2C_SCL2_CFG__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PD_GPIO Restore PD_VSYNC Restore PD_SMA_RX Restore PD_SMA_TX Restore */ - WR16(dev_addr, SIO_PDR_GPIO_CFG__A, - ext_attr->pdr_safe_restore_val_gpio); - WR16(dev_addr, SIO_PDR_VSYNC_CFG__A, - ext_attr->pdr_safe_restore_val_v_sync); - WR16(dev_addr, SIO_PDR_SMA_RX_CFG__A, - ext_attr->pdr_safe_restore_val_sma_rx); - WR16(dev_addr, SIO_PDR_SMA_TX_CFG__A, - ext_attr->pdr_safe_restore_val_sma_tx); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_GPIO_CFG__A, ext_attr->pdr_safe_restore_val_gpio, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_VSYNC_CFG__A, ext_attr->pdr_safe_restore_val_v_sync, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_SMA_RX_CFG__A, ext_attr->pdr_safe_restore_val_sma_rx, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_SMA_TX_CFG__A, ext_attr->pdr_safe_restore_val_sma_tx, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PD_RF_AGC, PD_IF_AGC No need to restore; will be restored in SetStandard/SetChannel */ @@ -4442,7 +5238,11 @@ ctrl_set_cfg_pdr_safe_mode(struct drx_demod_instance *demod, bool *enable) } /* Write magic word to disable pdr reg write */ - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->pdr_safe_mode = *enable; return (DRX_STS_OK); @@ -4534,6 +5334,7 @@ static int init_agc(struct drx_demod_instance *demod) struct drxj_data *ext_attr = NULL; struct drxj_cfg_agc *p_agc_rf_settings = NULL; struct drxj_cfg_agc *p_agc_if_settings = NULL; + int rc; u16 ingain_tgt_max = 0; u16 clp_dir_to = 0; u16 sns_sum_max = 0; @@ -4549,6 +5350,7 @@ static int init_agc(struct drx_demod_instance *demod) u16 clp_ctrl_mode = 0; u16 agc_rf = 0; u16 agc_if = 0; + dev_addr = demod->my_i2c_dev_addr; common_attr = (struct drx_common_attr *) demod->my_common_attr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -4566,19 +5368,71 @@ static int init_agc(struct drx_demod_instance *demod) ki_min = 0x0117; ingain_tgt_max = 16383; clp_ctrl_mode = 0; - WR16(dev_addr, SCU_RAM_AGC_KI_MINGAIN__A, 0x7fff); - WR16(dev_addr, SCU_RAM_AGC_KI_MAXGAIN__A, 0x0); - WR16(dev_addr, SCU_RAM_AGC_CLP_SUM__A, 0); - WR16(dev_addr, SCU_RAM_AGC_CLP_CYCCNT__A, 0); - WR16(dev_addr, SCU_RAM_AGC_CLP_DIR_WD__A, 0); - WR16(dev_addr, SCU_RAM_AGC_CLP_DIR_STP__A, 1); - WR16(dev_addr, SCU_RAM_AGC_SNS_SUM__A, 0); - WR16(dev_addr, SCU_RAM_AGC_SNS_CYCCNT__A, 0); - WR16(dev_addr, SCU_RAM_AGC_SNS_DIR_WD__A, 0); - WR16(dev_addr, SCU_RAM_AGC_SNS_DIR_STP__A, 1); - WR16(dev_addr, SCU_RAM_AGC_INGAIN__A, 1024); - WR16(dev_addr, SCU_RAM_VSB_AGC_POW_TGT__A, 22600); - WR16(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, 13200); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_MINGAIN__A, 0x7fff, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_MAXGAIN__A, 0x0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_SUM__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_CYCCNT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_DIR_WD__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_DIR_STP__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_SUM__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_CYCCNT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_DIR_WD__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_DIR_STP__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN__A, 1024, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_VSB_AGC_POW_TGT__A, 22600, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, 13200, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } p_agc_if_settings = &(ext_attr->vsb_if_agc_cfg); p_agc_rf_settings = &(ext_attr->vsb_rf_agc_cfg); break; @@ -4597,23 +5451,75 @@ static int init_agc(struct drx_demod_instance *demod) agc_kiDgain = 0x7; ki_min = 0x0117; clp_ctrl_mode = 0; - WR16(dev_addr, SCU_RAM_AGC_KI_MINGAIN__A, 0x7fff); - WR16(dev_addr, SCU_RAM_AGC_KI_MAXGAIN__A, 0x0); - WR16(dev_addr, SCU_RAM_AGC_CLP_SUM__A, 0); - WR16(dev_addr, SCU_RAM_AGC_CLP_CYCCNT__A, 0); - WR16(dev_addr, SCU_RAM_AGC_CLP_DIR_WD__A, 0); - WR16(dev_addr, SCU_RAM_AGC_CLP_DIR_STP__A, 1); - WR16(dev_addr, SCU_RAM_AGC_SNS_SUM__A, 0); - WR16(dev_addr, SCU_RAM_AGC_SNS_CYCCNT__A, 0); - WR16(dev_addr, SCU_RAM_AGC_SNS_DIR_WD__A, 0); - WR16(dev_addr, SCU_RAM_AGC_SNS_DIR_STP__A, 1); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_MINGAIN__A, 0x7fff, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_MAXGAIN__A, 0x0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_SUM__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_CYCCNT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_DIR_WD__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_DIR_STP__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_SUM__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_CYCCNT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_DIR_WD__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_DIR_STP__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } p_agc_if_settings = &(ext_attr->qam_if_agc_cfg); p_agc_rf_settings = &(ext_attr->qam_rf_agc_cfg); - WR16(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - RR16(dev_addr, SCU_RAM_AGC_KI__A, &agc_ki); + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_AGC_KI__A, &agc_ki, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } agc_ki &= 0xf000; - WR16(dev_addr, SCU_RAM_AGC_KI__A, agc_ki); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI__A, agc_ki, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif #ifndef DRXJ_DIGITAL_ONLY @@ -4631,7 +5537,11 @@ static int init_agc(struct drx_demod_instance *demod) clp_ctrl_mode = 1; p_agc_if_settings = &(ext_attr->atv_if_agc_cfg); p_agc_rf_settings = &(ext_attr->atv_rf_agc_cfg); - WR16(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_NTSC: case DRX_STANDARD_PAL_SECAM_BG: @@ -4650,7 +5560,11 @@ static int init_agc(struct drx_demod_instance *demod) p_agc_rf_settings = &(ext_attr->atv_rf_agc_cfg); sns_dir_to = (u16) (-9); clp_ctrl_mode = 1; - WR16(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_PAL_SECAM_L: case DRX_STANDARD_PAL_SECAM_LP: @@ -4667,7 +5581,11 @@ static int init_agc(struct drx_demod_instance *demod) clp_ctrl_mode = 1; p_agc_if_settings = &(ext_attr->atv_if_agc_cfg); p_agc_rf_settings = &(ext_attr->atv_rf_agc_cfg); - WR16(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN_TGT__A, p_agc_if_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif default: @@ -4675,32 +5593,136 @@ static int init_agc(struct drx_demod_instance *demod) } /* for new AGC interface */ - WR16(dev_addr, SCU_RAM_AGC_INGAIN_TGT_MIN__A, p_agc_if_settings->top); - WR16(dev_addr, SCU_RAM_AGC_INGAIN__A, p_agc_if_settings->top); /* Gain fed from inner to outer AGC */ - WR16(dev_addr, SCU_RAM_AGC_INGAIN_TGT_MAX__A, ingain_tgt_max); - WR16(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT_MIN__A, if_iaccu_hi_tgt_min); - WR16(dev_addr, SCU_RAM_AGC_IF_IACCU_HI__A, 0); /* set to p_agc_settings->top before */ - WR16(dev_addr, SCU_RAM_AGC_IF_IACCU_LO__A, 0); - WR16(dev_addr, SCU_RAM_AGC_RF_IACCU_HI__A, 0); - WR16(dev_addr, SCU_RAM_AGC_RF_IACCU_LO__A, 0); - WR16(dev_addr, SCU_RAM_AGC_RF_MAX__A, 32767); - WR16(dev_addr, SCU_RAM_AGC_CLP_SUM_MAX__A, clp_sum_max); - WR16(dev_addr, SCU_RAM_AGC_SNS_SUM_MAX__A, sns_sum_max); - WR16(dev_addr, SCU_RAM_AGC_KI_INNERGAIN_MIN__A, ki_innergain_min); - WR16(dev_addr, SCU_RAM_AGC_FAST_SNS_CTRL_DELAY__A, 50); - WR16(dev_addr, SCU_RAM_AGC_KI_CYCLEN__A, 500); - WR16(dev_addr, SCU_RAM_AGC_SNS_CYCLEN__A, 500); - WR16(dev_addr, SCU_RAM_AGC_KI_MAXMINGAIN_TH__A, 20); - WR16(dev_addr, SCU_RAM_AGC_KI_MIN__A, ki_min); - WR16(dev_addr, SCU_RAM_AGC_KI_MAX__A, ki_max); - WR16(dev_addr, SCU_RAM_AGC_KI_RED__A, 0); - WR16(dev_addr, SCU_RAM_AGC_CLP_SUM_MIN__A, 8); - WR16(dev_addr, SCU_RAM_AGC_CLP_CYCLEN__A, 500); - WR16(dev_addr, SCU_RAM_AGC_CLP_DIR_TO__A, clp_dir_to); - WR16(dev_addr, SCU_RAM_AGC_SNS_SUM_MIN__A, 8); - WR16(dev_addr, SCU_RAM_AGC_SNS_DIR_TO__A, sns_dir_to); - WR16(dev_addr, SCU_RAM_AGC_FAST_CLP_CTRL_DELAY__A, 50); - WR16(dev_addr, SCU_RAM_AGC_CLP_CTRL_MODE__A, clp_ctrl_mode); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN_TGT_MIN__A, p_agc_if_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN__A, p_agc_if_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Gain fed from inner to outer AGC */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_INGAIN_TGT_MAX__A, ingain_tgt_max, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT_MIN__A, if_iaccu_hi_tgt_min, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_IF_IACCU_HI__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* set to p_agc_settings->top before */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_IF_IACCU_LO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_RF_IACCU_HI__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_RF_IACCU_LO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_RF_MAX__A, 32767, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_SUM_MAX__A, clp_sum_max, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_SUM_MAX__A, sns_sum_max, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_INNERGAIN_MIN__A, ki_innergain_min, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_FAST_SNS_CTRL_DELAY__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_CYCLEN__A, 500, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_CYCLEN__A, 500, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_MAXMINGAIN_TH__A, 20, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_MIN__A, ki_min, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_MAX__A, ki_max, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI_RED__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_SUM_MIN__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_CYCLEN__A, 500, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_DIR_TO__A, clp_dir_to, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_SUM_MIN__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_SNS_DIR_TO__A, sns_dir_to, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_FAST_CLP_CTRL_DELAY__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_CLP_CTRL_MODE__A, clp_ctrl_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } agc_rf = 0x800 + p_agc_rf_settings->cut_off_current; if (common_attr->tuner_rf_agc_pol == true) { @@ -4712,14 +5734,30 @@ static int init_agc(struct drx_demod_instance *demod) agc_rf = 0x87ff - agc_rf; } - WR16(dev_addr, IQM_AF_AGC_RF__A, agc_rf); - WR16(dev_addr, IQM_AF_AGC_IF__A, agc_if); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_AGC_RF__A, agc_rf, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_AGC_IF__A, agc_if, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Set/restore Ki DGAIN factor */ - RR16(dev_addr, SCU_RAM_AGC_KI__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_DGAIN__M; data |= (agc_kiDgain << SCU_RAM_AGC_KI_DGAIN__B); - WR16(dev_addr, SCU_RAM_AGC_KI__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_AGC_KI__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -4740,6 +5778,7 @@ set_frequency(struct drx_demod_instance *demod, { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; struct drxj_data *ext_attr = demod->my_ext_attr; + int rc; s32 sampling_frequency = 0; s32 frequency_shift = 0; s32 if_freq_actual = 0; @@ -4814,7 +5853,11 @@ set_frequency(struct drx_demod_instance *demod, /* Program frequency shifter with tuner offset compensation */ /* frequency_shift += tuner_freq_offset; TODO */ - WR32(dev_addr, IQM_FS_RATE_OFS_LO__A, iqm_fs_rate_ofs); + rc = DRXJ_DAP.write_reg32func(dev_addr, IQM_FS_RATE_OFS_LO__A, iqm_fs_rate_ofs, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->iqm_fs_rate_ofs = iqm_fs_rate_ofs; ext_attr->pos_image = (bool) (rf_mirror ^ tuner_mirror ^ select_pos_image); @@ -4841,6 +5884,7 @@ rw_error: static int get_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; u16 rf_gain = 0; u16 if_gain = 0; u16 if_agc_sns = 0; @@ -4848,9 +5892,17 @@ static int get_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) u16 rf_agc_max = 0; u16 rf_agc_min = 0; - RR16(dev_addr, IQM_AF_AGC_IF__A, &if_gain); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_AGC_IF__A, &if_gain, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if_gain &= IQM_AF_AGC_IF__M; - RR16(dev_addr, IQM_AF_AGC_RF__A, &rf_gain); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_AGC_RF__A, &rf_gain, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } rf_gain &= IQM_AF_AGC_RF__M; if_agc_sns = DRXJ_AGC_SNS; @@ -4862,18 +5914,27 @@ static int get_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) if (rf_gain > rf_agc_max) *sig_strength = 100; else if (rf_gain > rf_agc_min) { - CHK_ZERO(rf_agc_max - rf_agc_min); + if (rf_agc_max == rf_agc_min) { + pr_err("error: rf_agc_max == rf_agc_min\n"); + return DRX_STS_ERROR;; + } *sig_strength = 75 + 25 * (rf_gain - rf_agc_min) / (rf_agc_max - rf_agc_min); } else *sig_strength = 75; } else if (if_gain > if_agc_sns) { - CHK_ZERO(if_agc_top - if_agc_sns); + if (if_agc_top == if_agc_sns) { + pr_err("error: if_agc_top == if_agc_sns\n"); + return DRX_STS_ERROR;; + } *sig_strength = 20 + 55 * (if_gain - if_agc_sns) / (if_agc_top - if_agc_sns); } else { - CHK_ZERO(if_agc_sns); + if (!if_agc_sns) { + pr_err("error: if_agc_sns is zero!\n"); + return DRX_STS_ERROR;; + } *sig_strength = (20 * if_gain / if_agc_sns); } @@ -4895,6 +5956,7 @@ rw_error: #ifdef DRXJ_SIGNAL_ACCUM_ERR static int get_acc_pkt_err(struct drx_demod_instance *demod, u16 *packet_err) { + int rc; static u16 pkt_err; static u16 last_pkt_err; u16 data = 0; @@ -4904,7 +5966,11 @@ static int get_acc_pkt_err(struct drx_demod_instance *demod, u16 *packet_err) ext_attr = (struct drxj_data *) demod->my_ext_attr; dev_addr = demod->my_i2c_dev_addr; - RR16(dev_addr, SCU_RAM_FEC_ACCUM_PKT_FAILURES__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_FEC_ACCUM_PKT_FAILURES__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (ext_attr->reset_pkt_err_acc == true) { last_pkt_err = data; pkt_err = 0; @@ -4938,12 +6004,17 @@ static int ctrl_set_cfg_reset_pkt_err(struct drx_demod_instance *demod) { #ifdef DRXJ_SIGNAL_ACCUM_ERR struct drxj_data *ext_attr = NULL; + int rc; u16 packet_error = 0; ext_attr = (struct drxj_data *) demod->my_ext_attr; ext_attr->reset_pkt_err_acc = true; /* call to reset counter */ - CHK_ERROR(get_acc_pkt_err(demod, &packet_error)); + rc = get_acc_pkt_err(demod, &packet_error); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -4958,13 +6029,18 @@ rw_error: */ static int get_str_freq_offset(struct drx_demod_instance *demod, s32 *str_freq) { + int rc; u32 symbol_frequency_ratio = 0; u32 symbol_nom_frequency_ratio = 0; struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; struct drxj_data *ext_attr = demod->my_ext_attr; - ARR32(dev_addr, IQM_RC_RATE_LO__A, &symbol_frequency_ratio); + rc = drxj_dap_atomic_read_reg32(dev_addr, IQM_RC_RATE_LO__A, &symbol_frequency_ratio, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } symbol_nom_frequency_ratio = ext_attr->iqm_rc_rate_ofs; if (symbol_frequency_ratio > symbol_nom_frequency_ratio) @@ -5001,6 +6077,7 @@ static int get_ctl_freq_offset(struct drx_demod_instance *demod, s32 *ctl_freq) struct drxj_data *ext_attr = NULL; struct drx_common_attr *common_attr = NULL; struct i2c_device_addr *dev_addr = NULL; + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -5010,7 +6087,11 @@ static int get_ctl_freq_offset(struct drx_demod_instance *demod, s32 *ctl_freq) /* both registers are sign extended */ nominal_frequency = ext_attr->iqm_fs_rate_ofs; - ARR32(dev_addr, IQM_FS_RATE_LO__A, (u32 *)¤t_frequency); + rc = drxj_dap_atomic_read_reg32(dev_addr, IQM_FS_RATE_LO__A, (u32 *)¤t_frequency, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (ext_attr->pos_image == true) { /* negative image */ @@ -5052,6 +6133,7 @@ set_agc_rf(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, struct drxj_data *ext_attr = NULL; struct drxj_cfg_agc *p_agc_settings = NULL; struct drx_common_attr *common_attr = NULL; + int rc; drx_write_reg16func_t scu_wr16 = NULL; drx_read_reg16func_t scu_rr16 = NULL; @@ -5079,13 +6161,24 @@ set_agc_rf(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, case DRX_AGC_CTRL_AUTO: /* Enable RF AGC DAC */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data |= IQM_AF_STDBY_STDBY_TAGC_RF_A2_ACTIVE; - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Enable SCU RF AGC loop */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_RF__M; if (ext_attr->standard == DRX_STANDARD_8VSB) { data |= (2 << SCU_RAM_AGC_KI_RF__B); @@ -5100,20 +6193,24 @@ set_agc_rf(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, } else { data &= ~SCU_RAM_AGC_KI_INV_RF_POL__M; } - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_KI__A, data, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_KI__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Set speed ( using complementary reduction value ) */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI_RED__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI_RED__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_RED_RAGC_RED__M; - CHK_ERROR((*scu_wr16) (dev_addr, SCU_RAM_AGC_KI_RED__A, - (~ - (agc_settings-> - speed << - SCU_RAM_AGC_KI_RED_RAGC_RED__B) -& SCU_RAM_AGC_KI_RED_RAGC_RED__M) - | data, 0)); + rc = (*scu_wr16) (dev_addr, SCU_RAM_AGC_KI_RED__A,(~(agc_settings->speed << SCU_RAM_AGC_KI_RED_RAGC_RED__B) & SCU_RAM_AGC_KI_RED_RAGC_RED__M) | data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (agc_settings->standard == DRX_STANDARD_8VSB) p_agc_settings = &(ext_attr->vsb_if_agc_cfg); @@ -5126,58 +6223,92 @@ set_agc_rf(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, /* Set TOP, only if IF-AGC is in AUTO mode */ if (p_agc_settings->ctrl_mode == DRX_AGC_CTRL_AUTO) { - CHK_ERROR((*scu_wr16) - (dev_addr, - SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, - agc_settings->top, 0)); - CHK_ERROR((*scu_wr16) - (dev_addr, - SCU_RAM_AGC_IF_IACCU_HI_TGT__A, - agc_settings->top, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, agc_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT__A, agc_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* Cut-Off current */ - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_RF_IACCU_HI_CO__A, - agc_settings->cut_off_current, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_RF_IACCU_HI_CO__A, agc_settings->cut_off_current, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_AGC_CTRL_USER: /* Enable RF AGC DAC */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data |= IQM_AF_STDBY_STDBY_TAGC_RF_A2_ACTIVE; - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Disable SCU RF AGC loop */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_RF__M; if (common_attr->tuner_rf_agc_pol) { data |= SCU_RAM_AGC_KI_INV_RF_POL__M; } else { data &= ~SCU_RAM_AGC_KI_INV_RF_POL__M; } - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_KI__A, data, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_KI__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write value to output pin */ - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_RF_IACCU_HI__A, - agc_settings->output_level, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_RF_IACCU_HI__A, agc_settings->output_level, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_AGC_CTRL_OFF: /* Disable RF AGC DAC */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= (~IQM_AF_STDBY_STDBY_TAGC_RF_A2_ACTIVE); - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Disable SCU RF AGC loop */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_RF__M; - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_KI__A, data, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_KI__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return (DRX_STS_INVALID_ARG); @@ -5229,6 +6360,7 @@ get_agc_rf(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings) struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; enum drx_standard standard = DRX_STANDARD_UNKNOWN; + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -5268,8 +6400,11 @@ get_agc_rf(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings) DRXJ_ISQAMSTD(agc_settings->standard)) || (DRXJ_ISATVSTD(ext_attr->standard) && DRXJ_ISATVSTD(agc_settings->standard))) { - SARR16(dev_addr, SCU_RAM_AGC_RF_IACCU_HI__A, - &(agc_settings->output_level)); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_AGC_RF_IACCU_HI__A, &(agc_settings->output_level), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } return (DRX_STS_OK); @@ -5293,6 +6428,7 @@ set_agc_if(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, struct drx_common_attr *common_attr = NULL; drx_write_reg16func_t scu_wr16 = NULL; drx_read_reg16func_t scu_rr16 = NULL; + int rc; common_attr = (struct drx_common_attr *) demod->my_common_attr; dev_addr = demod->my_i2c_dev_addr; @@ -5317,13 +6453,24 @@ set_agc_if(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, switch (agc_settings->ctrl_mode) { case DRX_AGC_CTRL_AUTO: /* Enable IF AGC DAC */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data |= IQM_AF_STDBY_STDBY_TAGC_IF_A2_ACTIVE; - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Enable SCU IF AGC loop */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_IF_AGC_DISABLE__M; data &= ~SCU_RAM_AGC_KI_IF__M; if (ext_attr->standard == DRX_STANDARD_8VSB) { @@ -5339,20 +6486,24 @@ set_agc_if(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, } else { data &= ~SCU_RAM_AGC_KI_INV_IF_POL__M; } - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_KI__A, data, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_KI__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Set speed (using complementary reduction value) */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI_RED__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI_RED__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_RED_IAGC_RED__M; - CHK_ERROR((*scu_wr16) (dev_addr, SCU_RAM_AGC_KI_RED__A, - (~ - (agc_settings-> - speed << - SCU_RAM_AGC_KI_RED_IAGC_RED__B) -& SCU_RAM_AGC_KI_RED_IAGC_RED__M) - | data, 0)); + rc = (*scu_wr16) (dev_addr, SCU_RAM_AGC_KI_RED__A, (~(agc_settings->speed << SCU_RAM_AGC_KI_RED_IAGC_RED__B) & SCU_RAM_AGC_KI_RED_IAGC_RED__M) | data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (agc_settings->standard == DRX_STANDARD_8VSB) p_agc_settings = &(ext_attr->vsb_rf_agc_cfg); @@ -5365,36 +6516,51 @@ set_agc_if(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, /* Restore TOP */ if (p_agc_settings->ctrl_mode == DRX_AGC_CTRL_AUTO) { - CHK_ERROR((*scu_wr16) - (dev_addr, - SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, - p_agc_settings->top, 0)); - CHK_ERROR((*scu_wr16) - (dev_addr, - SCU_RAM_AGC_IF_IACCU_HI_TGT__A, - p_agc_settings->top, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, p_agc_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT__A, p_agc_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { - CHK_ERROR((*scu_wr16) - (dev_addr, - SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, - 0, 0)); - CHK_ERROR((*scu_wr16) - (dev_addr, - SCU_RAM_AGC_IF_IACCU_HI_TGT__A, 0, - 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } break; case DRX_AGC_CTRL_USER: /* Enable IF AGC DAC */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data |= IQM_AF_STDBY_STDBY_TAGC_IF_A2_ACTIVE; - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Disable SCU IF AGC loop */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_IF_AGC_DISABLE__M; data |= SCU_RAM_AGC_KI_IF_AGC_DISABLE__M; if (common_attr->tuner_if_agc_pol) { @@ -5402,38 +6568,59 @@ set_agc_if(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings, } else { data &= ~SCU_RAM_AGC_KI_INV_IF_POL__M; } - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_KI__A, data, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_KI__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write value to output pin */ - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, - agc_settings->output_level, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_IF_IACCU_HI_TGT_MAX__A, agc_settings->output_level, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_AGC_CTRL_OFF: /* Disable If AGC DAC */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= (~IQM_AF_STDBY_STDBY_TAGC_IF_A2_ACTIVE); - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Disable SCU IF AGC loop */ - CHK_ERROR((*scu_rr16) - (dev_addr, SCU_RAM_AGC_KI__A, &data, 0)); + rc = (*scu_rr16)(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= ~SCU_RAM_AGC_KI_IF_AGC_DISABLE__M; data |= SCU_RAM_AGC_KI_IF_AGC_DISABLE__M; - CHK_ERROR((*scu_wr16) - (dev_addr, SCU_RAM_AGC_KI__A, data, 0)); + rc = (*scu_wr16)(dev_addr, SCU_RAM_AGC_KI__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return (DRX_STS_INVALID_ARG); } /* switch ( agcsettings->ctrl_mode ) */ /* always set the top to support configurations without if-loop */ - CHK_ERROR((*scu_wr16) (dev_addr, - SCU_RAM_AGC_INGAIN_TGT_MIN__A, - agc_settings->top, 0)); + rc = (*scu_wr16) (dev_addr, SCU_RAM_AGC_INGAIN_TGT_MIN__A, agc_settings->top, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* Store if agc settings */ @@ -5481,6 +6668,7 @@ get_agc_if(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings) struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; enum drx_standard standard = DRX_STANDARD_UNKNOWN; + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -5521,8 +6709,11 @@ get_agc_if(struct drx_demod_instance *demod, struct drxj_cfg_agc *agc_settings) (DRXJ_ISATVSTD(ext_attr->standard) && DRXJ_ISATVSTD(agc_settings->standard))) { /* read output level */ - SARR16(dev_addr, SCU_RAM_AGC_IF_IACCU_HI__A, - &(agc_settings->output_level)); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_AGC_IF_IACCU_HI__A, &(agc_settings->output_level), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } return (DRX_STS_OK); @@ -5541,11 +6732,16 @@ static int set_iqm_af(struct drx_demod_instance *demod, bool active) { u16 data = 0; struct i2c_device_addr *dev_addr = NULL; + int rc; dev_addr = demod->my_i2c_dev_addr; /* Configure IQM */ - RR16(dev_addr, IQM_AF_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (!active) { data &= ((~IQM_AF_STDBY_STDBY_ADC_A2_ACTIVE) & (~IQM_AF_STDBY_STDBY_AMP_A2_ACTIVE) @@ -5561,7 +6757,11 @@ static int set_iqm_af(struct drx_demod_instance *demod, bool active) | IQM_AF_STDBY_STDBY_TAGC_IF_A2_ACTIVE | IQM_AF_STDBY_STDBY_TAGC_RF_A2_ACTIVE); } - WR16(dev_addr, IQM_AF_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -5594,8 +6794,9 @@ static int power_down_vsb(struct drx_demod_instance *demod, bool primary) /* *parameter */ NULL, /* *result */ NULL }; - u16 cmd_result = 0; struct drx_cfg_mpeg_output cfg_mpeg_output; + int rc; + u16 cmd_result = 0; /* STOP demodulator @@ -5607,24 +6808,68 @@ static int power_down_vsb(struct drx_demod_instance *demod, bool primary) cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* stop all comm_exec */ - WR16(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP); - WR16(dev_addr, VSB_COMM_EXEC__A, VSB_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_COMM_EXEC__A, VSB_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (primary == true) { - WR16(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_STOP); - CHK_ERROR(set_iqm_af(demod, false)); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_iqm_af(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { - WR16(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP); - WR16(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } cfg_mpeg_output.enable_mpeg_output = false; - CHK_ERROR(ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output)); + rc = ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -5640,6 +6885,7 @@ rw_error: static int set_vsb_leak_n_gain(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = NULL; + int rc; const u8 vsb_ffe_leak_gain_ram0[] = { DRXJ_16TO8(0x8), /* FFETRAINLKRATIO1 */ @@ -5830,10 +7076,16 @@ static int set_vsb_leak_n_gain(struct drx_demod_instance *demod) }; dev_addr = demod->my_i2c_dev_addr; - WRB(dev_addr, VSB_SYSCTRL_RAM0_FFETRAINLKRATIO1__A, - sizeof(vsb_ffe_leak_gain_ram0), ((u8 *)vsb_ffe_leak_gain_ram0)); - WRB(dev_addr, VSB_SYSCTRL_RAM1_FIRRCA1GAIN9__A, - sizeof(vsb_ffe_leak_gain_ram1), ((u8 *)vsb_ffe_leak_gain_ram1)); + rc = DRXJ_DAP.write_block_func(dev_addr, VSB_SYSCTRL_RAM0_FFETRAINLKRATIO1__A, sizeof(vsb_ffe_leak_gain_ram0), ((u8 *)vsb_ffe_leak_gain_ram0), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, VSB_SYSCTRL_RAM1_FIRRCA1GAIN9__A, sizeof(vsb_ffe_leak_gain_ram1), ((u8 *)vsb_ffe_leak_gain_ram1), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -5850,11 +7102,12 @@ rw_error: static int set_vsb(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = NULL; - u16 cmd_result = 0; - u16 cmd_param = 0; + int rc; struct drx_common_attr *common_attr = NULL; struct drxjscu_cmd cmd_scu; struct drxj_data *ext_attr = NULL; + u16 cmd_result = 0; + u16 cmd_param = 0; const u8 vsb_taps_re[] = { DRXJ_16TO8(-2), /* re0 */ DRXJ_16TO8(4), /* re1 */ @@ -5891,13 +7144,41 @@ static int set_vsb(struct drx_demod_instance *demod) ext_attr = (struct drxj_data *) demod->my_ext_attr; /* stop all comm_exec */ - WR16(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP); - WR16(dev_addr, VSB_COMM_EXEC__A, VSB_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP); - WR16(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_COMM_EXEC__A, VSB_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* reset demodulator */ cmd_scu.command = SCU_RAM_COMMAND_STANDARD_VSB @@ -5906,105 +7187,313 @@ static int set_vsb(struct drx_demod_instance *demod) cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, IQM_AF_DCF_BYPASS__A, 1); - WR16(dev_addr, IQM_FS_ADJ_SEL__A, IQM_FS_ADJ_SEL_B_VSB); - WR16(dev_addr, IQM_RC_ADJ_SEL__A, IQM_RC_ADJ_SEL_B_VSB); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_DCF_BYPASS__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_ADJ_SEL__A, IQM_FS_ADJ_SEL_B_VSB, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_ADJ_SEL__A, IQM_RC_ADJ_SEL_B_VSB, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->iqm_rc_rate_ofs = 0x00AD0D79; - WR32(dev_addr, IQM_RC_RATE_OFS_LO__A, ext_attr->iqm_rc_rate_ofs); - WR16(dev_addr, VSB_TOP_CFAGC_GAINSHIFT__A, 4); - WR16(dev_addr, VSB_TOP_CYGN1TRK__A, 1); - - WR16(dev_addr, IQM_RC_CROUT_ENA__A, 1); - WR16(dev_addr, IQM_RC_STRETCH__A, 28); - WR16(dev_addr, IQM_RT_ACTIVE__A, 0); - WR16(dev_addr, IQM_CF_SYMMETRIC__A, 0); - WR16(dev_addr, IQM_CF_MIDTAP__A, 3); - WR16(dev_addr, IQM_CF_OUT_ENA__A, IQM_CF_OUT_ENA_VSB__M); - WR16(dev_addr, IQM_CF_SCALE__A, 1393); - WR16(dev_addr, IQM_CF_SCALE_SH__A, 0); - WR16(dev_addr, IQM_CF_POW_MEAS_LEN__A, 1); - - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(vsb_taps_re), - ((u8 *)vsb_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(vsb_taps_re), - ((u8 *)vsb_taps_re)); - - WR16(dev_addr, VSB_TOP_BNTHRESH__A, 330); /* set higher threshold */ - WR16(dev_addr, VSB_TOP_CLPLASTNUM__A, 90); /* burst detection on */ - WR16(dev_addr, VSB_TOP_SNRTH_RCA1__A, 0x0042); /* drop thresholds by 1 dB */ - WR16(dev_addr, VSB_TOP_SNRTH_RCA2__A, 0x0053); /* drop thresholds by 2 dB */ - WR16(dev_addr, VSB_TOP_EQCTRL__A, 0x1); /* cma on */ - WR16(dev_addr, SCU_RAM_GPIO__A, 0); /* GPIO */ + rc = DRXJ_DAP.write_reg32func(dev_addr, IQM_RC_RATE_OFS_LO__A, ext_attr->iqm_rc_rate_ofs, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_CFAGC_GAINSHIFT__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_CYGN1TRK__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_CROUT_ENA__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_STRETCH__A, 28, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_ACTIVE__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_SYMMETRIC__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_OUT_ENA__A, IQM_CF_OUT_ENA_VSB__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_SCALE__A, 1393, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_SCALE_SH__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_POW_MEAS_LEN__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(vsb_taps_re), ((u8 *)vsb_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(vsb_taps_re), ((u8 *)vsb_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_BNTHRESH__A, 330, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* set higher threshold */ + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_CLPLASTNUM__A, 90, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* burst detection on */ + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_SNRTH_RCA1__A, 0x0042, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* drop thresholds by 1 dB */ + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_SNRTH_RCA2__A, 0x0053, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* drop thresholds by 2 dB */ + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_EQCTRL__A, 0x1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* cma on */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_GPIO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* GPIO */ /* Initialize the FEC Subsystem */ - WR16(dev_addr, FEC_TOP_ANNEX__A, FEC_TOP_ANNEX_D); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_TOP_ANNEX__A, FEC_TOP_ANNEX_D, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } { u16 fec_oc_snc_mode = 0; - RR16(dev_addr, FEC_OC_SNC_MODE__A, &fec_oc_snc_mode); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_SNC_MODE__A, &fec_oc_snc_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* output data even when not locked */ - WR16(dev_addr, FEC_OC_SNC_MODE__A, - fec_oc_snc_mode | FEC_OC_SNC_MODE_UNLOCK_ENABLE__M); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_SNC_MODE__A, fec_oc_snc_mode | FEC_OC_SNC_MODE_UNLOCK_ENABLE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* set clip */ - WR16(dev_addr, IQM_AF_CLP_LEN__A, 0); - WR16(dev_addr, IQM_AF_CLP_TH__A, 470); - WR16(dev_addr, IQM_AF_SNS_LEN__A, 0); - WR16(dev_addr, VSB_TOP_SNRTH_PT__A, 0xD4); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_CLP_LEN__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_CLP_TH__A, 470, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_SNS_LEN__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_SNRTH_PT__A, 0xD4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* no transparent, no A&C framing; parity is set in mpegoutput */ { u16 fec_oc_reg_mode = 0; - RR16(dev_addr, FEC_OC_MODE__A, &fec_oc_reg_mode); - WR16(dev_addr, FEC_OC_MODE__A, fec_oc_reg_mode & - (~(FEC_OC_MODE_TRANSPARENT__M - | FEC_OC_MODE_CLEAR__M | FEC_OC_MODE_RETAIN_FRAMING__M) - )); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_MODE__A, &fec_oc_reg_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_MODE__A, fec_oc_reg_mode & (~(FEC_OC_MODE_TRANSPARENT__M | FEC_OC_MODE_CLEAR__M | FEC_OC_MODE_RETAIN_FRAMING__M)), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } - WR16(dev_addr, FEC_DI_TIMEOUT_LO__A, 0); /* timeout counter for restarting */ - WR16(dev_addr, FEC_DI_TIMEOUT_HI__A, 3); - WR16(dev_addr, FEC_RS_MODE__A, 0); /* bypass disabled */ + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_DI_TIMEOUT_LO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* timeout counter for restarting */ + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_DI_TIMEOUT_HI__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_RS_MODE__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* bypass disabled */ /* initialize RS packet error measurement parameters */ - WR16(dev_addr, FEC_RS_MEASUREMENT_PERIOD__A, FEC_RS_MEASUREMENT_PERIOD); - WR16(dev_addr, FEC_RS_MEASUREMENT_PRESCALE__A, - FEC_RS_MEASUREMENT_PRESCALE); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_RS_MEASUREMENT_PERIOD__A, FEC_RS_MEASUREMENT_PERIOD, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_RS_MEASUREMENT_PRESCALE__A, FEC_RS_MEASUREMENT_PRESCALE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* init measurement period of MER/SER */ - WR16(dev_addr, VSB_TOP_MEASUREMENT_PERIOD__A, - VSB_TOP_MEASUREMENT_PERIOD); - WR32(dev_addr, SCU_RAM_FEC_ACCUM_CW_CORRECTED_LO__A, 0); - WR16(dev_addr, SCU_RAM_FEC_MEAS_COUNT__A, 0); - WR16(dev_addr, SCU_RAM_FEC_ACCUM_PKT_FAILURES__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_MEASUREMENT_PERIOD__A, VSB_TOP_MEASUREMENT_PERIOD, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg32func(dev_addr, SCU_RAM_FEC_ACCUM_CW_CORRECTED_LO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_FEC_MEAS_COUNT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_FEC_ACCUM_PKT_FAILURES__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, VSB_TOP_CKGN1TRK__A, 128); + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_CKGN1TRK__A, 128, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* B-Input to ADC, PGA+filter in standby */ if (ext_attr->has_lna == false) { - WR16(dev_addr, IQM_AF_AMUX__A, 0x02); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_AMUX__A, 0x02, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } }; /* turn on IQMAF. It has to be in front of setAgc**() */ - CHK_ERROR(set_iqm_af(demod, true)); - CHK_ERROR(adc_synchronization(demod)); + rc = set_iqm_af(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = adc_synchronization(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(init_agc(demod)); - CHK_ERROR(set_agc_if(demod, &(ext_attr->vsb_if_agc_cfg), false)); - CHK_ERROR(set_agc_rf(demod, &(ext_attr->vsb_rf_agc_cfg), false)); + rc = init_agc(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_agc_if(demod, &(ext_attr->vsb_if_agc_cfg), false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_agc_rf(demod, &(ext_attr->vsb_rf_agc_cfg), false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } { /* TODO fix this, store a struct drxj_cfg_afe_gain structure in struct drxj_data instead of only the gain */ struct drxj_cfg_afe_gain vsb_pga_cfg = { DRX_STANDARD_8VSB, 0 }; vsb_pga_cfg.gain = ext_attr->vsb_pga_cfg; - CHK_ERROR(ctrl_set_cfg_afe_gain(demod, &vsb_pga_cfg)); + rc = ctrl_set_cfg_afe_gain(demod, &vsb_pga_cfg); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = ctrl_set_cfg_pre_saw(demod, &(ext_attr->vsb_pre_saw_cfg)); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - CHK_ERROR(ctrl_set_cfg_pre_saw(demod, &(ext_attr->vsb_pre_saw_cfg))); /* Mpeg output has to be in front of FEC active */ - CHK_ERROR(set_mpegtei_handling(demod)); - CHK_ERROR(bit_reverse_mpeg_output(demod)); - CHK_ERROR(set_mpeg_start_width(demod)); + rc = set_mpegtei_handling(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = bit_reverse_mpeg_output(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_mpeg_start_width(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } { /* TODO: move to set_standard after hardware reset value problem is solved */ /* Configure initial MPEG output */ @@ -6020,7 +7509,11 @@ static int set_vsb(struct drx_demod_instance *demod) cfg_mpeg_output.invert_clk = common_attr->mpeg_cfg.invert_clk; cfg_mpeg_output.static_clk = common_attr->mpeg_cfg.static_clk; cfg_mpeg_output.bitrate = common_attr->mpeg_cfg.bitrate; - CHK_ERROR(ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output)); + rc = ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* TBD: what parameters should be set */ @@ -6031,30 +7524,81 @@ static int set_vsb(struct drx_demod_instance *demod) cmd_scu.result_len = 1; cmd_scu.parameter = &cmd_param; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); - - WR16(dev_addr, VSB_TOP_BEAGC_GAINSHIFT__A, 0x0004); - WR16(dev_addr, VSB_TOP_SNRTH_PT__A, 0x00D2); - WR16(dev_addr, VSB_TOP_SYSSMTRNCTRL__A, VSB_TOP_SYSSMTRNCTRL__PRE - | VSB_TOP_SYSSMTRNCTRL_NCOTIMEOUTCNTEN__M); - WR16(dev_addr, VSB_TOP_BEDETCTRL__A, 0x142); - WR16(dev_addr, VSB_TOP_LBAGCREFLVL__A, 640); - WR16(dev_addr, VSB_TOP_CYGN1ACQ__A, 4); - WR16(dev_addr, VSB_TOP_CYGN1TRK__A, 2); - WR16(dev_addr, VSB_TOP_CYGN2TRK__A, 3); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - /* start demodulator */ - cmd_scu.command = SCU_RAM_COMMAND_STANDARD_VSB - | SCU_RAM_COMMAND_CMD_DEMOD_START; + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_BEAGC_GAINSHIFT__A, 0x0004, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_SNRTH_PT__A, 0x00D2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_SYSSMTRNCTRL__A, VSB_TOP_SYSSMTRNCTRL__PRE | VSB_TOP_SYSSMTRNCTRL_NCOTIMEOUTCNTEN__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_BEDETCTRL__A, 0x142, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_LBAGCREFLVL__A, 640, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_CYGN1ACQ__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_CYGN1TRK__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_CYGN2TRK__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + /* start demodulator */ + cmd_scu.command = SCU_RAM_COMMAND_STANDARD_VSB + | SCU_RAM_COMMAND_CMD_DEMOD_START; cmd_scu.parameter_len = 0; cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_ACTIVE); - WR16(dev_addr, VSB_COMM_EXEC__A, VSB_COMM_EXEC_ACTIVE); - WR16(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_COMM_EXEC__A, VSB_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6068,13 +7612,18 @@ rw_error: */ static int get_vsb_post_rs_pck_err(struct i2c_device_addr *dev_addr, u16 *pck_errs) { + int rc; u16 data = 0; u16 period = 0; u16 prescale = 0; u16 packet_errorsMant = 0; u16 packet_errorsExp = 0; - RR16(dev_addr, FEC_RS_NR_FAILURES__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_RS_NR_FAILURES__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } packet_errorsMant = data & FEC_RS_NR_FAILURES_FIXED_MANT__M; packet_errorsExp = (data & FEC_RS_NR_FAILURES_EXP__M) >> FEC_RS_NR_FAILURES_EXP__B; @@ -6082,7 +7631,10 @@ static int get_vsb_post_rs_pck_err(struct i2c_device_addr *dev_addr, u16 *pck_er prescale = FEC_RS_MEASUREMENT_PRESCALE; /* packet error rate = (error packet number) per second */ /* 77.3 us is time for per packet */ - CHK_ZERO(period * prescale); + if (period * prescale == 0) { + pr_err("error: period and/or prescale is zero!\n"); + return DRX_STS_ERROR;; + } *pck_errs = (u16) frac_times1e6(packet_errorsMant * (1 << packet_errorsExp), (period * prescale * 77)); @@ -6099,13 +7651,18 @@ rw_error: */ static int get_vs_bpost_viterbi_ber(struct i2c_device_addr *dev_addr, u32 *ber) { + int rc; u16 data = 0; u16 period = 0; u16 prescale = 0; u16 bit_errors_mant = 0; u16 bit_errors_exp = 0; - RR16(dev_addr, FEC_RS_NR_BIT_ERRORS__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_RS_NR_BIT_ERRORS__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } period = FEC_RS_MEASUREMENT_PERIOD; prescale = FEC_RS_MEASUREMENT_PRESCALE; @@ -6116,7 +7673,10 @@ static int get_vs_bpost_viterbi_ber(struct i2c_device_addr *dev_addr, u32 *ber) if (((bit_errors_mant << bit_errors_exp) >> 3) > 68700) *ber = 26570; else { - CHK_ZERO(period * prescale); + if (period * prescale == 0) { + pr_err("error: period and/or prescale is zero!\n"); + return DRX_STS_ERROR;; + } *ber = frac_times1e6(bit_errors_mant << ((bit_errors_exp > @@ -6138,8 +7698,13 @@ rw_error: static int get_vs_bpre_viterbi_ber(struct i2c_device_addr *dev_addr, u32 *ber) { u16 data = 0; + int rc; - RR16(dev_addr, VSB_TOP_NR_SYM_ERRS__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, VSB_TOP_NR_SYM_ERRS__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } *ber = frac_times1e6(data, VSB_TOP_MEASUREMENT_PERIOD * SYMBOLS_PER_SEGMENT); @@ -6156,13 +7721,18 @@ rw_error: */ static int get_vsb_symb_err(struct i2c_device_addr *dev_addr, u32 *ser) { + int rc; u16 data = 0; u16 period = 0; u16 prescale = 0; u16 symb_errors_mant = 0; u16 symb_errors_exp = 0; - RR16(dev_addr, FEC_RS_NR_SYMBOL_ERRORS__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_RS_NR_SYMBOL_ERRORS__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } period = FEC_RS_MEASUREMENT_PERIOD; prescale = FEC_RS_MEASUREMENT_PRESCALE; @@ -6170,7 +7740,10 @@ static int get_vsb_symb_err(struct i2c_device_addr *dev_addr, u32 *ser) symb_errors_exp = (data & FEC_RS_NR_SYMBOL_ERRORS_EXP__M) >> FEC_RS_NR_SYMBOL_ERRORS_EXP__B; - CHK_ZERO(period * prescale); + if (period * prescale == 0) { + pr_err("error: period and/or prescale is zero!\n"); + return DRX_STS_ERROR;; + } *ser = (u32) frac_times1e6((symb_errors_mant << symb_errors_exp) * 1000, (period * prescale * 77318)); @@ -6186,9 +7759,14 @@ rw_error: */ static int get_vsbmer(struct i2c_device_addr *dev_addr, u16 *mer) { + int rc; u16 data_hi = 0; - RR16(dev_addr, VSB_TOP_ERR_ENERGY_H__A, &data_hi); + rc = DRXJ_DAP.read_reg16func(dev_addr, VSB_TOP_ERR_ENERGY_H__A, &data_hi, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } *mer = (u16) (log1_times100(21504) - log1_times100((data_hi << 6) / 52)); @@ -6210,6 +7788,7 @@ static int ctrl_get_vsb_constel(struct drx_demod_instance *demod, struct drx_complex *complex_nr) { struct i2c_device_addr *dev_addr = NULL; + int rc; /**< device address */ u16 vsb_top_comm_mb = 0; /**< VSB SL MB configuration */ u16 vsb_top_comm_mbInit = 0; /**< VSB SL MB intial configuration */ @@ -6224,21 +7803,41 @@ ctrl_get_vsb_constel(struct drx_demod_instance *demod, struct drx_complex *compl /* Needs to be checked when external interface PG is updated */ /* Configure MB (Monitor bus) */ - RR16(dev_addr, VSB_TOP_COMM_MB__A, &vsb_top_comm_mbInit); + rc = DRXJ_DAP.read_reg16func(dev_addr, VSB_TOP_COMM_MB__A, &vsb_top_comm_mbInit, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* set observe flag & MB mux */ vsb_top_comm_mb = (vsb_top_comm_mbInit | VSB_TOP_COMM_MB_OBS_OBS_ON | VSB_TOP_COMM_MB_MUX_OBS_VSB_TCMEQ_2); - WR16(dev_addr, VSB_TOP_COMM_MB__A, vsb_top_comm_mb); + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_COMM_MB__A, vsb_top_comm_mb, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Enable MB grabber in the FEC OC */ - WR16(dev_addr, FEC_OC_OCR_MODE__A, FEC_OC_OCR_MODE_GRAB_ENABLE__M); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_OCR_MODE__A, FEC_OC_OCR_MODE_GRAB_ENABLE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Disable MB grabber in the FEC OC */ - WR16(dev_addr, FEC_OC_OCR_MODE__A, 0x0); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_OCR_MODE__A, 0x0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* read data */ - RR32(dev_addr, FEC_OC_OCR_GRAB_RD1__A, &data); + rc = DRXJ_DAP.read_reg32func(dev_addr, FEC_OC_OCR_GRAB_RD1__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } re = (u16) (((data >> 10) & 0x300) | ((data >> 2) & 0xff)); if (re & 0x0200) { re |= 0xfc00; @@ -6247,7 +7846,11 @@ ctrl_get_vsb_constel(struct drx_demod_instance *demod, struct drx_complex *compl complex_nr->im = 0; /* Restore MB (Monitor bus) */ - WR16(dev_addr, VSB_TOP_COMM_MB__A, vsb_top_comm_mbInit); + rc = DRXJ_DAP.write_reg16func(dev_addr, VSB_TOP_COMM_MB__A, vsb_top_comm_mbInit, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6279,17 +7882,26 @@ static int power_down_qam(struct drx_demod_instance *demod, bool primary) /* *parameter */ NULL, /* *result */ NULL }; - u16 cmd_result = 0; + int rc; struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; struct drx_cfg_mpeg_output cfg_mpeg_output; + u16 cmd_result = 0; /* STOP demodulator resets IQM, QAM and FEC HW blocks */ /* stop all comm_exec */ - WR16(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP); - WR16(dev_addr, QAM_COMM_EXEC__A, QAM_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_COMM_EXEC__A, QAM_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } cmd_scu.command = SCU_RAM_COMMAND_STANDARD_QAM | SCU_RAM_COMMAND_CMD_DEMOD_STOP; @@ -6297,21 +7909,57 @@ static int power_down_qam(struct drx_demod_instance *demod, bool primary) cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (primary == true) { - WR16(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_STOP); - CHK_ERROR(set_iqm_af(demod, false)); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_iqm_af(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { - WR16(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP); - WR16(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } cfg_mpeg_output.enable_mpeg_output = false; - CHK_ERROR(ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output)); + rc = ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6343,6 +7991,7 @@ set_qam_measurement(struct drx_demod_instance *demod, { struct i2c_device_addr *dev_addr = NULL; /* device address for I2C writes */ struct drxj_data *ext_attr = NULL; /* Global data container for DRXJ specif data */ + int rc; u32 fec_bits_desired = 0; /* BER accounting period */ u16 fec_rs_plen = 0; /* defines RS BER measurement period */ u16 fec_rs_prescale = 0; /* ReedSolomon Measurement Prescale */ @@ -6401,7 +8050,10 @@ set_qam_measurement(struct drx_demod_instance *demod, ext_attr->fec_rs_plen = fec_rs_plen; /* for getSigQual */ fec_rs_bit_cnt = fec_rs_prescale * fec_rs_plen; /* temp storage */ - CHK_ZERO(fec_rs_bit_cnt); + if (fec_rs_bit_cnt == 0) { + pr_err("error: fec_rs_bit_cnt is zero!\n"); + return DRX_STS_ERROR;; + } fec_rs_period = fec_bits_desired / fec_rs_bit_cnt + 1; /* ceil */ if (ext_attr->standard != DRX_STANDARD_ITU_B) fec_oc_snc_fail_period = fec_rs_period; @@ -6433,14 +8085,38 @@ set_qam_measurement(struct drx_demod_instance *demod, return (DRX_STS_INVALID_ARG); } - WR16(dev_addr, FEC_OC_SNC_FAIL_PERIOD__A, (u16) fec_oc_snc_fail_period); - WR16(dev_addr, FEC_RS_MEASUREMENT_PERIOD__A, (u16) fec_rs_period); - WR16(dev_addr, FEC_RS_MEASUREMENT_PRESCALE__A, fec_rs_prescale); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_SNC_FAIL_PERIOD__A, (u16)fec_oc_snc_fail_period, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_RS_MEASUREMENT_PERIOD__A, (u16)fec_rs_period, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_RS_MEASUREMENT_PRESCALE__A, fec_rs_prescale, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->fec_rs_period = (u16) fec_rs_period; ext_attr->fec_rs_prescale = fec_rs_prescale; - WR32(dev_addr, SCU_RAM_FEC_ACCUM_CW_CORRECTED_LO__A, 0); - WR16(dev_addr, SCU_RAM_FEC_MEAS_COUNT__A, 0); - WR16(dev_addr, SCU_RAM_FEC_ACCUM_PKT_FAILURES__A, 0); + rc = DRXJ_DAP.write_reg32func(dev_addr, SCU_RAM_FEC_ACCUM_CW_CORRECTED_LO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_FEC_MEAS_COUNT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_FEC_ACCUM_PKT_FAILURES__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (ext_attr->standard == DRX_STANDARD_ITU_B) { /* Parameters for Viterbi Decoder */ @@ -6471,7 +8147,10 @@ set_qam_measurement(struct drx_demod_instance *demod, default: return (DRX_STS_INVALID_ARG); } - CHK_ZERO(qam_vd_period); + if (qam_vd_period == 0) { + pr_err("error: qam_vd_period is zero!\n"); + return DRX_STS_ERROR;; + } qam_vd_period = fec_bits_desired / qam_vd_period; /* limit to max 16 bit value (I2C register width) if needed */ if (qam_vd_period > 0xFFFF) @@ -6480,9 +8159,16 @@ set_qam_measurement(struct drx_demod_instance *demod, /* a(16 bit) * b(16 bit) = 32 bit result => mult32 not needed */ qam_vd_bit_cnt *= qam_vd_period; - WR16(dev_addr, QAM_VD_MEASUREMENT_PERIOD__A, - (u16) qam_vd_period); - WR16(dev_addr, QAM_VD_MEASUREMENT_PRESCALE__A, qam_vd_prescale); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_VD_MEASUREMENT_PERIOD__A, (u16)qam_vd_period, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_VD_MEASUREMENT_PRESCALE__A, qam_vd_prescale, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->qam_vd_period = (u16) qam_vd_period; ext_attr->qam_vd_prescale = qam_vd_prescale; } @@ -6503,6 +8189,7 @@ rw_error: static int set_qam16(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; const u8 qam_dq_qual_fun[] = { DRXJ_16TO8(2), /* fun0 */ DRXJ_16TO8(2), /* fun1 */ @@ -6520,52 +8207,206 @@ static int set_qam16(struct drx_demod_instance *demod) DRXJ_16TO8(13517), /* RAD5 */ }; - WRB(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), - ((u8 *)qam_dq_qual_fun)); - WRB(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), - ((u8 *)qam_eq_cma_rad)); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 140); - WR16(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 50); - WR16(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 120); - WR16(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 230); - WR16(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 95); - WR16(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 105); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40); - WR16(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 56); - WR16(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3); - - WR16(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 16); - WR16(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 220); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 25); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 6); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16) (-24)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, (u16) (-65)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16) (-127)); - - WR16(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 20); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 10); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 50); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 32); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 240); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 32); - - WR16(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 40960); + rc = DRXJ_DAP.write_block_func(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), ((u8 *)qam_dq_qual_fun), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), ((u8 *)qam_eq_cma_rad), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 140, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 120, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 230, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 95, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 105, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 56, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 220, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 25, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 6, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16)(-24), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, (u16)(-65), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16)(-127), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 20, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 32, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 240, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 32, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 40960, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6583,6 +8424,7 @@ rw_error: static int set_qam32(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; const u8 qam_dq_qual_fun[] = { DRXJ_16TO8(3), /* fun0 */ DRXJ_16TO8(3), /* fun1 */ @@ -6600,52 +8442,206 @@ static int set_qam32(struct drx_demod_instance *demod) DRXJ_16TO8(6707), /* RAD5 */ }; - WRB(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), - ((u8 *)qam_dq_qual_fun)); - WRB(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), - ((u8 *)qam_eq_cma_rad)); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 90); - WR16(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 50); - WR16(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100); - WR16(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 170); - WR16(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80); - WR16(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 100); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40); - WR16(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 56); - WR16(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3); - - WR16(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 12); - WR16(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 140); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, (u16) (-8)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, (u16) (-16)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16) (-26)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, (u16) (-56)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16) (-86)); - - WR16(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 20); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 10); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 50); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 32); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 176); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 8); - - WR16(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 20480); + rc = DRXJ_DAP.write_block_func(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), ((u8 *)qam_dq_qual_fun), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), ((u8 *)qam_eq_cma_rad), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 90, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 170, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 100, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 56, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 140, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, (u16)(-8), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, (u16)(-16), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16)(-26), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, (u16)(-56), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16)(-86), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 20, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 32, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 176, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 20480, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6663,6 +8659,7 @@ rw_error: static int set_qam64(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; const u8 qam_dq_qual_fun[] = { /* this is hw reset value. no necessary to re-write */ DRXJ_16TO8(4), /* fun0 */ DRXJ_16TO8(4), /* fun1 */ @@ -6680,52 +8677,206 @@ static int set_qam64(struct drx_demod_instance *demod) DRXJ_16TO8(15609), /* RAD5 */ }; - WRB(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), - ((u8 *)qam_dq_qual_fun)); - WRB(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), - ((u8 *)qam_eq_cma_rad)); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 105); - WR16(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 60); - WR16(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100); - WR16(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 195); - WR16(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80); - WR16(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 84); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40); - WR16(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 32); - WR16(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3); - - WR16(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 12); - WR16(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 141); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 7); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 0); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16) (-15)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, (u16) (-45)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16) (-80)); - - WR16(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 30); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 80); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 48); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 160); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 32); - - WR16(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 43008); + rc = DRXJ_DAP.write_block_func(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), ((u8 *)qam_dq_qual_fun), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), ((u8 *)qam_eq_cma_rad), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 105, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 60, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 195, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 84, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 32, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 141, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 7, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16)(-15), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, (u16)(-45), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16)(-80), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 30, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 48, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 160, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 32, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 43008, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6743,6 +8894,7 @@ rw_error: static int set_qam128(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; const u8 qam_dq_qual_fun[] = { DRXJ_16TO8(6), /* fun0 */ DRXJ_16TO8(6), /* fun1 */ @@ -6760,52 +8912,206 @@ static int set_qam128(struct drx_demod_instance *demod) DRXJ_16TO8(7238), /* RAD5 */ }; - WRB(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), - ((u8 *)qam_dq_qual_fun)); - WRB(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), - ((u8 *)qam_eq_cma_rad)); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 50); - WR16(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 60); - WR16(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100); - WR16(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 140); - WR16(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80); - WR16(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 100); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40); - WR16(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 32); - WR16(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3); - - WR16(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 8); - WR16(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 65); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 5); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 3); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16) (-1)); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, 12); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16) (-23)); - - WR16(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 40); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 20); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 80); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 32); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 144); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 16); - - WR16(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 20992); + rc = DRXJ_DAP.write_block_func(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), ((u8 *)qam_dq_qual_fun), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), ((u8 *)qam_eq_cma_rad), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 60, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 140, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 100, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 32, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 65, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, (u16)(-1), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16)(-23), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 20, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 32, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 144, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 20992, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6823,6 +9129,7 @@ rw_error: static int set_qam256(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; const u8 qam_dq_qual_fun[] = { DRXJ_16TO8(8), /* fun0 */ DRXJ_16TO8(8), /* fun1 */ @@ -6840,52 +9147,206 @@ static int set_qam256(struct drx_demod_instance *demod) DRXJ_16TO8(15356), /* RAD5 */ }; - WRB(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), - ((u8 *)qam_dq_qual_fun)); - WRB(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), - ((u8 *)qam_eq_cma_rad)); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 50); - WR16(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 60); - WR16(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100); - WR16(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 150); - WR16(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80); - WR16(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 110); - - WR16(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40); - WR16(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 16); - WR16(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3); - - WR16(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 8); - WR16(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 74); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 18); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 13); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, 7); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, 0); - WR16(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16) (-8)); - - WR16(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 50); - WR16(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 25); - WR16(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 80); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 48); - WR16(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 80); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15); - WR16(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 16); - - WR16(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 43520); + rc = DRXJ_DAP.write_block_func(dev_addr, QAM_DQ_QUAL_FUN0__A, sizeof(qam_dq_qual_fun), ((u8 *)qam_dq_qual_fun), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, SCU_RAM_QAM_EQ_CMA_RAD0__A, sizeof(qam_eq_cma_rad), ((u8 *)qam_eq_cma_rad), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RTH__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FTH__A, 60, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_PTH__A, 100, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_QTH__A, 150, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_CTH__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MTH__A, 110, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RATE_LIM__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_FREQ_LIM__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_COUNT_LIM__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_MEDIAN_AV_MULT__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_RADIUS_AV_LIMIT__A, 74, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET1__A, 18, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET2__A, 13, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET3__A, 7, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET4__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_LCAVG_OFFSET5__A, (u16)(-8), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_FINE__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CA_COARSE__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_MEDIUM__A, 50, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CP_COARSE__A, 255, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_FINE__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_MEDIUM__A, 25, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CI_COARSE__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_MEDIUM__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EP_COARSE__A, 24, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_FINE__A, 12, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_MEDIUM__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_EI_COARSE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_FINE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_MEDIUM__A, 48, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF_COARSE__A, 80, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_FINE__A, 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_MEDIUM__A, 15, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_LC_CF1_COARSE__A, 16, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_SL_SIG_POWER__A, 43520, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -6911,9 +9372,10 @@ set_qam(struct drx_demod_instance *demod, struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; struct drx_common_attr *common_attr = NULL; - u16 cmd_result = 0; + int rc; u32 adc_frequency = 0; u32 iqm_rc_rate = 0; + u16 cmd_result = 0; u16 lc_symbol_freq = 0; u16 iqm_rc_stretch = 0; u16 set_env_parameters = 0; @@ -7070,7 +9532,10 @@ set_qam(struct drx_demod_instance *demod, } } else { adc_frequency = (common_attr->sys_clock_freq * 1000) / 3; - CHK_ZERO(channel->symbolrate); + if (channel->symbolrate == 0) { + pr_err("error: channel symbolrate is zero!\n"); + return DRX_STS_ERROR;; + } iqm_rc_rate = (adc_frequency / channel->symbolrate) * (1 << 21) + (frac28 @@ -7111,13 +9576,41 @@ set_qam(struct drx_demod_instance *demod, resets SCU variables */ /* stop all comm_exec */ - WR16(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP); - WR16(dev_addr, QAM_COMM_EXEC__A, QAM_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP); - WR16(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_COMM_EXEC__A, QAM_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } cmd_scu.command = SCU_RAM_COMMAND_STANDARD_QAM | SCU_RAM_COMMAND_CMD_DEMOD_RESET; @@ -7125,7 +9618,11 @@ set_qam(struct drx_demod_instance *demod, cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } if ((op & QAM_SET_OP_ALL) || (op & QAM_SET_OP_CONSTELLATION)) { @@ -7140,7 +9637,11 @@ set_qam(struct drx_demod_instance *demod, cmd_scu.result_len = 1; cmd_scu.parameter = &set_env_parameters; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } cmd_scu.command = SCU_RAM_COMMAND_STANDARD_QAM | SCU_RAM_COMMAND_CMD_DEMOD_SET_PARAM; @@ -7148,168 +9649,457 @@ set_qam(struct drx_demod_instance *demod, cmd_scu.result_len = 1; cmd_scu.parameter = set_param_parameters; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* set symbol rate */ - WR32(dev_addr, IQM_RC_RATE_OFS_LO__A, iqm_rc_rate); + rc = DRXJ_DAP.write_reg32func(dev_addr, IQM_RC_RATE_OFS_LO__A, iqm_rc_rate, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->iqm_rc_rate_ofs = iqm_rc_rate; - CHK_ERROR(set_qam_measurement - (demod, channel->constellation, channel->symbolrate)); + rc = set_qam_measurement(demod, channel->constellation, channel->symbolrate); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* STEP 3: enable the system in a mode where the ADC provides valid signal setup constellation independent registers */ /* from qam_cmd.py script (qam_driver_b) */ /* TODO: remove re-writes of HW reset values */ if ((op & QAM_SET_OP_ALL) || (op & QAM_SET_OP_SPECTRUM)) { - CHK_ERROR(set_frequency(demod, channel, tuner_freq_offset)); + rc = set_frequency(demod, channel, tuner_freq_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } if ((op & QAM_SET_OP_ALL) || (op & QAM_SET_OP_CONSTELLATION)) { - WR16(dev_addr, QAM_LC_SYMBOL_FREQ__A, lc_symbol_freq); - WR16(dev_addr, IQM_RC_STRETCH__A, iqm_rc_stretch); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_SYMBOL_FREQ__A, lc_symbol_freq, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_STRETCH__A, iqm_rc_stretch, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } if (op & QAM_SET_OP_ALL) { if (ext_attr->has_lna == false) { - WR16(dev_addr, IQM_AF_AMUX__A, 0x02); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_AMUX__A, 0x02, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_SYMMETRIC__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_OUT_ENA__A, IQM_CF_OUT_ENA_QAM__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - WR16(dev_addr, IQM_CF_SYMMETRIC__A, 0); - WR16(dev_addr, IQM_CF_MIDTAP__A, 3); - WR16(dev_addr, IQM_CF_OUT_ENA__A, IQM_CF_OUT_ENA_QAM__M); - - WR16(dev_addr, SCU_RAM_QAM_WR_RSV_0__A, 0x5f); /* scu temporary shut down agc */ - WR16(dev_addr, IQM_AF_SYNC_SEL__A, 3); - WR16(dev_addr, IQM_AF_CLP_LEN__A, 0); - WR16(dev_addr, IQM_AF_CLP_TH__A, 448); - WR16(dev_addr, IQM_AF_SNS_LEN__A, 0); - WR16(dev_addr, IQM_AF_PDREF__A, 4); - WR16(dev_addr, IQM_AF_STDBY__A, 0x10); - WR16(dev_addr, IQM_AF_PGA_GAIN__A, 11); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_WR_RSV_0__A, 0x5f, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* scu temporary shut down agc */ - WR16(dev_addr, IQM_CF_POW_MEAS_LEN__A, 1); - WR16(dev_addr, IQM_CF_SCALE_SH__A, IQM_CF_SCALE_SH__PRE); /*! reset default val ! */ + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_SYNC_SEL__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_CLP_LEN__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_CLP_TH__A, 448, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_SNS_LEN__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_PDREF__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_STDBY__A, 0x10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_PGA_GAIN__A, 11, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, QAM_SY_TIMEOUT__A, QAM_SY_TIMEOUT__PRE); /*! reset default val ! */ + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_POW_MEAS_LEN__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_SCALE_SH__A, IQM_CF_SCALE_SH__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*! reset default val ! */ + + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_TIMEOUT__A, QAM_SY_TIMEOUT__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*! reset default val ! */ if (ext_attr->standard == DRX_STANDARD_ITU_B) { - WR16(dev_addr, QAM_SY_SYNC_LWM__A, QAM_SY_SYNC_LWM__PRE); /*! reset default val ! */ - WR16(dev_addr, QAM_SY_SYNC_AWM__A, QAM_SY_SYNC_AWM__PRE); /*! reset default val ! */ - WR16(dev_addr, QAM_SY_SYNC_HWM__A, QAM_SY_SYNC_HWM__PRE); /*! reset default val ! */ + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_LWM__A, QAM_SY_SYNC_LWM__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*! reset default val ! */ + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_AWM__A, QAM_SY_SYNC_AWM__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*! reset default val ! */ + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_HWM__A, QAM_SY_SYNC_HWM__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*! reset default val ! */ } else { switch (channel->constellation) { case DRX_CONSTELLATION_QAM16: case DRX_CONSTELLATION_QAM64: case DRX_CONSTELLATION_QAM256: - WR16(dev_addr, QAM_SY_SYNC_LWM__A, 0x03); - WR16(dev_addr, QAM_SY_SYNC_AWM__A, 0x04); - WR16(dev_addr, QAM_SY_SYNC_HWM__A, QAM_SY_SYNC_HWM__PRE); /*! reset default val ! */ + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_LWM__A, 0x03, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_AWM__A, 0x04, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_HWM__A, QAM_SY_SYNC_HWM__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*! reset default val ! */ break; case DRX_CONSTELLATION_QAM32: case DRX_CONSTELLATION_QAM128: - WR16(dev_addr, QAM_SY_SYNC_LWM__A, 0x03); - WR16(dev_addr, QAM_SY_SYNC_AWM__A, 0x05); - WR16(dev_addr, QAM_SY_SYNC_HWM__A, 0x06); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_LWM__A, 0x03, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_AWM__A, 0x05, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SY_SYNC_HWM__A, 0x06, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return (DRX_STS_ERROR); } /* switch */ } - WR16(dev_addr, QAM_LC_MODE__A, QAM_LC_MODE__PRE); /*! reset default val ! */ - WR16(dev_addr, QAM_LC_RATE_LIMIT__A, 3); - WR16(dev_addr, QAM_LC_LPF_FACTORP__A, 4); - WR16(dev_addr, QAM_LC_LPF_FACTORI__A, 4); - WR16(dev_addr, QAM_LC_MODE__A, 7); - WR16(dev_addr, QAM_LC_QUAL_TAB0__A, 1); - WR16(dev_addr, QAM_LC_QUAL_TAB1__A, 1); - WR16(dev_addr, QAM_LC_QUAL_TAB2__A, 1); - WR16(dev_addr, QAM_LC_QUAL_TAB3__A, 1); - WR16(dev_addr, QAM_LC_QUAL_TAB4__A, 2); - WR16(dev_addr, QAM_LC_QUAL_TAB5__A, 2); - WR16(dev_addr, QAM_LC_QUAL_TAB6__A, 2); - WR16(dev_addr, QAM_LC_QUAL_TAB8__A, 2); - WR16(dev_addr, QAM_LC_QUAL_TAB9__A, 2); - WR16(dev_addr, QAM_LC_QUAL_TAB10__A, 2); - WR16(dev_addr, QAM_LC_QUAL_TAB12__A, 2); - WR16(dev_addr, QAM_LC_QUAL_TAB15__A, 3); - WR16(dev_addr, QAM_LC_QUAL_TAB16__A, 3); - WR16(dev_addr, QAM_LC_QUAL_TAB20__A, 4); - WR16(dev_addr, QAM_LC_QUAL_TAB25__A, 4); - - WR16(dev_addr, IQM_FS_ADJ_SEL__A, 1); - WR16(dev_addr, IQM_RC_ADJ_SEL__A, 1); - WR16(dev_addr, IQM_CF_ADJ_SEL__A, 1); - WR16(dev_addr, IQM_CF_POW_MEAS_LEN__A, 0); - WR16(dev_addr, SCU_RAM_GPIO__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_MODE__A, QAM_LC_MODE__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*! reset default val ! */ + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_RATE_LIMIT__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_LPF_FACTORP__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_LPF_FACTORI__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_MODE__A, 7, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB0__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB1__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB2__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB3__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB4__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB5__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB6__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB8__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB9__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB10__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB12__A, 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB15__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB16__A, 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB20__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_QUAL_TAB25__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_ADJ_SEL__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_ADJ_SEL__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_ADJ_SEL__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_POW_MEAS_LEN__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_GPIO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* No more resets of the IQM, current standard correctly set => now AGCs can be configured. */ /* turn on IQMAF. It has to be in front of setAgc**() */ - CHK_ERROR(set_iqm_af(demod, true)); - CHK_ERROR(adc_synchronization(demod)); + rc = set_iqm_af(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = adc_synchronization(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(init_agc(demod)); - CHK_ERROR(set_agc_if(demod, &(ext_attr->qam_if_agc_cfg), false)); - CHK_ERROR(set_agc_rf(demod, &(ext_attr->qam_rf_agc_cfg), false)); + rc = init_agc(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_agc_if(demod, &(ext_attr->qam_if_agc_cfg), false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_agc_rf(demod, &(ext_attr->qam_rf_agc_cfg), false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } { /* TODO fix this, store a struct drxj_cfg_afe_gain structure in struct drxj_data instead of only the gain */ struct drxj_cfg_afe_gain qam_pga_cfg = { DRX_STANDARD_ITU_B, 0 }; qam_pga_cfg.gain = ext_attr->qam_pga_cfg; - CHK_ERROR(ctrl_set_cfg_afe_gain(demod, &qam_pga_cfg)); + rc = ctrl_set_cfg_afe_gain(demod, &qam_pga_cfg); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = ctrl_set_cfg_pre_saw(demod, &(ext_attr->qam_pre_saw_cfg)); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - CHK_ERROR(ctrl_set_cfg_pre_saw(demod, &(ext_attr->qam_pre_saw_cfg))); } if ((op & QAM_SET_OP_ALL) || (op & QAM_SET_OP_CONSTELLATION)) { if (ext_attr->standard == DRX_STANDARD_ITU_A) { - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(qam_a_taps), - ((u8 *)qam_a_taps)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(qam_a_taps), - ((u8 *)qam_a_taps)); + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(qam_a_taps), ((u8 *)qam_a_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(qam_a_taps), ((u8 *)qam_a_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else if (ext_attr->standard == DRX_STANDARD_ITU_B) { switch (channel->constellation) { case DRX_CONSTELLATION_QAM64: - WRB(dev_addr, IQM_CF_TAP_RE0__A, - sizeof(qam_b64_taps), ((u8 *)qam_b64_taps)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, - sizeof(qam_b64_taps), ((u8 *)qam_b64_taps)); + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(qam_b64_taps), ((u8 *)qam_b64_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(qam_b64_taps), ((u8 *)qam_b64_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_CONSTELLATION_QAM256: - WRB(dev_addr, IQM_CF_TAP_RE0__A, - sizeof(qam_b256_taps), - ((u8 *)qam_b256_taps)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, - sizeof(qam_b256_taps), - ((u8 *)qam_b256_taps)); + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(qam_b256_taps), ((u8 *)qam_b256_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(qam_b256_taps), ((u8 *)qam_b256_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return (DRX_STS_ERROR); } } else if (ext_attr->standard == DRX_STANDARD_ITU_C) { - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(qam_c_taps), - ((u8 *)qam_c_taps)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(qam_c_taps), - ((u8 *)qam_c_taps)); + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(qam_c_taps), ((u8 *)qam_c_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(qam_c_taps), ((u8 *)qam_c_taps), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* SETP 4: constellation specific setup */ switch (channel->constellation) { case DRX_CONSTELLATION_QAM16: - CHK_ERROR(set_qam16(demod)); + rc = set_qam16(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_CONSTELLATION_QAM32: - CHK_ERROR(set_qam32(demod)); + rc = set_qam32(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_CONSTELLATION_QAM64: - CHK_ERROR(set_qam64(demod)); + rc = set_qam64(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_CONSTELLATION_QAM128: - CHK_ERROR(set_qam128(demod)); + rc = set_qam128(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_CONSTELLATION_QAM256: - CHK_ERROR(set_qam256(demod)); + rc = set_qam256(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; default: return (DRX_STS_ERROR); @@ -7317,12 +10107,28 @@ set_qam(struct drx_demod_instance *demod, } if ((op & QAM_SET_OP_ALL)) { - WR16(dev_addr, IQM_CF_SCALE_SH__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_SCALE_SH__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Mpeg output has to be in front of FEC active */ - CHK_ERROR(set_mpegtei_handling(demod)); - CHK_ERROR(bit_reverse_mpeg_output(demod)); - CHK_ERROR(set_mpeg_start_width(demod)); + rc = set_mpegtei_handling(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = bit_reverse_mpeg_output(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_mpeg_start_width(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } { /* TODO: move to set_standard after hardware reset value problem is solved */ /* Configure initial MPEG output */ @@ -7341,7 +10147,11 @@ set_qam(struct drx_demod_instance *demod, cfg_mpeg_output.invert_clk = common_attr->mpeg_cfg.invert_clk; cfg_mpeg_output.static_clk = common_attr->mpeg_cfg.static_clk; cfg_mpeg_output.bitrate = common_attr->mpeg_cfg.bitrate; - CHK_ERROR(ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output)); + rc = ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } } @@ -7354,12 +10164,28 @@ set_qam(struct drx_demod_instance *demod, cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } - WR16(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_ACTIVE); - WR16(dev_addr, QAM_COMM_EXEC__A, QAM_COMM_EXEC_ACTIVE); - WR16(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_COMM_EXEC__A, QAM_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_COMM_EXEC__A, FEC_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -7371,6 +10197,7 @@ static int ctrl_get_qam_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_quality); static int qam_flip_spec(struct drx_demod_instance *demod, struct drx_channel *channel) { + int rc; u32 iqm_fs_rate_ofs = 0; u32 iqm_fs_rate_lo = 0; u16 qam_ctl_ena = 0; @@ -7386,65 +10213,163 @@ static int qam_flip_spec(struct drx_demod_instance *demod, struct drx_channel *c ext_attr = (struct drxj_data *) demod->my_ext_attr; /* Silence the controlling of lc, equ, and the acquisition state machine */ - RR16(dev_addr, SCU_RAM_QAM_CTL_ENA__A, &qam_ctl_ena); - WR16(dev_addr, SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena - & ~(SCU_RAM_QAM_CTL_ENA_ACQ__M - | SCU_RAM_QAM_CTL_ENA_EQU__M | SCU_RAM_QAM_CTL_ENA_LC__M)); + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_QAM_CTL_ENA__A, &qam_ctl_ena, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena & ~(SCU_RAM_QAM_CTL_ENA_ACQ__M | SCU_RAM_QAM_CTL_ENA_EQU__M | SCU_RAM_QAM_CTL_ENA_LC__M), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* freeze the frequency control loop */ - WR16(dev_addr, QAM_LC_CF__A, 0); - WR16(dev_addr, QAM_LC_CF1__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_CF__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_CF1__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - ARR32(dev_addr, IQM_FS_RATE_OFS_LO__A, &iqm_fs_rate_ofs); - ARR32(dev_addr, IQM_FS_RATE_LO__A, &iqm_fs_rate_lo); + rc = drxj_dap_atomic_read_reg32(dev_addr, IQM_FS_RATE_OFS_LO__A, &iqm_fs_rate_ofs, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = drxj_dap_atomic_read_reg32(dev_addr, IQM_FS_RATE_LO__A, &iqm_fs_rate_lo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ofsofs = iqm_fs_rate_lo - iqm_fs_rate_ofs; iqm_fs_rate_ofs = ~iqm_fs_rate_ofs + 1; iqm_fs_rate_ofs -= 2 * ofsofs; /* freeze dq/fq updating */ - RR16(dev_addr, QAM_DQ_MODE__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, QAM_DQ_MODE__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data = (data & 0xfff9); - WR16(dev_addr, QAM_DQ_MODE__A, data); - WR16(dev_addr, QAM_FQ_MODE__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_DQ_MODE__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_FQ_MODE__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* lc_cp / _ci / _ca */ - WR16(dev_addr, QAM_LC_CI__A, 0); - WR16(dev_addr, QAM_LC_EP__A, 0); - WR16(dev_addr, QAM_FQ_LA_FACTOR__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_CI__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_LC_EP__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_FQ_LA_FACTOR__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* flip the spec */ - WR32(dev_addr, IQM_FS_RATE_OFS_LO__A, iqm_fs_rate_ofs); + rc = DRXJ_DAP.write_reg32func(dev_addr, IQM_FS_RATE_OFS_LO__A, iqm_fs_rate_ofs, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->iqm_fs_rate_ofs = iqm_fs_rate_ofs; ext_attr->pos_image = (ext_attr->pos_image) ? false : true; /* freeze dq/fq updating */ - RR16(dev_addr, QAM_DQ_MODE__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, QAM_DQ_MODE__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } equ_mode = data; data = (data & 0xfff9); - WR16(dev_addr, QAM_DQ_MODE__A, data); - WR16(dev_addr, QAM_FQ_MODE__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_DQ_MODE__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_FQ_MODE__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } for (i = 0; i < 28; i++) { - RR16(dev_addr, QAM_DQ_TAP_IM_EL0__A + (2 * i), &data); - WR16(dev_addr, QAM_DQ_TAP_IM_EL0__A + (2 * i), -data); + rc = DRXJ_DAP.read_reg16func(dev_addr, QAM_DQ_TAP_IM_EL0__A + (2 * i), &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_DQ_TAP_IM_EL0__A + (2 * i), -data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } for (i = 0; i < 24; i++) { - RR16(dev_addr, QAM_FQ_TAP_IM_EL0__A + (2 * i), &data); - WR16(dev_addr, QAM_FQ_TAP_IM_EL0__A + (2 * i), -data); + rc = DRXJ_DAP.read_reg16func(dev_addr, QAM_FQ_TAP_IM_EL0__A + (2 * i), &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_FQ_TAP_IM_EL0__A + (2 * i), -data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } data = equ_mode; - WR16(dev_addr, QAM_DQ_MODE__A, data); - WR16(dev_addr, QAM_FQ_MODE__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_DQ_MODE__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_FQ_MODE__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, SCU_RAM_QAM_FSM_STATE_TGT__A, 4); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_FSM_STATE_TGT__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } i = 0; while ((fsm_state != 4) && (i++ < 100)) { - RR16(dev_addr, SCU_RAM_QAM_FSM_STATE__A, &fsm_state); + rc = DRXJ_DAP.read_reg16func(dev_addr, SCU_RAM_QAM_FSM_STATE__A, &fsm_state, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_QAM_CTL_ENA__A, (qam_ctl_ena | 0x0016), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - WR16(dev_addr, SCU_RAM_QAM_CTL_ENA__A, (qam_ctl_ena | 0x0016)); return (DRX_STS_OK); rw_error: @@ -7471,12 +10396,13 @@ qam64auto(struct drx_demod_instance *demod, s32 tuner_freq_offset, enum drx_lock_status *lock_status) { struct drx_sig_quality sig_quality; - u16 data = 0; + struct drxj_data *ext_attr = NULL; + int rc; u32 state = NO_LOCK; u32 start_time = 0; u32 d_locked_time = 0; - struct drxj_data *ext_attr = NULL; u32 timeout_ofs = 0; + u16 data = 0; /* external attributes for storing aquired channel constellation */ ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -7484,13 +10410,20 @@ qam64auto(struct drx_demod_instance *demod, start_time = drxbsp_hst_clock(); state = NO_LOCK; do { - CHK_ERROR(ctrl_lock_status(demod, lock_status)); + rc = ctrl_lock_status(demod, lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (state) { case NO_LOCK: if (*lock_status == DRXJ_DEMOD_LOCK) { - CHK_ERROR(ctrl_get_qam_sig_quality - (demod, &sig_quality)); + rc = ctrl_get_qam_sig_quality(demod, &sig_quality); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (sig_quality.MER > 208) { state = DEMOD_LOCKED; /* some delay to see if fec_lock possible TODO find the right value */ @@ -7503,10 +10436,16 @@ qam64auto(struct drx_demod_instance *demod, if ((*lock_status == DRXJ_DEMOD_LOCK) && /* still demod_lock in 150ms */ ((drxbsp_hst_clock() - d_locked_time) > DRXJ_QAM_FEC_LOCK_WAITTIME)) { - RR16(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, - &data); - WR16(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, - data | 0x1); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, data | 0x1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } state = SYNC_FLIPPED; drxbsp_hst_sleep(10); } @@ -7515,13 +10454,23 @@ qam64auto(struct drx_demod_instance *demod, if (*lock_status == DRXJ_DEMOD_LOCK) { if (channel->mirror == DRX_MIRROR_AUTO) { /* flip sync pattern back */ - RR16(demod->my_i2c_dev_addr, - QAM_SY_TIMEOUT__A, &data); - WR16(demod->my_i2c_dev_addr, - QAM_SY_TIMEOUT__A, data & 0xFFFE); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, data & 0xFFFE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* flip spectrum */ ext_attr->mirror = DRX_MIRROR_YES; - CHK_ERROR(qam_flip_spec(demod, channel)); + rc = qam_flip_spec(demod, channel); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } state = SPEC_MIRRORED; /* reset timer TODO: still need 500ms? */ start_time = d_locked_time = @@ -7539,13 +10488,22 @@ qam64auto(struct drx_demod_instance *demod, if ((*lock_status == DRXJ_DEMOD_LOCK) && /* still demod_lock in 150ms */ ((drxbsp_hst_clock() - d_locked_time) > DRXJ_QAM_FEC_LOCK_WAITTIME)) { - CHK_ERROR(ctrl_get_qam_sig_quality - (demod, &sig_quality)); + rc = ctrl_get_qam_sig_quality(demod, &sig_quality); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (sig_quality.MER > 208) { - RR16(demod->my_i2c_dev_addr, - QAM_SY_TIMEOUT__A, &data); - WR16(demod->my_i2c_dev_addr, - QAM_SY_TIMEOUT__A, data | 0x1); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, QAM_SY_TIMEOUT__A, data | 0x1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* no need to wait lock */ start_time = drxbsp_hst_clock() - @@ -7585,10 +10543,11 @@ qam256auto(struct drx_demod_instance *demod, s32 tuner_freq_offset, enum drx_lock_status *lock_status) { struct drx_sig_quality sig_quality; + struct drxj_data *ext_attr = NULL; + int rc; u32 state = NO_LOCK; u32 start_time = 0; u32 d_locked_time = 0; - struct drxj_data *ext_attr = NULL; u32 timeout_ofs = DRXJ_QAM_DEMOD_LOCK_EXT_WAITTIME; /* external attributes for storing aquired channel constellation */ @@ -7597,12 +10556,19 @@ qam256auto(struct drx_demod_instance *demod, start_time = drxbsp_hst_clock(); state = NO_LOCK; do { - CHK_ERROR(ctrl_lock_status(demod, lock_status)); + rc = ctrl_lock_status(demod, lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (state) { case NO_LOCK: if (*lock_status == DRXJ_DEMOD_LOCK) { - CHK_ERROR(ctrl_get_qam_sig_quality - (demod, &sig_quality)); + rc = ctrl_get_qam_sig_quality(demod, &sig_quality); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (sig_quality.MER > 268) { state = DEMOD_LOCKED; timeout_ofs += DRXJ_QAM_DEMOD_LOCK_EXT_WAITTIME; /* see something, wait longer */ @@ -7616,7 +10582,11 @@ qam256auto(struct drx_demod_instance *demod, ((drxbsp_hst_clock() - d_locked_time) > DRXJ_QAM_FEC_LOCK_WAITTIME)) { ext_attr->mirror = DRX_MIRROR_YES; - CHK_ERROR(qam_flip_spec(demod, channel)); + rc = qam_flip_spec(demod, channel); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } state = SPEC_MIRRORED; /* reset timer TODO: still need 300ms? */ start_time = drxbsp_hst_clock(); @@ -7652,8 +10622,9 @@ static int set_qamChannel(struct drx_demod_instance *demod, struct drx_channel *channel, s32 tuner_freq_offset) { - enum drx_lock_status lock_status = DRX_NOT_LOCKED; struct drxj_data *ext_attr = NULL; + int rc; + enum drx_lock_status lock_status = DRX_NOT_LOCKED; bool auto_flag = false; /* external attributes for storing aquired channel constellation */ @@ -7672,22 +10643,29 @@ set_qamChannel(struct drx_demod_instance *demod, } else { ext_attr->mirror = channel->mirror; } - CHK_ERROR(set_qam - (demod, channel, tuner_freq_offset, QAM_SET_OP_ALL)); + rc = set_qam(demod, channel, tuner_freq_offset, QAM_SET_OP_ALL); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((ext_attr->standard == DRX_STANDARD_ITU_B) && (channel->constellation == DRX_CONSTELLATION_QAM64)) { - CHK_ERROR(qam64auto - (demod, channel, tuner_freq_offset, - &lock_status)); + rc = qam64auto(demod, channel, tuner_freq_offset, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } if ((ext_attr->standard == DRX_STANDARD_ITU_B) && (channel->mirror == DRX_MIRROR_AUTO) && (channel->constellation == DRX_CONSTELLATION_QAM256)) { - CHK_ERROR(qam256auto - (demod, channel, tuner_freq_offset, - &lock_status)); + rc = qam256auto(demod, channel, tuner_freq_offset, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } break; case DRX_CONSTELLATION_AUTO: /* for channel scan */ @@ -7701,12 +10679,16 @@ set_qamChannel(struct drx_demod_instance *demod, } else { ext_attr->mirror = channel->mirror; } - CHK_ERROR(set_qam - (demod, channel, tuner_freq_offset, - QAM_SET_OP_ALL)); - CHK_ERROR(qam256auto - (demod, channel, tuner_freq_offset, - &lock_status)); + rc = set_qam(demod, channel, tuner_freq_offset, QAM_SET_OP_ALL); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = qam256auto(demod, channel, tuner_freq_offset, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (lock_status < DRX_LOCKED) { /* QAM254 not locked -> try to lock QAM64 constellation */ @@ -7721,25 +10703,38 @@ set_qamChannel(struct drx_demod_instance *demod, } { u16 qam_ctl_ena = 0; - RR16(demod->my_i2c_dev_addr, - SCU_RAM_QAM_CTL_ENA__A, - &qam_ctl_ena); - WR16(demod->my_i2c_dev_addr, - SCU_RAM_QAM_CTL_ENA__A, - qam_ctl_ena & - ~SCU_RAM_QAM_CTL_ENA_ACQ__M); - WR16(demod->my_i2c_dev_addr, SCU_RAM_QAM_FSM_STATE_TGT__A, 0x2); /* force to rate hunting */ - - CHK_ERROR(set_qam - (demod, channel, - tuner_freq_offset, - QAM_SET_OP_CONSTELLATION)); - WR16(demod->my_i2c_dev_addr, - SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_CTL_ENA__A, &qam_ctl_ena, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena & ~SCU_RAM_QAM_CTL_ENA_ACQ__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_FSM_STATE_TGT__A, 0x2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* force to rate hunting */ + + rc = set_qam(demod, channel, tuner_freq_offset, QAM_SET_OP_CONSTELLATION); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = qam64auto(demod, channel, tuner_freq_offset, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - CHK_ERROR(qam64auto - (demod, channel, tuner_freq_offset, - &lock_status)); } channel->constellation = DRX_CONSTELLATION_AUTO; } else if (ext_attr->standard == DRX_STANDARD_ITU_C) { @@ -7754,22 +10749,38 @@ set_qamChannel(struct drx_demod_instance *demod, } { u16 qam_ctl_ena = 0; - RR16(demod->my_i2c_dev_addr, - SCU_RAM_QAM_CTL_ENA__A, &qam_ctl_ena); - WR16(demod->my_i2c_dev_addr, - SCU_RAM_QAM_CTL_ENA__A, - qam_ctl_ena & ~SCU_RAM_QAM_CTL_ENA_ACQ__M); - WR16(demod->my_i2c_dev_addr, SCU_RAM_QAM_FSM_STATE_TGT__A, 0x2); /* force to rate hunting */ - - CHK_ERROR(set_qam - (demod, channel, tuner_freq_offset, - QAM_SET_OP_CONSTELLATION)); - WR16(demod->my_i2c_dev_addr, - SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena); - } - CHK_ERROR(qam64auto - (demod, channel, tuner_freq_offset, - &lock_status)); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_CTL_ENA__A, &qam_ctl_ena, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena & ~SCU_RAM_QAM_CTL_ENA_ACQ__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_FSM_STATE_TGT__A, 0x2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* force to rate hunting */ + + rc = set_qam(demod, channel, tuner_freq_offset, QAM_SET_OP_CONSTELLATION); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(demod->my_i2c_dev_addr, SCU_RAM_QAM_CTL_ENA__A, qam_ctl_ena, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = qam64auto(demod, channel, tuner_freq_offset, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } channel->constellation = DRX_CONSTELLATION_AUTO; } else { channel->constellation = DRX_CONSTELLATION_AUTO; @@ -7801,6 +10812,7 @@ rw_error: static int GetQAMRSErr_count(struct i2c_device_addr *dev_addr, struct drxjrs_errors *rs_errors) { + int rc; u16 nr_bit_errors = 0, nr_symbol_errors = 0, nr_packet_errors = 0, nr_failures = 0, nr_snc_par_fail_count = 0; @@ -7813,15 +10825,35 @@ GetQAMRSErr_count(struct i2c_device_addr *dev_addr, struct drxjrs_errors *rs_err /* all reported errors are received in the */ /* most recently finished measurment period */ /* no of pre RS bit errors */ - RR16(dev_addr, FEC_RS_NR_BIT_ERRORS__A, &nr_bit_errors); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_RS_NR_BIT_ERRORS__A, &nr_bit_errors, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* no of symbol errors */ - RR16(dev_addr, FEC_RS_NR_SYMBOL_ERRORS__A, &nr_symbol_errors); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_RS_NR_SYMBOL_ERRORS__A, &nr_symbol_errors, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* no of packet errors */ - RR16(dev_addr, FEC_RS_NR_PACKET_ERRORS__A, &nr_packet_errors); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_RS_NR_PACKET_ERRORS__A, &nr_packet_errors, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* no of failures to decode */ - RR16(dev_addr, FEC_RS_NR_FAILURES__A, &nr_failures); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_RS_NR_FAILURES__A, &nr_failures, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* no of post RS bit erros */ - RR16(dev_addr, FEC_OC_SNC_FAIL_COUNT__A, &nr_snc_par_fail_count); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_SNC_FAIL_COUNT__A, &nr_snc_par_fail_count, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO: NOTE */ /* These register values are fetched in non-atomic fashion */ /* It is possible that the read values contain unrelated information */ @@ -7857,6 +10889,7 @@ ctrl_get_qam_sig_quality(struct drx_demod_instance *demod, struct drx_sig_qualit { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; enum drx_modulation constellation = DRX_CONSTELLATION_UNKNOWN; struct drxjrs_errors measuredrs_errors = { 0, 0, 0, 0, 0 }; @@ -7891,11 +10924,23 @@ ctrl_get_qam_sig_quality(struct drx_demod_instance *demod, struct drx_sig_qualit /* read the physical registers */ /* Get the RS error data */ - CHK_ERROR(GetQAMRSErr_count(dev_addr, &measuredrs_errors)); + rc = GetQAMRSErr_count(dev_addr, &measuredrs_errors); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* get the register value needed for MER */ - RR16(dev_addr, QAM_SL_ERR_POWER__A, &qam_sl_err_power); + rc = DRXJ_DAP.read_reg16func(dev_addr, QAM_SL_ERR_POWER__A, &qam_sl_err_power, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* get the register value needed for post RS BER */ - RR16(dev_addr, FEC_OC_SNC_FAIL_PERIOD__A, &fec_oc_period); + rc = DRXJ_DAP.read_reg16func(dev_addr, FEC_OC_SNC_FAIL_PERIOD__A, &fec_oc_period, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* get constants needed for signal quality calculation */ fec_rs_period = ext_attr->fec_rs_period; @@ -7946,7 +10991,11 @@ ctrl_get_qam_sig_quality(struct drx_demod_instance *demod, struct drx_sig_qualit /* get the register value */ /* no of quadrature symbol errors */ - RR16(dev_addr, QAM_VD_NR_QSYM_ERRORS__A, &qsym_err_vd); + rc = DRXJ_DAP.read_reg16func(dev_addr, QAM_VD_NR_QSYM_ERRORS__A, &qsym_err_vd, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Extract the Exponent and the Mantisa */ /* of number of quadrature symbol errors */ e = (qsym_err_vd & QAM_VD_NR_QSYM_ERRORS_EXP__M) >> @@ -8016,7 +11065,11 @@ ctrl_get_qam_sig_quality(struct drx_demod_instance *demod, struct drx_sig_qualit sig_quality->post_reed_solomon_ber = qam_post_rs_ber; sig_quality->scale_factor_ber = ((u32) 1000000); #ifdef DRXJ_SIGNAL_ACCUM_ERR - CHK_ERROR(get_acc_pkt_err(demod, &sig_quality->packet_error)); + rc = get_acc_pkt_err(demod, &sig_quality->packet_error); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } #else sig_quality->packet_error = ((u16) pkt_errs); #endif @@ -8037,6 +11090,9 @@ rw_error: static int ctrl_get_qam_constel(struct drx_demod_instance *demod, struct drx_complex *complex_nr) { + struct i2c_device_addr *dev_addr = NULL; + int rc; + u32 data = 0; u16 fec_oc_ocr_mode = 0; /**< FEC OCR grabber configuration */ u16 qam_sl_comm_mb = 0;/**< QAM SL MB configuration */ @@ -8044,8 +11100,6 @@ ctrl_get_qam_constel(struct drx_demod_instance *demod, struct drx_complex *compl /**< QAM SL MB intial configuration */ u16 im = 0; /**< constellation Im part */ u16 re = 0; /**< constellation Re part */ - u32 data = 0; - struct i2c_device_addr *dev_addr = NULL; /**< device address */ /* read device info */ @@ -8056,13 +11110,21 @@ ctrl_get_qam_constel(struct drx_demod_instance *demod, struct drx_complex *compl /* Needs to be checked when external interface PG is updated */ /* Configure MB (Monitor bus) */ - RR16(dev_addr, QAM_SL_COMM_MB__A, &qam_sl_comm_mbInit); + rc = DRXJ_DAP.read_reg16func(dev_addr, QAM_SL_COMM_MB__A, &qam_sl_comm_mbInit, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* set observe flag & MB mux */ qam_sl_comm_mb = qam_sl_comm_mbInit & (~(QAM_SL_COMM_MB_OBS__M + QAM_SL_COMM_MB_MUX_OBS__M)); qam_sl_comm_mb |= (QAM_SL_COMM_MB_OBS_ON + QAM_SL_COMM_MB_MUX_OBS_CONST_CORR); - WR16(dev_addr, QAM_SL_COMM_MB__A, qam_sl_comm_mb); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SL_COMM_MB__A, qam_sl_comm_mb, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Enable MB grabber in the FEC OC */ fec_oc_ocr_mode = (/* output select: observe bus */ @@ -8077,13 +11139,25 @@ ctrl_get_qam_constel(struct drx_demod_instance *demod, struct drx_complex *compl /* grabber mode: continuous */ (FEC_OC_OCR_MODE_GRAB_COUNTED__M & (0x0 << FEC_OC_OCR_MODE_GRAB_COUNTED__B))); - WR16(dev_addr, FEC_OC_OCR_MODE__A, fec_oc_ocr_mode); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_OCR_MODE__A, fec_oc_ocr_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Disable MB grabber in the FEC OC */ - WR16(dev_addr, FEC_OC_OCR_MODE__A, 0x00); + rc = DRXJ_DAP.write_reg16func(dev_addr, FEC_OC_OCR_MODE__A, 0x00, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* read data */ - RR32(dev_addr, FEC_OC_OCR_GRAB_RD0__A, &data); + rc = DRXJ_DAP.read_reg32func(dev_addr, FEC_OC_OCR_GRAB_RD0__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } re = (u16) (data & FEC_OC_OCR_GRAB_RD0__M); im = (u16) ((data >> 16) & FEC_OC_OCR_GRAB_RD1__M); @@ -8101,7 +11175,11 @@ ctrl_get_qam_constel(struct drx_demod_instance *demod, struct drx_complex *compl complex_nr->im = ((s16) im); /* Restore MB (Monitor bus) */ - WR16(dev_addr, QAM_SL_COMM_MB__A, qam_sl_comm_mbInit); + rc = DRXJ_DAP.write_reg16func(dev_addr, QAM_SL_COMM_MB__A, qam_sl_comm_mbInit, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -8229,6 +11307,7 @@ atv_update_config(struct drx_demod_instance *demod, bool force_update) { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -8238,37 +11317,73 @@ atv_update_config(struct drx_demod_instance *demod, bool force_update) ((ext_attr->atv_cfg_changed_flags & DRXJ_ATV_CHANGED_COEF) != 0)) { int index = 0; - CHK_ERROR(atv_equ_coef_index(ext_attr->standard, &index)); - WR16(dev_addr, ATV_TOP_EQU0__A, ext_attr->atv_top_equ0[index]); - WR16(dev_addr, ATV_TOP_EQU1__A, ext_attr->atv_top_equ1[index]); - WR16(dev_addr, ATV_TOP_EQU2__A, ext_attr->atv_top_equ2[index]); - WR16(dev_addr, ATV_TOP_EQU3__A, ext_attr->atv_top_equ3[index]); + rc = atv_equ_coef_index(ext_attr->standard, &index); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_EQU0__A, ext_attr->atv_top_equ0[index], 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_EQU1__A, ext_attr->atv_top_equ1[index], 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_EQU2__A, ext_attr->atv_top_equ2[index], 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_EQU3__A, ext_attr->atv_top_equ3[index], 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* bypass fast carrier recovery */ if (force_update) { u16 data = 0; - RR16(dev_addr, IQM_RT_ROT_BP__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_RT_ROT_BP__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= (~((u16) IQM_RT_ROT_BP_ROT_OFF__M)); if (ext_attr->phase_correction_bypass) { data |= IQM_RT_ROT_BP_ROT_OFF_OFF; } else { data |= IQM_RT_ROT_BP_ROT_OFF_ACTIVE; } - WR16(dev_addr, IQM_RT_ROT_BP__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_ROT_BP__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* peak filter setting */ if (force_update || ((ext_attr->atv_cfg_changed_flags & DRXJ_ATV_CHANGED_PEAK_FLT) != 0)) { - WR16(dev_addr, ATV_TOP_VID_PEAK__A, ext_attr->atv_top_vid_peak); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_VID_PEAK__A, ext_attr->atv_top_vid_peak, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* noise filter setting */ if (force_update || ((ext_attr->atv_cfg_changed_flags & DRXJ_ATV_CHANGED_NOISE_FLT) != 0)) { - WR16(dev_addr, ATV_TOP_NOISE_TH__A, ext_attr->atv_top_noise_th); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_NOISE_TH__A, ext_attr->atv_top_noise_th, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* SIF attenuation */ @@ -8293,7 +11408,11 @@ atv_update_config(struct drx_demod_instance *demod, bool force_update) return DRX_STS_ERROR; break; } - WR16(dev_addr, ATV_TOP_AF_SIF_ATT__A, attenuation); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_AF_SIF_ATT__A, attenuation, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* SIF & CVBS enable */ @@ -8301,7 +11420,11 @@ atv_update_config(struct drx_demod_instance *demod, bool force_update) ((ext_attr->atv_cfg_changed_flags & DRXJ_ATV_CHANGED_OUTPUT) != 0)) { u16 data = 0; - RR16(dev_addr, ATV_TOP_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, ATV_TOP_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (ext_attr->enable_cvbs_output) { data |= ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE; } else { @@ -8313,7 +11436,11 @@ atv_update_config(struct drx_demod_instance *demod, bool force_update) } else { data |= ATV_TOP_STDBY_SIF_STDBY_STANDBY; } - WR16(dev_addr, ATV_TOP_STDBY__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STDBY__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } ext_attr->atv_cfg_changed_flags = 0; @@ -8336,6 +11463,7 @@ static int ctrl_set_cfg_atv_output(struct drx_demod_instance *demod, struct drxj_cfg_atv_output *output_cfg) { struct drxj_data *ext_attr = NULL; + int rc; /* Check arguments */ if (output_cfg == NULL) { @@ -8372,7 +11500,11 @@ ctrl_set_cfg_atv_output(struct drx_demod_instance *demod, struct drxj_cfg_atv_ou ext_attr->atv_cfg_changed_flags |= DRXJ_ATV_CHANGED_OUTPUT; } - CHK_ERROR(atv_update_config(demod, false)); + rc = atv_update_config(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -8393,6 +11525,7 @@ static int ctrl_set_cfg_atv_equ_coef(struct drx_demod_instance *demod, struct drxj_cfg_atv_equ_coef *coef) { struct drxj_data *ext_attr = NULL; + int rc; int index; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -8415,14 +11548,22 @@ ctrl_set_cfg_atv_equ_coef(struct drx_demod_instance *demod, struct drxj_cfg_atv_ return (DRX_STS_INVALID_ARG); } - CHK_ERROR(atv_equ_coef_index(ext_attr->standard, &index)); + rc = atv_equ_coef_index(ext_attr->standard, &index); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->atv_top_equ0[index] = coef->coef0; ext_attr->atv_top_equ1[index] = coef->coef1; ext_attr->atv_top_equ2[index] = coef->coef2; ext_attr->atv_top_equ3[index] = coef->coef3; ext_attr->atv_cfg_changed_flags |= DRXJ_ATV_CHANGED_COEF; - CHK_ERROR(atv_update_config(demod, false)); + rc = atv_update_config(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -8447,6 +11588,7 @@ static int ctrl_get_cfg_atv_equ_coef(struct drx_demod_instance *demod, struct drxj_cfg_atv_equ_coef *coef) { struct drxj_data *ext_attr = NULL; + int rc; int index = 0; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -8461,7 +11603,11 @@ ctrl_get_cfg_atv_equ_coef(struct drx_demod_instance *demod, struct drxj_cfg_atv_ return DRX_STS_INVALID_ARG; } - CHK_ERROR(atv_equ_coef_index(ext_attr->standard, &index)); + rc = atv_equ_coef_index(ext_attr->standard, &index); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } coef->coef0 = ext_attr->atv_top_equ0[index]; coef->coef1 = ext_attr->atv_top_equ1[index]; coef->coef2 = ext_attr->atv_top_equ2[index]; @@ -8485,6 +11631,7 @@ static int ctrl_set_cfg_atv_misc(struct drx_demod_instance *demod, struct drxj_cfg_atv_misc *settings) { struct drxj_data *ext_attr = NULL; + int rc; /* Check arguments */ if ((settings == NULL) || @@ -8506,7 +11653,11 @@ ctrl_set_cfg_atv_misc(struct drx_demod_instance *demod, struct drxj_cfg_atv_misc ext_attr->atv_cfg_changed_flags |= DRXJ_ATV_CHANGED_NOISE_FLT; } - CHK_ERROR(atv_update_config(demod, false)); + rc = atv_update_config(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -8532,9 +11683,8 @@ ctrl_get_cfg_atv_misc(struct drx_demod_instance *demod, struct drxj_cfg_atv_misc struct drxj_data *ext_attr = NULL; /* Check arguments */ - if (settings == NULL) { + if (settings == NULL) return DRX_STS_INVALID_ARG; - } ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -8558,6 +11708,7 @@ ctrl_get_cfg_atv_misc(struct drx_demod_instance *demod, struct drxj_cfg_atv_misc static int ctrl_get_cfg_atv_output(struct drx_demod_instance *demod, struct drxj_cfg_atv_output *output_cfg) { + int rc; u16 data = 0; /* Check arguments */ @@ -8565,7 +11716,11 @@ ctrl_get_cfg_atv_output(struct drx_demod_instance *demod, struct drxj_cfg_atv_ou return DRX_STS_INVALID_ARG; } - RR16(demod->my_i2c_dev_addr, ATV_TOP_STDBY__A, &data); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, ATV_TOP_STDBY__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (data & ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE) { output_cfg->enable_cvbs_output = true; } else { @@ -8576,7 +11731,11 @@ ctrl_get_cfg_atv_output(struct drx_demod_instance *demod, struct drxj_cfg_atv_ou output_cfg->enable_sif_output = false; } else { output_cfg->enable_sif_output = true; - RR16(demod->my_i2c_dev_addr, ATV_TOP_AF_SIF_ATT__A, &data); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, ATV_TOP_AF_SIF_ATT__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } output_cfg->sif_attenuation = (enum drxjsif_attenuation) data; } @@ -8599,6 +11758,7 @@ ctrl_get_cfg_atv_agc_status(struct drx_demod_instance *demod, struct drxj_cfg_atv_agc_status *agc_status) { struct i2c_device_addr *dev_addr = NULL; + int rc; u16 data = 0; u32 tmp = 0; @@ -8614,7 +11774,11 @@ ctrl_get_cfg_atv_agc_status(struct drx_demod_instance *demod, IQM_AF_AGC_RF__A * 27 is 20 bits worst case. */ - RR16(dev_addr, IQM_AF_AGC_RF__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_AGC_RF__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } tmp = ((u32) data) * 27 - ((u32) (data >> 2)); /* nA */ agc_status->rf_agc_gain = (u16) (tmp / 1000); /* uA */ /* rounding */ @@ -8628,7 +11792,11 @@ ctrl_get_cfg_atv_agc_status(struct drx_demod_instance *demod, IQM_AF_AGC_IF__A * 27 is 20 bits worst case. */ - RR16(dev_addr, IQM_AF_AGC_IF__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_AGC_IF__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } tmp = ((u32) data) * 27 - ((u32) (data >> 2)); /* nA */ agc_status->if_agc_gain = (u16) (tmp / 1000); /* uA */ /* rounding */ @@ -8644,7 +11812,11 @@ ctrl_get_cfg_atv_agc_status(struct drx_demod_instance *demod, = (ATV_TOP_SFR_VID_GAIN__A/32) - 75 (in 0.1 dB) */ - SARR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, &data); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* dividing by 32 inclusive rounding */ data >>= 4; if ((data & 1) != 0) { @@ -8661,7 +11833,11 @@ ctrl_get_cfg_atv_agc_status(struct drx_demod_instance *demod, = (SCU_RAM_ATV_SIF_GAIN__A/2) - 4 (in 0.1 dB) */ - SARR16(dev_addr, SCU_RAM_ATV_SIF_GAIN__A, &data); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ATV_SIF_GAIN__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } data &= SCU_RAM_ATV_SIF_GAIN__M; /* dividing by 2 inclusive rounding */ if ((data & 1) != 0) { @@ -8671,7 +11847,11 @@ ctrl_get_cfg_atv_agc_status(struct drx_demod_instance *demod, agc_status->audio_agc_gain = ((s16) data) - 4; /* 0.1 dB */ /* Loop gain's */ - SARR16(dev_addr, SCU_RAM_AGC_KI__A, &data); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_AGC_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } agc_status->video_agc_loop_gain = ((data & SCU_RAM_AGC_KI_DGAIN__M) >> SCU_RAM_AGC_KI_DGAIN__B); agc_status->rf_agc_loop_gain = @@ -8699,14 +11879,31 @@ rw_error: static int power_up_atv(struct drx_demod_instance *demod, enum drx_standard standard) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; /* ATV NTSC */ - WR16(dev_addr, ATV_COMM_EXEC__A, ATV_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_COMM_EXEC__A, ATV_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* turn on IQM_AF */ - CHK_ERROR(set_iqm_af(demod, true)); - CHK_ERROR(adc_synchronization(demod)); + rc = set_iqm_af(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = adc_synchronization(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Audio, already done during set standard */ @@ -8739,6 +11936,7 @@ power_down_atv(struct drx_demod_instance *demod, enum drx_standard standard, boo /* *parameter */ NULL, /* *result */ NULL }; + int rc; u16 cmd_result = 0; /* ATV NTSC */ @@ -8750,23 +11948,66 @@ power_down_atv(struct drx_demod_instance *demod, enum drx_standard standard, boo cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Disable ATV outputs (ATV reset enables CVBS, undo this) */ - WR16(dev_addr, ATV_TOP_STDBY__A, (ATV_TOP_STDBY_SIF_STDBY_STANDBY & - (~ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE))); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STDBY__A, (ATV_TOP_STDBY_SIF_STDBY_STANDBY & (~ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE)), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, ATV_COMM_EXEC__A, ATV_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_COMM_EXEC__A, ATV_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (primary == true) { - WR16(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_STOP); - CHK_ERROR(set_iqm_af(demod, false)); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_COMM_EXEC__A, IQM_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_iqm_af(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { - WR16(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP); - WR16(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = power_down_aud(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - CHK_ERROR(power_down_aud(demod)); return (DRX_STS_OK); rw_error: @@ -9061,6 +12302,7 @@ trouble ? struct drx_common_attr *common_attr = NULL; #endif /* DRXJ_SPLIT_UCODE_UPLOAD */ struct drxj_data *ext_attr = NULL; + int rc; ext_attr = (struct drxj_data *) demod->my_ext_attr; dev_addr = demod->my_i2c_dev_addr; @@ -9074,12 +12316,18 @@ trouble ? ucode_info.mc_size = common_attr->microcode_size; /* Upload only audio microcode */ - CHK_ERROR(ctrl_u_codeUpload - (demod, &ucode_info, UCODE_UPLOAD, true)); + rc = ctrl_u_codeUpload(demod, &ucode_info, UCODE_UPLOAD, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (common_attr->verify_microcode == true) { - CHK_ERROR(ctrl_u_codeUpload - (demod, &ucode_info, UCODE_VERIFY, true)); + rc = ctrl_u_codeUpload(demod, &ucode_info, UCODE_VERIFY, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* Prevent uploading audio microcode again */ @@ -9087,12 +12335,36 @@ trouble ? } #endif /* DRXJ_SPLIT_UCODE_UPLOAD */ - WR16(dev_addr, ATV_COMM_EXEC__A, ATV_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP); - WR16(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP); - WR16(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP); - WR16(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_COMM_EXEC__A, ATV_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FS_COMM_EXEC__A, IQM_FS_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_FD_COMM_EXEC__A, IQM_FD_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_COMM_EXEC__A, IQM_RC_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_COMM_EXEC__A, IQM_RT_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_COMM_EXEC__A, IQM_CF_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Reset ATV SCU */ cmd_scu.command = SCU_RAM_COMMAND_STANDARD_ATV | SCU_RAM_COMMAND_CMD_DEMOD_RESET; @@ -9100,9 +12372,17 @@ trouble ? cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, ATV_TOP_MOD_CONTROL__A, ATV_TOP_MOD_CONTROL__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_MOD_CONTROL__A, ATV_TOP_MOD_CONTROL__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO remove AUTO/OFF patches after ucode fix. */ switch (*standard) { @@ -9110,29 +12390,73 @@ trouble ? /* NTSC */ cmd_param = SCU_RAM_ATV_STANDARD_STANDARD_MN; - WR16(dev_addr, IQM_RT_LO_INCR__A, IQM_RT_LO_INCR_MN); - WR16(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M); - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(ntsc_taps_re), - ((u8 *)ntsc_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(ntsc_taps_im), - ((u8 *)ntsc_taps_im)); - - WR16(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_MN); - WR16(dev_addr, ATV_TOP_CR_CONT__A, - (ATV_TOP_CR_CONT_CR_P_MN | - ATV_TOP_CR_CONT_CR_D_MN | ATV_TOP_CR_CONT_CR_I_MN)); - WR16(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_MN); - WR16(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_MN | - ATV_TOP_STD_VID_POL_MN)); - WR16(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_MN); - - WR16(dev_addr, SCU_RAM_ATV_AGC_MODE__A, - (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | - SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE)); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000); - WR16(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, - SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_BG_MN); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_LO_INCR__A, IQM_RT_LO_INCR_MN, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(ntsc_taps_re), ((u8 *)ntsc_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(ntsc_taps_im), ((u8 *)ntsc_taps_im), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_MN, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_CONT__A, (ATV_TOP_CR_CONT_CR_P_MN | ATV_TOP_CR_CONT_CR_D_MN | ATV_TOP_CR_CONT_CR_I_MN), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_MN, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_MN | ATV_TOP_STD_VID_POL_MN), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_MN, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AGC_MODE__A, (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_BG_MN, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->phase_correction_bypass = false; ext_attr->enable_cvbs_output = true; break; @@ -9140,21 +12464,52 @@ trouble ? /* FM */ cmd_param = SCU_RAM_ATV_STANDARD_STANDARD_FM; - WR16(dev_addr, IQM_RT_LO_INCR__A, 2994); - WR16(dev_addr, IQM_CF_MIDTAP__A, 0); - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(fm_taps_re), - ((u8 *)fm_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(fm_taps_im), - ((u8 *)fm_taps_im)); - WR16(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_FM | - ATV_TOP_STD_VID_POL_FM)); - WR16(dev_addr, ATV_TOP_MOD_CONTROL__A, 0); - WR16(dev_addr, ATV_TOP_CR_CONT__A, 0); - - WR16(dev_addr, SCU_RAM_ATV_AGC_MODE__A, - (SCU_RAM_ATV_AGC_MODE_VAGC_VEL_AGC_SLOW | - SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM)); - WR16(dev_addr, IQM_RT_ROT_BP__A, IQM_RT_ROT_BP_ROT_OFF_OFF); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_LO_INCR__A, 2994, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(fm_taps_re), ((u8 *)fm_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(fm_taps_im), ((u8 *)fm_taps_im), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_FM | ATV_TOP_STD_VID_POL_FM), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_MOD_CONTROL__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_CONT__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AGC_MODE__A, (SCU_RAM_ATV_AGC_MODE_VAGC_VEL_AGC_SLOW | SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_ROT_BP__A, IQM_RT_ROT_BP_ROT_OFF_OFF, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->phase_correction_bypass = true; ext_attr->enable_cvbs_output = false; break; @@ -9162,27 +12517,71 @@ trouble ? /* PAL/SECAM B/G */ cmd_param = SCU_RAM_ATV_STANDARD_STANDARD_B; - WR16(dev_addr, IQM_RT_LO_INCR__A, 1820); /* TODO check with IS */ - WR16(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M); - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(bg_taps_re), - ((u8 *)bg_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(bg_taps_im), - ((u8 *)bg_taps_im)); - WR16(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_BG); - WR16(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_BG); - WR16(dev_addr, ATV_TOP_CR_CONT__A, - (ATV_TOP_CR_CONT_CR_P_BG | - ATV_TOP_CR_CONT_CR_D_BG | ATV_TOP_CR_CONT_CR_I_BG)); - WR16(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_BG); - WR16(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_BG | - ATV_TOP_STD_VID_POL_BG)); - WR16(dev_addr, SCU_RAM_ATV_AGC_MODE__A, - (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | - SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE)); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000); - WR16(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, - SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_BG_MN); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_LO_INCR__A, 1820, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO check with IS */ + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(bg_taps_re), ((u8 *)bg_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(bg_taps_im), ((u8 *)bg_taps_im), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_BG, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_BG, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_CONT__A, (ATV_TOP_CR_CONT_CR_P_BG | ATV_TOP_CR_CONT_CR_D_BG | ATV_TOP_CR_CONT_CR_I_BG), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_BG, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_BG | ATV_TOP_STD_VID_POL_BG), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AGC_MODE__A, (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_BG_MN, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->phase_correction_bypass = false; ext_attr->atv_if_agc_cfg.ctrl_mode = DRX_AGC_CTRL_AUTO; ext_attr->enable_cvbs_output = true; @@ -9191,27 +12590,71 @@ trouble ? /* PAL/SECAM D/K */ cmd_param = SCU_RAM_ATV_STANDARD_STANDARD_DK; - WR16(dev_addr, IQM_RT_LO_INCR__A, 2225); /* TODO check with IS */ - WR16(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M); - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), - ((u8 *)dk_i_l_lp_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), - ((u8 *)dk_i_l_lp_taps_im)); - WR16(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_DK); - WR16(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_DK); - WR16(dev_addr, ATV_TOP_CR_CONT__A, - (ATV_TOP_CR_CONT_CR_P_DK | - ATV_TOP_CR_CONT_CR_D_DK | ATV_TOP_CR_CONT_CR_I_DK)); - WR16(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_DK); - WR16(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_DK | - ATV_TOP_STD_VID_POL_DK)); - WR16(dev_addr, SCU_RAM_ATV_AGC_MODE__A, - (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | - SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE)); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000); - WR16(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, - SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_DK); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_LO_INCR__A, 2225, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO check with IS */ + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), ((u8 *)dk_i_l_lp_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), ((u8 *)dk_i_l_lp_taps_im), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_DK, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_DK, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_CONT__A, (ATV_TOP_CR_CONT_CR_P_DK | ATV_TOP_CR_CONT_CR_D_DK | ATV_TOP_CR_CONT_CR_I_DK), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_DK, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_DK | ATV_TOP_STD_VID_POL_DK), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AGC_MODE__A, (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_DK, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->phase_correction_bypass = false; ext_attr->atv_if_agc_cfg.ctrl_mode = DRX_AGC_CTRL_AUTO; ext_attr->enable_cvbs_output = true; @@ -9220,27 +12663,71 @@ trouble ? /* PAL/SECAM I */ cmd_param = SCU_RAM_ATV_STANDARD_STANDARD_I; - WR16(dev_addr, IQM_RT_LO_INCR__A, 2225); /* TODO check with IS */ - WR16(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M); - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), - ((u8 *)dk_i_l_lp_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), - ((u8 *)dk_i_l_lp_taps_im)); - WR16(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_I); - WR16(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_I); - WR16(dev_addr, ATV_TOP_CR_CONT__A, - (ATV_TOP_CR_CONT_CR_P_I | - ATV_TOP_CR_CONT_CR_D_I | ATV_TOP_CR_CONT_CR_I_I)); - WR16(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_I); - WR16(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_I | - ATV_TOP_STD_VID_POL_I)); - WR16(dev_addr, SCU_RAM_ATV_AGC_MODE__A, - (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | - SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE)); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000); - WR16(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, - SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_I); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_LO_INCR__A, 2225, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO check with IS */ + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), ((u8 *)dk_i_l_lp_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), ((u8 *)dk_i_l_lp_taps_im), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_AMP_TH__A, ATV_TOP_CR_AMP_TH_I, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_I, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_CONT__A, (ATV_TOP_CR_CONT_CR_P_I | ATV_TOP_CR_CONT_CR_D_I | ATV_TOP_CR_CONT_CR_I_I), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_I, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_I | ATV_TOP_STD_VID_POL_I), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AGC_MODE__A, (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_FM | SCU_RAM_ATV_AGC_MODE_FAST_VAGC_EN_FAGC_ENABLE), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_I, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->phase_correction_bypass = false; ext_attr->atv_if_agc_cfg.ctrl_mode = DRX_AGC_CTRL_AUTO; ext_attr->enable_cvbs_output = true; @@ -9249,28 +12736,71 @@ trouble ? /* PAL/SECAM L with negative modulation */ cmd_param = SCU_RAM_ATV_STANDARD_STANDARD_L; - WR16(dev_addr, IQM_RT_LO_INCR__A, 2225); /* TODO check with IS */ - WR16(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_L); - WR16(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M); - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), - ((u8 *)dk_i_l_lp_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), - ((u8 *)dk_i_l_lp_taps_im)); - WR16(dev_addr, ATV_TOP_CR_AMP_TH__A, 0x2); /* TODO check with IS */ - WR16(dev_addr, ATV_TOP_CR_CONT__A, - (ATV_TOP_CR_CONT_CR_P_L | - ATV_TOP_CR_CONT_CR_D_L | ATV_TOP_CR_CONT_CR_I_L)); - WR16(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_L); - WR16(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_L | - ATV_TOP_STD_VID_POL_L)); - WR16(dev_addr, SCU_RAM_ATV_AGC_MODE__A, - (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_AM | - SCU_RAM_ATV_AGC_MODE_BP_EN_BPC_ENABLE | - SCU_RAM_ATV_AGC_MODE_VAGC_VEL_AGC_SLOW)); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000); - WR16(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, - SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_LLP); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_LO_INCR__A, 2225, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO check with IS */ + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_L, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), ((u8 *)dk_i_l_lp_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), ((u8 *)dk_i_l_lp_taps_im), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_AMP_TH__A, 0x2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO check with IS */ + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_CONT__A, (ATV_TOP_CR_CONT_CR_P_L | ATV_TOP_CR_CONT_CR_D_L | ATV_TOP_CR_CONT_CR_I_L), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_L, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_L | ATV_TOP_STD_VID_POL_L), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AGC_MODE__A, (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_AM | SCU_RAM_ATV_AGC_MODE_BP_EN_BPC_ENABLE | SCU_RAM_ATV_AGC_MODE_VAGC_VEL_AGC_SLOW), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_LLP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->phase_correction_bypass = false; ext_attr->atv_if_agc_cfg.ctrl_mode = DRX_AGC_CTRL_USER; ext_attr->atv_if_agc_cfg.output_level = ext_attr->atv_rf_agc_cfg.top; @@ -9280,28 +12810,71 @@ trouble ? /* PAL/SECAM L with positive modulation */ cmd_param = SCU_RAM_ATV_STANDARD_STANDARD_LP; - WR16(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_LP); - WR16(dev_addr, IQM_RT_LO_INCR__A, 2225); /* TODO check with IS */ - WR16(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M); - WRB(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), - ((u8 *)dk_i_l_lp_taps_re)); - WRB(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), - ((u8 *)dk_i_l_lp_taps_im)); - WR16(dev_addr, ATV_TOP_CR_AMP_TH__A, 0x2); /* TODO check with IS */ - WR16(dev_addr, ATV_TOP_CR_CONT__A, - (ATV_TOP_CR_CONT_CR_P_LP | - ATV_TOP_CR_CONT_CR_D_LP | ATV_TOP_CR_CONT_CR_I_LP)); - WR16(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_LP); - WR16(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_LP | - ATV_TOP_STD_VID_POL_LP)); - WR16(dev_addr, SCU_RAM_ATV_AGC_MODE__A, - (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_AM | - SCU_RAM_ATV_AGC_MODE_BP_EN_BPC_ENABLE | - SCU_RAM_ATV_AGC_MODE_VAGC_VEL_AGC_SLOW)); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000); - WR16(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000); - WR16(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, - SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_LLP); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_VID_AMP__A, ATV_TOP_VID_AMP_LP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_LO_INCR__A, 2225, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO check with IS */ + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_MIDTAP__A, IQM_CF_MIDTAP_RE__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_RE0__A, sizeof(dk_i_l_lp_taps_re), ((u8 *)dk_i_l_lp_taps_re), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_block_func(dev_addr, IQM_CF_TAP_IM0__A, sizeof(dk_i_l_lp_taps_im), ((u8 *)dk_i_l_lp_taps_im), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_AMP_TH__A, 0x2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO check with IS */ + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_CONT__A, (ATV_TOP_CR_CONT_CR_P_LP | ATV_TOP_CR_CONT_CR_D_LP | ATV_TOP_CR_CONT_CR_I_LP), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_OVM_TH__A, ATV_TOP_CR_OVM_TH_LP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STD__A, (ATV_TOP_STD_MODE_LP | ATV_TOP_STD_VID_POL_LP), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AGC_MODE__A, (SCU_RAM_ATV_AGC_MODE_SIF_STD_SIF_AGC_AM | SCU_RAM_ATV_AGC_MODE_BP_EN_BPC_ENABLE | SCU_RAM_ATV_AGC_MODE_VAGC_VEL_AGC_SLOW), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, 0x1000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_VID_GAIN_LO__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MAX_REF__A, SCU_RAM_ATV_AMS_MAX_REF_AMS_MAX_REF_LLP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->phase_correction_bypass = false; ext_attr->atv_if_agc_cfg.ctrl_mode = DRX_AGC_CTRL_USER; ext_attr->atv_if_agc_cfg.output_level = ext_attr->atv_rf_agc_cfg.top; @@ -9313,56 +12886,199 @@ trouble ? /* Common initializations FM & NTSC & B/G & D/K & I & L & LP */ if (ext_attr->has_lna == false) { - WR16(dev_addr, IQM_AF_AMUX__A, 0x01); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_AMUX__A, 0x01, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } - WR16(dev_addr, SCU_RAM_ATV_STANDARD__A, 0x002); - WR16(dev_addr, IQM_AF_CLP_LEN__A, IQM_AF_CLP_LEN_ATV); - WR16(dev_addr, IQM_AF_CLP_TH__A, IQM_AF_CLP_TH_ATV); - WR16(dev_addr, IQM_AF_SNS_LEN__A, IQM_AF_SNS_LEN_ATV); - CHK_ERROR(ctrl_set_cfg_pre_saw(demod, &(ext_attr->atv_pre_saw_cfg))); - WR16(dev_addr, IQM_AF_AGC_IF__A, 10248); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_STANDARD__A, 0x002, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_CLP_LEN__A, IQM_AF_CLP_LEN_ATV, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_CLP_TH__A, IQM_AF_CLP_TH_ATV, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_SNS_LEN__A, IQM_AF_SNS_LEN_ATV, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = ctrl_set_cfg_pre_saw(demod, &(ext_attr->atv_pre_saw_cfg)); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_AGC_IF__A, 10248, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->iqm_rc_rate_ofs = 0x00200000L; - WR32(dev_addr, IQM_RC_RATE_OFS_LO__A, ext_attr->iqm_rc_rate_ofs); - WR16(dev_addr, IQM_RC_ADJ_SEL__A, IQM_RC_ADJ_SEL_B_OFF); - WR16(dev_addr, IQM_RC_STRETCH__A, IQM_RC_STRETCH_ATV); + rc = DRXJ_DAP.write_reg32func(dev_addr, IQM_RC_RATE_OFS_LO__A, ext_attr->iqm_rc_rate_ofs, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_ADJ_SEL__A, IQM_RC_ADJ_SEL_B_OFF, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RC_STRETCH__A, IQM_RC_STRETCH_ATV, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, IQM_RT_ACTIVE__A, IQM_RT_ACTIVE_ACTIVE_RT_ATV_FCR_ON | - IQM_RT_ACTIVE_ACTIVE_CR_ATV_CR_ON); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_ACTIVE__A, IQM_RT_ACTIVE_ACTIVE_RT_ATV_FCR_ON | IQM_RT_ACTIVE_ACTIVE_CR_ATV_CR_ON, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, IQM_CF_OUT_ENA__A, IQM_CF_OUT_ENA_ATV__M); - WR16(dev_addr, IQM_CF_SYMMETRIC__A, IQM_CF_SYMMETRIC_IM__M); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_OUT_ENA__A, IQM_CF_OUT_ENA_ATV__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_CF_SYMMETRIC__A, IQM_CF_SYMMETRIC_IM__M, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* default: SIF in standby */ - WR16(dev_addr, ATV_TOP_SYNC_SLICE__A, ATV_TOP_SYNC_SLICE_MN); - WR16(dev_addr, ATV_TOP_MOD_ACCU__A, ATV_TOP_MOD_ACCU__PRE); - - WR16(dev_addr, SCU_RAM_ATV_SIF_GAIN__A, 0x080); - WR16(dev_addr, SCU_RAM_ATV_FAGC_TH_RED__A, 10); - WR16(dev_addr, SCU_RAM_ATV_AAGC_CNT__A, 7); - WR16(dev_addr, SCU_RAM_ATV_NAGC_KI_MIN__A, 0x0225); - WR16(dev_addr, SCU_RAM_ATV_NAGC_KI_MAX__A, 0x0547); - WR16(dev_addr, SCU_RAM_ATV_KI_CHANGE_TH__A, 20); - WR16(dev_addr, SCU_RAM_ATV_LOCK__A, 0); - - WR16(dev_addr, IQM_RT_DELAY__A, IQM_RT_DELAY__PRE); - WR16(dev_addr, SCU_RAM_ATV_BPC_KI_MIN__A, 531); - WR16(dev_addr, SCU_RAM_ATV_PAGC_KI_MIN__A, 1061); - WR16(dev_addr, SCU_RAM_ATV_BP_REF_MIN__A, 100); - WR16(dev_addr, SCU_RAM_ATV_BP_REF_MAX__A, 260); - WR16(dev_addr, SCU_RAM_ATV_BP_LVL__A, 0); - WR16(dev_addr, SCU_RAM_ATV_AMS_MAX__A, 0); - WR16(dev_addr, SCU_RAM_ATV_AMS_MIN__A, 2047); - WR16(dev_addr, SCU_RAM_GPIO__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_SYNC_SLICE__A, ATV_TOP_SYNC_SLICE_MN, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_MOD_ACCU__A, ATV_TOP_MOD_ACCU__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_SIF_GAIN__A, 0x080, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_FAGC_TH_RED__A, 10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AAGC_CNT__A, 7, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_NAGC_KI_MIN__A, 0x0225, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_NAGC_KI_MAX__A, 0x0547, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_KI_CHANGE_TH__A, 20, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_LOCK__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_RT_DELAY__A, IQM_RT_DELAY__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_BPC_KI_MIN__A, 531, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_PAGC_KI_MIN__A, 1061, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_BP_REF_MIN__A, 100, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_BP_REF_MAX__A, 260, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_BP_LVL__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MAX__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_AMS_MIN__A, 2047, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_GPIO__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Override reset values with current shadow settings */ - CHK_ERROR(atv_update_config(demod, true)); + rc = atv_update_config(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Configure/restore AGC settings */ - CHK_ERROR(init_agc(demod)); - CHK_ERROR(set_agc_if(demod, &(ext_attr->atv_if_agc_cfg), false)); - CHK_ERROR(set_agc_rf(demod, &(ext_attr->atv_rf_agc_cfg), false)); - CHK_ERROR(ctrl_set_cfg_pre_saw(demod, &(ext_attr->atv_pre_saw_cfg))); + rc = init_agc(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_agc_if(demod, &(ext_attr->atv_if_agc_cfg), false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_agc_rf(demod, &(ext_attr->atv_rf_agc_cfg), false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = ctrl_set_cfg_pre_saw(demod, &(ext_attr->atv_pre_saw_cfg)); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Set SCU ATV substandard,assuming this doesn't require running ATV block */ cmd_scu.command = SCU_RAM_COMMAND_STANDARD_ATV | @@ -9371,14 +13087,30 @@ trouble ? cmd_scu.result_len = 1; cmd_scu.parameter = &cmd_param; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* turn the analog work around on/off (must after set_env b/c it is set in mc) */ if (ext_attr->mfx == 0x03) { - WR16(dev_addr, SCU_RAM_ATV_ENABLE_IIR_WA__A, 0); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_ENABLE_IIR_WA__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { - WR16(dev_addr, SCU_RAM_ATV_ENABLE_IIR_WA__A, 1); - WR16(dev_addr, SCU_RAM_ATV_IIR_CRIT__A, 225); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_ENABLE_IIR_WA__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ATV_IIR_CRIT__A, 225, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } return (DRX_STS_OK); @@ -9416,6 +13148,7 @@ set_atv_channel(struct drx_demod_instance *demod, u16 cmd_result = 0; struct drxj_data *ext_attr = NULL; struct i2c_device_addr *dev_addr = NULL; + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -9430,8 +13163,16 @@ set_atv_channel(struct drx_demod_instance *demod, ext_attr->mirror = channel->mirror; } - CHK_ERROR(set_frequency(demod, channel, tuner_freq_offset)); - WR16(dev_addr, ATV_TOP_CR_FREQ__A, ATV_TOP_CR_FREQ__PRE); + rc = set_frequency(demod, channel, tuner_freq_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_CR_FREQ__A, ATV_TOP_CR_FREQ__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Start ATV SCU */ cmd_scu.command = SCU_RAM_COMMAND_STANDARD_ATV | @@ -9440,7 +13181,11 @@ set_atv_channel(struct drx_demod_instance *demod, cmd_scu.result_len = 1; cmd_scu.parameter = NULL; cmd_scu.result = &cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* if ( (ext_attr->standard == DRX_STANDARD_FM) && (ext_attr->flagSetAUDdone == true) ) { @@ -9475,6 +13220,7 @@ get_atv_channel(struct drx_demod_instance *demod, { s32 offset = 0; struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; /* Bandwidth */ channel->bandwidth = ((struct drxj_data *) demod->my_ext_attr)->curr_bandwidth; @@ -9489,7 +13235,11 @@ get_atv_channel(struct drx_demod_instance *demod, u16 measured_offset = 0; /* get measured frequency offset */ - RR16(dev_addr, ATV_TOP_CR_FREQ__A, &measured_offset); + rc = DRXJ_DAP.read_reg16func(dev_addr, ATV_TOP_CR_FREQ__A, &measured_offset, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Signed 8 bit register => sign extension needed */ if ((measured_offset & 0x0080) != 0) { /* sign extension */ @@ -9504,7 +13254,11 @@ get_atv_channel(struct drx_demod_instance *demod, u16 measured_offset = 0; /* get measured frequency offset */ - RR16(dev_addr, ATV_TOP_CR_FREQ__A, &measured_offset); + rc = DRXJ_DAP.read_reg16func(dev_addr, ATV_TOP_CR_FREQ__A, &measured_offset, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Signed 8 bit register => sign extension needed */ if ((measured_offset & 0x0080) != 0) { /* sign extension */ @@ -9557,6 +13311,7 @@ get_atv_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; /* All weights must add up to 100 (%) TODO: change weights when IF ctrl is available */ @@ -9590,12 +13345,20 @@ get_atv_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) case DRX_STANDARD_PAL_SECAM_L: /* fallthrough */ case DRX_STANDARD_PAL_SECAM_LP: /* fallthrough */ case DRX_STANDARD_NTSC: - SARR16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, &digital_curr_gain); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ATV_VID_GAIN_HI__A, &digital_curr_gain, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } digital_max_gain = 22512; /* taken from ucode */ digital_min_gain = 2400; /* taken from ucode */ break; case DRX_STANDARD_FM: - SARR16(dev_addr, SCU_RAM_ATV_SIF_GAIN__A, &digital_curr_gain); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ATV_SIF_GAIN__A, &digital_curr_gain, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } digital_max_gain = 0x4ff; /* taken from ucode */ digital_min_gain = 0; /* taken from ucode */ break; @@ -9603,8 +13366,16 @@ get_atv_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) return (DRX_STS_ERROR); break; } - RR16(dev_addr, IQM_AF_AGC_RF__A, &rf_curr_gain); - RR16(dev_addr, IQM_AF_AGC_IF__A, &if_curr_gain); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_AGC_RF__A, &rf_curr_gain, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_AF_AGC_IF__A, &if_curr_gain, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* clipping */ if (digital_curr_gain >= digital_max_gain) @@ -9666,6 +13437,7 @@ atv_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_qu { struct i2c_device_addr *dev_addr = NULL; u16 quality_indicator = 0; + int rc; dev_addr = demod->my_i2c_dev_addr; @@ -9684,7 +13456,11 @@ atv_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_qu 0x700..0x7ff: no signal => 0% .. 30% */ - SARR16(dev_addr, SCU_RAM_ATV_CR_LOCK__A, &quality_indicator); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ATV_CR_LOCK__A, &quality_indicator, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } quality_indicator &= SCU_RAM_ATV_CR_LOCK_CR_LOCK__M; if (quality_indicator <= 0x80) { sig_quality->indicator = @@ -9724,16 +13500,33 @@ static int power_up_aud(struct drx_demod_instance *demod, bool set_standard) { enum drx_aud_standard aud_standard = DRX_AUD_STANDARD_AUTO; struct i2c_device_addr *dev_addr = NULL; + int rc; dev_addr = demod->my_i2c_dev_addr; - WR16(dev_addr, AUD_TOP_COMM_EXEC__A, AUD_TOP_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_TOP_COMM_EXEC__A, AUD_TOP_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* setup TR interface: R/W mode, fifosize=8 */ - WR16(dev_addr, AUD_TOP_TR_MDE__A, 8); - WR16(dev_addr, AUD_COMM_EXEC__A, AUD_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_TOP_TR_MDE__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_COMM_EXEC__A, AUD_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (set_standard == true) { - CHK_ERROR(aud_ctrl_set_standard(demod, &aud_standard)); + rc = aud_ctrl_set_standard(demod, &aud_standard); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } return DRX_STS_OK; @@ -9753,11 +13546,16 @@ static int power_down_aud(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; dev_addr = (struct i2c_device_addr *)demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; - WR16(dev_addr, AUD_COMM_EXEC__A, AUD_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_COMM_EXEC__A, AUD_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = false; @@ -9778,6 +13576,7 @@ static int aud_get_modus(struct drx_demod_instance *demod, u16 *modus) { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; u16 r_modus = 0; u16 r_modusHi = 0; @@ -9792,13 +13591,25 @@ static int aud_get_modus(struct drx_demod_instance *demod, u16 *modus) /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } /* Modus register is combined in to RAM location */ - RR16(dev_addr, AUD_DEM_RAM_MODUS_HI__A, &r_modusHi); - RR16(dev_addr, AUD_DEM_RAM_MODUS_LO__A, &r_modusLo); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_MODUS_HI__A, &r_modusHi, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_MODUS_LO__A, &r_modusLo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } r_modus = ((r_modusHi << 12) & AUD_DEM_RAM_MODUS_HI__M) | (((r_modusLo & AUD_DEM_RAM_MODUS_LO__M))); @@ -9823,6 +13634,7 @@ aud_ctrl_get_cfg_rds(struct drx_demod_instance *demod, struct drx_cfg_aud_rds *s { struct i2c_device_addr *addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; u16 r_rds_array_cnt_init = 0; u16 r_rds_array_cnt_check = 0; @@ -9838,13 +13650,21 @@ aud_ctrl_get_cfg_rds(struct drx_demod_instance *demod, struct drx_cfg_aud_rds *s /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } status->valid = false; - RR16(addr, AUD_DEM_RD_RDS_ARRAY_CNT__A, &r_rds_array_cnt_init); + rc = DRXJ_DAP.read_reg16func(addr, AUD_DEM_RD_RDS_ARRAY_CNT__A, &r_rds_array_cnt_init, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (r_rds_array_cnt_init == AUD_DEM_RD_RDS_ARRAY_CNT_RDS_ARRAY_CT_RDS_DATA_NOT_VALID) { @@ -9864,11 +13684,19 @@ aud_ctrl_get_cfg_rds(struct drx_demod_instance *demod, struct drx_cfg_aud_rds *s /* new data */ /* read the data */ for (rds_data_cnt = 0; rds_data_cnt < AUD_RDS_ARRAY_SIZE; rds_data_cnt++) { - RR16(addr, AUD_DEM_RD_RDS_DATA__A, &r_rds_data); + rc = DRXJ_DAP.read_reg16func(addr, AUD_DEM_RD_RDS_DATA__A, &r_rds_data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } status->data[rds_data_cnt] = r_rds_data; } - RR16(addr, AUD_DEM_RD_RDS_ARRAY_CNT__A, &r_rds_array_cnt_check); + rc = DRXJ_DAP.read_reg16func(addr, AUD_DEM_RD_RDS_ARRAY_CNT__A, &r_rds_array_cnt_check, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (r_rds_array_cnt_check == r_rds_array_cnt_init) { status->valid = true; @@ -9893,7 +13721,7 @@ aud_ctrl_get_carrier_detect_status(struct drx_demod_instance *demod, struct drx_ { struct drxj_data *ext_attr = NULL; struct i2c_device_addr *dev_addr = NULL; - + int rc; u16 r_data = 0; if (status == NULL) { @@ -9905,7 +13733,11 @@ aud_ctrl_get_carrier_detect_status(struct drx_demod_instance *demod, struct drx_ /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } @@ -9917,7 +13749,11 @@ aud_ctrl_get_carrier_detect_status(struct drx_demod_instance *demod, struct drx_ status->stereo = false; /* read stereo sound mode indication */ - RR16(dev_addr, AUD_DEM_RD_STATUS__A, &r_data); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RD_STATUS__A, &r_data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* carrier a detected */ if ((r_data & AUD_DEM_RD_STATUS_STAT_CARR_A__M) == @@ -9972,6 +13808,7 @@ aud_ctrl_get_status(struct drx_demod_instance *demod, struct drx_aud_status *sta struct drxj_data *ext_attr = NULL; struct i2c_device_addr *dev_addr = NULL; struct drx_cfg_aud_rds rds = { false, {0} }; + int rc; u16 r_data = 0; if (status == NULL) { @@ -9982,15 +13819,27 @@ aud_ctrl_get_status(struct drx_demod_instance *demod, struct drx_aud_status *sta ext_attr = (struct drxj_data *) demod->my_ext_attr; /* carrier detection */ - CHK_ERROR(aud_ctrl_get_carrier_detect_status(demod, status)); + rc = aud_ctrl_get_carrier_detect_status(demod, status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* rds data */ status->rds = false; - CHK_ERROR(aud_ctrl_get_cfg_rds(demod, &rds)); + rc = aud_ctrl_get_cfg_rds(demod, &rds); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } status->rds = ext_attr->aud_data.rds_data_present; /* fm_ident */ - RR16(dev_addr, AUD_DSP_RD_FM_IDENT_VALUE__A, &r_data); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_RD_FM_IDENT_VALUE__A, &r_data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } r_data >>= AUD_DSP_RD_FM_IDENT_VALUE_FM_IDENT__B; status->fm_ident = (s8) r_data; @@ -10011,6 +13860,7 @@ aud_ctrl_get_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; u16 r_volume = 0; u16 r_avc = 0; @@ -10026,13 +13876,21 @@ aud_ctrl_get_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } /* volume */ volume->mute = ext_attr->aud_data.volume.mute; - RR16(dev_addr, AUD_DSP_WR_VOLUME__A, &r_volume); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_VOLUME__A, &r_volume, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (r_volume == 0) { volume->mute = true; volume->volume = ext_attr->aud_data.volume.volume; @@ -10050,7 +13908,11 @@ aud_ctrl_get_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol } /* automatic volume control */ - RR16(dev_addr, AUD_DSP_WR_AVC__A, &r_avc); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_AVC__A, &r_avc, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((r_avc & AUD_DSP_WR_AVC_AVC_ON__M) == AUD_DSP_WR_AVC_AVC_ON_OFF) { @@ -10118,12 +13980,20 @@ aud_ctrl_get_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol /* QP vaues */ /* left carrier */ - RR16(dev_addr, AUD_DSP_RD_QPEAK_L__A, &r_strength_left); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_RD_QPEAK_L__A, &r_strength_left, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } volume->strength_left = (((s16) log1_times100(r_strength_left)) - AUD_CARRIER_STRENGTH_QP_0DB_LOG10T100) / 5; /* right carrier */ - RR16(dev_addr, AUD_DSP_RD_QPEAK_R__A, &r_strength_right); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_RD_QPEAK_R__A, &r_strength_right, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } volume->strength_right = (((s16) log1_times100(r_strength_right)) - AUD_CARRIER_STRENGTH_QP_0DB_LOG10T100) / 5; @@ -10144,6 +14014,7 @@ aud_ctrl_set_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; u16 w_volume = 0; u16 w_avc = 0; @@ -10157,7 +14028,11 @@ aud_ctrl_set_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } @@ -10168,7 +14043,11 @@ aud_ctrl_set_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol return DRX_STS_INVALID_ARG; } - RR16(dev_addr, AUD_DSP_WR_VOLUME__A, &w_volume); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_VOLUME__A, &w_volume, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* clear the volume mask */ w_volume &= (u16) ~AUD_DSP_WR_VOLUME_VOL_MAIN__M; @@ -10182,10 +14061,18 @@ aud_ctrl_set_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol AUD_DSP_WR_VOLUME_VOL_MAIN__B); } - WR16(dev_addr, AUD_DSP_WR_VOLUME__A, w_volume); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_VOLUME__A, w_volume, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* automatic volume control */ - RR16(dev_addr, AUD_DSP_WR_AVC__A, &w_avc); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_AVC__A, &w_avc, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* clear masks that require writing */ w_avc &= (u16) ~AUD_DSP_WR_AVC_AVC_ON__M; @@ -10256,7 +14143,11 @@ aud_ctrl_set_cfg_volume(struct drx_demod_instance *demod, struct drx_cfg_aud_vol w_avc &= (u16) ~AUD_DSP_WR_AVC_AVC_REF_LEV__M; w_avc |= (u16) (volume->avc_ref_level << AUD_DSP_WR_AVC_AVC_REF_LEV__B); - WR16(dev_addr, AUD_DSP_WR_AVC__A, w_avc); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_AVC__A, w_avc, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* all done, store config in data structure */ ext_attr->aud_data.volume = *volume; @@ -10278,7 +14169,7 @@ aud_ctrl_get_cfg_output_i2s(struct drx_demod_instance *demod, struct drx_cfg_i2s { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; - + int rc; u16 w_i2s_config = 0; u16 r_i2s_freq = 0; @@ -10291,12 +14182,24 @@ aud_ctrl_get_cfg_output_i2s(struct drx_demod_instance *demod, struct drx_cfg_i2s /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - RR16(dev_addr, AUD_DEM_RAM_I2S_CONFIG2__A, &w_i2s_config); - RR16(dev_addr, AUD_DSP_WR_I2S_OUT_FS__A, &r_i2s_freq); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_I2S_CONFIG2__A, &w_i2s_config, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_I2S_OUT_FS__A, &r_i2s_freq, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* I2S mode */ switch (w_i2s_config & AUD_DEM_WR_I2S_CONFIG2_I2S_SLV_MST__M) { @@ -10380,7 +14283,7 @@ aud_ctrl_set_cfg_output_i2s(struct drx_demod_instance *demod, struct drx_cfg_i2s { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; - + int rc; u16 w_i2s_config = 0; u16 w_i2s_pads_data_da = 0; u16 w_i2s_pads_data_cl = 0; @@ -10396,11 +14299,19 @@ aud_ctrl_set_cfg_output_i2s(struct drx_demod_instance *demod, struct drx_cfg_i2s /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - RR16(dev_addr, AUD_DEM_RAM_I2S_CONFIG2__A, &w_i2s_config); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_I2S_CONFIG2__A, &w_i2s_config, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* I2S mode */ w_i2s_config &= (u16) ~AUD_DEM_WR_I2S_CONFIG2_I2S_SLV_MST__M; @@ -10485,11 +14396,23 @@ aud_ctrl_set_cfg_output_i2s(struct drx_demod_instance *demod, struct drx_cfg_i2s w_i2s_freq *= 2; } - WR16(dev_addr, AUD_DEM_WR_I2S_CONFIG2__A, w_i2s_config); - WR16(dev_addr, AUD_DSP_WR_I2S_OUT_FS__A, (u16) w_i2s_freq); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_I2S_CONFIG2__A, w_i2s_config, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_I2S_OUT_FS__A, (u16)w_i2s_freq, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* configure I2S output pads for master or slave mode */ - WR16(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (output->mode == DRX_I2S_MODE_MASTER) { w_i2s_pads_data_da = SIO_PDR_I2S_DA_CFG_MODE__MASTER | @@ -10507,11 +14430,27 @@ aud_ctrl_set_cfg_output_i2s(struct drx_demod_instance *demod, struct drx_cfg_i2s SIO_PDR_I2S_WS_CFG_DRIVE__SLAVE; } - WR16(dev_addr, SIO_PDR_I2S_DA_CFG__A, w_i2s_pads_data_da); - WR16(dev_addr, SIO_PDR_I2S_CL_CFG__A, w_i2s_pads_data_cl); - WR16(dev_addr, SIO_PDR_I2S_WS_CFG__A, w_i2s_pads_data_ws); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2S_DA_CFG__A, w_i2s_pads_data_da, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2S_CL_CFG__A, w_i2s_pads_data_cl, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_I2S_WS_CFG__A, w_i2s_pads_data_ws, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - WR16(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, SIO_TOP_COMM_KEY__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* all done, store config in data structure */ ext_attr->aud_data.i2sdata = *output; @@ -10535,6 +14474,7 @@ aud_ctrl_get_cfg_auto_sound(struct drx_demod_instance *demod, enum drx_cfg_aud_auto_sound *auto_sound) { struct drxj_data *ext_attr = NULL; + int rc; u16 r_modus = 0; if (auto_sound == NULL) @@ -10544,11 +14484,19 @@ aud_ctrl_get_cfg_auto_sound(struct drx_demod_instance *demod, /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - CHK_ERROR(aud_get_modus(demod, &r_modus)); + rc = aud_get_modus(demod, &r_modus); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (r_modus & (AUD_DEM_WR_MODUS_MOD_ASS__M | AUD_DEM_WR_MODUS_MOD_DIS_STD_CHG__M)) { @@ -10589,7 +14537,7 @@ aud_ctr_setl_cfg_auto_sound(struct drx_demod_instance *demod, { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 r_modus = 0; u16 w_modus = 0; @@ -10602,11 +14550,19 @@ aud_ctr_setl_cfg_auto_sound(struct drx_demod_instance *demod, /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - CHK_ERROR(aud_get_modus(demod, &r_modus)); + rc = aud_get_modus(demod, &r_modus); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } w_modus = r_modus; /* clear ASS & ASC bits */ @@ -10631,7 +14587,11 @@ aud_ctr_setl_cfg_auto_sound(struct drx_demod_instance *demod, } if (w_modus != r_modus) { - WR16(dev_addr, AUD_DEM_WR_MODUS__A, w_modus); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_MODUS__A, w_modus, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* copy to data structure */ ext_attr->aud_data.auto_sound = *auto_sound; @@ -10654,7 +14614,7 @@ aud_ctrl_get_cfg_ass_thres(struct drx_demod_instance *demod, struct drx_cfg_aud_ { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 thres_a2 = 0; u16 thres_btsc = 0; u16 thres_nicam = 0; @@ -10668,13 +14628,29 @@ aud_ctrl_get_cfg_ass_thres(struct drx_demod_instance *demod, struct drx_cfg_aud_ /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - RR16(dev_addr, AUD_DEM_RAM_A2_THRSHLD__A, &thres_a2); - RR16(dev_addr, AUD_DEM_RAM_BTSC_THRSHLD__A, &thres_btsc); - RR16(dev_addr, AUD_DEM_RAM_NICAM_THRSHLD__A, &thres_nicam); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_A2_THRSHLD__A, &thres_a2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_BTSC_THRSHLD__A, &thres_btsc, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_NICAM_THRSHLD__A, &thres_nicam, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } thres->a2 = thres_a2; thres->btsc = thres_btsc; @@ -10698,7 +14674,7 @@ aud_ctrl_set_cfg_ass_thres(struct drx_demod_instance *demod, struct drx_cfg_aud_ { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; if (thres == NULL) { return DRX_STS_INVALID_ARG; } @@ -10708,13 +14684,29 @@ aud_ctrl_set_cfg_ass_thres(struct drx_demod_instance *demod, struct drx_cfg_aud_ /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - WR16(dev_addr, AUD_DEM_WR_A2_THRSHLD__A, thres->a2); - WR16(dev_addr, AUD_DEM_WR_BTSC_THRSHLD__A, thres->btsc); - WR16(dev_addr, AUD_DEM_WR_NICAM_THRSHLD__A, thres->nicam); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_A2_THRSHLD__A, thres->a2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_BTSC_THRSHLD__A, thres->btsc, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_NICAM_THRSHLD__A, thres->nicam, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* update DRXK data structure with hardware values */ ext_attr->aud_data.ass_thresholds = *thres; @@ -10736,7 +14728,7 @@ aud_ctrl_get_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 w_modus = 0; u16 dco_a_hi = 0; @@ -10762,11 +14754,19 @@ aud_ctrl_get_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - CHK_ERROR(aud_get_modus(demod, &w_modus)); + rc = aud_get_modus(demod, &w_modus); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Behaviour of primary audio channel */ switch (w_modus & (AUD_DEM_WR_MODUS_MOD_CM_A__M)) { @@ -10795,10 +14795,26 @@ aud_ctrl_get_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca } /* frequency adjustment for primary & secondary audio channel */ - RR16(dev_addr, AUD_DEM_RAM_DCO_A_HI__A, &dco_a_hi); - RR16(dev_addr, AUD_DEM_RAM_DCO_A_LO__A, &dco_a_lo); - RR16(dev_addr, AUD_DEM_RAM_DCO_B_HI__A, &dco_b_hi); - RR16(dev_addr, AUD_DEM_RAM_DCO_B_LO__A, &dco_b_lo); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_DCO_A_HI__A, &dco_a_hi, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_DCO_A_LO__A, &dco_a_lo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_DCO_B_HI__A, &dco_b_hi, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_DCO_B_LO__A, &dco_b_lo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } valA = (((u32) dco_a_hi) << 12) | ((u32) dco_a_lo & 0xFFF); valB = (((u32) dco_b_hi) << 12) | ((u32) dco_b_lo & 0xFFF); @@ -10809,16 +14825,32 @@ aud_ctrl_get_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca /* DC level of the incoming FM signal on the primary & seconday sound channel */ - RR16(dev_addr, AUD_DSP_RD_FM_DC_LEVEL_A__A, &dc_lvl_a); - RR16(dev_addr, AUD_DSP_RD_FM_DC_LEVEL_B__A, &dc_lvl_b); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_RD_FM_DC_LEVEL_A__A, &dc_lvl_a, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_RD_FM_DC_LEVEL_B__A, &dc_lvl_b, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* offset (kHz) = (dcLvl / 322) */ carriers->a.shift = (DRX_U16TODRXFREQ(dc_lvl_a) / 322L); carriers->b.shift = (DRX_U16TODRXFREQ(dc_lvl_b) / 322L); /* Carrier detetcion threshold for primary & secondary channel */ - RR16(dev_addr, AUD_DEM_RAM_CM_A_THRSHLD__A, &cm_thes_a); - RR16(dev_addr, AUD_DEM_RAM_CM_B_THRSHLD__A, &cm_thes_b); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_CM_A_THRSHLD__A, &cm_thes_a, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RAM_CM_B_THRSHLD__A, &cm_thes_b, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } carriers->a.thres = cm_thes_a; carriers->b.thres = cm_thes_b; @@ -10840,7 +14872,7 @@ aud_ctrl_set_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 w_modus = 0; u16 r_modus = 0; @@ -10861,11 +14893,19 @@ aud_ctrl_set_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } - CHK_ERROR(aud_get_modus(demod, &r_modus)); + rc = aud_get_modus(demod, &r_modus); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } w_modus = r_modus; w_modus &= (u16) ~AUD_DEM_WR_MODUS_MOD_CM_A__M; @@ -10898,7 +14938,11 @@ aud_ctrl_set_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca /* now update the modus register */ if (w_modus != r_modus) { - WR16(dev_addr, AUD_DEM_WR_MODUS__A, w_modus); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_MODUS__A, w_modus, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* frequency adjustment for primary & secondary audio channel */ @@ -10910,14 +14954,38 @@ aud_ctrl_set_cfg_carrier(struct drx_demod_instance *demod, struct drx_cfg_aud_ca dco_b_hi = (u16) ((valB >> 12) & 0xFFF); dco_b_lo = (u16) (valB & 0xFFF); - WR16(dev_addr, AUD_DEM_WR_DCO_A_HI__A, dco_a_hi); - WR16(dev_addr, AUD_DEM_WR_DCO_A_LO__A, dco_a_lo); - WR16(dev_addr, AUD_DEM_WR_DCO_B_HI__A, dco_b_hi); - WR16(dev_addr, AUD_DEM_WR_DCO_B_LO__A, dco_b_lo); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_DCO_A_HI__A, dco_a_hi, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_DCO_A_LO__A, dco_a_lo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_DCO_B_HI__A, dco_b_hi, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_DCO_B_LO__A, dco_b_lo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Carrier detetcion threshold for primary & secondary channel */ - WR16(dev_addr, AUD_DEM_WR_CM_A_THRSHLD__A, carriers->a.thres); - WR16(dev_addr, AUD_DEM_WR_CM_B_THRSHLD__A, carriers->b.thres); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_CM_A_THRSHLD__A, carriers->a.thres, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_CM_B_THRSHLD__A, carriers->b.thres, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* update DRXK data structure */ ext_attr->aud_data.carriers = *carriers; @@ -10940,7 +15008,7 @@ aud_ctrl_get_cfg_mixer(struct drx_demod_instance *demod, struct drx_cfg_aud_mixe { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 src_i2s_matr = 0; u16 fm_matr = 0; @@ -10953,12 +15021,20 @@ aud_ctrl_get_cfg_mixer(struct drx_demod_instance *demod, struct drx_cfg_aud_mixe /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } /* Source Selctor */ - RR16(dev_addr, AUD_DSP_WR_SRC_I2S_MATR__A, &src_i2s_matr); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_SRC_I2S_MATR__A, &src_i2s_matr, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (src_i2s_matr & AUD_DSP_WR_SRC_I2S_MATR_SRC_I2S__M) { case AUD_DSP_WR_SRC_I2S_MATR_SRC_I2S_MONO: @@ -10996,7 +15072,11 @@ aud_ctrl_get_cfg_mixer(struct drx_demod_instance *demod, struct drx_cfg_aud_mixe } /* FM Matrix */ - RR16(dev_addr, AUD_DEM_WR_FM_MATRIX__A, &fm_matr); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_WR_FM_MATRIX__A, &fm_matr, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (fm_matr & AUD_DEM_WR_FM_MATRIX__M) { case AUD_DEM_WR_FM_MATRIX_NO_MATRIX: mixer->matrix_fm = DRX_AUD_FM_MATRIX_NO_MATRIX; @@ -11035,7 +15115,7 @@ aud_ctrl_set_cfg_mixer(struct drx_demod_instance *demod, struct drx_cfg_aud_mixe { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 src_i2s_matr = 0; u16 fm_matr = 0; @@ -11048,12 +15128,20 @@ aud_ctrl_set_cfg_mixer(struct drx_demod_instance *demod, struct drx_cfg_aud_mixe /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } /* Source Selctor */ - RR16(dev_addr, AUD_DSP_WR_SRC_I2S_MATR__A, &src_i2s_matr); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_SRC_I2S_MATR__A, &src_i2s_matr, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } src_i2s_matr &= (u16) ~AUD_DSP_WR_SRC_I2S_MATR_SRC_I2S__M; switch (mixer->source_i2s) { @@ -11092,10 +15180,18 @@ aud_ctrl_set_cfg_mixer(struct drx_demod_instance *demod, struct drx_cfg_aud_mixe return DRX_STS_INVALID_ARG; } /* write the result */ - WR16(dev_addr, AUD_DSP_WR_SRC_I2S_MATR__A, src_i2s_matr); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_SRC_I2S_MATR__A, src_i2s_matr, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* FM Matrix */ - RR16(dev_addr, AUD_DEM_WR_FM_MATRIX__A, &fm_matr); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_WR_FM_MATRIX__A, &fm_matr, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } fm_matr &= (u16) ~AUD_DEM_WR_FM_MATRIX__M; switch (mixer->matrix_fm) { case DRX_AUD_FM_MATRIX_NO_MATRIX: @@ -11119,7 +15215,11 @@ aud_ctrl_set_cfg_mixer(struct drx_demod_instance *demod, struct drx_cfg_aud_mixe /* Only write if ASS is off */ if (ext_attr->aud_data.auto_sound == DRX_AUD_AUTO_SOUND_OFF) { - WR16(dev_addr, AUD_DEM_WR_FM_MATRIX__A, fm_matr); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_FM_MATRIX__A, fm_matr, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* update the data structure with hardware state */ @@ -11143,7 +15243,7 @@ aud_ctrl_set_cfg_av_sync(struct drx_demod_instance *demod, enum drx_cfg_aud_av_s { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 w_aud_vid_sync = 0; if (av_sync == NULL) { @@ -11155,12 +15255,20 @@ aud_ctrl_set_cfg_av_sync(struct drx_demod_instance *demod, enum drx_cfg_aud_av_s /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } /* audio/video synchronisation */ - RR16(dev_addr, AUD_DSP_WR_AV_SYNC__A, &w_aud_vid_sync); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_AV_SYNC__A, &w_aud_vid_sync, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } w_aud_vid_sync &= (u16) ~AUD_DSP_WR_AV_SYNC_AV_ON__M; @@ -11189,7 +15297,11 @@ aud_ctrl_set_cfg_av_sync(struct drx_demod_instance *demod, enum drx_cfg_aud_av_s return DRX_STS_INVALID_ARG; } - WR16(dev_addr, AUD_DSP_WR_AV_SYNC__A, w_aud_vid_sync); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_AV_SYNC__A, w_aud_vid_sync, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return DRX_STS_OK; rw_error: return DRX_STS_ERROR; @@ -11208,7 +15320,7 @@ aud_ctrl_get_cfg_av_sync(struct drx_demod_instance *demod, enum drx_cfg_aud_av_s { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 w_aud_vid_sync = 0; if (av_sync == NULL) { @@ -11220,12 +15332,20 @@ aud_ctrl_get_cfg_av_sync(struct drx_demod_instance *demod, enum drx_cfg_aud_av_s /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } /* audio/video synchronisation */ - RR16(dev_addr, AUD_DSP_WR_AV_SYNC__A, &w_aud_vid_sync); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_AV_SYNC__A, &w_aud_vid_sync, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((w_aud_vid_sync & AUD_DSP_WR_AV_SYNC_AV_ON__M) == AUD_DSP_WR_AV_SYNC_AV_ON_DISABLE) { @@ -11263,11 +15383,16 @@ static int aud_ctrl_get_cfg_dev(struct drx_demod_instance *demod, enum drx_cfg_aud_deviation *dev) { u16 r_modus = 0; + int rc; if (dev == NULL) return DRX_STS_INVALID_ARG; - CHK_ERROR(aud_get_modus(demod, &r_modus)); + rc = aud_get_modus(demod, &r_modus); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (r_modus & AUD_DEM_WR_MODUS_MOD_HDEV_A__M) { case AUD_DEM_WR_MODUS_MOD_HDEV_A_NORMAL: @@ -11297,7 +15422,7 @@ aud_ctrl_set_cfg_dev(struct drx_demod_instance *demod, enum drx_cfg_aud_deviatio { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 w_modus = 0; u16 r_modus = 0; @@ -11308,7 +15433,11 @@ aud_ctrl_set_cfg_dev(struct drx_demod_instance *demod, enum drx_cfg_aud_deviatio ext_attr = (struct drxj_data *) demod->my_ext_attr; dev_addr = demod->my_i2c_dev_addr; - CHK_ERROR(aud_get_modus(demod, &r_modus)); + rc = aud_get_modus(demod, &r_modus); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } w_modus = r_modus; @@ -11327,7 +15456,11 @@ aud_ctrl_set_cfg_dev(struct drx_demod_instance *demod, enum drx_cfg_aud_deviatio /* now update the modus register */ if (w_modus != r_modus) { - WR16(dev_addr, AUD_DEM_WR_MODUS__A, w_modus); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_MODUS__A, w_modus, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* store in drxk data struct */ ext_attr->aud_data.deviation = *dev; @@ -11349,7 +15482,7 @@ aud_ctrl_get_cfg_prescale(struct drx_demod_instance *demod, struct drx_cfg_aud_p { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 r_max_fm_deviation = 0; u16 r_nicam_prescaler = 0; @@ -11362,13 +15495,25 @@ aud_ctrl_get_cfg_prescale(struct drx_demod_instance *demod, struct drx_cfg_aud_p /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } /* read register data */ - RR16(dev_addr, AUD_DSP_WR_NICAM_PRESC__A, &r_nicam_prescaler); - RR16(dev_addr, AUD_DSP_WR_FM_PRESC__A, &r_max_fm_deviation); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_NICAM_PRESC__A, &r_nicam_prescaler, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DSP_WR_FM_PRESC__A, &r_max_fm_deviation, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* calculate max FM deviation */ r_max_fm_deviation >>= AUD_DSP_WR_FM_PRESC_FM_AM_PRESC__B; @@ -11423,7 +15568,7 @@ aud_ctrl_set_cfg_prescale(struct drx_demod_instance *demod, struct drx_cfg_aud_p { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 w_max_fm_deviation = 0; u16 nicam_prescaler; @@ -11436,7 +15581,11 @@ aud_ctrl_set_cfg_prescale(struct drx_demod_instance *demod, struct drx_cfg_aud_p /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } @@ -11483,8 +15632,16 @@ aud_ctrl_set_cfg_prescale(struct drx_demod_instance *demod, struct drx_cfg_aud_p } /* end of setting NICAM Prescaler */ - WR16(dev_addr, AUD_DSP_WR_NICAM_PRESC__A, nicam_prescaler); - WR16(dev_addr, AUD_DSP_WR_FM_PRESC__A, w_max_fm_deviation); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_NICAM_PRESC__A, nicam_prescaler, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_FM_PRESC__A, w_max_fm_deviation, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.prescale = *presc; @@ -11504,7 +15661,7 @@ static int aud_ctrl_beep(struct drx_demod_instance *demod, struct drx_aud_beep * { struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; - + int rc; u16 the_beep = 0; u16 volume = 0; u32 frequency = 0; @@ -11518,7 +15675,11 @@ static int aud_ctrl_beep(struct drx_demod_instance *demod, struct drx_aud_beep * /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } @@ -11543,7 +15704,11 @@ static int aud_ctrl_beep(struct drx_demod_instance *demod, struct drx_aud_beep * the_beep = 0; } - WR16(dev_addr, AUD_DSP_WR_BEEPER__A, the_beep); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_BEEPER__A, the_beep, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return DRX_STS_OK; rw_error: @@ -11563,7 +15728,7 @@ aud_ctrl_set_standard(struct drx_demod_instance *demod, enum drx_aud_standard *s struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; enum drx_standard current_standard = DRX_STANDARD_UNKNOWN; - + int rc; u16 w_standard = 0; u16 w_modus = 0; u16 r_modus = 0; @@ -11581,7 +15746,11 @@ aud_ctrl_set_standard(struct drx_demod_instance *demod, enum drx_aud_standard *s /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, false)); + rc = power_up_aud(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } @@ -11594,19 +15763,54 @@ aud_ctrl_set_standard(struct drx_demod_instance *demod, enum drx_aud_standard *s ext_attr->aud_data.volume.mute = true; /* restore data structure from DRX ExtAttr, call volume first to mute */ - CHK_ERROR(aud_ctrl_set_cfg_volume(demod, &ext_attr->aud_data.volume)); - CHK_ERROR(aud_ctrl_set_cfg_carrier(demod, &ext_attr->aud_data.carriers)); - CHK_ERROR(aud_ctrl_set_cfg_ass_thres - (demod, &ext_attr->aud_data.ass_thresholds)); - CHK_ERROR(aud_ctr_setl_cfg_auto_sound(demod, &ext_attr->aud_data.auto_sound)); - CHK_ERROR(aud_ctrl_set_cfg_mixer(demod, &ext_attr->aud_data.mixer)); - CHK_ERROR(aud_ctrl_set_cfg_av_sync(demod, &ext_attr->aud_data.av_sync)); - CHK_ERROR(aud_ctrl_set_cfg_output_i2s(demod, &ext_attr->aud_data.i2sdata)); + rc = aud_ctrl_set_cfg_volume(demod, &ext_attr->aud_data.volume); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = aud_ctrl_set_cfg_carrier(demod, &ext_attr->aud_data.carriers); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = aud_ctrl_set_cfg_ass_thres(demod, &ext_attr->aud_data.ass_thresholds); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = aud_ctr_setl_cfg_auto_sound(demod, &ext_attr->aud_data.auto_sound); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = aud_ctrl_set_cfg_mixer(demod, &ext_attr->aud_data.mixer); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = aud_ctrl_set_cfg_av_sync(demod, &ext_attr->aud_data.av_sync); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = aud_ctrl_set_cfg_output_i2s(demod, &ext_attr->aud_data.i2sdata); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* get prescaler from presets */ - CHK_ERROR(aud_ctrl_set_cfg_prescale(demod, &ext_attr->aud_data.prescale)); + rc = aud_ctrl_set_cfg_prescale(demod, &ext_attr->aud_data.prescale); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(aud_get_modus(demod, &r_modus)); + rc = aud_get_modus(demod, &r_modus); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } w_modus = r_modus; @@ -11702,10 +15906,18 @@ aud_ctrl_set_standard(struct drx_demod_instance *demod, enum drx_aud_standard *s } if (w_modus != r_modus) { - WR16(dev_addr, AUD_DEM_WR_MODUS__A, w_modus); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_MODUS__A, w_modus, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } - WR16(dev_addr, AUD_DEM_WR_STANDARD_SEL__A, w_standard); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DEM_WR_STANDARD_SEL__A, w_standard, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /**************************************************************************/ /* NOT calling aud_ctrl_set_cfg_volume to avoid interfering standard */ @@ -11716,7 +15928,11 @@ aud_ctrl_set_standard(struct drx_demod_instance *demod, enum drx_aud_standard *s if (ext_attr->aud_data.volume.mute == false) { w_volume |= (u16) ((volume_buffer + AUD_VOLUME_ZERO_DB) << AUD_DSP_WR_VOLUME_VOL_MAIN__B); - WR16(dev_addr, AUD_DSP_WR_VOLUME__A, w_volume); + rc = DRXJ_DAP.write_reg16func(dev_addr, AUD_DSP_WR_VOLUME__A, w_volume, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* write standard selected */ @@ -11739,7 +15955,7 @@ aud_ctrl_get_standard(struct drx_demod_instance *demod, enum drx_aud_standard *s { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; - + int rc; u16 r_data = 0; if (standard == NULL) { @@ -11751,13 +15967,21 @@ aud_ctrl_get_standard(struct drx_demod_instance *demod, enum drx_aud_standard *s /* power up */ if (ext_attr->aud_data.audio_is_active == false) { - CHK_ERROR(power_up_aud(demod, true)); + rc = power_up_aud(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->aud_data.audio_is_active = true; } *standard = DRX_AUD_STANDARD_UNKNOWN; - RR16(dev_addr, AUD_DEM_RD_STANDARD_RES__A, &r_data); + rc = DRXJ_DAP.read_reg16func(dev_addr, AUD_DEM_RD_STANDARD_RES__A, &r_data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* return OK if the detection is not ready yet */ if (r_data >= AUD_DEM_RD_STANDARD_RES_STD_RESULT_DETECTION_STILL_ACTIVE) { @@ -11845,9 +16069,14 @@ static int fm_lock_status(struct drx_demod_instance *demod, enum drx_lock_status *lock_stat) { struct drx_aud_status status; + int rc; /* Check detection of audio carriers */ - CHK_ERROR(aud_ctrl_get_carrier_detect_status(demod, &status)); + rc = aud_ctrl_get_carrier_detect_status(demod, &status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* locked if either primary or secondary carrier is detected */ if ((status.carrier_a == true) || (status.carrier_b == true)) { @@ -11877,8 +16106,13 @@ static int fm_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_quality) { enum drx_lock_status lock_status = DRX_NOT_LOCKED; + int rc; - CHK_ERROR(fm_lock_status(demod, &lock_status)); + rc = fm_lock_status(demod, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (lock_status == DRX_LOCKED) { sig_quality->indicator = 100; } else { @@ -11918,6 +16152,7 @@ get_oob_lock_status(struct drx_demod_instance *demod, struct i2c_device_addr *dev_addr, enum drx_lock_status *oob_lock) { struct drxjscu_cmd scu_cmd; + int rc; u16 cmd_result[2]; u16 oob_lock_state; @@ -11929,7 +16164,11 @@ get_oob_lock_status(struct drx_demod_instance *demod, scu_cmd.result = cmd_result; scu_cmd.parameter_len = 0; - CHK_ERROR(scu_command(dev_addr, &scu_cmd)); + rc = scu_command(dev_addr, &scu_cmd); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (scu_cmd.result[1] < 0x4000) { /* 0x00 NOT LOCKED */ @@ -11982,6 +16221,7 @@ get_oob_symbol_rate_offset(struct i2c_device_addr *dev_addr, s32 *symbol_rate_of /* trim 12656250/15625 = 810 */ /* offset = -{(timing_offset*(symbol_rate * 2^-5))/(2^8*810)} [ppm] */ /* offset = -[(symbol_rate * 2^-5)*(timing_offset)/(2^8)]/810 [ppm] */ + int rc; s32 timing_offset = 0; u32 unsigned_timing_offset = 0; s32 division_factor = 810; @@ -11991,7 +16231,11 @@ get_oob_symbol_rate_offset(struct i2c_device_addr *dev_addr, s32 *symbol_rate_of *symbol_rate_offset = 0; /* read data rate */ - SARR16(dev_addr, SCU_RAM_ORX_RF_RX_DATA_RATE__A, &data); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ORX_RF_RX_DATA_RATE__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (data & SCU_RAM_ORX_RF_RX_DATA_RATE__M) { case SCU_RAM_ORX_RF_RX_DATA_RATE_2048KBPS_REGSPEC: case SCU_RAM_ORX_RF_RX_DATA_RATE_2048KBPS_INVSPEC: @@ -12011,7 +16255,11 @@ get_oob_symbol_rate_offset(struct i2c_device_addr *dev_addr, s32 *symbol_rate_of return (DRX_STS_ERROR); } - RR16(dev_addr, ORX_CON_CTI_DTI_R__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_CON_CTI_DTI_R__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* convert data to positive and keep information about sign */ if ((data & 0x8000) == 0x8000) { if (data == 0x8000) @@ -12052,6 +16300,9 @@ rw_error: static int get_oob_freq_offset(struct drx_demod_instance *demod, s32 *freq_offset) { + struct drx_common_attr *common_attr = (struct drx_common_attr *) (NULL); + struct i2c_device_addr *dev_addr = NULL; + int rc; u16 data = 0; u16 rot = 0; u16 symbol_rateReg = 0; @@ -12063,8 +16314,6 @@ get_oob_freq_offset(struct drx_demod_instance *demod, s32 *freq_offset) u32 data64hi = 0; u32 data64lo = 0; u32 temp_freq_offset = 0; - struct drx_common_attr *common_attr = (struct drx_common_attr *) (NULL); - struct i2c_device_addr *dev_addr = NULL; /* check arguments */ if ((demod == NULL) || (freq_offset == NULL)) { @@ -12077,10 +16326,18 @@ get_oob_freq_offset(struct drx_demod_instance *demod, s32 *freq_offset) *freq_offset = 0; /* read sign (spectrum inversion) */ - RR16(dev_addr, ORX_FWP_IQM_FRQ_W__A, &rot); + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_FWP_IQM_FRQ_W__A, &rot, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* read frequency offset */ - SARR16(dev_addr, SCU_RAM_ORX_FRQ_OFFSET__A, &data); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ORX_FRQ_OFFSET__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* find COARSE frequency offset */ /* coarse_freq_offset = ( 25312500Hz*FRQ_OFFSET >> 21 ); */ if (data & 0x8000) { @@ -12094,7 +16351,11 @@ get_oob_freq_offset(struct drx_demod_instance *demod, s32 *freq_offset) /* get value in KHz */ coarse_freq_offset = coarse_sign * frac(temp_freq_offset, 1000, FRAC_ROUND); /* KHz */ /* read data rate */ - SARR16(dev_addr, SCU_RAM_ORX_RF_RX_DATA_RATE__A, &symbol_rateReg); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ORX_RF_RX_DATA_RATE__A, &symbol_rateReg, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (symbol_rateReg & SCU_RAM_ORX_RF_RX_DATA_RATE__M) { case SCU_RAM_ORX_RF_RX_DATA_RATE_2048KBPS_REGSPEC: case SCU_RAM_ORX_RF_RX_DATA_RATE_2048KBPS_INVSPEC: @@ -12116,7 +16377,11 @@ get_oob_freq_offset(struct drx_demod_instance *demod, s32 *freq_offset) /* find FINE frequency offset */ /* fine_freq_offset = ( (CORRECTION_VALUE*symbol_rate) >> 18 ); */ - RR16(dev_addr, ORX_CON_CPH_FRQ_R__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_CON_CPH_FRQ_R__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* at least 5 MSB are 0 so first divide with 2^5 without information loss */ fine_freq_offset = (symbol_rate >> 5); if (data & 0x8000) { @@ -12153,20 +16418,29 @@ rw_error: static int get_oob_frequency(struct drx_demod_instance *demod, s32 *frequency) { + struct i2c_device_addr *dev_addr = NULL; + int rc; u16 data = 0; s32 freq_offset = 0; s32 freq = 0; - struct i2c_device_addr *dev_addr = NULL; dev_addr = demod->my_i2c_dev_addr; *frequency = 0; /* KHz */ - SARR16(dev_addr, SCU_RAM_ORX_RF_RX_FREQUENCY_VALUE__A, &data); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ORX_RF_RX_FREQUENCY_VALUE__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } freq = (s32) ((s32) data * 50 + 50000L); - CHK_ERROR(get_oob_freq_offset(demod, &freq_offset)); + rc = get_oob_freq_offset(demod, &freq_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } *frequency = freq + freq_offset; @@ -12187,11 +16461,16 @@ rw_error: */ static int get_oobmer(struct i2c_device_addr *dev_addr, u32 *mer) { + int rc; u16 data = 0; *mer = 0; /* READ MER */ - RR16(dev_addr, ORX_EQU_MER_MER_R__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_EQU_MER_MER_R__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (data) { case 0: /* fall through */ case 1: @@ -12328,11 +16607,16 @@ rw_error: */ static int set_orx_nsu_aox(struct drx_demod_instance *demod, bool active) { - u16 data = 0; struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; + int rc; + u16 data = 0; /* Configure NSU_AOX */ - RR16(dev_addr, ORX_NSU_AOX_STDBY_W__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_NSU_AOX_STDBY_W__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (!active) { data &= ((~ORX_NSU_AOX_STDBY_W_STDBYADC_A2_ON) & (~ORX_NSU_AOX_STDBY_W_STDBYAMP_A2_ON) @@ -12354,7 +16638,11 @@ static int set_orx_nsu_aox(struct drx_demod_instance *demod, bool active) | ORX_NSU_AOX_STDBY_W_STDBYTAGC_RF_A2_ON | ORX_NSU_AOX_STDBY_W_STDBYFLT_A2_ON); } - WR16(dev_addr, ORX_NSU_AOX_STDBY_W__A, data); + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_NSU_AOX_STDBY_W__A, data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -12388,6 +16676,7 @@ rw_error: static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_param) { #ifndef DRXJ_DIGITAL_ONLY + int rc; s32 freq = 0; /* KHz */ struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; @@ -12424,9 +16713,21 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par scu_cmd.parameter_len = 0; scu_cmd.result_len = 1; scu_cmd.result = cmd_result; - CHK_ERROR(scu_command(dev_addr, &scu_cmd)); - CHK_ERROR(set_orx_nsu_aox(demod, false)); - WR16(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_STOP); + rc = scu_command(dev_addr, &scu_cmd); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_orx_nsu_aox(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->oob_power_on = false; return (DRX_STS_OK); @@ -12454,13 +16755,21 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par /*********/ /* Stop */ /*********/ - WR16(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } scu_cmd.command = SCU_RAM_COMMAND_STANDARD_OOB | SCU_RAM_COMMAND_CMD_DEMOD_STOP; scu_cmd.parameter_len = 0; scu_cmd.result_len = 1; scu_cmd.result = cmd_result; - CHK_ERROR(scu_command(dev_addr, &scu_cmd)); + rc = scu_command(dev_addr, &scu_cmd); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*********/ /* Reset */ /*********/ @@ -12469,7 +16778,11 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par scu_cmd.parameter_len = 0; scu_cmd.result_len = 1; scu_cmd.result = cmd_result; - CHK_ERROR(scu_command(dev_addr, &scu_cmd)); + rc = scu_command(dev_addr, &scu_cmd); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /***********/ /* SET_ENV */ /***********/ @@ -12541,94 +16854,294 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par scu_cmd.result_len = 1; scu_cmd.result = cmd_result; mode_index = mode_val[(set_param_parameters[0] & 0xC0) >> 6]; - CHK_ERROR(scu_command(dev_addr, &scu_cmd)); - - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA); /* Write magic word to enable pdr reg write */ - WR16(dev_addr, SIO_PDR_OOB_CRX_CFG__A, - OOB_CRX_DRIVE_STRENGTH << SIO_PDR_OOB_CRX_CFG_DRIVE__B - | 0x03 << SIO_PDR_OOB_CRX_CFG_MODE__B); - WR16(dev_addr, SIO_PDR_OOB_DRX_CFG__A, - OOB_DRX_DRIVE_STRENGTH << SIO_PDR_OOB_DRX_CFG_DRIVE__B - | 0x03 << SIO_PDR_OOB_DRX_CFG_MODE__B); - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000); /* Write magic word to disable pdr reg write */ - - WR16(dev_addr, ORX_TOP_COMM_KEY__A, 0); - WR16(dev_addr, ORX_FWP_AAG_LEN_W__A, 16000); - WR16(dev_addr, ORX_FWP_AAG_THR_W__A, 40); + rc = scu_command(dev_addr, &scu_cmd); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write magic word to enable pdr reg write */ + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_OOB_CRX_CFG__A, OOB_CRX_DRIVE_STRENGTH << SIO_PDR_OOB_CRX_CFG_DRIVE__B | 0x03 << SIO_PDR_OOB_CRX_CFG_MODE__B, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_PDR_OOB_DRX_CFG__A, OOB_DRX_DRIVE_STRENGTH << SIO_PDR_OOB_DRX_CFG_DRIVE__B | 0x03 << SIO_PDR_OOB_DRX_CFG_MODE__B, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0x0000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Write magic word to disable pdr reg write */ + + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_TOP_COMM_KEY__A, 0, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_FWP_AAG_LEN_W__A, 16000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_FWP_AAG_THR_W__A, 40, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* ddc */ - WR16(dev_addr, ORX_DDC_OFO_SET_W__A, ORX_DDC_OFO_SET_W__PRE); + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_DDC_OFO_SET_W__A, ORX_DDC_OFO_SET_W__PRE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* nsu */ - WR16(dev_addr, ORX_NSU_AOX_LOPOW_W__A, ext_attr->oob_lo_pow); + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_NSU_AOX_LOPOW_W__A, ext_attr->oob_lo_pow, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* initialization for target mode */ - WR16(dev_addr, SCU_RAM_ORX_TARGET_MODE__A, - SCU_RAM_ORX_TARGET_MODE_2048KBPS_SQRT); - WR16(dev_addr, SCU_RAM_ORX_FREQ_GAIN_CORR__A, - SCU_RAM_ORX_FREQ_GAIN_CORR_2048KBPS); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_TARGET_MODE__A, SCU_RAM_ORX_TARGET_MODE_2048KBPS_SQRT, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_FREQ_GAIN_CORR__A, SCU_RAM_ORX_FREQ_GAIN_CORR_2048KBPS, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Reset bits for timing and freq. recovery */ - WR16(dev_addr, SCU_RAM_ORX_RST_CPH__A, 0x0001); - WR16(dev_addr, SCU_RAM_ORX_RST_CTI__A, 0x0002); - WR16(dev_addr, SCU_RAM_ORX_RST_KRN__A, 0x0004); - WR16(dev_addr, SCU_RAM_ORX_RST_KRP__A, 0x0008); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_RST_CPH__A, 0x0001, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_RST_CTI__A, 0x0002, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_RST_KRN__A, 0x0004, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_RST_KRP__A, 0x0008, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* AGN_LOCK = {2048>>3, -2048, 8, -8, 0, 1}; */ - WR16(dev_addr, SCU_RAM_ORX_AGN_LOCK_TH__A, 2048 >> 3); - WR16(dev_addr, SCU_RAM_ORX_AGN_LOCK_TOTH__A, (u16) (-2048)); - WR16(dev_addr, SCU_RAM_ORX_AGN_ONLOCK_TTH__A, 8); - WR16(dev_addr, SCU_RAM_ORX_AGN_UNLOCK_TTH__A, (u16) (-8)); - WR16(dev_addr, SCU_RAM_ORX_AGN_LOCK_MASK__A, 1); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_AGN_LOCK_TH__A, 2048 >> 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_AGN_LOCK_TOTH__A, (u16)(-2048), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_AGN_ONLOCK_TTH__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_AGN_UNLOCK_TTH__A, (u16)(-8), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_AGN_LOCK_MASK__A, 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* DGN_LOCK = {10, -2048, 8, -8, 0, 1<<1}; */ - WR16(dev_addr, SCU_RAM_ORX_DGN_LOCK_TH__A, 10); - WR16(dev_addr, SCU_RAM_ORX_DGN_LOCK_TOTH__A, (u16) (-2048)); - WR16(dev_addr, SCU_RAM_ORX_DGN_ONLOCK_TTH__A, 8); - WR16(dev_addr, SCU_RAM_ORX_DGN_UNLOCK_TTH__A, (u16) (-8)); - WR16(dev_addr, SCU_RAM_ORX_DGN_LOCK_MASK__A, 1 << 1); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_DGN_LOCK_TH__A, 10, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_DGN_LOCK_TOTH__A, (u16)(-2048), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_DGN_ONLOCK_TTH__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_DGN_UNLOCK_TTH__A, (u16)(-8), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_DGN_LOCK_MASK__A, 1 << 1, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* FRQ_LOCK = {15,-2048, 8, -8, 0, 1<<2}; */ - WR16(dev_addr, SCU_RAM_ORX_FRQ_LOCK_TH__A, 17); - WR16(dev_addr, SCU_RAM_ORX_FRQ_LOCK_TOTH__A, (u16) (-2048)); - WR16(dev_addr, SCU_RAM_ORX_FRQ_ONLOCK_TTH__A, 8); - WR16(dev_addr, SCU_RAM_ORX_FRQ_UNLOCK_TTH__A, (u16) (-8)); - WR16(dev_addr, SCU_RAM_ORX_FRQ_LOCK_MASK__A, 1 << 2); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_FRQ_LOCK_TH__A, 17, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_FRQ_LOCK_TOTH__A, (u16)(-2048), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_FRQ_ONLOCK_TTH__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_FRQ_UNLOCK_TTH__A, (u16)(-8), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_FRQ_LOCK_MASK__A, 1 << 2, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PHA_LOCK = {5000, -2048, 8, -8, 0, 1<<3}; */ - WR16(dev_addr, SCU_RAM_ORX_PHA_LOCK_TH__A, 3000); - WR16(dev_addr, SCU_RAM_ORX_PHA_LOCK_TOTH__A, (u16) (-2048)); - WR16(dev_addr, SCU_RAM_ORX_PHA_ONLOCK_TTH__A, 8); - WR16(dev_addr, SCU_RAM_ORX_PHA_UNLOCK_TTH__A, (u16) (-8)); - WR16(dev_addr, SCU_RAM_ORX_PHA_LOCK_MASK__A, 1 << 3); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_PHA_LOCK_TH__A, 3000, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_PHA_LOCK_TOTH__A, (u16)(-2048), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_PHA_ONLOCK_TTH__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_PHA_UNLOCK_TTH__A, (u16)(-8), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_PHA_LOCK_MASK__A, 1 << 3, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TIM_LOCK = {300, -2048, 8, -8, 0, 1<<4}; */ - WR16(dev_addr, SCU_RAM_ORX_TIM_LOCK_TH__A, 400); - WR16(dev_addr, SCU_RAM_ORX_TIM_LOCK_TOTH__A, (u16) (-2048)); - WR16(dev_addr, SCU_RAM_ORX_TIM_ONLOCK_TTH__A, 8); - WR16(dev_addr, SCU_RAM_ORX_TIM_UNLOCK_TTH__A, (u16) (-8)); - WR16(dev_addr, SCU_RAM_ORX_TIM_LOCK_MASK__A, 1 << 4); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_TIM_LOCK_TH__A, 400, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_TIM_LOCK_TOTH__A, (u16)(-2048), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_TIM_ONLOCK_TTH__A, 8, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_TIM_UNLOCK_TTH__A, (u16)(-8), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_TIM_LOCK_MASK__A, 1 << 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* EQU_LOCK = {20, -2048, 8, -8, 0, 1<<5}; */ - WR16(dev_addr, SCU_RAM_ORX_EQU_LOCK_TH__A, 20); - WR16(dev_addr, SCU_RAM_ORX_EQU_LOCK_TOTH__A, (u16) (-2048)); - WR16(dev_addr, SCU_RAM_ORX_EQU_ONLOCK_TTH__A, 4); - WR16(dev_addr, SCU_RAM_ORX_EQU_UNLOCK_TTH__A, (u16) (-4)); - WR16(dev_addr, SCU_RAM_ORX_EQU_LOCK_MASK__A, 1 << 5); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_EQU_LOCK_TH__A, 20, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_EQU_LOCK_TOTH__A, (u16)(-2048), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_EQU_ONLOCK_TTH__A, 4, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_EQU_UNLOCK_TTH__A, (u16)(-4), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_ORX_EQU_LOCK_MASK__A, 1 << 5, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* PRE-Filter coefficients (PFI) */ - WRB(dev_addr, ORX_FWP_PFI_A_W__A, sizeof(pfi_coeffs[mode_index]), - ((u8 *)pfi_coeffs[mode_index])); - WR16(dev_addr, ORX_TOP_MDE_W__A, mode_index); + rc = DRXJ_DAP.write_block_func(dev_addr, ORX_FWP_PFI_A_W__A, sizeof(pfi_coeffs[mode_index]), ((u8 *)pfi_coeffs[mode_index]), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_TOP_MDE_W__A, mode_index, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* NYQUIST-Filter coefficients (NYQ) */ for (i = 0; i < (NYQFILTERLEN + 1) / 2; i++) { - WR16(dev_addr, ORX_FWP_NYQ_ADR_W__A, i); - WR16(dev_addr, ORX_FWP_NYQ_COF_RW__A, - nyquist_coeffs[mode_index][i]); + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_FWP_NYQ_ADR_W__A, i, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_FWP_NYQ_COF_RW__A, nyquist_coeffs[mode_index][i], 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_FWP_NYQ_ADR_W__A, 31, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - WR16(dev_addr, ORX_FWP_NYQ_ADR_W__A, 31); - WR16(dev_addr, ORX_COMM_EXEC__A, ORX_COMM_EXEC_ACTIVE); /*********/ /* Start */ /*********/ @@ -12637,10 +17150,22 @@ static int ctrl_set_oob(struct drx_demod_instance *demod, struct drxoob *oob_par scu_cmd.parameter_len = 0; scu_cmd.result_len = 1; scu_cmd.result = cmd_result; - CHK_ERROR(scu_command(dev_addr, &scu_cmd)); + rc = scu_command(dev_addr, &scu_cmd); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(set_orx_nsu_aox(demod, true)); - WR16(dev_addr, ORX_NSU_AOX_STHR_W__A, ext_attr->oob_pre_saw); + rc = set_orx_nsu_aox(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_NSU_AOX_STHR_W__A, ext_attr->oob_pre_saw, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->oob_power_on = true; @@ -12661,6 +17186,7 @@ static int ctrl_get_oob(struct drx_demod_instance *demod, struct drxoob_status *oob_status) { #ifndef DRXJ_DIGITAL_ONLY + int rc; struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; u16 data = 0; @@ -12676,17 +17202,52 @@ ctrl_get_oob(struct drx_demod_instance *demod, struct drxoob_status *oob_status) if (ext_attr->oob_power_on == false) return (DRX_STS_ERROR); - RR16(dev_addr, ORX_DDC_OFO_SET_W__A, &data); - RR16(dev_addr, ORX_NSU_TUN_RFGAIN_W__A, &data); - RR16(dev_addr, ORX_FWP_AAG_THR_W__A, &data); - SARR16(dev_addr, SCU_RAM_ORX_DGN_KI__A, &data); - RR16(dev_addr, ORX_FWP_SRC_DGN_W__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_DDC_OFO_SET_W__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_NSU_TUN_RFGAIN_W__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_FWP_AAG_THR_W__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ORX_DGN_KI__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_FWP_SRC_DGN_W__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(get_oob_lock_status(demod, dev_addr, &oob_status->lock)); - CHK_ERROR(get_oob_frequency(demod, &oob_status->frequency)); - CHK_ERROR(get_oobmer(dev_addr, &oob_status->mer)); - CHK_ERROR(get_oob_symbol_rate_offset - (dev_addr, &oob_status->symbol_rate_offset)); + rc = get_oob_lock_status(demod, dev_addr, &oob_status->lock); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = get_oob_frequency(demod, &oob_status->frequency); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = get_oobmer(dev_addr, &oob_status->mer); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = get_oob_symbol_rate_offset(dev_addr, &oob_status->symbol_rate_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -12706,6 +17267,7 @@ ctrl_set_cfg_oob_pre_saw(struct drx_demod_instance *demod, u16 *cfg_data) { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; if (cfg_data == NULL) { return (DRX_STS_INVALID_ARG); @@ -12713,7 +17275,11 @@ ctrl_set_cfg_oob_pre_saw(struct drx_demod_instance *demod, u16 *cfg_data) dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; - WR16(dev_addr, ORX_NSU_AOX_STHR_W__A, *cfg_data); + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_NSU_AOX_STHR_W__A, *cfg_data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->oob_pre_saw = *cfg_data; return (DRX_STS_OK); rw_error: @@ -12755,6 +17321,7 @@ ctrl_set_cfg_oob_lo_power(struct drx_demod_instance *demod, enum drxj_cfg_oob_lo { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; if (cfg_data == NULL) { return (DRX_STS_INVALID_ARG); @@ -12762,7 +17329,11 @@ ctrl_set_cfg_oob_lo_power(struct drx_demod_instance *demod, enum drxj_cfg_oob_lo dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; - WR16(dev_addr, ORX_NSU_AOX_LOPOW_W__A, *cfg_data); + rc = DRXJ_DAP.write_reg16func(dev_addr, ORX_NSU_AOX_LOPOW_W__A, *cfg_data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->oob_lo_pow = *cfg_data; return (DRX_STS_OK); rw_error: @@ -12816,7 +17387,7 @@ ctrl_get_cfg_oob_lo_power(struct drx_demod_instance *demod, enum drxj_cfg_oob_lo static int ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) { - + int rc; s32 tuner_set_freq = 0; s32 tuner_get_freq = 0; s32 tuner_freq_offset = 0; @@ -12927,7 +17498,11 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) min_symbol_rate = DRXJ_QAM_SYMBOLRATE_MIN; max_symbol_rate = DRXJ_QAM_SYMBOLRATE_MAX; /* config SMA_TX pin to SAW switch mode */ - CHK_ERROR(ctrl_set_uio_cfg(demod, &uio_cfg)); + rc = ctrl_set_uio_cfg(demod, &uio_cfg); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (channel->symbolrate < min_symbol_rate || channel->symbolrate > max_symbol_rate) { @@ -13019,10 +17594,18 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) return (DRX_STS_INVALID_ARG); } - CHK_ERROR(ctrl_uio_write(demod, &uio1)); + rc = ctrl_uio_write(demod, &uio1); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } #endif /* DRXJ_VSB_ONLY */ - WR16(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /*== Tune, fast mode ======================================================*/ if (demod->my_tuner != NULL) { /* Determine tuner mode and freq to tune to ... */ @@ -13089,23 +17672,35 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) if (common_attr->tuner_port_nr == 1) { /* close tuner bridge */ bridge_closed = true; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* set tuner frequency */ } - CHK_ERROR(drxbsp_tuner_set_frequency(demod->my_tuner, - tuner_mode, tuner_set_freq)); + rc = drxbsp_tuner_set_frequency(demod->my_tuner, tuner_mode, tuner_set_freq); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (common_attr->tuner_port_nr == 1) { /* open tuner bridge */ bridge_closed = false; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* Get actual frequency set by tuner and compute offset */ - CHK_ERROR(drxbsp_tuner_get_frequency(demod->my_tuner, - 0, - &tuner_get_freq, - &intermediate_freq)); + rc = drxbsp_tuner_get_frequency(demod->my_tuner, 0, &tuner_get_freq, &intermediate_freq); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } tuner_freq_offset = tuner_get_freq - tuner_set_freq; common_attr->intermediate_freq = intermediate_freq; } else { @@ -13122,8 +17717,16 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) } else { ext_attr->mirror = channel->mirror; } - CHK_ERROR(set_vsb(demod)); - CHK_ERROR(set_frequency(demod, channel, tuner_freq_offset)); + rc = set_vsb(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_frequency(demod, channel, tuner_freq_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #ifndef DRXJ_DIGITAL_ONLY case DRX_STANDARD_NTSC: /* fallthrough */ @@ -13138,15 +17741,22 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) } else { ext_attr->mirror = channel->mirror; } - CHK_ERROR(set_atv_channel(demod, - tuner_freq_offset, channel, standard)); + rc = set_atv_channel(demod, tuner_freq_offset, channel, standard); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif #ifndef DRXJ_VSB_ONLY case DRX_STANDARD_ITU_A: /* fallthrough */ case DRX_STANDARD_ITU_B: /* fallthrough */ case DRX_STANDARD_ITU_C: - CHK_ERROR(set_qamChannel(demod, channel, tuner_freq_offset)); + rc = set_qamChannel(demod, channel, tuner_freq_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif case DRX_STANDARD_UNKNOWN: @@ -13163,16 +17773,27 @@ ctrl_set_channel(struct drx_demod_instance *demod, struct drx_channel *channel) if (common_attr->tuner_port_nr == 1) { /* close tuner bridge */ bridge_closed = true; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* set tuner frequency */ - CHK_ERROR(drxbsp_tuner_set_frequency(demod->my_tuner, - tuner_mode, tuner_set_freq)); + rc = drxbsp_tuner_set_frequency(demod->my_tuner, tuner_mode, tuner_set_freq); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (common_attr->tuner_port_nr == 1) { /* open tuner bridge */ bridge_closed = false; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } } @@ -13200,6 +17821,7 @@ ctrl_get_channel(struct drx_demod_instance *demod, struct drx_channel *channel) { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; enum drx_lock_status lock_status = DRX_NOT_LOCKED; enum drx_standard standard = DRX_STANDARD_UNKNOWN; struct drx_common_attr *common_attr = NULL; @@ -13244,10 +17866,11 @@ ctrl_get_channel(struct drx_demod_instance *demod, struct drx_channel *channel) bool tuner_mirror = common_attr->mirror_freq_spect ? false : true; /* Get frequency from tuner */ - CHK_ERROR(drxbsp_tuner_get_frequency(demod->my_tuner, - 0, - &(channel->frequency), - &intermediate_freq)); + rc = drxbsp_tuner_get_frequency(demod->my_tuner, 0, &(channel->frequency), &intermediate_freq); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } tuner_freq_offset = channel->frequency - ext_attr->frequency; if (tuner_mirror == true) { /* positive image */ @@ -13266,9 +17889,17 @@ ctrl_get_channel(struct drx_demod_instance *demod, struct drx_channel *channel) } /* check lock status */ - CHK_ERROR(ctrl_lock_status(demod, &lock_status)); + rc = ctrl_lock_status(demod, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if ((lock_status == DRX_LOCKED) || (lock_status == DRXJ_DEMOD_LOCK)) { - ARR32(dev_addr, IQM_RC_RATE_LO__A, &iqm_rc_rateLo); + rc = drxj_dap_atomic_read_reg32(dev_addr, IQM_RC_RATE_LO__A, &iqm_rc_rateLo, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } adc_frequency = (common_attr->sys_clock_freq * 1000) / 3; channel->symbolrate = @@ -13278,7 +17909,11 @@ ctrl_get_channel(struct drx_demod_instance *demod, struct drx_channel *channel) case DRX_STANDARD_8VSB: channel->bandwidth = DRX_BANDWIDTH_6MHZ; /* get the channel frequency */ - CHK_ERROR(get_ctl_freq_offset(demod, &ctl_freq_offset)); + rc = get_ctl_freq_offset(demod, &ctl_freq_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } channel->frequency -= ctl_freq_offset; /* get the channel constellation */ channel->constellation = DRX_CONSTELLATION_AUTO; @@ -13289,8 +17924,11 @@ ctrl_get_channel(struct drx_demod_instance *demod, struct drx_channel *channel) case DRX_STANDARD_ITU_C: { /* get the channel frequency */ - CHK_ERROR(get_ctl_freq_offset - (demod, &ctl_freq_offset)); + rc = get_ctl_freq_offset(demod, &ctl_freq_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } channel->frequency -= ctl_freq_offset; if (standard == DRX_STANDARD_ITU_B) { @@ -13342,7 +17980,11 @@ ctrl_get_channel(struct drx_demod_instance *demod, struct drx_channel *channel) cmd_scu.result_len = 3; cmd_scu.parameter = NULL; cmd_scu.result = cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } channel->interleavemode = (enum drx_interleave_mode) (cmd_scu. @@ -13386,7 +18028,11 @@ ctrl_get_channel(struct drx_demod_instance *demod, struct drx_channel *channel) case DRX_STANDARD_PAL_SECAM_L: case DRX_STANDARD_PAL_SECAM_LP: case DRX_STANDARD_FM: - CHK_ERROR(get_atv_channel(demod, channel, standard)); + rc = get_atv_channel(demod, channel, standard); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif case DRX_STANDARD_UNKNOWN: /* fall trough */ @@ -13451,6 +18097,7 @@ ctrl_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_q { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; enum drx_standard standard = DRX_STANDARD_UNKNOWN; enum drx_lock_status lock_status = DRX_NOT_LOCKED; u16 min_mer = 0; @@ -13467,14 +18114,25 @@ ctrl_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_q /* get basic information */ dev_addr = demod->my_i2c_dev_addr; - CHK_ERROR(ctrl_lock_status(demod, &lock_status)); + rc = ctrl_lock_status(demod, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } switch (standard) { case DRX_STANDARD_8VSB: #ifdef DRXJ_SIGNAL_ACCUM_ERR - CHK_ERROR(get_acc_pkt_err(demod, &sig_quality->packet_error)); + rc = get_acc_pkt_err(demod, &sig_quality->packet_error); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } #else - CHK_ERROR(get_vsb_post_rs_pck_err - (dev_addr, &sig_quality->packet_error)); + rc = get_vsb_post_rs_pck_err(dev_addr, &sig_quality->packet_error); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } #endif if (lock_status != DRXJ_DEMOD_LOCK && lock_status != DRX_LOCKED) { sig_quality->post_viterbi_ber = 500000; @@ -13482,11 +18140,21 @@ ctrl_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_q sig_quality->pre_viterbi_ber = 0; } else { /* PostViterbi is compute in steps of 10^(-6) */ - CHK_ERROR(get_vs_bpre_viterbi_ber - (dev_addr, &sig_quality->pre_viterbi_ber)); - CHK_ERROR(get_vs_bpost_viterbi_ber - (dev_addr, &sig_quality->post_viterbi_ber)); - CHK_ERROR(get_vsbmer(dev_addr, &sig_quality->MER)); + rc = get_vs_bpre_viterbi_ber(dev_addr, &sig_quality->pre_viterbi_ber); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = get_vs_bpost_viterbi_ber(dev_addr, &sig_quality->post_viterbi_ber); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = get_vsbmer(dev_addr, &sig_quality->MER); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } min_mer = 20; max_mer = 360; @@ -13501,7 +18169,11 @@ ctrl_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_q case DRX_STANDARD_ITU_A: case DRX_STANDARD_ITU_B: case DRX_STANDARD_ITU_C: - CHK_ERROR(ctrl_get_qam_sig_quality(demod, sig_quality)); + rc = ctrl_get_qam_sig_quality(demod, sig_quality); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (lock_status != DRXJ_DEMOD_LOCK && lock_status != DRX_LOCKED) { switch (ext_attr->constellation) { case DRX_CONSTELLATION_QAM256: @@ -13555,10 +18227,18 @@ ctrl_sig_quality(struct drx_demod_instance *demod, struct drx_sig_quality *sig_q case DRX_STANDARD_PAL_SECAM_L: case DRX_STANDARD_PAL_SECAM_LP: case DRX_STANDARD_NTSC: - CHK_ERROR(atv_sig_quality(demod, sig_quality)); + rc = atv_sig_quality(demod, sig_quality); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_FM: - CHK_ERROR(fm_sig_quality(demod, sig_quality)); + rc = fm_sig_quality(demod, sig_quality); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif default: @@ -13592,6 +18272,7 @@ ctrl_lock_status(struct drx_demod_instance *demod, enum drx_lock_status *lock_st /* *parameter */ NULL, /* *result */ NULL }; + int rc; u16 cmd_result[2] = { 0, 0 }; u16 demod_lock = SCU_RAM_PARAM_1_RES_DEMOD_GET_LOCK_DEMOD_LOCKED; @@ -13644,7 +18325,11 @@ ctrl_lock_status(struct drx_demod_instance *demod, enum drx_lock_status *lock_st cmd_scu.result_len = 2; cmd_scu.parameter = NULL; cmd_scu.result = cmd_result; - CHK_ERROR(scu_command(dev_addr, &cmd_scu)); + rc = scu_command(dev_addr, &cmd_scu); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* set the lock status */ if (cmd_scu.result[1] < demod_lock) { @@ -13680,6 +18365,7 @@ rw_error: static int ctrl_constel(struct drx_demod_instance *demod, struct drx_complex *complex_nr) { + int rc; enum drx_standard standard = DRX_STANDARD_UNKNOWN; /**< active standard */ @@ -13694,13 +18380,21 @@ ctrl_constel(struct drx_demod_instance *demod, struct drx_complex *complex_nr) /* Read constellation point */ switch (standard) { case DRX_STANDARD_8VSB: - CHK_ERROR(ctrl_get_vsb_constel(demod, complex_nr)); + rc = ctrl_get_vsb_constel(demod, complex_nr); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #ifndef DRXJ_VSB_ONLY case DRX_STANDARD_ITU_A: /* fallthrough */ case DRX_STANDARD_ITU_B: /* fallthrough */ case DRX_STANDARD_ITU_C: - CHK_ERROR(ctrl_get_qam_constel(demod, complex_nr)); + rc = ctrl_get_qam_constel(demod, complex_nr); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif case DRX_STANDARD_UNKNOWN: @@ -13729,6 +18423,7 @@ static int ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) { struct drxj_data *ext_attr = NULL; + int rc; enum drx_standard prev_standard; /* check arguments */ @@ -13747,11 +18442,19 @@ ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) case DRX_STANDARD_ITU_A: /* fallthrough */ case DRX_STANDARD_ITU_B: /* fallthrough */ case DRX_STANDARD_ITU_C: - CHK_ERROR(power_down_qam(demod, false)); + rc = power_down_qam(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif case DRX_STANDARD_8VSB: - CHK_ERROR(power_down_vsb(demod, false)); + rc = power_down_vsb(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #ifndef DRXJ_DIGITAL_ONLY case DRX_STANDARD_NTSC: /* fallthrough */ @@ -13761,7 +18464,11 @@ ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) case DRX_STANDARD_PAL_SECAM_I: /* fallthrough */ case DRX_STANDARD_PAL_SECAM_L: /* fallthrough */ case DRX_STANDARD_PAL_SECAM_LP: - CHK_ERROR(power_down_atv(demod, prev_standard, false)); + rc = power_down_atv(demod, prev_standard, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif case DRX_STANDARD_UNKNOWN: @@ -13783,11 +18490,22 @@ ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) case DRX_STANDARD_ITU_A: /* fallthrough */ case DRX_STANDARD_ITU_B: /* fallthrough */ case DRX_STANDARD_ITU_C: - DUMMY_READ(); + do { + u16 dummy; + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_VERSION_HI__A, &dummy, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + }while (0); break; #endif case DRX_STANDARD_8VSB: - CHK_ERROR(set_vsb_leak_n_gain(demod)); + rc = set_vsb_leak_n_gain(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #ifndef DRXJ_DIGITAL_ONLY case DRX_STANDARD_NTSC: /* fallthrough */ @@ -13797,8 +18515,16 @@ ctrl_set_standard(struct drx_demod_instance *demod, enum drx_standard *standard) case DRX_STANDARD_PAL_SECAM_I: /* fallthrough */ case DRX_STANDARD_PAL_SECAM_L: /* fallthrough */ case DRX_STANDARD_PAL_SECAM_LP: - CHK_ERROR(set_atv_standard(demod, standard)); - CHK_ERROR(power_up_atv(demod, *standard)); + rc = set_atv_standard(demod, standard); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = power_up_atv(demod, *standard); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif default: @@ -13829,6 +18555,7 @@ static int ctrl_get_standard(struct drx_demod_instance *demod, enum drx_standard *standard) { struct drxj_data *ext_attr = NULL; + int rc; ext_attr = (struct drxj_data *) demod->my_ext_attr; /* check arguments */ @@ -13836,7 +18563,14 @@ ctrl_get_standard(struct drx_demod_instance *demod, enum drx_standard *standard) return (DRX_STS_INVALID_ARG); } (*standard) = ext_attr->standard; - DUMMY_READ(); + do { + u16 dummy; + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_VERSION_HI__A, &dummy, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + }while (0); return (DRX_STS_OK); rw_error: @@ -13856,6 +18590,7 @@ static int ctrl_get_cfg_symbol_clock_offset(struct drx_demod_instance *demod, s32 *rate_offset) { enum drx_standard standard = DRX_STANDARD_UNKNOWN; + int rc; struct drxj_data *ext_attr = NULL; /* check arguments */ @@ -13872,7 +18607,11 @@ ctrl_get_cfg_symbol_clock_offset(struct drx_demod_instance *demod, s32 *rate_off case DRX_STANDARD_ITU_B: /* fallthrough */ case DRX_STANDARD_ITU_C: #endif - CHK_ERROR(get_str_freq_offset(demod, rate_offset)); + rc = get_str_freq_offset(demod, rate_offset); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_NTSC: case DRX_STANDARD_UNKNOWN: @@ -13905,6 +18644,7 @@ ctrl_power_mode(struct drx_demod_instance *demod, enum drx_power_mode *mode) struct drx_common_attr *common_attr = (struct drx_common_attr *) NULL; struct drxj_data *ext_attr = (struct drxj_data *) NULL; struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)NULL; + int rc; u16 sio_cc_pwd_mode = 0; common_attr = (struct drx_common_attr *) demod->my_common_attr; @@ -13943,7 +18683,11 @@ ctrl_power_mode(struct drx_demod_instance *demod, enum drx_power_mode *mode) /* Check if device needs to be powered up */ if ((common_attr->current_power_mode != DRX_POWER_UP)) { - CHK_ERROR(power_up_device(demod)); + rc = power_up_device(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } if ((*mode == DRX_POWER_UP)) { @@ -13964,10 +18708,18 @@ ctrl_power_mode(struct drx_demod_instance *demod, enum drx_power_mode *mode) case DRX_STANDARD_ITU_A: case DRX_STANDARD_ITU_B: case DRX_STANDARD_ITU_C: - CHK_ERROR(power_down_qam(demod, true)); + rc = power_down_qam(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_8VSB: - CHK_ERROR(power_down_vsb(demod, true)); + rc = power_down_vsb(demod, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_PAL_SECAM_BG: /* fallthrough */ case DRX_STANDARD_PAL_SECAM_DK: /* fallthrough */ @@ -13976,7 +18728,11 @@ ctrl_power_mode(struct drx_demod_instance *demod, enum drx_power_mode *mode) case DRX_STANDARD_PAL_SECAM_LP: /* fallthrough */ case DRX_STANDARD_NTSC: /* fallthrough */ case DRX_STANDARD_FM: - CHK_ERROR(power_down_atv(demod, ext_attr->standard, true)); + rc = power_down_atv(demod, ext_attr->standard, true); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; case DRX_STANDARD_UNKNOWN: /* Do nothing */ @@ -13987,14 +18743,30 @@ ctrl_power_mode(struct drx_demod_instance *demod, enum drx_power_mode *mode) } if (*mode != DRXJ_POWER_DOWN_MAIN_PATH) { - WR16(dev_addr, SIO_CC_PWD_MODE__A, sio_cc_pwd_mode); - WR16(dev_addr, SIO_CC_UPDATE__A, SIO_CC_UPDATE_KEY); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_CC_PWD_MODE__A, sio_cc_pwd_mode, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_CC_UPDATE__A, SIO_CC_UPDATE_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Initialize HI, wakeup key especially before put IC to sleep */ - CHK_ERROR(init_hi(demod)); + rc = init_hi(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->hi_cfg_ctrl |= SIO_HI_RA_RAM_PAR_5_CFG_SLEEP_ZZZ; - CHK_ERROR(hi_cfg_command(demod)); + rc = hi_cfg_command(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } } @@ -14033,6 +18805,7 @@ ctrl_version(struct drx_demod_instance *demod, struct drx_version_list **version struct drxj_data *ext_attr = (struct drxj_data *) (NULL); struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); struct drx_common_attr *common_attr = (struct drx_common_attr *) (NULL); + int rc; u16 ucode_major_minor = 0; /* BCD Ma:Ma:Ma:Mi */ u16 ucode_patch = 0; /* BCD Pa:Pa:Pa:Pa */ u16 major = 0; @@ -14059,8 +18832,16 @@ ctrl_version(struct drx_demod_instance *demod, struct drx_version_list **version ext_attr->v_version[0].v_string = ext_attr->v_text[0]; if (common_attr->is_opened == true) { - SARR16(dev_addr, SCU_RAM_VERSION_HI__A, &ucode_major_minor); - SARR16(dev_addr, SCU_RAM_VERSION_LO__A, &ucode_patch); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_VERSION_HI__A, &ucode_major_minor, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_VERSION_LO__A, &ucode_patch, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Translate BCD to numbers and string */ /* TODO: The most significant Ma and Pa will be ignored, check with spec */ @@ -14111,11 +18892,31 @@ ctrl_version(struct drx_demod_instance *demod, struct drx_version_list **version /* Device version *************************************** */ /* Check device id */ - RR16(dev_addr, SIO_TOP_COMM_KEY__A, &key); - WR16(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA); - RR32(dev_addr, SIO_TOP_JTAGID_LO__A, &jtag); - RR16(dev_addr, SIO_PDR_UIO_IN_HI__A, &bid); - WR16(dev_addr, SIO_TOP_COMM_KEY__A, key); + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, &key, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, 0xFABA, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg32func(dev_addr, SIO_TOP_JTAGID_LO__A, &jtag, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, SIO_PDR_UIO_IN_HI__A, &bid, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_TOP_COMM_KEY__A, key, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } ext_attr->v_version[1].module_type = DRX_MODULE_DEVICE; ext_attr->v_version[1].module_name = device_name; @@ -14183,6 +18984,7 @@ static int ctrl_probe_device(struct drx_demod_instance *demod) enum drx_power_mode org_power_mode = DRX_POWER_UP; int ret_status = DRX_STS_OK; struct drx_common_attr *common_attr = (struct drx_common_attr *) (NULL); + int rc; common_attr = (struct drx_common_attr *) demod->my_common_attr; @@ -14198,17 +19000,33 @@ static int ctrl_probe_device(struct drx_demod_instance *demod) org_power_mode = common_attr->current_power_mode; if (demod->my_common_attr->is_opened == false) { - CHK_ERROR(power_up_device(demod)); + rc = power_up_device(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } common_attr->current_power_mode = DRX_POWER_UP; } else { /* Wake-up device, feedback from device */ - CHK_ERROR(ctrl_power_mode(demod, &power_mode)); + rc = ctrl_power_mode(demod, &power_mode); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* Initialize HI, wakeup key especially */ - CHK_ERROR(init_hi(demod)); + rc = init_hi(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Check device id */ - RR32(dev_addr, SIO_TOP_JTAGID_LO__A, &jtag); + rc = DRXJ_DAP.read_reg32func(dev_addr, SIO_TOP_JTAGID_LO__A, &jtag, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } jtag = (jtag >> 12) & 0xFFFF; switch (jtag) { case 0x3931: /* fallthrough */ @@ -14230,11 +19048,22 @@ static int ctrl_probe_device(struct drx_demod_instance *demod) /* Device was not opened, return to orginal powermode, feedback from device */ - CHK_ERROR(ctrl_power_mode(demod, &org_power_mode)); + rc = ctrl_power_mode(demod, &org_power_mode); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } else { /* dummy read to make this function fail in case device suddenly disappears after a succesful drx_open */ - DUMMY_READ(); + do { + u16 dummy; + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_VERSION_HI__A, &dummy, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + }while (0); } return (ret_status); @@ -14286,6 +19115,7 @@ ctrl_u_codeUpload(struct drx_demod_instance *demod, u8 *mc_data = (u8 *)(NULL); struct i2c_device_addr *dev_addr = (struct i2c_device_addr *)(NULL); struct drxj_data *ext_attr = (struct drxj_data *) (NULL); + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -14461,6 +19291,7 @@ ctrl_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) { struct drxj_data *ext_attr = NULL; enum drx_standard standard = DRX_STANDARD_UNKNOWN; + int rc; /* Check arguments */ if ((sig_strength == NULL) || (demod == NULL)) { @@ -14479,7 +19310,11 @@ ctrl_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) case DRX_STANDARD_ITU_B: /* fallthrough */ case DRX_STANDARD_ITU_C: #endif - CHK_ERROR(get_sig_strength(demod, sig_strength)); + rc = get_sig_strength(demod, sig_strength); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #ifndef DRXJ_DIGITAL_ONLY case DRX_STANDARD_PAL_SECAM_BG: /* fallthrough */ @@ -14489,7 +19324,11 @@ ctrl_sig_strength(struct drx_demod_instance *demod, u16 *sig_strength) case DRX_STANDARD_PAL_SECAM_LP: /* fallthrough */ case DRX_STANDARD_NTSC: /* fallthrough */ case DRX_STANDARD_FM: - CHK_ERROR(get_atv_sig_strength(demod, sig_strength)); + rc = get_atv_sig_strength(demod, sig_strength); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } break; #endif case DRX_STANDARD_UNKNOWN: /* fallthrough */ @@ -14517,6 +19356,7 @@ static int ctrl_get_cfg_oob_misc(struct drx_demod_instance *demod, struct drxj_cfg_oob_misc *misc) { struct i2c_device_addr *dev_addr = NULL; + int rc; u16 lock = 0U; u16 state = 0U; u16 data = 0U; @@ -14531,16 +19371,32 @@ ctrl_get_cfg_oob_misc(struct drx_demod_instance *demod, struct drxj_cfg_oob_misc /* TODO */ /* check if the same registers are used for all standards (QAM/VSB/ATV) */ - RR16(dev_addr, ORX_NSU_TUN_IFGAIN_W__A, &misc->agc.IFAGC); - RR16(dev_addr, ORX_NSU_TUN_RFGAIN_W__A, &misc->agc.RFAGC); - RR16(dev_addr, ORX_FWP_SRC_DGN_W__A, &data); + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_NSU_TUN_IFGAIN_W__A, &misc->agc.IFAGC, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_NSU_TUN_RFGAIN_W__A, &misc->agc.RFAGC, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, ORX_FWP_SRC_DGN_W__A, &data, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } digital_agc_mant = data & ORX_FWP_SRC_DGN_W_MANT__M; digital_agc_exp = (data & ORX_FWP_SRC_DGN_W_EXP__M) >> ORX_FWP_SRC_DGN_W_EXP__B; misc->agc.digital_agc = digital_agc_mant << digital_agc_exp; - SARR16(dev_addr, SCU_RAM_ORX_SCU_LOCK__A, &lock); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ORX_SCU_LOCK__A, &lock, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } misc->ana_gain_lock = ((lock & 0x0001) ? true : false); misc->dig_gain_lock = ((lock & 0x0002) ? true : false); @@ -14549,7 +19405,11 @@ ctrl_get_cfg_oob_misc(struct drx_demod_instance *demod, struct drxj_cfg_oob_misc misc->sym_timing_lock = ((lock & 0x0010) ? true : false); misc->eq_lock = ((lock & 0x0020) ? true : false); - SARR16(dev_addr, SCU_RAM_ORX_SCU_STATE__A, &state); + rc = drxj_dap_scu_atomic_read_reg16(dev_addr, SCU_RAM_ORX_SCU_STATE__A, &state, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } misc->state = (state >> 8) & 0xff; return (DRX_STS_OK); @@ -14569,6 +19429,7 @@ static int ctrl_get_cfg_vsb_misc(struct drx_demod_instance *demod, struct drxj_cfg_vsb_misc *misc) { struct i2c_device_addr *dev_addr = NULL; + int rc; /* check arguments */ if (misc == NULL) { @@ -14576,7 +19437,11 @@ ctrl_get_cfg_vsb_misc(struct drx_demod_instance *demod, struct drxj_cfg_vsb_misc } dev_addr = demod->my_i2c_dev_addr; - CHK_ERROR(get_vsb_symb_err(dev_addr, &misc->symb_error)); + rc = get_vsb_symb_err(dev_addr, &misc->symb_error); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -14806,6 +19671,7 @@ static int ctrl_get_cfg_agc_internal(struct drx_demod_instance *demod, u16 *agc_internal) { struct i2c_device_addr *dev_addr = NULL; + int rc; enum drx_lock_status lock_status = DRX_NOT_LOCKED; struct drxj_data *ext_attr = NULL; u16 iqm_cf_scale_sh = 0; @@ -14820,7 +19686,11 @@ ctrl_get_cfg_agc_internal(struct drx_demod_instance *demod, u16 *agc_internal) dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; - CHK_ERROR(ctrl_lock_status(demod, &lock_status)); + rc = ctrl_lock_status(demod, &lock_status); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (lock_status != DRXJ_DEMOD_LOCK && lock_status != DRX_LOCKED) { *agc_internal = 0; return DRX_STS_OK; @@ -14854,9 +19724,21 @@ ctrl_get_cfg_agc_internal(struct drx_demod_instance *demod, u16 *agc_internal) return (DRX_STS_INVALID_ARG); } - RR16(dev_addr, IQM_CF_POW__A, &iqm_cf_power); - RR16(dev_addr, IQM_CF_SCALE_SH__A, &iqm_cf_scale_sh); - RR16(dev_addr, IQM_CF_AMP__A, &iqm_cf_amp); + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_CF_POW__A, &iqm_cf_power, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_CF_SCALE_SH__A, &iqm_cf_scale_sh, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.read_reg16func(dev_addr, IQM_CF_AMP__A, &iqm_cf_amp, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* IQM_CF_PWR_CORRECTION_dB = 3; P5dB =10*log10(IQM_CF_POW)+12-6*9-IQM_CF_PWR_CORRECTION_dB; */ /* P4dB = P5dB -20*log10(IQM_CF_AMP)-6*10 @@ -14890,6 +19772,7 @@ ctrl_set_cfg_pre_saw(struct drx_demod_instance *demod, struct drxj_cfg_pre_saw * { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; @@ -14906,7 +19789,11 @@ ctrl_set_cfg_pre_saw(struct drx_demod_instance *demod, struct drxj_cfg_pre_saw * DRXJ_ISQAMSTD(pre_saw->standard)) || (DRXJ_ISATVSTD(ext_attr->standard) && DRXJ_ISATVSTD(pre_saw->standard))) { - WR16(dev_addr, IQM_AF_PDREF__A, pre_saw->reference); + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_PDREF__A, pre_saw->reference, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } /* Store pre-saw settings */ @@ -14959,6 +19846,7 @@ ctrl_set_cfg_afe_gain(struct drx_demod_instance *demod, struct drxj_cfg_afe_gain { struct i2c_device_addr *dev_addr = NULL; struct drxj_data *ext_attr = NULL; + int rc; u8 gain = 0; /* check arguments */ @@ -14993,8 +19881,14 @@ ctrl_set_cfg_afe_gain(struct drx_demod_instance *demod, struct drxj_cfg_afe_gain gain = (afe_gain->gain - 140 + 6) / 13; /* Only if standard is currently active */ - if (ext_attr->standard == afe_gain->standard) - WR16(dev_addr, IQM_AF_PGA_GAIN__A, gain); + if (ext_attr->standard == afe_gain->standard){ + + rc = DRXJ_DAP.write_reg16func(dev_addr, IQM_AF_PGA_GAIN__A, gain, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } /* Store AFE Gain settings */ switch (afe_gain->standard) { @@ -15132,12 +20026,17 @@ ctrl_get_cfg_afe_gain(struct drx_demod_instance *demod, struct drxj_cfg_afe_gain static int ctrl_get_fec_meas_seq_count(struct drx_demod_instance *demod, u16 *fec_meas_seq_count) { + int rc; /* check arguments */ if (fec_meas_seq_count == NULL) { return (DRX_STS_INVALID_ARG); } - RR16(demod->my_i2c_dev_addr, SCU_RAM_FEC_MEAS_COUNT__A, fec_meas_seq_count); + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_FEC_MEAS_COUNT__A, fec_meas_seq_count, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -15160,12 +20059,16 @@ rw_error: static int ctrl_get_accum_cr_rs_cw_err(struct drx_demod_instance *demod, u32 *accum_cr_rs_cw_err) { + int rc; if (accum_cr_rs_cw_err == NULL) { return (DRX_STS_INVALID_ARG); } - RR32(demod->my_i2c_dev_addr, SCU_RAM_FEC_ACCUM_CW_CORRECTED_LO__A, - accum_cr_rs_cw_err); + rc = DRXJ_DAP.read_reg32func(demod->my_i2c_dev_addr, SCU_RAM_FEC_ACCUM_CW_CORRECTED_LO__A, accum_cr_rs_cw_err, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return (DRX_STS_OK); rw_error: @@ -15182,11 +20085,19 @@ rw_error: */ static int ctrl_set_cfg(struct drx_demod_instance *demod, struct drx_cfg *config) { - if (config == NULL) { + int rc; + + if (config == NULL) return (DRX_STS_INVALID_ARG); - } - DUMMY_READ(); + do { + u16 dummy; + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_VERSION_HI__A, &dummy, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + }while (0); switch (config->cfg_type) { case DRX_CFG_MPEG_OUTPUT: return ctrl_set_cfg_mpeg_output(demod, @@ -15290,11 +20201,19 @@ rw_error: static int ctrl_get_cfg(struct drx_demod_instance *demod, struct drx_cfg *config) { - if (config == NULL) { + int rc; + + if (config == NULL) return (DRX_STS_INVALID_ARG); - } - DUMMY_READ(); + do { + u16 dummy; + rc = DRXJ_DAP.read_reg16func(demod->my_i2c_dev_addr, SCU_RAM_VERSION_HI__A, &dummy, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + }while (0); switch (config->cfg_type) { case DRX_CFG_MPEG_OUTPUT: @@ -15429,45 +20348,91 @@ int drxj_open(struct drx_demod_instance *demod) u32 driver_version = 0; struct drxu_code_info ucode_info; struct drx_cfg_mpeg_output cfg_mpeg_output; + int rc; /* Check arguments */ - if (demod->my_ext_attr == NULL) { + if (demod->my_ext_attr == NULL) return (DRX_STS_INVALID_ARG); - } dev_addr = demod->my_i2c_dev_addr; ext_attr = (struct drxj_data *) demod->my_ext_attr; common_attr = (struct drx_common_attr *) demod->my_common_attr; - CHK_ERROR(power_up_device(demod)); + rc = power_up_device(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } common_attr->current_power_mode = DRX_POWER_UP; /* has to be in front of setIqmAf and setOrxNsuAox */ - CHK_ERROR(get_device_capabilities(demod)); + rc = get_device_capabilities(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Soft reset of sys- and osc-clockdomain */ - WR16(dev_addr, SIO_CC_SOFT_RST__A, (SIO_CC_SOFT_RST_SYS__M | - SIO_CC_SOFT_RST_OSC__M)); - WR16(dev_addr, SIO_CC_UPDATE__A, SIO_CC_UPDATE_KEY); - CHK_ERROR(drxbsp_hst_sleep(1)); + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_CC_SOFT_RST__A, (SIO_CC_SOFT_RST_SYS__M | SIO_CC_SOFT_RST_OSC__M), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SIO_CC_UPDATE__A, SIO_CC_UPDATE_KEY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = drxbsp_hst_sleep(1); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* TODO first make sure that everything keeps working before enabling this */ /* PowerDownAnalogBlocks() */ - WR16(dev_addr, ATV_TOP_STDBY__A, (~ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE) - | ATV_TOP_STDBY_SIF_STDBY_STANDBY); + rc = DRXJ_DAP.write_reg16func(dev_addr, ATV_TOP_STDBY__A, (~ATV_TOP_STDBY_CVBS_STDBY_A2_ACTIVE) | ATV_TOP_STDBY_SIF_STDBY_STANDBY, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(set_iqm_af(demod, false)); - CHK_ERROR(set_orx_nsu_aox(demod, false)); + rc = set_iqm_af(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = set_orx_nsu_aox(demod, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } - CHK_ERROR(init_hi(demod)); + rc = init_hi(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* disable mpegoutput pins */ cfg_mpeg_output.enable_mpeg_output = false; - CHK_ERROR(ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output)); + rc = ctrl_set_cfg_mpeg_output(demod, &cfg_mpeg_output); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Stop AUD Inform SetAudio it will need to do all setting */ - CHK_ERROR(power_down_aud(demod)); + rc = power_down_aud(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Stop SCU */ - WR16(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_STOP); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_STOP, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Upload microcode */ if (common_attr->microcode != NULL) { @@ -15479,25 +20444,42 @@ int drxj_open(struct drx_demod_instance *demod) #ifdef DRXJ_SPLIT_UCODE_UPLOAD /* Upload microcode without audio part */ - CHK_ERROR(ctrl_u_codeUpload - (demod, &ucode_info, UCODE_UPLOAD, false)); + rc = ctrl_u_codeUpload(demod, &ucode_info, UCODE_UPLOAD, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } #else - CHK_ERROR(drx_ctrl(demod, DRX_CTRL_LOAD_UCODE, &ucode_info)); + rc = drx_ctrl(demod, DRX_CTRL_LOAD_UCODE, &ucode_info); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } #endif /* DRXJ_SPLIT_UCODE_UPLOAD */ if (common_attr->verify_microcode == true) { #ifdef DRXJ_SPLIT_UCODE_UPLOAD - CHK_ERROR(ctrl_u_codeUpload - (demod, &ucode_info, UCODE_VERIFY, false)); + rc = ctrl_u_codeUpload(demod, &ucode_info, UCODE_VERIFY, false); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } #else - CHK_ERROR(drx_ctrl - (demod, DRX_CTRL_VERIFY_UCODE, &ucode_info)); + rc = drx_ctrl(demod, DRX_CTRL_VERIFY_UCODE, &ucode_info); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } #endif /* DRXJ_SPLIT_UCODE_UPLOAD */ } common_attr->is_opened = false; } /* Run SCU for a little while to initialize microcode version numbers */ - WR16(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Open tuner instance */ if (demod->my_tuner != NULL) { @@ -15505,14 +20487,26 @@ int drxj_open(struct drx_demod_instance *demod) if (common_attr->tuner_port_nr == 1) { bool bridge_closed = true; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } - CHK_ERROR(drxbsp_tuner_open(demod->my_tuner)); + rc = drxbsp_tuner_open(demod->my_tuner); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (common_attr->tuner_port_nr == 1) { bool bridge_closed = false; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } common_attr->tuner_min_freq_rf = ((demod->my_tuner)->my_common_attr->min_freq_rf); @@ -15597,7 +20591,11 @@ int drxj_open(struct drx_demod_instance *demod) #endif ext_attr->standard = DRX_STANDARD_UNKNOWN; - CHK_ERROR(smart_ant_init(demod)); + rc = smart_ant_init(demod); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* Stamp driver version number in SCU data RAM in BCD code Done to enable field application engineers to retreive drxdriver version @@ -15618,9 +20616,16 @@ int drxj_open(struct drx_demod_instance *demod) driver_version += (VERSION_PATCH / 10) % 10; driver_version <<= 4; driver_version += (VERSION_PATCH % 10); - WR16(dev_addr, SCU_RAM_DRIVER_VER_HI__A, (u16) (driver_version >> 16)); - WR16(dev_addr, SCU_RAM_DRIVER_VER_LO__A, - (u16) (driver_version & 0xFFFF)); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_DRIVER_VER_HI__A, (u16)(driver_version >> 16), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_RAM_DRIVER_VER_LO__A, (u16)(driver_version & 0xFFFF), 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } /* refresh the audio data structure with default */ ext_attr->aud_data = drxj_default_aud_data_g; @@ -15642,27 +20647,52 @@ int drxj_close(struct drx_demod_instance *demod) { struct i2c_device_addr *dev_addr = demod->my_i2c_dev_addr; struct drx_common_attr *common_attr = demod->my_common_attr; + int rc; enum drx_power_mode power_mode = DRX_POWER_UP; /* power up */ - CHK_ERROR(ctrl_power_mode(demod, &power_mode)); + rc = ctrl_power_mode(demod, &power_mode); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } if (demod->my_tuner != NULL) { /* Check if bridge is used */ if (common_attr->tuner_port_nr == 1) { bool bridge_closed = true; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } + } + rc = drxbsp_tuner_close(demod->my_tuner); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; } - CHK_ERROR(drxbsp_tuner_close(demod->my_tuner)); if (common_attr->tuner_port_nr == 1) { bool bridge_closed = false; - CHK_ERROR(ctrl_i2c_bridge(demod, &bridge_closed)); + rc = ctrl_i2c_bridge(demod, &bridge_closed); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } } }; - WR16(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_ACTIVE); + rc = DRXJ_DAP.write_reg16func(dev_addr, SCU_COMM_EXEC__A, SCU_COMM_EXEC_ACTIVE, 0); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } power_mode = DRX_POWER_DOWN; - CHK_ERROR(ctrl_power_mode(demod, &power_mode)); + rc = ctrl_power_mode(demod, &power_mode); + if (rc != DRX_STS_OK) { + pr_err("error %d\n", rc); + goto rw_error; + } return DRX_STS_OK; rw_error: @@ -15865,5 +20895,3 @@ drxj_ctrl(struct drx_demod_instance *demod, u32 ctrl, void *ctrl_data) } return (DRX_STS_OK); } - -/* END OF FILE */ -- 2.20.1