msm: mdss: dp: remove programming of maud/naud for audio
Remove the programming of the maud/naud values, and rely entirely of the hardware selection logic to calculate the maud/naud and the resultant audio clock frequency. This is the recommended pratice as it leverages existing hardware logic and avoids errors due to over/under compensating the audio clock frequency. Change-Id: Ic756deeabeb0eaaf95e5354b565cf20a85fd7cca Signed-off-by: Tatenda Chipeperekwa <tatendac@codeaurora.org>
This commit is contained in:
parent
0f9531e3a2
commit
f8a5f3e06f
2 changed files with 0 additions and 108 deletions
|
@ -898,8 +898,6 @@ static int dp_audio_info_setup(struct platform_device *pdev,
|
||||||
}
|
}
|
||||||
|
|
||||||
mdss_dp_audio_setup_sdps(&dp_ctrl->ctrl_io);
|
mdss_dp_audio_setup_sdps(&dp_ctrl->ctrl_io);
|
||||||
mdss_dp_audio_set_sample_rate(&dp_ctrl->ctrl_io,
|
|
||||||
dp_ctrl->link_rate, params->sample_rate_hz);
|
|
||||||
mdss_dp_config_audio_acr_ctrl(&dp_ctrl->ctrl_io, dp_ctrl->link_rate);
|
mdss_dp_config_audio_acr_ctrl(&dp_ctrl->ctrl_io, dp_ctrl->link_rate);
|
||||||
mdss_dp_set_safe_to_exit_level(&dp_ctrl->ctrl_io, dp_ctrl->lane_cnt);
|
mdss_dp_set_safe_to_exit_level(&dp_ctrl->ctrl_io, dp_ctrl->lane_cnt);
|
||||||
mdss_dp_audio_enable(&dp_ctrl->ctrl_io, true);
|
mdss_dp_audio_enable(&dp_ctrl->ctrl_io, true);
|
||||||
|
|
|
@ -27,10 +27,6 @@
|
||||||
#define DP_LS_FREQ_162 162000000
|
#define DP_LS_FREQ_162 162000000
|
||||||
#define DP_LS_FREQ_270 270000000
|
#define DP_LS_FREQ_270 270000000
|
||||||
#define DP_LS_FREQ_540 540000000
|
#define DP_LS_FREQ_540 540000000
|
||||||
#define AUDIO_FREQ_32 32000
|
|
||||||
#define AUDIO_FREQ_44_1 44100
|
|
||||||
#define AUDIO_FREQ_48 48000
|
|
||||||
#define DP_AUDIO_FREQ_COUNT 3
|
|
||||||
|
|
||||||
enum mdss_dp_pin_assignment {
|
enum mdss_dp_pin_assignment {
|
||||||
PIN_ASSIGNMENT_A,
|
PIN_ASSIGNMENT_A,
|
||||||
|
@ -55,68 +51,12 @@ static const char *mdss_dp_pin_name(u8 pin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const uint32_t naud_value[DP_AUDIO_FREQ_COUNT][DP_AUDIO_FREQ_COUNT] = {
|
|
||||||
{ 10125, 16875, 33750 },
|
|
||||||
{ 5625, 9375, 18750 },
|
|
||||||
{ 3375, 5625, 11250 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint32_t maud_rate[DP_AUDIO_FREQ_COUNT] = { 1024, 784, 512 };
|
|
||||||
|
|
||||||
static const uint32_t audio_timing_rbr[DP_AUDIO_FREQ_COUNT] = {
|
|
||||||
MMSS_DP_AUDIO_TIMING_RBR_32,
|
|
||||||
MMSS_DP_AUDIO_TIMING_RBR_44,
|
|
||||||
MMSS_DP_AUDIO_TIMING_RBR_48
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint32_t std_audio_freq_list[DP_AUDIO_FREQ_COUNT] = {
|
|
||||||
AUDIO_FREQ_32,
|
|
||||||
AUDIO_FREQ_44_1,
|
|
||||||
AUDIO_FREQ_48
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mdss_hw mdss_dp_hw = {
|
struct mdss_hw mdss_dp_hw = {
|
||||||
.hw_ndx = MDSS_HW_EDP,
|
.hw_ndx = MDSS_HW_EDP,
|
||||||
.ptr = NULL,
|
.ptr = NULL,
|
||||||
.irq_handler = dp_isr,
|
.irq_handler = dp_isr,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int mdss_dp_get_rate_index(uint32_t rate)
|
|
||||||
{
|
|
||||||
int index = 0;
|
|
||||||
|
|
||||||
switch (rate) {
|
|
||||||
case DP_LS_FREQ_162:
|
|
||||||
case AUDIO_FREQ_32:
|
|
||||||
index = 0;
|
|
||||||
break;
|
|
||||||
case DP_LS_FREQ_270:
|
|
||||||
case AUDIO_FREQ_44_1:
|
|
||||||
index = 1;
|
|
||||||
break;
|
|
||||||
case DP_LS_FREQ_540:
|
|
||||||
case AUDIO_FREQ_48:
|
|
||||||
index = 2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
index = 0;
|
|
||||||
pr_err("unsupported rate\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool match_std_freq(uint32_t audio_freq, uint32_t std_freq)
|
|
||||||
{
|
|
||||||
int quotient = audio_freq / std_freq;
|
|
||||||
|
|
||||||
if (quotient & (quotient - 1))
|
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DP retrieve ctrl HW version */
|
/* DP retrieve ctrl HW version */
|
||||||
u32 mdss_dp_get_ctrl_hw_version(struct dss_io_data *ctrl_io)
|
u32 mdss_dp_get_ctrl_hw_version(struct dss_io_data *ctrl_io)
|
||||||
{
|
{
|
||||||
|
@ -866,52 +806,6 @@ void mdss_dp_audio_setup_sdps(struct dss_io_data *ctrl_io)
|
||||||
mdss_dp_audio_setup_isrc_sdp(ctrl_io);
|
mdss_dp_audio_setup_isrc_sdp(ctrl_io);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mdss_dp_audio_set_sample_rate(struct dss_io_data *ctrl_io,
|
|
||||||
char dp_link_rate, uint32_t audio_freq)
|
|
||||||
{
|
|
||||||
uint32_t link_rate;
|
|
||||||
uint32_t default_audio_freq = AUDIO_FREQ_32;
|
|
||||||
int i, multiplier = 1;
|
|
||||||
uint32_t maud_index, lrate_index, register_index, value;
|
|
||||||
|
|
||||||
link_rate = (uint32_t)dp_link_rate * DP_LINK_RATE_MULTIPLIER;
|
|
||||||
|
|
||||||
pr_debug("link_rate = %u, audio_freq = %u\n", link_rate, audio_freq);
|
|
||||||
|
|
||||||
for (i = 0; i < DP_AUDIO_FREQ_COUNT; i++) {
|
|
||||||
if (audio_freq % std_audio_freq_list[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (match_std_freq(audio_freq, std_audio_freq_list[i])) {
|
|
||||||
default_audio_freq = std_audio_freq_list[i];
|
|
||||||
multiplier = audio_freq / default_audio_freq;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_debug("default_audio_freq = %u, multiplier = %d\n",
|
|
||||||
default_audio_freq, multiplier);
|
|
||||||
|
|
||||||
lrate_index = mdss_dp_get_rate_index(link_rate);
|
|
||||||
maud_index = mdss_dp_get_rate_index(default_audio_freq);
|
|
||||||
|
|
||||||
pr_debug("lrate_index = %u, maud_index = %u, maud = %u, naud = %u\n",
|
|
||||||
lrate_index, maud_index,
|
|
||||||
maud_rate[maud_index] * multiplier,
|
|
||||||
naud_value[maud_index][lrate_index]);
|
|
||||||
|
|
||||||
register_index = mdss_dp_get_rate_index(default_audio_freq);
|
|
||||||
value = ((maud_rate[maud_index] * multiplier) << 16) |
|
|
||||||
naud_value[maud_index][lrate_index];
|
|
||||||
|
|
||||||
pr_debug("reg index = %d, offset = 0x%x, value = 0x%x\n",
|
|
||||||
(int)register_index, audio_timing_rbr[register_index],
|
|
||||||
value);
|
|
||||||
|
|
||||||
writel_relaxed(value, ctrl_io->base +
|
|
||||||
audio_timing_rbr[register_index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void mdss_dp_set_safe_to_exit_level(struct dss_io_data *ctrl_io,
|
void mdss_dp_set_safe_to_exit_level(struct dss_io_data *ctrl_io,
|
||||||
uint32_t lane_cnt)
|
uint32_t lane_cnt)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue