static int get_adie_type(void) { u8 rd_val; int ret; struct marimba *marimba = &marimba_modules[ADIE_ARRY_SIZE - 1]; marimba->mod_id = ADIE_ARRY_SIZE - 1; /* Enable the Mode for Marimba/Timpani */ ret = marimba_read(marimba, MARIMBA_MODE_REG, &rd_val, 1); if (ret >= 0) { if (rd_val & 0x80) { cur_adie_type = BAHAMA_ID; return cur_adie_type; } else { ret = marimba_read(marimba, MARIMBA_VERSION_REG, &rd_val, 1); if ((ret >= 0) && (rd_val & 0x20)) { cur_adie_type = TIMPANI_ID; return cur_adie_type; } else if (ret >= 0) { cur_adie_type = MARIMBA_ID; return cur_adie_type; } } } return ret; }
static int marimba_debugfs_get(void *data, u64 *val) { struct adie_dbg_device *dbgdev = data; int rc; u8 reg; struct marimba marimba_id; mutex_lock(&dbgdev->dbg_mutex); rc = check_addr(dbgdev->addr, __func__); if (rc) goto done; marimba_id.mod_id = dbgdev->mod_id; rc = marimba_read(&marimba_id, dbgdev->addr, ®, 1); rc = (rc == 2) ? 0 : rc; if (rc) { pr_err("%s: FAIL marimba_read(0x%03X)=0x%02X: rc=%d\n", __func__, dbgdev->addr, reg, rc); goto done; } *val = reg; done: mutex_unlock(&dbgdev->dbg_mutex); return rc; }
int acer_adie_codec_read(u8 reg, u8 *val) { int rc; rc = marimba_read(adie_codec.pdrv_ptr, reg, val, 1); if (IS_ERR_VALUE(rc)) { pr_err("%s: fail to read reg %x\n", __func__, reg); return -EIO; } pr_debug("%s: read reg %x val %x\n", __func__, reg, *val); return 0; }
static unsigned int timpani_codec_read(struct snd_soc_codec *codec, unsigned int reg) { struct marimba *pdrv = codec->control_data; int rc; u8 val; rc = marimba_read(pdrv, reg, &val, 1); if (IS_ERR_VALUE(rc)) { pr_err("%s: fail to write reg %x\n", __func__, reg); return 0; } return val; }
static int adie_codec_read_dig_vol(enum adie_vol_type vol_type, u32 chan_index, u32 *cur_index) { u32 counter; u32 size; u8 reg, mask, cur_val; int rc; reg = adie_codec_vol_cntrl[vol_type]. ch_vol_cntrl_info[chan_index].codec_reg; mask = adie_codec_vol_cntrl[vol_type]. ch_vol_cntrl_info[chan_index].codec_mask; rc = marimba_read(adie_codec.pdrv_ptr, reg, &cur_val, 1); if (IS_ERR_VALUE(rc)) { pr_err("%s: fail to read reg %x\n", __func__, reg); return -EIO; } cur_val = cur_val & mask; pr_debug("%s: reg 0x%x mask 0x%x reg_value = 0x%x" "vol_type = %d\n", __func__, reg, mask, cur_val, vol_type); size = adie_codec_vol_cntrl[vol_type].steps; for (counter = 0; counter <= size; counter++) { if (adie_codec_vol_cntrl[vol_type].ch_vol_cntrl_info [chan_index].vol_cntrl_data[counter] == cur_val) { *cur_index = counter; return 0; } } pr_err("%s: could not find 0x%x in reg 0x%x values array\n", __func__, cur_val, reg); return -EINVAL;; }
static int adie_codec_read(u8 reg, u8 *val) { return marimba_read(adie_codec.pdrv_ptr, reg, val, 1); }
/** * This function provides interface to change the mode of operation * from I2S mode to AUX PCM or vice versa. This function programs the * wcn2243 registers to TRISTATE or ON mode. * * @return int - negative number on failure. * */ static int switch_pins( int fd, int nPath ) { unsigned char value =0; unsigned char reg =0; int retval = -1; unsigned char set = I2C_PIN_CTL; // SET PIN CTL mode unsigned char unset = I2C_NORMAL; // UNSET PIN CTL MODE if(nPath == MODE_FM ) { // as we need to switch path to FM we need to move // BT AUX PCM lines to PIN CONTROL mode then move // FM to normal mode. for( reg = BT_PCM_BCLK_MODE; reg <= BT_PCM_SYNC_MODE; reg++ ) { #ifdef DEBUG_CHK retval = marimba_read(fd, reg,&value, 1); ALOGD("value read is:%d\n",value); #endif retval = marimba_write(fd, reg, &set,1); if (retval < 0) { goto err_all; } } for( reg = FM_I2S_SD_MODE; reg <= FM_I2S_SCK_MODE; reg++ ) { #ifdef DEBUG_CHK retval = marimba_read(fd, reg,&value, 1); ALOGD("value read is:%d\n",value); #endif retval = marimba_write(fd, reg, &unset,1); if (retval < 0) { goto err_all; } } } else { // as we need to switch path to AUXPCM we need to move // FM I2S lines to PIN CONTROL mode then move // BT AUX_PCM to normal mode. for( reg = FM_I2S_SD_MODE; reg <= FM_I2S_SCK_MODE; reg++ ) { #ifdef DEBUG_CHK retval = marimba_read(fd, reg,&value, 1); ALOGD("value read is:%d\n",value); #endif retval = marimba_write(fd, reg, &set,1); if (retval < 0) { goto err_all; } } for( reg = BT_PCM_BCLK_MODE; reg <= BT_PCM_SYNC_MODE; reg++ ) { #ifdef DEBUG_CHK retval = marimba_read(fd, reg,&value, 1); ALOGD("value read is:%d\n",value); #endif retval = marimba_write(fd, reg, &unset,1); if (retval < 0) { goto err_all; } } } ALOGD("switch pin called with : %d\n",nPath); return 0; err_all: return retval; }