Merge changes I40b4684e,I9548b2da into msm-3.0

* changes:
  ASoC: msm: HDMI PCM 6 channel support
  msm_fb: HDMI: Export interface for setting Audio info frame
This commit is contained in:
Linux Build Service Account
2012-02-10 21:50:50 -08:00
committed by QuIC Gerrit Code Review
20 changed files with 1494 additions and 81 deletions

View File

@@ -1,4 +1,4 @@
/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
/* Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -1000,14 +1000,15 @@ static void hdmi_edid_extract_speaker_allocation_data(const uint8 *in_buf)
return;
external_common_state->speaker_allocation_block = sad[1];
DEV_DBG("EDID: speaker allocation data=%s%s%s%s%s%s%s\n",
DEV_DBG("EDID: speaker allocation data SP byte = %08x %s%s%s%s%s%s%s\n",
sad[1],
(sad[1] & BIT(0)) ? "FL/FR," : "",
(sad[1] & BIT(1)) ? "LFE," : "",
(sad[1] & BIT(2)) ? "FC," : "",
(sad[1] & BIT(3)) ? "RL/RR," : "",
(sad[1] & BIT(4)) ? "RC," : "",
(sad[1] & BIT(5)) ? "FLC/FRC," : "",
(sad[1] & BIT(6)) ? "LFE," : "");
(sad[1] & BIT(6)) ? "RLC/RRC," : "");
}
static void hdmi_edid_extract_audio_data_blocks(const uint8 *in_buf)

View File

@@ -64,6 +64,8 @@ DEFINE_MUTEX(hdmi_msm_state_mutex);
EXPORT_SYMBOL(hdmi_msm_state_mutex);
static DEFINE_MUTEX(hdcp_auth_state_mutex);
static void hdmi_msm_dump_regs(const char *prefix);
#ifdef CONFIG_FB_MSM_HDMI_MSM_PANEL_HDCP_SUPPORT
static void hdmi_msm_hdcp_enable(void);
#else
@@ -3280,14 +3282,23 @@ int hdmi_audio_packet_enable(bool on)
}
EXPORT_SYMBOL(hdmi_audio_packet_enable);
static void hdmi_msm_audio_info_setup(boolean enabled, int num_of_channels,
int level_shift, boolean down_mix)
/* TO-DO: return -EINVAL when num_of_channels and channel_allocation
* does not match CEA 861-D spec.
*/
int hdmi_msm_audio_info_setup(bool enabled, u32 num_of_channels,
u32 channel_allocation, u32 level_shift, bool down_mix)
{
uint32 channel_allocation = 0; /* Default to FR,FL */
uint32 channel_count = 1; /* Default to 2 channels
-> See Table 17 in CEA-D spec */
uint32 check_sum, audio_info_0_reg, audio_info_1_reg;
uint32 audio_info_ctrl_reg;
u32 aud_pck_ctrl_2_reg;
u32 layout;
layout = (MSM_HDMI_AUDIO_CHANNEL_2 == num_of_channels) ? 0 : 1;
aud_pck_ctrl_2_reg = 1 | (layout << 1);
HDMI_OUTP(0x00044, aud_pck_ctrl_2_reg);
/* Please see table 20 Audio InfoFrame in HDMI spec
FL = front left
@@ -3310,6 +3321,7 @@ static void hdmi_msm_audio_info_setup(boolean enabled, int num_of_channels,
if (enabled) {
switch (num_of_channels) {
case MSM_HDMI_AUDIO_CHANNEL_2:
channel_allocation = 0; /* Default to FR,FL */
break;
case MSM_HDMI_AUDIO_CHANNEL_4:
channel_count = 3;
@@ -3327,6 +3339,9 @@ static void hdmi_msm_audio_info_setup(boolean enabled, int num_of_channels,
channel_allocation = 0x1f;
break;
default:
pr_err("%s(): Unsupported num_of_channels = %u\n",
__func__, num_of_channels);
return -EINVAL;
break;
}
@@ -3382,7 +3397,14 @@ static void hdmi_msm_audio_info_setup(boolean enabled, int num_of_channels,
}
/* HDMI_INFOFRAME_CTRL0[0x002C] */
HDMI_OUTP(0x002C, audio_info_ctrl_reg);
hdmi_msm_dump_regs("HDMI-AUDIO-ON: ");
return 0;
}
EXPORT_SYMBOL(hdmi_msm_audio_info_setup);
static void hdmi_msm_en_gc_packet(boolean av_mute_is_requested)
{
@@ -3488,7 +3510,7 @@ static void hdmi_msm_audio_setup(void)
hdmi_msm_audio_acr_setup(TRUE,
external_common_state->video_resolution,
msm_hdmi_sample_rate, channels);
hdmi_msm_audio_info_setup(TRUE, channels, 0, FALSE);
hdmi_msm_audio_info_setup(TRUE, channels, 0, 0, FALSE);
/* Turn on Audio FIFO and SAM DROP ISR */
HDMI_OUTP(0x02CC, HDMI_INP(0x02CC) | BIT(1) | BIT(3));
@@ -3519,7 +3541,7 @@ static int hdmi_msm_audio_off(void)
return -ETIMEDOUT;
}
}
hdmi_msm_audio_info_setup(FALSE, 0, 0, FALSE);
hdmi_msm_audio_info_setup(FALSE, 0, 0, 0, FALSE);
hdmi_msm_audio_acr_setup(FALSE, 0, 0, 0);
DEV_INFO("HDMI Audio: Disabled\n");
return 0;
@@ -4042,7 +4064,7 @@ static int hdmi_msm_power_on(struct platform_device *pdev)
return rc;
}
}
hdmi_msm_audio_info_setup(TRUE, 0, 0, FALSE);
hdmi_msm_audio_info_setup(TRUE, 0, 0, 0, FALSE);
mutex_lock(&external_common_state_hpd_mutex);
hdmi_msm_state->panel_power_on = TRUE;