Exemplo n.º 1
0
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, &reg, 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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
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;
}
Exemplo n.º 5
0
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;;
}
Exemplo n.º 6
0
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;
}