static int i2s_configure(struct tegra_i2s_info *info ) { struct platform_device *pdev = info->pdev; struct tegra_audio_platform_data *pdata = pdev->dev.platform_data; unsigned int i2s_id = pdev->id; unsigned int rate; i2s_enable_fifos(i2s_id, 0); i2s_fifo_clear(i2s_id, I2S_FIFO_TX); i2s_fifo_clear(i2s_id, I2S_FIFO_RX); i2s_set_left_right_control_polarity(i2s_id, 0); /* default */ rate = clk_get_rate(info->i2s_clk); if (info->bit_format == TEGRA_AUDIO_BIT_FORMAT_DSP) rate *= 2; i2s_set_master(i2s_id, pdata->i2s_master); info->i2s_master = pdata->i2s_master; if (pdata->i2s_master && pdata->i2s_master_clk) i2s_set_channel_bit_count(i2s_id, pdata->i2s_master_clk, rate); i2s_set_fifo_mode(i2s_id, I2S_FIFO_TX, 1); i2s_set_fifo_mode(i2s_id, I2S_FIFO_RX, 0); i2s_set_bit_format(i2s_id, pdata->mode); i2s_set_bit_size(i2s_id, pdata->bit_size); i2s_set_fifo_format(i2s_id, pdata->fifo_fmt); if (i2s_id == 0) en_dmic = pdata->en_dmic; return 0; }
static int i2s_configure(struct tegra_i2s_info *info ) { struct platform_device *pdev = info->pdev; struct tegra_audio_platform_data *pdata = pdev->dev.platform_data; struct clk *i2s_clk; unsigned int i2s_id = pdev->id; unsigned int rate; i2s_enable_fifos(i2s_id, 0); i2s_fifo_clear(i2s_id, I2S_FIFO_TX); i2s_fifo_clear(i2s_id, I2S_FIFO_RX); i2s_set_left_right_control_polarity(i2s_id, 0); /* default */ i2s_clk = clk_get(&pdev->dev, NULL); if (!i2s_clk) { dev_err(&pdev->dev, "%s: could not get i2s clock\n", __func__); return -EIO; } rate = clk_get_rate(i2s_clk); if (info->bit_format == TEGRA_AUDIO_BIT_FORMAT_DSP) rate *= 2; if (pdata->i2s_master && pdata->i2s_master_clk) i2s_set_channel_bit_count(i2s_id, pdata->i2s_master_clk, rate); i2s_set_master(i2s_id, pdata->i2s_master); i2s_set_fifo_mode(i2s_id, I2S_FIFO_TX, 1); i2s_set_fifo_mode(i2s_id, I2S_FIFO_RX, 0); i2s_set_bit_format(i2s_id, pdata->mode); i2s_set_bit_size(i2s_id, pdata->bit_size); i2s_set_fifo_format(i2s_id, pdata->fifo_fmt); return 0; }