msm: board-msm7627a-audio: create separate board file for audio
Take out the common code of audio from different board files of MSM7627A Change-Id: I15bae925d0ea63d8dd5136d2e6af15b38760c0f0 Signed-off-by: Chintan Pandya <cpandya@codeaurora.org>
This commit is contained in:
parent
edb7e007c6
commit
12ec56a5f5
|
@ -221,6 +221,7 @@ obj-$(CONFIG_MACH_MSM7X27_FFA) += board-msm7x27.o devices-msm7x27.o
|
||||||
obj-$(CONFIG_ARCH_MSM7X27A) += clock-pcom-lookup.o devices-msm7x27a.o
|
obj-$(CONFIG_ARCH_MSM7X27A) += clock-pcom-lookup.o devices-msm7x27a.o
|
||||||
board-7627a-all-objs += board-msm7627a-storage.o board-msm7627a-bt.o board-msm7627a-camera.o
|
board-7627a-all-objs += board-msm7627a-storage.o board-msm7627a-bt.o board-msm7627a-camera.o
|
||||||
board-7627a-all-objs += board-msm7627a-display.o board-msm7627a-wlan.o board-msm7627a-io.o
|
board-7627a-all-objs += board-msm7627a-display.o board-msm7627a-wlan.o board-msm7627a-io.o
|
||||||
|
board-7627a-all-objs += board-msm7627a-audio.o
|
||||||
obj-$(CONFIG_MACH_MSM7X27A_RUMI3) += board-msm7x27a.o board-7627a-all.o
|
obj-$(CONFIG_MACH_MSM7X27A_RUMI3) += board-msm7x27a.o board-7627a-all.o
|
||||||
obj-$(CONFIG_MACH_MSM7X27A_SURF) += board-msm7x27a.o board-7627a-all.o
|
obj-$(CONFIG_MACH_MSM7X27A_SURF) += board-msm7x27a.o board-7627a-all.o
|
||||||
obj-$(CONFIG_MACH_MSM7X27A_FFA) += board-msm7x27a.o board-7627a-all.o
|
obj-$(CONFIG_MACH_MSM7X27A_FFA) += board-msm7x27a.o board-7627a-all.o
|
||||||
|
|
|
@ -0,0 +1,429 @@
|
||||||
|
/* Copyright (c) 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
|
||||||
|
* only version 2 as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/android_pmem.h>
|
||||||
|
#include <linux/gfp.h>
|
||||||
|
#include <mach/msm_memtypes.h>
|
||||||
|
#include <mach/board.h>
|
||||||
|
#include <mach/msm_rpcrouter.h>
|
||||||
|
#include <mach/socinfo.h>
|
||||||
|
|
||||||
|
#include "devices.h"
|
||||||
|
#include "board-msm7627a.h"
|
||||||
|
#include "devices-msm7x2xa.h"
|
||||||
|
|
||||||
|
static struct android_pmem_platform_data android_pmem_adsp_pdata = {
|
||||||
|
.name = "pmem_adsp",
|
||||||
|
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
||||||
|
.cached = 1,
|
||||||
|
.memory_type = MEMTYPE_EBI1,
|
||||||
|
.request_region = request_fmem_c_region,
|
||||||
|
.release_region = release_fmem_c_region,
|
||||||
|
.reusable = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device android_pmem_adsp_device = {
|
||||||
|
.name = "android_pmem",
|
||||||
|
.id = 1,
|
||||||
|
.dev = { .platform_data = &android_pmem_adsp_pdata },
|
||||||
|
};
|
||||||
|
|
||||||
|
#define SND(desc, num) { .name = #desc, .id = num }
|
||||||
|
static struct snd_endpoint snd_endpoints_list[] = {
|
||||||
|
SND(HANDSET, 0),
|
||||||
|
SND(MONO_HEADSET, 2),
|
||||||
|
SND(HEADSET, 3),
|
||||||
|
SND(SPEAKER, 6),
|
||||||
|
SND(TTY_HEADSET, 8),
|
||||||
|
SND(TTY_VCO, 9),
|
||||||
|
SND(TTY_HCO, 10),
|
||||||
|
SND(BT, 12),
|
||||||
|
SND(IN_S_SADC_OUT_HANDSET, 16),
|
||||||
|
SND(IN_S_SADC_OUT_SPEAKER_PHONE, 25),
|
||||||
|
SND(FM_DIGITAL_STEREO_HEADSET, 26),
|
||||||
|
SND(FM_DIGITAL_SPEAKER_PHONE, 27),
|
||||||
|
SND(FM_DIGITAL_BT_A2DP_HEADSET, 28),
|
||||||
|
SND(STEREO_HEADSET_AND_SPEAKER, 31),
|
||||||
|
SND(CURRENT, 0x7FFFFFFE),
|
||||||
|
SND(FM_ANALOG_STEREO_HEADSET, 35),
|
||||||
|
SND(FM_ANALOG_STEREO_HEADSET_CODEC, 36),
|
||||||
|
};
|
||||||
|
#undef SND
|
||||||
|
|
||||||
|
static struct msm_snd_endpoints msm_device_snd_endpoints = {
|
||||||
|
.endpoints = snd_endpoints_list,
|
||||||
|
.num = sizeof(snd_endpoints_list) / sizeof(struct snd_endpoint)
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device msm_device_snd = {
|
||||||
|
.name = "msm_snd",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &msm_device_snd_endpoints
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DEC0_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
||||||
|
#define DEC1_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
||||||
|
#define DEC2_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
||||||
|
#define DEC3_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
||||||
|
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
||||||
|
#define DEC4_FORMAT (1<<MSM_ADSP_CODEC_MIDI)
|
||||||
|
|
||||||
|
static unsigned int dec_concurrency_table[] = {
|
||||||
|
/* Audio LP */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DMA)), 0,
|
||||||
|
0, 0, 0,
|
||||||
|
|
||||||
|
/* Concurrency 1 */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC4_FORMAT),
|
||||||
|
|
||||||
|
/* Concurrency 2 */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC4_FORMAT),
|
||||||
|
|
||||||
|
/* Concurrency 3 */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC4_FORMAT),
|
||||||
|
|
||||||
|
/* Concurrency 4 */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC4_FORMAT),
|
||||||
|
|
||||||
|
/* Concurrency 5 */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC4_FORMAT),
|
||||||
|
|
||||||
|
/* Concurrency 6 */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
0, 0, 0,
|
||||||
|
|
||||||
|
/* Concurrency 7 */
|
||||||
|
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
||||||
|
(DEC4_FORMAT),
|
||||||
|
};
|
||||||
|
|
||||||
|
#define DEC_INFO(name, queueid, decid, nr_codec) { .module_name = name, \
|
||||||
|
.module_queueid = queueid, .module_decid = decid, \
|
||||||
|
.nr_codec_support = nr_codec}
|
||||||
|
|
||||||
|
static struct msm_adspdec_info dec_info_list[] = {
|
||||||
|
DEC_INFO("AUDPLAY0TASK", 13, 0, 11), /* AudPlay0BitStreamCtrlQueue */
|
||||||
|
DEC_INFO("AUDPLAY1TASK", 14, 1, 11), /* AudPlay1BitStreamCtrlQueue */
|
||||||
|
DEC_INFO("AUDPLAY2TASK", 15, 2, 11), /* AudPlay2BitStreamCtrlQueue */
|
||||||
|
DEC_INFO("AUDPLAY3TASK", 16, 3, 11), /* AudPlay3BitStreamCtrlQueue */
|
||||||
|
DEC_INFO("AUDPLAY4TASK", 17, 4, 1), /* AudPlay4BitStreamCtrlQueue */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct msm_adspdec_database msm_device_adspdec_database = {
|
||||||
|
.num_dec = ARRAY_SIZE(dec_info_list),
|
||||||
|
.num_concurrency_support = (ARRAY_SIZE(dec_concurrency_table) / \
|
||||||
|
ARRAY_SIZE(dec_info_list)),
|
||||||
|
.dec_concurrency_table = dec_concurrency_table,
|
||||||
|
.dec_info_list = dec_info_list,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device msm_device_adspdec = {
|
||||||
|
.name = "msm_adspdec",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &msm_device_adspdec_database
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct android_pmem_platform_data android_pmem_audio_pdata = {
|
||||||
|
.name = "pmem_audio",
|
||||||
|
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
||||||
|
.cached = 0,
|
||||||
|
.memory_type = MEMTYPE_EBI1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device android_pmem_audio_device = {
|
||||||
|
.name = "android_pmem",
|
||||||
|
.id = 2,
|
||||||
|
.dev = { .platform_data = &android_pmem_audio_pdata },
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned pmem_kernel_ebi1_size = PMEM_KERNEL_EBI1_SIZE;
|
||||||
|
static int __init pmem_kernel_ebi1_size_setup(char *p)
|
||||||
|
{
|
||||||
|
pmem_kernel_ebi1_size = memparse(p, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
early_param("pmem_kernel_ebi1_size", pmem_kernel_ebi1_size_setup);
|
||||||
|
|
||||||
|
static unsigned pmem_audio_size = MSM_PMEM_AUDIO_SIZE;
|
||||||
|
static int __init pmem_audio_size_setup(char *p)
|
||||||
|
{
|
||||||
|
pmem_audio_size = memparse(p, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
early_param("pmem_audio_size", pmem_audio_size_setup);
|
||||||
|
|
||||||
|
static struct memtype_reserve msm7627a_reserve_table[] __initdata = {
|
||||||
|
[MEMTYPE_SMI] = {
|
||||||
|
},
|
||||||
|
[MEMTYPE_EBI0] = {
|
||||||
|
.flags = MEMTYPE_FLAGS_1M_ALIGN,
|
||||||
|
},
|
||||||
|
[MEMTYPE_EBI1] = {
|
||||||
|
.flags = MEMTYPE_FLAGS_1M_ALIGN,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct android_pmem_platform_data android_pmem_pdata = {
|
||||||
|
.name = "pmem",
|
||||||
|
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
||||||
|
.cached = 1,
|
||||||
|
.memory_type = MEMTYPE_EBI1,
|
||||||
|
};
|
||||||
|
static struct platform_device android_pmem_device = {
|
||||||
|
.name = "android_pmem",
|
||||||
|
.id = 0,
|
||||||
|
.dev = { .platform_data = &android_pmem_pdata },
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct android_pmem_platform_data *pmem_pdata_array[] __initdata = {
|
||||||
|
&android_pmem_adsp_pdata,
|
||||||
|
&android_pmem_audio_pdata,
|
||||||
|
&android_pmem_pdata,
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned pmem_mdp_size;
|
||||||
|
static unsigned pmem_adsp_size;
|
||||||
|
|
||||||
|
static int __init pmem_mdp_size_setup(char *p)
|
||||||
|
{
|
||||||
|
pmem_mdp_size = memparse(p, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
early_param("pmem_mdp_size", pmem_mdp_size_setup);
|
||||||
|
|
||||||
|
static int __init pmem_adsp_size_setup(char *p)
|
||||||
|
{
|
||||||
|
pmem_adsp_size = memparse(p, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
early_param("pmem_adsp_size", pmem_adsp_size_setup);
|
||||||
|
|
||||||
|
static void __init msm7627a_size_pmem_devices(void)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
unsigned int reusable_count = 0;
|
||||||
|
|
||||||
|
if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) {
|
||||||
|
pmem_mdp_size = MSM7x25A_MSM_PMEM_MDP_SIZE;
|
||||||
|
pmem_adsp_size = MSM7x25A_MSM_PMEM_ADSP_SIZE;
|
||||||
|
} else {
|
||||||
|
pmem_mdp_size = MSM_PMEM_MDP_SIZE;
|
||||||
|
pmem_adsp_size = MSM_PMEM_ADSP_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
android_pmem_adsp_pdata.size = pmem_adsp_size;
|
||||||
|
android_pmem_pdata.size = pmem_mdp_size;
|
||||||
|
android_pmem_audio_pdata.size = pmem_audio_size;
|
||||||
|
|
||||||
|
fmem_pdata.size = 0;
|
||||||
|
|
||||||
|
/* Find pmem devices that should use FMEM (reusable) memory.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < ARRAY_SIZE(pmem_pdata_array); ++i) {
|
||||||
|
struct android_pmem_platform_data *pdata = pmem_pdata_array[i];
|
||||||
|
|
||||||
|
if (!reusable_count && pdata->reusable)
|
||||||
|
fmem_pdata.size += pdata->size;
|
||||||
|
|
||||||
|
reusable_count += (pdata->reusable) ? 1 : 0;
|
||||||
|
|
||||||
|
if (pdata->reusable && reusable_count > 1) {
|
||||||
|
pr_err("%s: Too many PMEM devices specified as reusable. PMEM device %s was not configured as reusable.\n",
|
||||||
|
__func__, pdata->name);
|
||||||
|
pdata->reusable = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init qrd7627a_size_pmem_devices(void)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
unsigned int reusable_count = 0;
|
||||||
|
|
||||||
|
pmem_mdp_size = QRD_PMEM_MDP_SIZE;
|
||||||
|
pmem_adsp_size = QRD_PMEM_ADSP_SIZE;
|
||||||
|
|
||||||
|
android_pmem_adsp_pdata.size = pmem_adsp_size;
|
||||||
|
android_pmem_pdata.size = pmem_mdp_size;
|
||||||
|
android_pmem_audio_pdata.size = pmem_audio_size;
|
||||||
|
|
||||||
|
fmem_pdata.size = 0;
|
||||||
|
|
||||||
|
/* Find pmem devices that should use FMEM (reusable) memory.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < ARRAY_SIZE(pmem_pdata_array); ++i) {
|
||||||
|
struct android_pmem_platform_data *pdata = pmem_pdata_array[i];
|
||||||
|
|
||||||
|
if (!reusable_count && pdata->reusable)
|
||||||
|
fmem_pdata.size += pdata->size;
|
||||||
|
|
||||||
|
reusable_count += (pdata->reusable) ? 1 : 0;
|
||||||
|
|
||||||
|
if (pdata->reusable && reusable_count > 1) {
|
||||||
|
pr_err("%s: Too many PMEM devices specified as reusable. PMEM device %s was not configured as reusable.\n",
|
||||||
|
__func__, pdata->name);
|
||||||
|
pdata->reusable = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init reserve_memory_for(struct android_pmem_platform_data *p)
|
||||||
|
{
|
||||||
|
msm7627a_reserve_table[p->memory_type].size += p->size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init msm7627a_reserve_pmem_memory(void)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
for (i = 0; i < ARRAY_SIZE(pmem_pdata_array); ++i) {
|
||||||
|
if (!pmem_pdata_array[i]->reusable)
|
||||||
|
reserve_memory_for(pmem_pdata_array[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
msm7627a_reserve_table[MEMTYPE_EBI1].size += pmem_kernel_ebi1_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init qrd7627a_reserve_pmem_memory(void)
|
||||||
|
{
|
||||||
|
reserve_memory_for(&android_pmem_adsp_pdata);
|
||||||
|
reserve_memory_for(&android_pmem_pdata);
|
||||||
|
reserve_memory_for(&android_pmem_audio_pdata);
|
||||||
|
msm7627a_reserve_table[MEMTYPE_EBI1].size += pmem_kernel_ebi1_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init msm7627a_calculate_reserve_sizes(void)
|
||||||
|
{
|
||||||
|
msm7627a_size_pmem_devices();
|
||||||
|
msm7627a_reserve_pmem_memory();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init qrd7627a_calculate_reserve_sizes(void)
|
||||||
|
{
|
||||||
|
qrd7627a_size_pmem_devices();
|
||||||
|
qrd7627a_reserve_pmem_memory();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int msm7627a_paddr_to_memtype(unsigned int paddr)
|
||||||
|
{
|
||||||
|
return MEMTYPE_EBI1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct reserve_info msm7627a_reserve_info __initdata = {
|
||||||
|
.memtype_reserve_table = msm7627a_reserve_table,
|
||||||
|
.calculate_reserve_sizes = msm7627a_calculate_reserve_sizes,
|
||||||
|
.paddr_to_memtype = msm7627a_paddr_to_memtype,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct reserve_info qrd7627a_reserve_info __initdata = {
|
||||||
|
.memtype_reserve_table = msm7627a_reserve_table,
|
||||||
|
.calculate_reserve_sizes = qrd7627a_calculate_reserve_sizes,
|
||||||
|
.paddr_to_memtype = msm7627a_paddr_to_memtype,
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init msm7627a_reserve(void)
|
||||||
|
{
|
||||||
|
reserve_info = &msm7627a_reserve_info;
|
||||||
|
msm_reserve();
|
||||||
|
fmem_pdata.phys = reserve_memory_for_fmem(fmem_pdata.size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init qrd7627a_reserve(void)
|
||||||
|
{
|
||||||
|
reserve_info = &qrd7627a_reserve_info;
|
||||||
|
msm_reserve();
|
||||||
|
fmem_pdata.phys = reserve_memory_for_fmem(fmem_pdata.size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_device *audio_devices[] __initdata = {
|
||||||
|
&android_pmem_device,
|
||||||
|
&android_pmem_adsp_device,
|
||||||
|
&android_pmem_audio_device,
|
||||||
|
&msm_device_adspdec,
|
||||||
|
&msm_device_snd,
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init msm_adsp_add_pdev(void)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
struct rpc_board_dev *rpc_adsp_pdev;
|
||||||
|
|
||||||
|
rpc_adsp_pdev = kzalloc(sizeof(struct rpc_board_dev), GFP_KERNEL);
|
||||||
|
if (rpc_adsp_pdev == NULL) {
|
||||||
|
pr_err("%s: Memory Allocation failure\n", __func__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rpc_adsp_pdev->prog = ADSP_RPC_PROG;
|
||||||
|
|
||||||
|
if (cpu_is_msm8625())
|
||||||
|
rpc_adsp_pdev->pdev = msm8625_device_adsp;
|
||||||
|
else
|
||||||
|
rpc_adsp_pdev->pdev = msm_adsp_device;
|
||||||
|
rc = msm_rpc_add_board_dev(rpc_adsp_pdev, 1);
|
||||||
|
if (rc < 0) {
|
||||||
|
pr_err("%s: return val: %d\n", __func__, rc);
|
||||||
|
kfree(rpc_adsp_pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
platform_add_devices(audio_devices,
|
||||||
|
ARRAY_SIZE(audio_devices));
|
||||||
|
|
||||||
|
}
|
|
@ -14,11 +14,25 @@
|
||||||
#define __ARCH_ARM_MACH_MSM_BOARD_7627A__
|
#define __ARCH_ARM_MACH_MSM_BOARD_7627A__
|
||||||
|
|
||||||
#include "pm.h"
|
#include "pm.h"
|
||||||
|
#include <linux/fmem.h>
|
||||||
|
|
||||||
void __init msm7627a_init_mmc(void);
|
void __init msm7627a_init_mmc(void);
|
||||||
|
|
||||||
void __init msm_msm7627a_allocate_memory_regions(void);
|
void __init msm_msm7627a_allocate_memory_regions(void);
|
||||||
void __init msm_fb_add_devices(void);
|
void __init msm_fb_add_devices(void);
|
||||||
|
|
||||||
|
#define PMEM_KERNEL_EBI1_SIZE 0x3A000
|
||||||
|
#define MSM_PMEM_AUDIO_SIZE 0x5B000
|
||||||
|
|
||||||
|
#define MSM_PMEM_MDP_SIZE 0x2300000
|
||||||
|
#define MSM_PMEM_ADSP_SIZE 0x1100000
|
||||||
|
|
||||||
|
#define MSM7x25A_MSM_PMEM_MDP_SIZE 0x1500000
|
||||||
|
#define MSM7x25A_MSM_PMEM_ADSP_SIZE 0xB91000
|
||||||
|
|
||||||
|
#define QRD_PMEM_MDP_SIZE 0x1DD1000
|
||||||
|
#define QRD_PMEM_ADSP_SIZE 0x1100000
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
GPIO_EXPANDER_IRQ_BASE = NR_MSM_IRQS + NR_GPIO_IRQS,
|
GPIO_EXPANDER_IRQ_BASE = NR_MSM_IRQS + NR_GPIO_IRQS,
|
||||||
GPIO_EXPANDER_GPIO_BASE = NR_MSM_GPIOS,
|
GPIO_EXPANDER_GPIO_BASE = NR_MSM_GPIOS,
|
||||||
|
@ -102,9 +116,14 @@ struct bt_vreg_info {
|
||||||
void __init msm7627a_bt_power_init(void);
|
void __init msm7627a_bt_power_init(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern struct fmem_platform_data fmem_pdata;
|
||||||
|
|
||||||
void __init msm7627a_camera_init(void);
|
void __init msm7627a_camera_init(void);
|
||||||
u32 msm7627a_power_collapse_latency(enum msm_pm_sleep_mode);
|
u32 msm7627a_power_collapse_latency(enum msm_pm_sleep_mode);
|
||||||
|
|
||||||
void __init msm7627a_add_io_devices(void);
|
void __init msm7627a_add_io_devices(void);
|
||||||
void __init qrd7627a_add_io_devices(void);
|
void __init qrd7627a_add_io_devices(void);
|
||||||
|
void __init msm_adsp_add_pdev(void);
|
||||||
|
void __init msm7627a_reserve(void);
|
||||||
|
void __init qrd7627a_reserve(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -59,9 +59,6 @@
|
||||||
#include "pm-boot.h"
|
#include "pm-boot.h"
|
||||||
#include "board-msm7627a.h"
|
#include "board-msm7627a.h"
|
||||||
|
|
||||||
#define PMEM_KERNEL_EBI1_SIZE 0x3A000
|
|
||||||
#define MSM_PMEM_AUDIO_SIZE 0x5B000
|
|
||||||
|
|
||||||
#if defined(CONFIG_GPIO_SX150X)
|
#if defined(CONFIG_GPIO_SX150X)
|
||||||
enum {
|
enum {
|
||||||
SX150X_CORE,
|
SX150X_CORE,
|
||||||
|
@ -155,15 +152,6 @@ static struct msm_i2c_platform_data msm_gsbi1_qup_i2c_pdata = {
|
||||||
.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,
|
.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_MSM7X27A
|
|
||||||
#define MSM_PMEM_MDP_SIZE 0x2300000
|
|
||||||
#define MSM7x25A_MSM_PMEM_MDP_SIZE 0x1500000
|
|
||||||
|
|
||||||
#define MSM_PMEM_ADSP_SIZE 0x1100000
|
|
||||||
#define MSM7x25A_MSM_PMEM_ADSP_SIZE 0xB91000
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct android_usb_platform_data android_usb_pdata = {
|
static struct android_usb_platform_data android_usb_pdata = {
|
||||||
.update_pid_and_serial_num = usb_diag_update_pid_and_serial_num,
|
.update_pid_and_serial_num = usb_diag_update_pid_and_serial_num,
|
||||||
};
|
};
|
||||||
|
@ -450,207 +438,6 @@ static struct msm_pm_boot_platform_data msm_pm_8625_boot_pdata __initdata = {
|
||||||
.v_addr = MSM_CFG_CTL_BASE,
|
.v_addr = MSM_CFG_CTL_BASE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct android_pmem_platform_data android_pmem_adsp_pdata = {
|
|
||||||
.name = "pmem_adsp",
|
|
||||||
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
|
||||||
.cached = 1,
|
|
||||||
.memory_type = MEMTYPE_EBI1,
|
|
||||||
.request_region = request_fmem_c_region,
|
|
||||||
.release_region = release_fmem_c_region,
|
|
||||||
.reusable = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device android_pmem_adsp_device = {
|
|
||||||
.name = "android_pmem",
|
|
||||||
.id = 1,
|
|
||||||
.dev = { .platform_data = &android_pmem_adsp_pdata },
|
|
||||||
};
|
|
||||||
|
|
||||||
static unsigned pmem_mdp_size = MSM_PMEM_MDP_SIZE;
|
|
||||||
static int __init pmem_mdp_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_mdp_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
early_param("pmem_mdp_size", pmem_mdp_size_setup);
|
|
||||||
|
|
||||||
static unsigned pmem_adsp_size = MSM_PMEM_ADSP_SIZE;
|
|
||||||
static int __init pmem_adsp_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_adsp_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
early_param("pmem_adsp_size", pmem_adsp_size_setup);
|
|
||||||
|
|
||||||
#define SND(desc, num) { .name = #desc, .id = num }
|
|
||||||
static struct snd_endpoint snd_endpoints_list[] = {
|
|
||||||
SND(HANDSET, 0),
|
|
||||||
SND(MONO_HEADSET, 2),
|
|
||||||
SND(HEADSET, 3),
|
|
||||||
SND(SPEAKER, 6),
|
|
||||||
SND(TTY_HEADSET, 8),
|
|
||||||
SND(TTY_VCO, 9),
|
|
||||||
SND(TTY_HCO, 10),
|
|
||||||
SND(BT, 12),
|
|
||||||
SND(IN_S_SADC_OUT_HANDSET, 16),
|
|
||||||
SND(IN_S_SADC_OUT_SPEAKER_PHONE, 25),
|
|
||||||
SND(FM_DIGITAL_STEREO_HEADSET, 26),
|
|
||||||
SND(FM_DIGITAL_SPEAKER_PHONE, 27),
|
|
||||||
SND(FM_DIGITAL_BT_A2DP_HEADSET, 28),
|
|
||||||
SND(STEREO_HEADSET_AND_SPEAKER, 31),
|
|
||||||
SND(CURRENT, 0x7FFFFFFE),
|
|
||||||
SND(FM_ANALOG_STEREO_HEADSET, 35),
|
|
||||||
SND(FM_ANALOG_STEREO_HEADSET_CODEC, 36),
|
|
||||||
};
|
|
||||||
#undef SND
|
|
||||||
|
|
||||||
static struct msm_snd_endpoints msm_device_snd_endpoints = {
|
|
||||||
.endpoints = snd_endpoints_list,
|
|
||||||
.num = sizeof(snd_endpoints_list) / sizeof(struct snd_endpoint)
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device msm_device_snd = {
|
|
||||||
.name = "msm_snd",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &msm_device_snd_endpoints
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
#define DEC0_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC1_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC2_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC3_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC4_FORMAT (1<<MSM_ADSP_CODEC_MIDI)
|
|
||||||
|
|
||||||
static unsigned int dec_concurrency_table[] = {
|
|
||||||
/* Audio LP */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DMA)), 0,
|
|
||||||
0, 0, 0,
|
|
||||||
|
|
||||||
/* Concurrency 1 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 2 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 3 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 4 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 5 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 6 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
0, 0, 0,
|
|
||||||
|
|
||||||
/* Concurrency 7 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
};
|
|
||||||
|
|
||||||
#define DEC_INFO(name, queueid, decid, nr_codec) { .module_name = name, \
|
|
||||||
.module_queueid = queueid, .module_decid = decid, \
|
|
||||||
.nr_codec_support = nr_codec}
|
|
||||||
|
|
||||||
static struct msm_adspdec_info dec_info_list[] = {
|
|
||||||
DEC_INFO("AUDPLAY0TASK", 13, 0, 11), /* AudPlay0BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY1TASK", 14, 1, 11), /* AudPlay1BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY2TASK", 15, 2, 11), /* AudPlay2BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY3TASK", 16, 3, 11), /* AudPlay3BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY4TASK", 17, 4, 1), /* AudPlay4BitStreamCtrlQueue */
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct msm_adspdec_database msm_device_adspdec_database = {
|
|
||||||
.num_dec = ARRAY_SIZE(dec_info_list),
|
|
||||||
.num_concurrency_support = (ARRAY_SIZE(dec_concurrency_table) / \
|
|
||||||
ARRAY_SIZE(dec_info_list)),
|
|
||||||
.dec_concurrency_table = dec_concurrency_table,
|
|
||||||
.dec_info_list = dec_info_list,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device msm_device_adspdec = {
|
|
||||||
.name = "msm_adspdec",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &msm_device_adspdec_database
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct android_pmem_platform_data android_pmem_audio_pdata = {
|
|
||||||
.name = "pmem_audio",
|
|
||||||
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
|
||||||
.cached = 0,
|
|
||||||
.memory_type = MEMTYPE_EBI1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device android_pmem_audio_device = {
|
|
||||||
.name = "android_pmem",
|
|
||||||
.id = 2,
|
|
||||||
.dev = { .platform_data = &android_pmem_audio_pdata },
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct android_pmem_platform_data android_pmem_pdata = {
|
|
||||||
.name = "pmem",
|
|
||||||
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
|
||||||
.cached = 1,
|
|
||||||
.memory_type = MEMTYPE_EBI1,
|
|
||||||
};
|
|
||||||
static struct platform_device android_pmem_device = {
|
|
||||||
.name = "android_pmem",
|
|
||||||
.id = 0,
|
|
||||||
.dev = { .platform_data = &android_pmem_pdata },
|
|
||||||
};
|
|
||||||
|
|
||||||
static u32 msm_calculate_batt_capacity(u32 current_voltage);
|
static u32 msm_calculate_batt_capacity(u32 current_voltage);
|
||||||
|
|
||||||
static struct msm_psy_batt_pdata msm_psy_batt_data = {
|
static struct msm_psy_batt_pdata msm_psy_batt_data = {
|
||||||
|
@ -803,13 +590,8 @@ static struct platform_device *msm7627a_surf_ffa_devices[] __initdata = {
|
||||||
|
|
||||||
static struct platform_device *common_devices[] __initdata = {
|
static struct platform_device *common_devices[] __initdata = {
|
||||||
&android_usb_device,
|
&android_usb_device,
|
||||||
&android_pmem_device,
|
|
||||||
&android_pmem_adsp_device,
|
|
||||||
&android_pmem_audio_device,
|
|
||||||
&fmem_device,
|
&fmem_device,
|
||||||
&msm_device_nand,
|
&msm_device_nand,
|
||||||
&msm_device_snd,
|
|
||||||
&msm_device_adspdec,
|
|
||||||
&asoc_msm_pcm,
|
&asoc_msm_pcm,
|
||||||
&asoc_msm_dai0,
|
&asoc_msm_dai0,
|
||||||
&asoc_msm_dai1,
|
&asoc_msm_dai1,
|
||||||
|
@ -829,126 +611,9 @@ static struct platform_device *msm8625_surf_devices[] __initdata = {
|
||||||
&msm8625_kgsl_3d0,
|
&msm8625_kgsl_3d0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned pmem_kernel_ebi1_size = PMEM_KERNEL_EBI1_SIZE;
|
|
||||||
static int __init pmem_kernel_ebi1_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_kernel_ebi1_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
early_param("pmem_kernel_ebi1_size", pmem_kernel_ebi1_size_setup);
|
|
||||||
|
|
||||||
static unsigned pmem_audio_size = MSM_PMEM_AUDIO_SIZE;
|
|
||||||
static int __init pmem_audio_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_audio_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
early_param("pmem_audio_size", pmem_audio_size_setup);
|
|
||||||
|
|
||||||
static struct memtype_reserve msm7x27a_reserve_table[] __initdata = {
|
|
||||||
[MEMTYPE_SMI] = {
|
|
||||||
},
|
|
||||||
[MEMTYPE_EBI0] = {
|
|
||||||
.flags = MEMTYPE_FLAGS_1M_ALIGN,
|
|
||||||
},
|
|
||||||
[MEMTYPE_EBI1] = {
|
|
||||||
.flags = MEMTYPE_FLAGS_1M_ALIGN,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_ANDROID_PMEM
|
|
||||||
static struct android_pmem_platform_data *pmem_pdata_array[] __initdata = {
|
|
||||||
&android_pmem_adsp_pdata,
|
|
||||||
&android_pmem_audio_pdata,
|
|
||||||
&android_pmem_pdata,
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void __init size_pmem_devices(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_ANDROID_PMEM
|
|
||||||
unsigned int i;
|
|
||||||
unsigned int reusable_count = 0;
|
|
||||||
|
|
||||||
if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) {
|
|
||||||
pmem_mdp_size = MSM7x25A_MSM_PMEM_MDP_SIZE;
|
|
||||||
pmem_adsp_size = MSM7x25A_MSM_PMEM_ADSP_SIZE;
|
|
||||||
} else {
|
|
||||||
pmem_mdp_size = MSM_PMEM_MDP_SIZE;
|
|
||||||
pmem_adsp_size = MSM_PMEM_ADSP_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
android_pmem_adsp_pdata.size = pmem_adsp_size;
|
|
||||||
android_pmem_pdata.size = pmem_mdp_size;
|
|
||||||
android_pmem_audio_pdata.size = pmem_audio_size;
|
|
||||||
|
|
||||||
fmem_pdata.size = 0;
|
|
||||||
|
|
||||||
/* Find pmem devices that should use FMEM (reusable) memory.
|
|
||||||
*/
|
|
||||||
for (i = 0; i < ARRAY_SIZE(pmem_pdata_array); ++i) {
|
|
||||||
struct android_pmem_platform_data *pdata = pmem_pdata_array[i];
|
|
||||||
|
|
||||||
if (!reusable_count && pdata->reusable)
|
|
||||||
fmem_pdata.size += pdata->size;
|
|
||||||
|
|
||||||
reusable_count += (pdata->reusable) ? 1 : 0;
|
|
||||||
|
|
||||||
if (pdata->reusable && reusable_count > 1) {
|
|
||||||
pr_err("%s: Too many PMEM devices specified as reusable. PMEM device %s was not configured as reusable.\n",
|
|
||||||
__func__, pdata->name);
|
|
||||||
pdata->reusable = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init reserve_memory_for(struct android_pmem_platform_data *p)
|
|
||||||
{
|
|
||||||
msm7x27a_reserve_table[p->memory_type].size += p->size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init reserve_pmem_memory(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_ANDROID_PMEM
|
|
||||||
unsigned int i;
|
|
||||||
for (i = 0; i < ARRAY_SIZE(pmem_pdata_array); ++i) {
|
|
||||||
if (!pmem_pdata_array[i]->reusable)
|
|
||||||
reserve_memory_for(pmem_pdata_array[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
msm7x27a_reserve_table[MEMTYPE_EBI1].size += pmem_kernel_ebi1_size;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init msm7x27a_calculate_reserve_sizes(void)
|
|
||||||
{
|
|
||||||
size_pmem_devices();
|
|
||||||
reserve_pmem_memory();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int msm7x27a_paddr_to_memtype(unsigned int paddr)
|
|
||||||
{
|
|
||||||
return MEMTYPE_EBI1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct reserve_info msm7x27a_reserve_info __initdata = {
|
|
||||||
.memtype_reserve_table = msm7x27a_reserve_table,
|
|
||||||
.calculate_reserve_sizes = msm7x27a_calculate_reserve_sizes,
|
|
||||||
.paddr_to_memtype = msm7x27a_paddr_to_memtype,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init msm7x27a_reserve(void)
|
|
||||||
{
|
|
||||||
reserve_info = &msm7x27a_reserve_info;
|
|
||||||
msm_reserve();
|
|
||||||
fmem_pdata.phys = reserve_memory_for_fmem(fmem_pdata.size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init msm8625_reserve(void)
|
static void __init msm8625_reserve(void)
|
||||||
{
|
{
|
||||||
msm7x27a_reserve();
|
msm7627a_reserve();
|
||||||
memblock_remove(MSM8625_SECONDARY_PHYS, SZ_8);
|
memblock_remove(MSM8625_SECONDARY_PHYS, SZ_8);
|
||||||
memblock_remove(MSM8625_WARM_BOOT_PHYS, SZ_32);
|
memblock_remove(MSM8625_WARM_BOOT_PHYS, SZ_32);
|
||||||
}
|
}
|
||||||
|
@ -1009,29 +674,6 @@ static struct platform_device msm_proccomm_regulator_dev = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void msm_adsp_add_pdev(void)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
struct rpc_board_dev *rpc_adsp_pdev;
|
|
||||||
|
|
||||||
rpc_adsp_pdev = kzalloc(sizeof(struct rpc_board_dev), GFP_KERNEL);
|
|
||||||
if (rpc_adsp_pdev == NULL) {
|
|
||||||
pr_err("%s: Memory Allocation failure\n", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rpc_adsp_pdev->prog = ADSP_RPC_PROG;
|
|
||||||
|
|
||||||
if (cpu_is_msm8625())
|
|
||||||
rpc_adsp_pdev->pdev = msm8625_device_adsp;
|
|
||||||
else
|
|
||||||
rpc_adsp_pdev->pdev = msm_adsp_device;
|
|
||||||
rc = msm_rpc_add_board_dev(rpc_adsp_pdev, 1);
|
|
||||||
if (rc < 0) {
|
|
||||||
pr_err("%s: return val: %d\n", __func__, rc);
|
|
||||||
kfree(rpc_adsp_pdev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init msm7627a_rumi3_init(void)
|
static void __init msm7627a_rumi3_init(void)
|
||||||
{
|
{
|
||||||
msm7x27a_init_ebi2();
|
msm7x27a_init_ebi2();
|
||||||
|
@ -1177,7 +819,7 @@ static void __init msm7x2x_init_early(void)
|
||||||
MACHINE_START(MSM7X27A_RUMI3, "QCT MSM7x27a RUMI3")
|
MACHINE_START(MSM7X27A_RUMI3, "QCT MSM7x27a RUMI3")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7x27a_reserve,
|
.reserve = msm7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm7627a_rumi3_init,
|
.init_machine = msm7627a_rumi3_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -1187,7 +829,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM7X27A_SURF, "QCT MSM7x27a SURF")
|
MACHINE_START(MSM7X27A_SURF, "QCT MSM7x27a SURF")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7x27a_reserve,
|
.reserve = msm7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm7x2x_init,
|
.init_machine = msm7x2x_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -1197,7 +839,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM7X27A_FFA, "QCT MSM7x27a FFA")
|
MACHINE_START(MSM7X27A_FFA, "QCT MSM7x27a FFA")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7x27a_reserve,
|
.reserve = msm7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm7x2x_init,
|
.init_machine = msm7x2x_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -1207,7 +849,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM7625A_SURF, "QCT MSM7625a SURF")
|
MACHINE_START(MSM7625A_SURF, "QCT MSM7625a SURF")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7x27a_reserve,
|
.reserve = msm7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm7x2x_init,
|
.init_machine = msm7x2x_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -1217,7 +859,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM7625A_FFA, "QCT MSM7625a FFA")
|
MACHINE_START(MSM7625A_FFA, "QCT MSM7625a FFA")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7x27a_reserve,
|
.reserve = msm7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm7x2x_init,
|
.init_machine = msm7x2x_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
|
|
@ -24,9 +24,6 @@
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
#include <linux/mfd/marimba.h>
|
#include <linux/mfd/marimba.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/input/rmi_platformdata.h>
|
|
||||||
#include <linux/input/rmi_i2c.h>
|
|
||||||
#include <linux/i2c/atmel_mxt_ts.h>
|
|
||||||
#include <linux/regulator/consumer.h>
|
#include <linux/regulator/consumer.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
#include <linux/input/ft5x06_ts.h>
|
#include <linux/input/ft5x06_ts.h>
|
||||||
|
@ -58,20 +55,6 @@
|
||||||
#include "board-msm7x27a-regulator.h"
|
#include "board-msm7x27a-regulator.h"
|
||||||
#include "board-msm7627a.h"
|
#include "board-msm7627a.h"
|
||||||
|
|
||||||
#define PMEM_KERNEL_EBI1_SIZE 0x3A000
|
|
||||||
#define MSM_PMEM_AUDIO_SIZE 0x5B000
|
|
||||||
#define BAHAMA_SLAVE_ID_FM_REG 0x02
|
|
||||||
#define FM_GPIO 83
|
|
||||||
#define BT_PCM_BCLK_MODE 0x88
|
|
||||||
#define BT_PCM_DIN_MODE 0x89
|
|
||||||
#define BT_PCM_DOUT_MODE 0x8A
|
|
||||||
#define BT_PCM_SYNC_MODE 0x8B
|
|
||||||
#define FM_I2S_SD_MODE 0x8E
|
|
||||||
#define FM_I2S_WS_MODE 0x8F
|
|
||||||
#define FM_I2S_SCK_MODE 0x90
|
|
||||||
#define I2C_PIN_CTL 0x15
|
|
||||||
#define I2C_NORMAL 0x40
|
|
||||||
|
|
||||||
static struct platform_device msm_wlan_ar6000_pm_device = {
|
static struct platform_device msm_wlan_ar6000_pm_device = {
|
||||||
.name = "wlan_ar6000_pm_dev",
|
.name = "wlan_ar6000_pm_dev",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
|
@ -125,11 +108,6 @@ static struct msm_i2c_platform_data msm_gsbi1_qup_i2c_pdata = {
|
||||||
.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,
|
.msm_i2c_config_gpio = gsbi_qup_i2c_gpio_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_MSM7X27A
|
|
||||||
#define MSM_PMEM_MDP_SIZE 0x1DD1000
|
|
||||||
#define MSM_PMEM_ADSP_SIZE 0x1100000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct android_usb_platform_data android_usb_pdata = {
|
static struct android_usb_platform_data android_usb_pdata = {
|
||||||
.update_pid_and_serial_num = usb_diag_update_pid_and_serial_num,
|
.update_pid_and_serial_num = usb_diag_update_pid_and_serial_num,
|
||||||
};
|
};
|
||||||
|
@ -376,203 +354,6 @@ static struct msm_pm_boot_platform_data msm_pm_8625_boot_pdata __initdata = {
|
||||||
.v_addr = MSM_CFG_CTL_BASE,
|
.v_addr = MSM_CFG_CTL_BASE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct android_pmem_platform_data android_pmem_adsp_pdata = {
|
|
||||||
.name = "pmem_adsp",
|
|
||||||
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
|
||||||
.cached = 1,
|
|
||||||
.memory_type = MEMTYPE_EBI1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device android_pmem_adsp_device = {
|
|
||||||
.name = "android_pmem",
|
|
||||||
.id = 1,
|
|
||||||
.dev = { .platform_data = &android_pmem_adsp_pdata },
|
|
||||||
};
|
|
||||||
|
|
||||||
static unsigned pmem_mdp_size = MSM_PMEM_MDP_SIZE;
|
|
||||||
static int __init pmem_mdp_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_mdp_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
early_param("pmem_mdp_size", pmem_mdp_size_setup);
|
|
||||||
|
|
||||||
static unsigned pmem_adsp_size = MSM_PMEM_ADSP_SIZE;
|
|
||||||
static int __init pmem_adsp_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_adsp_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
early_param("pmem_adsp_size", pmem_adsp_size_setup);
|
|
||||||
|
|
||||||
#define SND(desc, num) { .name = #desc, .id = num }
|
|
||||||
static struct snd_endpoint snd_endpoints_list[] = {
|
|
||||||
SND(HANDSET, 0),
|
|
||||||
SND(MONO_HEADSET, 2),
|
|
||||||
SND(HEADSET, 3),
|
|
||||||
SND(SPEAKER, 6),
|
|
||||||
SND(TTY_HEADSET, 8),
|
|
||||||
SND(TTY_VCO, 9),
|
|
||||||
SND(TTY_HCO, 10),
|
|
||||||
SND(BT, 12),
|
|
||||||
SND(IN_S_SADC_OUT_HANDSET, 16),
|
|
||||||
SND(IN_S_SADC_OUT_SPEAKER_PHONE, 25),
|
|
||||||
SND(FM_DIGITAL_STEREO_HEADSET, 26),
|
|
||||||
SND(FM_DIGITAL_SPEAKER_PHONE, 27),
|
|
||||||
SND(FM_DIGITAL_BT_A2DP_HEADSET, 28),
|
|
||||||
SND(STEREO_HEADSET_AND_SPEAKER, 31),
|
|
||||||
SND(CURRENT, 0x7FFFFFFE),
|
|
||||||
SND(FM_ANALOG_STEREO_HEADSET, 35),
|
|
||||||
SND(FM_ANALOG_STEREO_HEADSET_CODEC, 36),
|
|
||||||
};
|
|
||||||
#undef SND
|
|
||||||
|
|
||||||
static struct msm_snd_endpoints msm_device_snd_endpoints = {
|
|
||||||
.endpoints = snd_endpoints_list,
|
|
||||||
.num = sizeof(snd_endpoints_list) / sizeof(struct snd_endpoint)
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device msm_device_snd = {
|
|
||||||
.name = "msm_snd",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &msm_device_snd_endpoints
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
#define DEC0_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC1_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC2_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC3_FORMAT ((1<<MSM_ADSP_CODEC_MP3)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AAC)|(1<<MSM_ADSP_CODEC_WMA)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_WMAPRO)|(1<<MSM_ADSP_CODEC_AMRWB)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_AMRNB)|(1<<MSM_ADSP_CODEC_WAV)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_ADPCM)|(1<<MSM_ADSP_CODEC_YADPCM)| \
|
|
||||||
(1<<MSM_ADSP_CODEC_EVRC)|(1<<MSM_ADSP_CODEC_QCELP))
|
|
||||||
#define DEC4_FORMAT (1<<MSM_ADSP_CODEC_MIDI)
|
|
||||||
|
|
||||||
static unsigned int dec_concurrency_table[] = {
|
|
||||||
/* Audio LP */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DMA)), 0,
|
|
||||||
0, 0, 0,
|
|
||||||
|
|
||||||
/* Concurrency 1 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 2 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 3 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 4 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 5 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_TUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
|
|
||||||
/* Concurrency 6 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
0, 0, 0, 0,
|
|
||||||
|
|
||||||
/* Concurrency 7 */
|
|
||||||
(DEC0_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC1_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC2_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC3_FORMAT|(1<<MSM_ADSP_MODE_NONTUNNEL)|(1<<MSM_ADSP_OP_DM)),
|
|
||||||
(DEC4_FORMAT),
|
|
||||||
};
|
|
||||||
|
|
||||||
#define DEC_INFO(name, queueid, decid, nr_codec) { .module_name = name, \
|
|
||||||
.module_queueid = queueid, .module_decid = decid, \
|
|
||||||
.nr_codec_support = nr_codec}
|
|
||||||
|
|
||||||
static struct msm_adspdec_info dec_info_list[] = {
|
|
||||||
DEC_INFO("AUDPLAY0TASK", 13, 0, 11), /* AudPlay0BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY1TASK", 14, 1, 11), /* AudPlay1BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY2TASK", 15, 2, 11), /* AudPlay2BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY3TASK", 16, 3, 11), /* AudPlay3BitStreamCtrlQueue */
|
|
||||||
DEC_INFO("AUDPLAY4TASK", 17, 4, 1), /* AudPlay4BitStreamCtrlQueue */
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct msm_adspdec_database msm_device_adspdec_database = {
|
|
||||||
.num_dec = ARRAY_SIZE(dec_info_list),
|
|
||||||
.num_concurrency_support = (ARRAY_SIZE(dec_concurrency_table) / \
|
|
||||||
ARRAY_SIZE(dec_info_list)),
|
|
||||||
.dec_concurrency_table = dec_concurrency_table,
|
|
||||||
.dec_info_list = dec_info_list,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device msm_device_adspdec = {
|
|
||||||
.name = "msm_adspdec",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &msm_device_adspdec_database
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct android_pmem_platform_data android_pmem_audio_pdata = {
|
|
||||||
.name = "pmem_audio",
|
|
||||||
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
|
||||||
.cached = 0,
|
|
||||||
.memory_type = MEMTYPE_EBI1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device android_pmem_audio_device = {
|
|
||||||
.name = "android_pmem",
|
|
||||||
.id = 2,
|
|
||||||
.dev = { .platform_data = &android_pmem_audio_pdata },
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct android_pmem_platform_data android_pmem_pdata = {
|
|
||||||
.name = "pmem",
|
|
||||||
.allocator_type = PMEM_ALLOCATORTYPE_BITMAP,
|
|
||||||
.cached = 1,
|
|
||||||
.memory_type = MEMTYPE_EBI1,
|
|
||||||
};
|
|
||||||
static struct platform_device android_pmem_device = {
|
|
||||||
.name = "android_pmem",
|
|
||||||
.id = 0,
|
|
||||||
.dev = { .platform_data = &android_pmem_pdata },
|
|
||||||
};
|
|
||||||
|
|
||||||
static u32 msm_calculate_batt_capacity(u32 current_voltage);
|
static u32 msm_calculate_batt_capacity(u32 current_voltage);
|
||||||
|
|
||||||
static struct msm_psy_batt_pdata msm_psy_batt_data = {
|
static struct msm_psy_batt_pdata msm_psy_batt_data = {
|
||||||
|
@ -600,12 +381,7 @@ static struct platform_device msm_batt_device = {
|
||||||
|
|
||||||
static struct platform_device *common_devices[] __initdata = {
|
static struct platform_device *common_devices[] __initdata = {
|
||||||
&android_usb_device,
|
&android_usb_device,
|
||||||
&android_pmem_device,
|
|
||||||
&android_pmem_adsp_device,
|
|
||||||
&android_pmem_audio_device,
|
|
||||||
&msm_batt_device,
|
&msm_batt_device,
|
||||||
&msm_device_adspdec,
|
|
||||||
&msm_device_snd,
|
|
||||||
&asoc_msm_pcm,
|
&asoc_msm_pcm,
|
||||||
&asoc_msm_dai0,
|
&asoc_msm_dai0,
|
||||||
&asoc_msm_dai1,
|
&asoc_msm_dai1,
|
||||||
|
@ -639,110 +415,6 @@ static struct platform_device *msm8625_evb_devices[] __initdata = {
|
||||||
&msm8625_kgsl_3d0,
|
&msm8625_kgsl_3d0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned pmem_kernel_ebi1_size = PMEM_KERNEL_EBI1_SIZE;
|
|
||||||
static int __init pmem_kernel_ebi1_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_kernel_ebi1_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
early_param("pmem_kernel_ebi1_size", pmem_kernel_ebi1_size_setup);
|
|
||||||
|
|
||||||
static unsigned pmem_audio_size = MSM_PMEM_AUDIO_SIZE;
|
|
||||||
static int __init pmem_audio_size_setup(char *p)
|
|
||||||
{
|
|
||||||
pmem_audio_size = memparse(p, NULL);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
early_param("pmem_audio_size", pmem_audio_size_setup);
|
|
||||||
|
|
||||||
static struct memtype_reserve msm7627a_reserve_table[] __initdata = {
|
|
||||||
[MEMTYPE_SMI] = {
|
|
||||||
},
|
|
||||||
[MEMTYPE_EBI0] = {
|
|
||||||
.flags = MEMTYPE_FLAGS_1M_ALIGN,
|
|
||||||
},
|
|
||||||
[MEMTYPE_EBI1] = {
|
|
||||||
.flags = MEMTYPE_FLAGS_1M_ALIGN,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init size_pmem_devices(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_ANDROID_PMEM
|
|
||||||
android_pmem_adsp_pdata.size = pmem_adsp_size;
|
|
||||||
android_pmem_pdata.size = pmem_mdp_size;
|
|
||||||
android_pmem_audio_pdata.size = pmem_audio_size;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init reserve_memory_for(struct android_pmem_platform_data *p)
|
|
||||||
{
|
|
||||||
msm7627a_reserve_table[p->memory_type].size += p->size;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init reserve_pmem_memory(void)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_ANDROID_PMEM
|
|
||||||
reserve_memory_for(&android_pmem_adsp_pdata);
|
|
||||||
reserve_memory_for(&android_pmem_pdata);
|
|
||||||
reserve_memory_for(&android_pmem_audio_pdata);
|
|
||||||
msm7627a_reserve_table[MEMTYPE_EBI1].size += pmem_kernel_ebi1_size;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init msm7627a_calculate_reserve_sizes(void)
|
|
||||||
{
|
|
||||||
size_pmem_devices();
|
|
||||||
reserve_pmem_memory();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int msm7627a_paddr_to_memtype(unsigned int paddr)
|
|
||||||
{
|
|
||||||
return MEMTYPE_EBI1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct reserve_info msm7627a_reserve_info __initdata = {
|
|
||||||
.memtype_reserve_table = msm7627a_reserve_table,
|
|
||||||
.calculate_reserve_sizes = msm7627a_calculate_reserve_sizes,
|
|
||||||
.paddr_to_memtype = msm7627a_paddr_to_memtype,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init msm7627a_reserve(void)
|
|
||||||
{
|
|
||||||
reserve_info = &msm7627a_reserve_info;
|
|
||||||
msm_reserve();
|
|
||||||
memblock_remove(MSM8625_WARM_BOOT_PHYS, SZ_32);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init msm8625_reserve(void)
|
|
||||||
{
|
|
||||||
memblock_remove(MSM8625_SECONDARY_PHYS, SZ_8);
|
|
||||||
msm7627a_reserve();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void msmqrd_adsp_add_pdev(void)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
struct rpc_board_dev *rpc_adsp_pdev;
|
|
||||||
|
|
||||||
rpc_adsp_pdev = kzalloc(sizeof(struct rpc_board_dev), GFP_KERNEL);
|
|
||||||
if (rpc_adsp_pdev == NULL) {
|
|
||||||
pr_err("%s: Memory Allocation failure\n", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rpc_adsp_pdev->prog = ADSP_RPC_PROG;
|
|
||||||
|
|
||||||
if (cpu_is_msm8625())
|
|
||||||
rpc_adsp_pdev->pdev = msm8625_device_adsp;
|
|
||||||
else
|
|
||||||
rpc_adsp_pdev->pdev = msm_adsp_device;
|
|
||||||
rc = msm_rpc_add_board_dev(rpc_adsp_pdev, 1);
|
|
||||||
if (rc < 0) {
|
|
||||||
pr_err("%s: return val: %d\n", __func__, rc);
|
|
||||||
kfree(rpc_adsp_pdev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __init msm7627a_device_i2c_init(void)
|
static void __init msm7627a_device_i2c_init(void)
|
||||||
{
|
{
|
||||||
msm_gsbi0_qup_i2c_device.dev.platform_data = &msm_gsbi0_qup_i2c_pdata;
|
msm_gsbi0_qup_i2c_device.dev.platform_data = &msm_gsbi0_qup_i2c_pdata;
|
||||||
|
@ -850,11 +522,19 @@ static void __init msm_pm_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init qrd8625_reserve(void)
|
||||||
|
{
|
||||||
|
memblock_remove(MSM8625_SECONDARY_PHYS, SZ_8);
|
||||||
|
qrd7627a_reserve();
|
||||||
|
memblock_remove(MSM8625_WARM_BOOT_PHYS, SZ_32);
|
||||||
|
msm_pm_8625_boot_pdata.p_addr = memblock_alloc(SZ_8, SZ_64K);
|
||||||
|
}
|
||||||
|
|
||||||
static void __init msm_qrd_init(void)
|
static void __init msm_qrd_init(void)
|
||||||
{
|
{
|
||||||
msm7x2x_misc_init();
|
msm7x2x_misc_init();
|
||||||
msm7627a_init_regulators();
|
msm7627a_init_regulators();
|
||||||
msmqrd_adsp_add_pdev();
|
msm_adsp_add_pdev();
|
||||||
|
|
||||||
if (cpu_is_msm8625())
|
if (cpu_is_msm8625())
|
||||||
msm8625_device_i2c_init();
|
msm8625_device_i2c_init();
|
||||||
|
@ -898,7 +578,7 @@ static void __init qrd7627a_init_early(void)
|
||||||
MACHINE_START(MSM7627A_QRD1, "QRD MSM7627a QRD1")
|
MACHINE_START(MSM7627A_QRD1, "QRD MSM7627a QRD1")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7627a_reserve,
|
.reserve = qrd7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm_qrd_init,
|
.init_machine = msm_qrd_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -908,7 +588,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM7627A_QRD3, "QRD MSM7627a QRD3")
|
MACHINE_START(MSM7627A_QRD3, "QRD MSM7627a QRD3")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7627a_reserve,
|
.reserve = qrd7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm_qrd_init,
|
.init_machine = msm_qrd_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -918,7 +598,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM7627A_EVB, "QRD MSM7627a EVB")
|
MACHINE_START(MSM7627A_EVB, "QRD MSM7627a EVB")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm_common_io_init,
|
.map_io = msm_common_io_init,
|
||||||
.reserve = msm7627a_reserve,
|
.reserve = qrd7627a_reserve,
|
||||||
.init_irq = msm_init_irq,
|
.init_irq = msm_init_irq,
|
||||||
.init_machine = msm_qrd_init,
|
.init_machine = msm_qrd_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -928,7 +608,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM8625_EVB, "QRD MSM8625 EVB")
|
MACHINE_START(MSM8625_EVB, "QRD MSM8625 EVB")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm8625_map_io,
|
.map_io = msm8625_map_io,
|
||||||
.reserve = msm8625_reserve,
|
.reserve = qrd8625_reserve,
|
||||||
.init_irq = msm8625_init_irq,
|
.init_irq = msm8625_init_irq,
|
||||||
.init_machine = msm_qrd_init,
|
.init_machine = msm_qrd_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
@ -938,7 +618,7 @@ MACHINE_END
|
||||||
MACHINE_START(MSM8625_QRD7, "QRD MSM8625 QRD7")
|
MACHINE_START(MSM8625_QRD7, "QRD MSM8625 QRD7")
|
||||||
.boot_params = PHYS_OFFSET + 0x100,
|
.boot_params = PHYS_OFFSET + 0x100,
|
||||||
.map_io = msm8625_map_io,
|
.map_io = msm8625_map_io,
|
||||||
.reserve = msm7627a_reserve,
|
.reserve = qrd8625_reserve,
|
||||||
.init_irq = msm8625_init_irq,
|
.init_irq = msm8625_init_irq,
|
||||||
.init_machine = msm_qrd_init,
|
.init_machine = msm_qrd_init,
|
||||||
.timer = &msm_timer,
|
.timer = &msm_timer,
|
||||||
|
|
Loading…
Reference in New Issue