OSDN Git Service

msm: mdss: dp: remove programming of maud/naud for audio
authorTatenda Chipeperekwa <tatendac@codeaurora.org>
Wed, 19 Oct 2016 21:37:56 +0000 (14:37 -0700)
committerAjay Singh Parmar <aparmar@codeaurora.org>
Sat, 22 Oct 2016 22:17:05 +0000 (15:17 -0700)
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>
drivers/video/fbdev/msm/mdss_dp.c
drivers/video/fbdev/msm/mdss_dp_util.c

index caaedf2..fa2e47e 100644 (file)
@@ -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_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_set_safe_to_exit_level(&dp_ctrl->ctrl_io, dp_ctrl->lane_cnt);
        mdss_dp_audio_enable(&dp_ctrl->ctrl_io, true);
index b1eb8e0..2d24d84 100644 (file)
 #define DP_LS_FREQ_162         162000000
 #define DP_LS_FREQ_270         270000000
 #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 {
        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 = {
        .hw_ndx = MDSS_HW_EDP,
        .ptr = NULL,
        .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 */
 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);
 }
 
-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,
                uint32_t lane_cnt)
 {