aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-omap2/Makefile1
-rw-r--r--arch/arm/mach-omap2/clock44xx_data.c21
-rw-r--r--arch/arm/mach-omap2/devices.c93
-rw-r--r--arch/arm/mach-omap2/id.c1
-rw-r--r--arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h56
-rw-r--r--arch/arm/mach-omap2/omap2plus-cpufreq.c209
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_44xx_data.c124
-rw-r--r--arch/arm/mach-omap2/opp4xxx_data.c39
-rw-r--r--arch/arm/mach-omap2/pm44xx.c4
-rw-r--r--arch/arm/mach-omap2/temp_sensor_device.c95
-rw-r--r--arch/arm/plat-omap/Kconfig10
-rw-r--r--arch/arm/plat-omap/devices.c96
-rw-r--r--arch/arm/plat-omap/include/plat/dsscomp.h2
-rw-r--r--arch/arm/plat-omap/include/plat/temperature_sensor.h65
-rw-r--r--drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c8
-rw-r--r--drivers/misc/Kconfig7
-rw-r--r--drivers/misc/Makefile1
-rw-r--r--drivers/misc/omap_temp_sensor.c709
-rw-r--r--drivers/net/wireless/bcmdhd/Makefile2
-rw-r--r--drivers/net/wireless/bcmdhd/include/linuxver.h3
-rw-r--r--drivers/net/wireless/bcmdhd/wl_android.h22
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.h2
-rw-r--r--drivers/net/wireless/bcmdhd/wl_iw.c72
-rw-r--r--drivers/remoteproc/remoteproc.c18
-rw-r--r--drivers/rpmsg/rpmsg_omx.c12
-rw-r--r--drivers/rpmsg/virtio_rpmsg_bus.c11
-rw-r--r--drivers/video/omap2/dsscomp/base.c40
-rw-r--r--drivers/video/omap2/dsscomp/device.c45
-rw-r--r--drivers/video/omap2/dsscomp/dsscomp.h5
-rw-r--r--drivers/video/omap2/dsscomp/gralloc.c8
-rw-r--r--include/linux/rpmsg_omx.h14
-rw-r--r--include/net/addrconf.h2
-rw-r--r--include/net/if_inet6.h1
-rw-r--r--include/sound/omap-abe-dsp.h3
-rw-r--r--include/video/dsscomp.h18
-rw-r--r--net/ipv6/addrconf.c69
-rw-r--r--sound/soc/omap/abe/abe_api.h29
-rw-r--r--sound/soc/omap/abe/abe_asrc.c75
-rw-r--r--sound/soc/omap/abe/abe_cm_addr.h532
-rw-r--r--sound/soc/omap/abe/abe_core.c75
-rw-r--r--sound/soc/omap/abe/abe_def.h2
-rw-r--r--sound/soc/omap/abe/abe_define.h138
-rw-r--r--sound/soc/omap/abe/abe_dm_addr.h587
-rw-r--r--sound/soc/omap/abe/abe_firmware.c5626
-rw-r--r--sound/soc/omap/abe/abe_functionsid.h140
-rw-r--r--sound/soc/omap/abe/abe_gain.c19
-rw-r--r--sound/soc/omap/abe/abe_ini.c270
-rw-r--r--sound/soc/omap/abe/abe_initxxx_labels.h506
-rw-r--r--sound/soc/omap/abe/abe_main.c41
-rw-r--r--sound/soc/omap/abe/abe_main.h6
-rw-r--r--sound/soc/omap/abe/abe_port.c307
-rw-r--r--sound/soc/omap/abe/abe_sm_addr.h888
-rw-r--r--sound/soc/omap/abe/abe_taskid.h367
-rw-r--r--sound/soc/omap/omap-abe-dsp.c290
-rw-r--r--sound/soc/omap/omap-abe-dsp.h11
55 files changed, 7463 insertions, 4334 deletions
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 95fd52f..c3072d4 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -21,6 +21,7 @@ obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
obj-$(CONFIG_TWL4030_CORE) += omap_twl.o
obj-$(CONFIG_OMAP_TPS6236X) += omap_tps6236x.o
+obj-$(CONFIG_OMAP_TEMP_SENSOR) +=temp_sensor_device.o
# SMP support ONLY available for OMAP4
obj-$(CONFIG_SMP) += omap-smp.o omap-headsmp.o
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
index 836ab86..6f3e3a7 100644
--- a/arch/arm/mach-omap2/clock44xx_data.c
+++ b/arch/arm/mach-omap2/clock44xx_data.c
@@ -1286,11 +1286,26 @@ static struct clk l4_wkup_clk_mux_ck = {
.recalc = &omap2_clksel_recalc,
};
+static const struct clksel_rate div3_8to32_rates[] = {
+ { .div = 8, .val = 0, .flags = RATE_IN_44XX },
+ { .div = 16, .val = 1, .flags = RATE_IN_44XX },
+ { .div = 32, .val = 2, .flags = RATE_IN_44XX },
+ { .div = 0 },
+};
+
+static const struct clksel div_ts_ck_div[] = {
+ { .parent = &l4_wkup_clk_mux_ck, .rates = div3_8to32_rates },
+ { .parent = NULL },
+};
+
static struct clk div_ts_ck = {
.name = "div_ts_ck",
.parent = &l4_wkup_clk_mux_ck,
+ .clksel = div_ts_ck_div,
+ .clksel_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
+ .clksel_mask = OMAP4430_CLKSEL_24_25_MASK,
.ops = &clkops_null,
- .recalc = &followparent_recalc,
+ .recalc = &omap2_clksel_recalc,
};
static const struct clksel per_abe_nc_fclk_div[] = {
@@ -3281,8 +3296,8 @@ static struct omap_clk omap44xx_clks[] = {
CLK(NULL, "aes1_fck", &aes1_fck, CK_44XX),
CLK(NULL, "aes2_fck", &aes2_fck, CK_44XX),
CLK(NULL, "aess_fck", &aess_fck, CK_44XX),
- CLK(NULL, "bandgap_fclk", &bandgap_fclk, CK_443X),
- CLK(NULL, "bandgap_ts_fclk", &bandgap_ts_fclk, CK_446X),
+ CLK("omap_temp_sensor.0", "fck", &bandgap_fclk, CK_443X),
+ CLK("omap_temp_sensor.0", "fck", &bandgap_ts_fclk, CK_446X),
CLK(NULL, "des3des_fck", &des3des_fck, CK_44XX),
CLK(NULL, "dmic_sync_mux_ck", &dmic_sync_mux_ck, CK_44XX),
CLK(NULL, "dmic_fck", &dmic_fck, CK_44XX),
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index 3dc233d..d9add97 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -33,6 +33,9 @@
#include <plat/omap_hwmod.h>
#include <plat/omap_device.h>
#include <plat/omap4-keypad.h>
+#include <plat/mcpdm.h>
+
+#include <sound/omap-abe-dsp.h>
#include "mux.h"
#include "control.h"
@@ -294,6 +297,94 @@ static inline void omap_init_mbox(void) { }
static inline void omap_init_sti(void) {}
+#if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \
+ defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE)
+
+static struct omap_device_pm_latency omap_mcpdm_latency[] = {
+ {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ },
+};
+
+static void omap_init_mcpdm(void)
+{
+ struct omap_hwmod *oh;
+ struct omap_device *od;
+ struct omap_mcpdm_platform_data *pdata;
+ char *oh_name = "mcpdm";
+ char *dev_name = "omap-mcpdm";
+
+ oh = omap_hwmod_lookup(oh_name);
+ if (!oh) {
+ pr_err("%s: could not look up %s\n", __func__, oh_name);
+ return;
+ }
+
+ pdata = kzalloc(sizeof(struct omap_mcpdm_platform_data), GFP_KERNEL);
+ if (!pdata) {
+ pr_err("%s: could not allocate platform data\n", __func__);
+ return;
+ }
+
+ od = omap_device_build(dev_name, -1, oh, pdata,
+ sizeof(struct omap_mcpdm_platform_data),
+ omap_mcpdm_latency,
+ ARRAY_SIZE(omap_mcpdm_latency), 0);
+ WARN(IS_ERR(od), "could not build omap_device for %s:%s\n",
+ oh_name, dev_name);
+}
+#else
+static inline void omap_init_mcpdm(void) {}
+#endif
+
+#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP) || \
+ defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
+
+static struct omap_device_pm_latency omap_aess_latency[] = {
+ {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ },
+};
+
+static void omap_init_aess(void)
+{
+ struct omap_hwmod *oh;
+ struct omap_device *od;
+ struct omap4_abe_dsp_pdata *pdata;
+ char *oh_name = "aess";
+ char *dev_name = "aess";
+
+ oh = omap_hwmod_lookup(oh_name);
+ if (!oh) {
+ pr_err("%s: could not look up %s\n", __func__, oh_name);
+ return;
+ }
+
+ pdata = kzalloc(sizeof(struct omap4_abe_dsp_pdata), GFP_KERNEL);
+ if (!pdata) {
+ pr_err("%s: could not allocate platform data\n", __func__);
+ return;
+ }
+
+ pdata->device_scale = omap_device_scale;
+
+ od = omap_device_build(dev_name, -1, oh, pdata,
+ sizeof(struct omap4_abe_dsp_pdata),
+ omap_aess_latency,
+ ARRAY_SIZE(omap_aess_latency), 0);
+ WARN(IS_ERR(od), "could not build omap_device for %s:%s\n",
+ oh_name, dev_name);
+
+ kfree(pdata);
+}
+#else
+static inline void omap_init_aess(void) {}
+#endif
+
#if defined CONFIG_ARCH_OMAP4
static struct platform_device omap_abe_dai = {
@@ -760,6 +851,8 @@ static int __init omap2_init_devices(void)
* please keep these calls, and their implementations above,
* in alphabetical order so they're easier to sort through.
*/
+ omap_init_mcpdm();
+ omap_init_aess();
omap_init_abe();
omap_init_audio();
omap_init_camera();
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 72526f1..fe9dab5 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -242,6 +242,7 @@ static void __init omap4_check_features(void)
case 2:
/* High performance device */
omap4_features |= OMAP4_HAS_MPU_1_5GHZ;
+ omap4_features |= OMAP4_HAS_MPU_1_2GHZ;
break;
case 1:
default:
diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h
index 2f7ac70..1e60707 100644
--- a/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h
+++ b/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h
@@ -257,18 +257,50 @@
#define OMAP4_LDOSRAMCORE_ACTMODE_VSET_OUT_MASK (0x1f << 0)
/* TEMP_SENSOR */
-#define OMAP4_BGAP_TEMPSOFF_SHIFT 12
-#define OMAP4_BGAP_TEMPSOFF_MASK (1 << 12)
-#define OMAP4_BGAP_TSHUT_SHIFT 11
-#define OMAP4_BGAP_TSHUT_MASK (1 << 11)
-#define OMAP4_BGAP_TEMP_SENSOR_CONTCONV_SHIFT 10
-#define OMAP4_BGAP_TEMP_SENSOR_CONTCONV_MASK (1 << 10)
-#define OMAP4_BGAP_TEMP_SENSOR_SOC_SHIFT 9
-#define OMAP4_BGAP_TEMP_SENSOR_SOC_MASK (1 << 9)
-#define OMAP4_BGAP_TEMP_SENSOR_EOCZ_SHIFT 8
-#define OMAP4_BGAP_TEMP_SENSOR_EOCZ_MASK (1 << 8)
-#define OMAP4_BGAP_TEMP_SENSOR_DTEMP_SHIFT 0
-#define OMAP4_BGAP_TEMP_SENSOR_DTEMP_MASK (0xff << 0)
+#define OMAP4_BGAP_TEMPSOFF_SHIFT 13
+#define OMAP4_BGAP_TEMPSOFF_MASK (1 << 13)
+#define OMAP4_BGAP_TEMP_SENSOR_CONTCONV_SHIFT 12
+#define OMAP4_BGAP_TEMP_SENSOR_CONTCONV_MASK (1 << 12)
+#define OMAP4_BGAP_TEMP_SENSOR_SOC_SHIFT 11
+#define OMAP4_BGAP_TEMP_SENSOR_SOC_MASK (1 << 11)
+#define OMAP4_BGAP_TEMP_SENSOR_EOCZ_SHIFT 10
+#define OMAP4_BGAP_TEMP_SENSOR_EOCZ_MASK (1 << 10)
+#define OMAP4_BGAP_TEMP_SENSOR_DTEMP_SHIFT 0
+#define OMAP4_BGAP_TEMP_SENSOR_DTEMP_MASK (0x3ff << 0)
+
+/* BANDGAP_CTRL */
+#define OMAP4_SINGLE_MODE_SHIFT 31
+#define OMAP4_SINGLE_MODE_MASK (1 << 31)
+#define OMAP4_MASK_HOT_SHIFT 1
+#define OMAP4_MASK_HOT_MASK (1 << 1)
+#define OMAP4_MASK_COLD_SHIFT 0
+#define OMAP4_MASK_COLD_MASK (1 << 0)
+
+/* BANDGAP_COUNTER */
+#define OMAP4_COUNTER_SHIFT 0
+#define OMAP4_COUNTER_MASK (0xffffff << 0)
+
+/* BANDGAP_THRESHOLD */
+#define OMAP4_T_HOT_SHIFT 16
+#define OMAP4_T_HOT_MASK (0x3ff << 16)
+#define OMAP4_T_COLD_SHIFT 0
+#define OMAP4_T_COLD_MASK (0x3ff << 0)
+
+/* TSHUT_THRESHOLD */
+#define OMAP4_TSHUT_HOT_SHIFT 16
+#define OMAP4_TSHUT_HOT_MASK (0x3ff << 16)
+#define OMAP4_TSHUT_COLD_SHIFT 0
+#define OMAP4_TSHUT_COLD_MASK (0x3ff << 0)
+
+/* BANDGAP_STATUS */
+#define OMAP4_CLEAN_STOP_SHIFT 3
+#define OMAP4_CLEAN_STOP_MASK (1 << 3)
+#define OMAP4_BGAP_ALERT_SHIFT 2
+#define OMAP4_BGAP_ALERT_MASK (1 << 2)
+#define OMAP4_HOT_FLAG_SHIFT 1
+#define OMAP4_HOT_FLAG_MASK (1 << 1)
+#define OMAP4_COLD_FLAG_SHIFT 0
+#define OMAP4_COLD_FLAG_MASK (1 << 0)
/* DPLL_NWELL_TRIM_0 */
#define OMAP4_DPLL_ABE_NWELL_TRIM_MUX_CTRL_SHIFT 29
diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c
index 883325f..99a2f77 100644
--- a/arch/arm/mach-omap2/omap2plus-cpufreq.c
+++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c
@@ -46,6 +46,8 @@ struct lpj_info {
unsigned int freq;
};
+#define THROTTLE_DELAY_MS 1000
+
static DEFINE_PER_CPU(struct lpj_info, lpj_ref);
static struct lpj_info global_lpj_ref;
#endif
@@ -55,13 +57,11 @@ static atomic_t freq_table_users = ATOMIC_INIT(0);
static struct clk *mpu_clk;
static char *mpu_clk_name;
static struct device *mpu_dev;
+static DEFINE_MUTEX(omap_cpufreq_lock);
-static int omap_verify_speed(struct cpufreq_policy *policy)
-{
- if (!freq_table)
- return -EINVAL;
- return cpufreq_frequency_table_verify(policy, freq_table);
-}
+static unsigned int max_thermal;
+static unsigned int max_freq;
+static unsigned int current_target_freq;
static unsigned int omap_getspeed(unsigned int cpu)
{
@@ -74,45 +74,28 @@ static unsigned int omap_getspeed(unsigned int cpu)
return rate;
}
-static int omap_target(struct cpufreq_policy *policy,
- unsigned int target_freq,
- unsigned int relation)
+static int omap_cpufreq_scale(unsigned int target_freq, unsigned int cur_freq)
{
unsigned int i;
- int ret = 0;
+ int ret;
struct cpufreq_freqs freqs;
- if (!freq_table) {
- dev_err(mpu_dev, "%s: cpu%d: no freq table!\n", __func__,
- policy->cpu);
- return -EINVAL;
- }
+ freqs.new = target_freq;
+ freqs.old = omap_getspeed(0);
- ret = cpufreq_frequency_table_target(policy, freq_table, target_freq,
- relation, &i);
- if (ret) {
- dev_dbg(mpu_dev, "%s: cpu%d: no freq match for %d(ret=%d)\n",
- __func__, policy->cpu, target_freq, ret);
- return ret;
- }
- freqs.new = freq_table[i].frequency;
- if (!freqs.new) {
- dev_err(mpu_dev, "%s: cpu%d: no match for freq %d\n", __func__,
- policy->cpu, target_freq);
- return -EINVAL;
- }
-
- freqs.old = omap_getspeed(policy->cpu);
- freqs.cpu = policy->cpu;
+ /*
+ * If the new frequency is more than the thermal max allowed
+ * frequency, go ahead and scale the mpu device to proper frequency.
+ */
+ if (freqs.new > max_thermal)
+ freqs.new = max_thermal;
- if (freqs.old == freqs.new && policy->cur == freqs.new)
- return ret;
+ if ((freqs.old == freqs.new) && (cur_freq = freqs.new))
+ return 0;
/* notifiers */
- for_each_cpu(i, policy->cpus) {
- freqs.cpu = i;
+ for_each_online_cpu(freqs.cpu)
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
- }
#ifdef CONFIG_CPU_FREQ_DEBUG
pr_info("cpufreq-omap: transition: %u --> %u\n", freqs.old, freqs.new);
@@ -120,7 +103,7 @@ static int omap_target(struct cpufreq_policy *policy,
ret = omap_device_scale(mpu_dev, mpu_dev, freqs.new * 1000);
- freqs.new = omap_getspeed(policy->cpu);
+ freqs.new = omap_getspeed(0);
#ifdef CONFIG_SMP
/*
@@ -128,7 +111,7 @@ static int omap_target(struct cpufreq_policy *policy,
* cpufreq driver. So, update the per-CPU loops_per_jiffy value
* on frequency transition. We need to update all dependent CPUs.
*/
- for_each_cpu(i, policy->cpus) {
+ for_each_possible_cpu(i) {
struct lpj_info *lpj = &per_cpu(lpj_ref, i);
if (!lpj->freq) {
lpj->ref = per_cpu(cpu_data, i).loops_per_jiffy;
@@ -149,11 +132,152 @@ static int omap_target(struct cpufreq_policy *policy,
#endif
/* notifiers */
- for_each_cpu(i, policy->cpus) {
- freqs.cpu = i;
+ for_each_online_cpu(freqs.cpu)
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
+
+ return ret;
+}
+
+static unsigned int omap_thermal_lower_speed(void)
+{
+ unsigned int max = 0;
+ unsigned int curr;
+ int i;
+
+ curr = max_thermal;
+
+ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++)
+ if (freq_table[i].frequency > max &&
+ freq_table[i].frequency < curr)
+ max = freq_table[i].frequency;
+
+ if (!max)
+ return curr;
+
+ return max;
+}
+
+static void throttle_delayed_work_fn(struct work_struct *work);
+
+static DECLARE_DELAYED_WORK(throttle_delayed_work, throttle_delayed_work_fn);
+
+static void throttle_delayed_work_fn(struct work_struct *work)
+{
+ unsigned int new_max;
+ unsigned int cur;
+
+ mutex_lock(&omap_cpufreq_lock);
+
+ if (max_thermal == max_freq)
+ goto out;
+
+ new_max = omap_thermal_lower_speed();
+ if (new_max == max_thermal)
+ goto out;
+
+ max_thermal = new_max;
+
+ pr_warn("%s: temperature still too high, throttling cpu to max %u\n",
+ __func__, max_thermal);
+
+ cur = omap_getspeed(0);
+ if (cur > max_thermal)
+ omap_cpufreq_scale(max_thermal, cur);
+
+ schedule_delayed_work(&throttle_delayed_work,
+ msecs_to_jiffies(THROTTLE_DELAY_MS));
+
+out:
+ mutex_unlock(&omap_cpufreq_lock);
+}
+
+void omap_thermal_throttle(void)
+{
+ unsigned int cur;
+
+ mutex_lock(&omap_cpufreq_lock);
+
+ if (max_thermal != max_freq) {
+ pr_warn("%s: already throttling\n", __func__);
+ goto out;
+ }
+
+ max_thermal = omap_thermal_lower_speed();
+
+ pr_warn("%s: temperature too high, starting cpu throttling at max %u\n",
+ __func__, max_thermal);
+
+ cur = omap_getspeed(0);
+ if (cur > max_thermal)
+ omap_cpufreq_scale(max_thermal, cur);
+
+ schedule_delayed_work(&throttle_delayed_work,
+ msecs_to_jiffies(THROTTLE_DELAY_MS));
+
+out:
+ mutex_unlock(&omap_cpufreq_lock);
+}
+
+void omap_thermal_unthrottle(void)
+{
+ unsigned int cur;
+
+ mutex_lock(&omap_cpufreq_lock);
+
+ if (max_thermal == max_freq) {
+ pr_warn("%s: not throttling\n", __func__);
+ goto out;
+ }
+
+ max_thermal = max_freq;
+
+ cancel_delayed_work_sync(&throttle_delayed_work);
+
+ pr_warn("%s: temperature reduced, ending cpu throttling\n", __func__);
+
+ cur = omap_getspeed(0);
+ omap_cpufreq_scale(current_target_freq, cur);
+
+out:
+ mutex_unlock(&omap_cpufreq_lock);
+}
+
+static int omap_verify_speed(struct cpufreq_policy *policy)
+{
+ if (!freq_table)
+ return -EINVAL;
+ return cpufreq_frequency_table_verify(policy, freq_table);
+}
+
+static int omap_target(struct cpufreq_policy *policy,
+ unsigned int target_freq,
+ unsigned int relation)
+{
+ unsigned int i;
+ int ret = 0;
+
+ if (!freq_table) {
+ dev_err(mpu_dev, "%s: cpu%d: no freq table!\n", __func__,
+ policy->cpu);
+ return -EINVAL;
}
+ ret = cpufreq_frequency_table_target(policy, freq_table, target_freq,
+ relation, &i);
+ if (ret) {
+ dev_dbg(mpu_dev, "%s: cpu%d: no freq match for %d(ret=%d)\n",
+ __func__, policy->cpu, target_freq, ret);
+ return ret;
+ }
+
+ mutex_lock(&omap_cpufreq_lock);
+
+ current_target_freq = freq_table[i].frequency;
+
+ ret = omap_cpufreq_scale(current_target_freq, policy->cur);
+
+ mutex_unlock(&omap_cpufreq_lock);
+
return ret;
}
@@ -166,6 +290,7 @@ static inline void freq_table_free(void)
static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy)
{
int result = 0;
+ int i;
mpu_clk = clk_get(NULL, mpu_clk_name);
if (IS_ERR(mpu_clk))
@@ -197,6 +322,10 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy)
policy->max = policy->cpuinfo.max_freq;
policy->cur = omap_getspeed(policy->cpu);
+ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++)
+ max_freq = max(freq_table[i].frequency, max_freq);
+ max_thermal = max_freq;
+
/*
* On OMAP SMP configuartion, both processors share the voltage
* and clock. So both CPUs needs to be scaled together and hence
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 333e813..5562def 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -1036,6 +1036,124 @@ static struct omap_hwmod omap44xx_aess_hwmod = {
};
/*
+ * 'ctrl_module' class
+ * attila core control module
+ */
+
+static struct omap_hwmod_class_sysconfig omap44xx_ctrl_module_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .sysc_flags = SYSC_HAS_SIDLEMODE,
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+ SIDLE_SMART_WKUP),
+ .sysc_fields = &omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap44xx_ctrl_module_hwmod_class = {
+ .name = "ctrl_module",
+ .sysc = &omap44xx_ctrl_module_sysc,
+};
+
+/* ctrl_module_core */
+static struct omap_hwmod omap44xx_ctrl_module_core_hwmod;
+static struct omap_hwmod_irq_info omap44xx_ctrl_module_core_irqs[] = {
+ { .name = "sec_evts", .irq = 8 + OMAP44XX_IRQ_GIC_START },
+ { .name = "thermal_alert", .irq = 126 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_ctrl_module_core_addrs[] = {
+ {
+ .pa_start = 0x4a002000,
+ .pa_end = 0x4a0027ff,
+
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_cfg -> ctrl_module_core */
+static struct omap_hwmod_ocp_if omap44xx_l4_cfg__ctrl_module_core = {
+ .master = &omap44xx_l4_cfg_hwmod,
+ .slave = &omap44xx_ctrl_module_core_hwmod,
+ .clk = "l4_div_ck",
+ .addr = omap44xx_ctrl_module_core_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_ctrl_module_core_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* ctrl_module_core slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_ctrl_module_core_slaves[] = {
+ &omap44xx_l4_cfg__ctrl_module_core,
+};
+
+static struct omap_hwmod omap44xx_ctrl_module_core_hwmod = {
+ .name = "ctrl_module_core",
+ .class = &omap44xx_ctrl_module_hwmod_class,
+ .mpu_irqs = omap44xx_ctrl_module_core_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_ctrl_module_core_irqs),
+ .main_clk = "l4_div_ck",
+ .slaves = omap44xx_ctrl_module_core_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_ctrl_module_core_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP446X),
+};
+/*
+ * 'thermal_sensor' class
+ * thermal sensor module inside the bandgap / control module
+ */
+
+static struct omap_hwmod_class omap44xx_thermal_sensor_hwmod_class = {
+ .name = "thermal_sensor",
+};
+
+static struct omap_hwmod_irq_info omap44xx_thermal_sensor_irqs[] = {
+ { .name = "thermal_alert", .irq = 126 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_thermal_sensor_addrs[] = {
+ {
+ .pa_start = 0x4a002378,
+ .pa_end = 0x4a0023ff,
+ },
+};
+
+static struct omap_hwmod omap44xx_thermal_sensor_hwmod;
+/* l4_cfg -> ctrl_module_core */
+static struct omap_hwmod_ocp_if omap44xx_l4_cfg__thermal_sensor = {
+ .master = &omap44xx_l4_cfg_hwmod,
+ .slave = &omap44xx_thermal_sensor_hwmod,
+ .clk = "l4_div_ck",
+ .addr = omap44xx_thermal_sensor_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_thermal_sensor_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* ctrl_module_core slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_thermal_sensor_slaves[] = {
+ &omap44xx_l4_cfg__thermal_sensor,
+};
+
+static struct omap_hwmod_opt_clk thermal_sensor446x_opt_clks[] = {
+ { .role = "fclk", .clk = "bandgap_ts_fclk" },
+};
+
+static struct omap_hwmod omap44xx_thermal_sensor_hwmod = {
+ .name = "thermal_sensor",
+ .class = &omap44xx_thermal_sensor_hwmod_class,
+ .mpu_irqs = omap44xx_thermal_sensor_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_thermal_sensor_irqs),
+ .main_clk = "bandgap_ts_fclk",
+ .slaves = omap44xx_thermal_sensor_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_thermal_sensor_slaves),
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_WKUP_BANDGAP_CLKCTRL,
+ },
+ },
+ .opt_clks = thermal_sensor446x_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(thermal_sensor446x_opt_clks),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP446X),
+};
+
+/*
* 'bandgap' class
* bangap reference for ldo regulators
*/
@@ -5947,6 +6065,12 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
&omap44xx_timer10_hwmod,
&omap44xx_timer11_hwmod,
+ /* ctrl module class */
+ &omap44xx_ctrl_module_core_hwmod,
+
+ /* thermal sensor hwmod */
+ &omap44xx_thermal_sensor_hwmod,
+
/* uart class */
&omap44xx_uart1_hwmod,
&omap44xx_uart2_hwmod,
diff --git a/arch/arm/mach-omap2/opp4xxx_data.c b/arch/arm/mach-omap2/opp4xxx_data.c
index 9ea8aa7..1d5400f 100644
--- a/arch/arm/mach-omap2/opp4xxx_data.c
+++ b/arch/arm/mach-omap2/opp4xxx_data.c
@@ -19,8 +19,10 @@
* GNU General Public License for more details.
*/
#include <linux/module.h>
+#include <linux/opp.h>
#include <plat/cpu.h>
+#include <plat/common.h>
#include "control.h"
#include "omap_opp_data.h"
@@ -228,12 +230,7 @@ static struct omap_opp_def __initdata omap446x_opp_def_list[] = {
OPP_INITIALIZER("mpu", "virt_dpll_mpu_ck", "mpu", true, 700000000, OMAP4460_VDD_MPU_OPP100_UV),
/* MPU OPP3 - OPP-Turbo */
OPP_INITIALIZER("mpu", "virt_dpll_mpu_ck", "mpu", true, 920000000, OMAP4460_VDD_MPU_OPPTURBO_UV),
- /*
- * MPU OPP4 - OPP-Nitro + Disabled as the reference schematics
- * recommends TPS623631 - confirm and enable the opp in board file
- * XXX: May be we should enable these based on mpu capability and
- * Exception board files disable it...
- */
+ /* MPU OPP4 - OPP-Nitro */
OPP_INITIALIZER("mpu", "virt_dpll_mpu_ck", "mpu", false, 1200000000, OMAP4460_VDD_MPU_OPPNITRO_UV),
/* MPU OPP4 - OPP-Nitro SpeedBin */
OPP_INITIALIZER("mpu", "virt_dpll_mpu_ck", "mpu", false, 1500000000, OMAP4460_VDD_MPU_OPPNITRO_UV),
@@ -286,6 +283,28 @@ static struct omap_opp_def __initdata omap446x_opp_def_list[] = {
};
/**
+ * omap4_mpu_opp_enable() - helper to enable the OPP
+ * @freq: frequency to enable
+ */
+static void __init omap4_mpu_opp_enable(unsigned long freq)
+{
+ struct device *mpu_dev;
+ int r;
+
+ mpu_dev = omap2_get_mpuss_device();
+ if (!mpu_dev) {
+ pr_err("%s: no mpu_dev, did not enable f=%ld\n", __func__,
+ freq);
+ return;
+ }
+
+ r = opp_enable(mpu_dev, freq);
+ if (r < 0)
+ dev_err(mpu_dev, "%s: opp_enable failed(%d) f=%ld\n", __func__,
+ r, freq);
+}
+
+/**
* omap4_opp_init() - initialize omap4 opp table
*/
int __init omap4_opp_init(void)
@@ -300,6 +319,14 @@ int __init omap4_opp_init(void)
else if (cpu_is_omap446x())
r = omap_init_opp_table(omap446x_opp_def_list,
ARRAY_SIZE(omap446x_opp_def_list));
+
+ if (!r) {
+ if (omap4_has_mpu_1_2ghz())
+ omap4_mpu_opp_enable(1200000000);
+ if (omap4_has_mpu_1_5ghz())
+ omap4_mpu_opp_enable(1500000000);
+ }
+
return r;
}
device_initcall(omap4_opp_init);
diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c
index faf93ec..2d3bb51 100644
--- a/arch/arm/mach-omap2/pm44xx.c
+++ b/arch/arm/mach-omap2/pm44xx.c
@@ -26,6 +26,7 @@
#include <mach/omap4-common.h>
#include <plat/omap_hsi.h>
#include <plat/common.h>
+#include <plat/temperature_sensor.h>
#include <plat/usb.h>
#include "powerdomain.h"
@@ -144,6 +145,7 @@ void omap4_enter_sleep(unsigned int cpu, unsigned int power_state, bool suspend)
omap_vc_set_auto_trans(iva_voltdm,
OMAP_VC_CHANNEL_AUTO_TRANSITION_RETENTION);
+ omap_temp_sensor_prepare_idle();
omap2_gpio_prepare_for_idle(0);
}
}
@@ -159,6 +161,8 @@ void omap4_enter_sleep(unsigned int cpu, unsigned int power_state, bool suspend)
OMAP_VC_CHANNEL_AUTO_TRANSITION_DISABLE);
omap_vc_set_auto_trans(iva_voltdm,
OMAP_VC_CHANNEL_AUTO_TRANSITION_DISABLE);
+
+ omap_temp_sensor_resume_idle();
omap2_gpio_resume_after_idle();
if (!suspend) {
omap_sr_enable(iva_voltdm);
diff --git a/arch/arm/mach-omap2/temp_sensor_device.c b/arch/arm/mach-omap2/temp_sensor_device.c
new file mode 100644
index 0000000..0a647a3
--- /dev/null
+++ b/arch/arm/mach-omap2/temp_sensor_device.c
@@ -0,0 +1,95 @@
+/*
+ * OMAP on die Temperature sensor device file
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Author: J Keerthy <j-keerthy@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <linux/err.h>
+#include <linux/slab.h>
+#include <linux/io.h>
+#include <plat/omap_device.h>
+#include "control.h"
+#include "pm.h"
+#include <plat/temperature_sensor.h>
+
+void omap_temp_sensor_resume_idle(void)
+{
+ omap_temp_sensor_idle(0);
+}
+
+void omap_temp_sensor_prepare_idle(void)
+{
+ omap_temp_sensor_idle(1);
+}
+
+static struct omap_device_pm_latency omap_temp_sensor_latency[] = {
+ {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ }
+};
+
+static int temp_sensor_dev_init(struct omap_hwmod *oh, void *user)
+{
+ struct omap_temp_sensor_pdata *temp_sensor_pdata;
+ struct omap_device *od;
+ static int i;
+ int ret = 0;
+
+ temp_sensor_pdata =
+ kzalloc(sizeof(struct omap_temp_sensor_pdata), GFP_KERNEL);
+ if (!temp_sensor_pdata) {
+ pr_err
+ ("%s: Unable to allocate memory for %s.Error!\n",
+ __func__, oh->name);
+ return -ENOMEM;
+ }
+
+ temp_sensor_pdata->offset = OMAP4_CTRL_MODULE_CORE_TEMP_SENSOR;
+
+ temp_sensor_pdata->name = "omap_temp_sensor";
+
+ od = omap_device_build(temp_sensor_pdata->name, i, oh, temp_sensor_pdata,
+ sizeof(*temp_sensor_pdata),
+ omap_temp_sensor_latency,
+ ARRAY_SIZE(omap_temp_sensor_latency), 0);
+ if (IS_ERR(od)) {
+ pr_warning("%s: Could not build omap_device for %s: %s.\n\n",
+ __func__, temp_sensor_pdata->name, oh->name);
+ ret = -EINVAL;
+ goto done;
+ }
+
+ i++;
+done:
+ kfree(temp_sensor_pdata);
+ return ret;
+}
+
+int __init omap_devinit_temp_sensor(void)
+{
+ if (!cpu_is_omap446x())
+ return 0;
+
+ return omap_hwmod_for_each_by_class("thermal_sensor",
+ temp_sensor_dev_init, NULL);
+}
+
+arch_initcall(omap_devinit_temp_sensor);
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig
index e85abd8..77a1f82 100644
--- a/arch/arm/plat-omap/Kconfig
+++ b/arch/arm/plat-omap/Kconfig
@@ -220,6 +220,16 @@ config OMAP_SERIAL_WAKE
to data on the serial RX line. This allows you to wake the
system from serial console.
+config OMAP_TEMP_SENSOR
+ bool "OMAP Temp Sensor Support"
+ depends on ARCH_OMAP4
+ default n
+ help
+ Say Y here if you want support for the temp sensor on OMAP4460.
+ This provides the temperature of the MPU
+ subsystem. Only one instance of on die temperature
+ sensor is present.
+
# this carveout should probably become generic and not omap specific
config OMAP_REMOTEPROC_MEMPOOL_SIZE
hex "Physical carveout memory pool size (Byte)"
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c
index bb60ff7..d8add7e7 100644
--- a/arch/arm/plat-omap/devices.c
+++ b/arch/arm/plat-omap/devices.c
@@ -30,12 +30,9 @@
#include <mach/gpio.h>
#include <plat/menelaus.h>
#include <plat/mcbsp.h>
-#include <plat/mcpdm.h>
#include <plat/remoteproc.h>
#include <plat/omap44xx.h>
-#include <sound/omap-abe-dsp.h>
-
/*-------------------------------------------------------------------------*/
#if defined(CONFIG_OMAP_MCBSP) || defined(CONFIG_OMAP_MCBSP_MODULE)
@@ -81,48 +78,6 @@ void omap_mcbsp_register_board_cfg(struct resource *res, int res_count,
/*-------------------------------------------------------------------------*/
-#if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \
- defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE)
-
-static struct omap_device_pm_latency omap_mcpdm_latency[] = {
- {
- .deactivate_func = omap_device_idle_hwmods,
- .activate_func = omap_device_enable_hwmods,
- .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
- },
-};
-
-static void omap_init_mcpdm(void)
-{
- struct omap_hwmod *oh;
- struct omap_device *od;
- struct omap_mcpdm_platform_data *pdata;
-
- oh = omap_hwmod_lookup("mcpdm");
- if (!oh) {
- printk(KERN_ERR "Could not look up mcpdm hw_mod\n");
- return;
- }
-
- pdata = kzalloc(sizeof(struct omap_mcpdm_platform_data), GFP_KERNEL);
- if (!pdata) {
- printk(KERN_ERR "Could not allocate platform data\n");
- return;
- }
-
- od = omap_device_build("omap-mcpdm", -1, oh, pdata,
- sizeof(struct omap_mcpdm_platform_data),
- omap_mcpdm_latency,
- ARRAY_SIZE(omap_mcpdm_latency), 0);
- if (IS_ERR(od))
- printk(KERN_ERR "Could not build omap_device for omap-mcpdm-dai\n");
-}
-#else
-static inline void omap_init_mcpdm(void) {}
-#endif
-
-/*-------------------------------------------------------------------------*/
-
#if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) || \
defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
@@ -173,55 +128,6 @@ fail:
/*-------------------------------------------------------------------------*/
-#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP) || \
- defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
-
-static struct omap_device_pm_latency omap_aess_latency[] = {
- {
- .deactivate_func = omap_device_idle_hwmods,
- .activate_func = omap_device_enable_hwmods,
- .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
- },
-};
-
-static void omap_init_aess(void)
-{
- struct omap_hwmod *oh;
- struct omap_device *od;
- struct omap4_abe_dsp_pdata *pdata;
-
- oh = omap_hwmod_lookup("aess");
- if (!oh) {
- printk (KERN_ERR "Could not look up aess hw_mod\n");
- return;
- }
-
- pdata = kzalloc(sizeof(struct omap4_abe_dsp_pdata), GFP_KERNEL);
- if (!pdata) {
- printk(KERN_ERR "Could not allocate platform data\n");
- return;
- }
-
- /* FIXME: Add correct context loss counter */
- //pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;
-
- od = omap_device_build("aess", -1, oh, pdata,
- sizeof(struct omap4_abe_dsp_pdata),
- omap_aess_latency,
- ARRAY_SIZE(omap_aess_latency), 0);
-
- kfree(pdata);
-
- if (IS_ERR(od))
- printk(KERN_ERR "Could not build omap_device for omap-aess-audio\n");
-}
-#else
-static inline void omap_init_aess(void) {}
-#endif
-
-
-/*-------------------------------------------------------------------------*/
-
#if defined(CONFIG_HW_RANDOM_OMAP) || defined(CONFIG_HW_RANDOM_OMAP_MODULE)
#ifdef CONFIG_ARCH_OMAP2
@@ -421,8 +327,6 @@ static int __init omap_init_devices(void)
* in alphabetical order so they're easier to sort through.
*/
omap_init_rng();
- omap_init_mcpdm();
- omap_init_aess();
omap_init_uwire();
return 0;
}
diff --git a/arch/arm/plat-omap/include/plat/dsscomp.h b/arch/arm/plat-omap/include/plat/dsscomp.h
index b9f5773..f9f87cb 100644
--- a/arch/arm/plat-omap/include/plat/dsscomp.h
+++ b/arch/arm/plat-omap/include/plat/dsscomp.h
@@ -18,7 +18,7 @@ int dsscomp_delayed_apply(dsscomp_t comp);
void dsscomp_drop(dsscomp_t c);
struct tiler_pa_info;
-int dsscomp_gralloc_queue(struct dsscomp_setup_mgr_data *d,
+int dsscomp_gralloc_queue(struct dsscomp_setup_dispc_data *d,
struct tiler_pa_info **pas,
void (*cb_fn)(void *, int), void *cb_arg);
#endif
diff --git a/arch/arm/plat-omap/include/plat/temperature_sensor.h b/arch/arm/plat-omap/include/plat/temperature_sensor.h
new file mode 100644
index 0000000..5f0d6b3
--- /dev/null
+++ b/arch/arm/plat-omap/include/plat/temperature_sensor.h
@@ -0,0 +1,65 @@
+/*
+ * OMAP446x Temperature sensor header file
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Author: J Keerthy <j-keerthy@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_TEMPERATURE_SENSOR_H
+#define __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_TEMPERATURE_SENSOR_H
+
+/*
+ * Offsets from the base of temperature sensor registers
+ */
+#define TEMP_SENSOR_CTRL_OFFSET 0x00
+#define BGAP_CTRL_OFFSET 0x4c
+#define BGAP_COUNTER_OFFSET 0x50
+#define BGAP_THRESHOLD_OFFSET 0x54
+#define BGAP_TSHUT_OFFSET 0x58
+#define BGAP_STATUS_OFFSET 0x5c
+
+#define OMAP_TSHUT_GPIO 86
+
+
+/*
+ * omap_temp_sensor platform data
+ * @name - name
+ * @irq - Irq number for thermal alertemp_sensor
+ * @offset - offset of the temp sensor ctrl register
+ */
+struct omap_temp_sensor_pdata {
+ char *name;
+ u32 offset;
+ int irq;
+};
+
+#ifdef CONFIG_OMAP_TEMP_SENSOR
+void omap_temp_sensor_resume_idle(void);
+void omap_temp_sensor_prepare_idle(void);
+#else
+static inline void omap_temp_sensor_resume_idle(void) { }
+static inline void omap_temp_sensor_prepare_idle(void) { }
+#endif
+
+#ifdef CONFIG_OMAP_DIE_TEMP_SENSOR
+void omap_temp_sensor_idle(int idle_state);
+#else
+static inline void omap_temp_sensor_idle(int idle_state) { }
+#endif
+
+#endif
diff --git a/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c b/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c
index 2e803e1..79a00e5 100644
--- a/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c
+++ b/drivers/gpu/pvr/omaplfb/omaplfb_displayclass.c
@@ -812,13 +812,16 @@ static IMG_BOOL ProcessFlipV2(IMG_HANDLE hCmdCookie,
OMAPLFB_DEVINFO *psDevInfo,
IMG_VOID **ppvMemInfos,
IMG_UINT32 ui32NumMemInfos,
- struct dsscomp_setup_mgr_data *psDssData)
+ struct dsscomp_setup_dispc_data *psDssData,
+ IMG_UINT32 uiDssDataLength)
{
PVRSRV_KERNEL_MEM_INFO **ppsMemInfos =
(PVRSRV_KERNEL_MEM_INFO **)ppvMemInfos;
struct tiler_pa_info *apsTilerPAs[5];
IMG_UINT32 i, k;
+ BUG_ON(uiDssDataLength != sizeof(*psDssData));
+
for(i = k = 0; i < ui32NumMemInfos && i < ARRAY_SIZE(apsTilerPAs); i++, k++)
{
struct tiler_pa_info *psTilerInfo;
@@ -931,7 +934,8 @@ static IMG_BOOL ProcessFlip(IMG_HANDLE hCmdCookie,
psDevInfo,
psFlipCmd2->ppvMemInfos,
psFlipCmd2->ui32NumMemInfos,
- psFlipCmd2->pvPrivData);
+ psFlipCmd2->pvPrivData,
+ psFlipCmd2->ui32PrivDataLength);
#else
BUG();
#endif
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 050f26a..d2a7df5 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -564,6 +564,13 @@ config USB_SWITCH_FSA9480
stereo and mono audio, video, microphone and UART data to use
a common connector port.
+config OMAP_DIE_TEMP_SENSOR
+ bool "OMAP On-Die temp sensor support"
+ depends on OMAP_TEMP_SENSOR
+ help
+ Enabling this config will give support for the on-die
+ temp sensor for the OMAP platform.
+
source "drivers/misc/c2port/Kconfig"
source "drivers/misc/eeprom/Kconfig"
source "drivers/misc/cb710/Kconfig"
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index dfe1881..bf750e4 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -57,3 +57,4 @@ obj-$(CONFIG_SENSORS_AK8975) += akm8975.o
obj-y += inv_mpu/
obj-$(CONFIG_SEC_MODEM) += modem_if/
obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o
+obj-$(CONFIG_OMAP_DIE_TEMP_SENSOR) += omap_temp_sensor.o
diff --git a/drivers/misc/omap_temp_sensor.c b/drivers/misc/omap_temp_sensor.c
new file mode 100644
index 0000000..f7a2ef2
--- /dev/null
+++ b/drivers/misc/omap_temp_sensor.c
@@ -0,0 +1,709 @@
+/*
+ * OMAP4 Temperature sensor driver file
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Author: J Keerthy <j-keerthy@ti.com>
+ * Author: Moiz Sonasath <m-sonasath@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/gpio.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/mutex.h>
+#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
+#include <linux/reboot.h>
+#include <linux/slab.h>
+#include <linux/sysfs.h>
+#include <linux/types.h>
+
+#include <plat/common.h>
+#include <plat/omap_device.h>
+#include <plat/temperature_sensor.h>
+
+/* TO DO: This needs to be fixed */
+#include "../../../../arch/arm/mach-omap2/control.h"
+/* #include <plat/control.h> */
+
+#include <mach/ctrl_module_core_44xx.h>
+
+extern void omap_thermal_throttle(void);
+extern void omap_thermal_unthrottle(void);
+
+#define TSHUT_THRESHOLD_TSHUT_HOT 122000 /* 122 deg C */
+#define TSHUT_THRESHOLD_TSHUT_COLD 100000 /* 100 deg C */
+#define BGAP_THRESHOLD_T_HOT 110000 /* 110 deg C */
+#define BGAP_THRESHOLD_T_COLD 100000 /* 100 deg C */
+#define OMAP_ADC_START_VALUE 530
+#define OMAP_ADC_END_VALUE 923
+
+/*
+ * omap_temp_sensor structure
+ * @pdev - Platform device pointer
+ * @dev - device pointer
+ * @clock - Clock pointer
+ * @sensor_mutex - Mutex for sysfs, irq and PM
+ * @irq - MPU Irq number for thermal alertemp_sensor
+ * @tshut_irq - Thermal shutdown IRQ
+ * @phy_base - Physical base of the temp I/O
+ * @is_efuse_valid - Flag to determine if eFuse is valid or not
+ * @clk_on - Manages the current clock state
+ * @clk_rate - Holds current clock rate
+ */
+struct omap_temp_sensor {
+ struct platform_device *pdev;
+ struct device *dev;
+ struct clk *clock;
+ struct spinlock lock;
+ unsigned int irq;
+ unsigned int tshut_irq;
+ unsigned long phy_base;
+ int is_efuse_valid;
+ u8 clk_on;
+ unsigned long clk_rate;
+ u32 current_temp;
+};
+
+#ifdef CONFIG_PM
+struct omap_temp_sensor_regs {
+ u32 temp_sensor_ctrl;
+ u32 bg_ctrl;
+ u32 bg_counter;
+ u32 bg_threshold;
+ u32 temp_sensor_tshut_threshold;
+};
+
+static struct omap_temp_sensor_regs temp_sensor_context;
+static struct omap_temp_sensor *temp_sensor_pm;
+#endif
+
+/*
+ * Temperature values in milli degrees celsius ADC code values from 530 to 923
+ */
+static int adc_to_temp[] = {
+ -40000, -40000, -40000, -40000, -39800, -39400, -39000, -38600, -38200,
+ -37800, -37300, -36800, -36400, -36000, -35600, -35200, -34800,
+ -34300, -33800, -33400, -33000, -32600, -32200, -31800, -31300,
+ -30800, -30400, -30000, -29600, -29200, -28700, -28200, -27800,
+ -27400, -27000, -26600, -26200, -25700, -25200, -24800, -24400,
+ -24000, -23600, -23200, -22700, -22200, -21800, -21400, -21000,
+ -20600, -20200, -19700, -19200, -18800, -18400, -18000, -17600,
+ -17200, -16700, -16200, -15800, -15400, -15000, -14600, -14200,
+ -13700, -13200, -12800, -12400, -12000, -11600, -11200, -10700,
+ -10200, -9800, -9400, -9000, -8600, -8200, -7700, -7200, -6800,
+ -6400, -6000, -5600, -5200, -4800, -4300, -3800, -3400, -3000,
+ -2600, -2200, -1800, -1300, -800, -400, 0, 400, 800, 1200, 1600,
+ 2100, 2600, 3000, 3400, 3800, 4200, 4600, 5100, 5600, 6000, 6400,
+ 6800, 7200, 7600, 8000, 8500, 9000, 9400, 9800, 10200, 10600, 11000,
+ 11400, 11900, 12400, 12800, 13200, 13600, 14000, 14400, 14800,
+ 15300, 15800, 16200, 16600, 17000, 17400, 17800, 18200, 18700,
+ 19200, 19600, 20000, 20400, 20800, 21200, 21600, 22100, 22600,
+ 23000, 23400, 23800, 24200, 24600, 25000, 25400, 25900, 26400,
+ 26800, 27200, 27600, 28000, 28400, 28800, 29300, 29800, 30200,
+ 30600, 31000, 31400, 31800, 32200, 32600, 33100, 33600, 34000,
+ 34400, 34800, 35200, 35600, 36000, 36400, 36800, 37300, 37800,
+ 38200, 38600, 39000, 39400, 39800, 40200, 40600, 41100, 41600,
+ 42000, 42400, 42800, 43200, 43600, 44000, 44400, 44800, 45300,
+ 45800, 46200, 46600, 47000, 47400, 47800, 48200, 48600, 49000,
+ 49500, 50000, 50400, 50800, 51200, 51600, 52000, 52400, 52800,
+ 53200, 53700, 54200, 54600, 55000, 55400, 55800, 56200, 56600,
+ 57000, 57400, 57800, 58200, 58700, 59200, 59600, 60000, 60400,
+ 60800, 61200, 61600, 62000, 62400, 62800, 63300, 63800, 64200,
+ 64600, 65000, 65400, 65800, 66200, 66600, 67000, 67400, 67800,
+ 68200, 68700, 69200, 69600, 70000, 70400, 70800, 71200, 71600,
+ 72000, 72400, 72800, 73200, 73600, 74100, 74600, 75000, 75400,
+ 75800, 76200, 76600, 77000, 77400, 77800, 78200, 78600, 79000,
+ 79400, 79800, 80300, 80800, 81200, 81600, 82000, 82400, 82800,
+ 83200, 83600, 84000, 84400, 84800, 85200, 85600, 86000, 86400,
+ 86800, 87300, 87800, 88200, 88600, 89000, 89400, 89800, 90200,
+ 90600, 91000, 91400, 91800, 92200, 92600, 93000, 93400, 93800,
+ 94200, 94600, 95000, 95500, 96000, 96400, 96800, 97200, 97600,
+ 98000, 98400, 98800, 99200, 99600, 100000, 100400, 100800, 101200,
+ 101600, 102000, 102400, 102800, 103200, 103600, 104000, 104400,
+ 104800, 105200, 105600, 106100, 106600, 107000, 107400, 107800,
+ 108200, 108600, 109000, 109400, 109800, 110200, 110600, 111000,
+ 111400, 111800, 112200, 112600, 113000, 113400, 113800, 114200,
+ 114600, 115000, 115400, 115800, 116200, 116600, 117000, 117400,
+ 117800, 118200, 118600, 119000, 119400, 119800, 120200, 120600,
+ 121000, 121400, 121800, 122200, 122600, 123000
+};
+
+static unsigned long omap_temp_sensor_readl(struct omap_temp_sensor
+ *temp_sensor, u32 reg)
+{
+ return omap_ctrl_readl(temp_sensor->phy_base + reg);
+}
+
+static void omap_temp_sensor_writel(struct omap_temp_sensor *temp_sensor,
+ u32 val, u32 reg)
+{
+ omap_ctrl_writel(val, (temp_sensor->phy_base + reg));
+}
+
+static int adc_to_temp_conversion(int adc_val)
+{
+ if (adc_val < OMAP_ADC_START_VALUE || adc_val > OMAP_ADC_END_VALUE) {
+ pr_err("%s:Temp read is invalid %i\n", __func__, adc_val);
+ return -EINVAL;
+ }
+
+ return adc_to_temp[adc_val - OMAP_ADC_START_VALUE];
+}
+
+static int temp_to_adc_conversion(long temp)
+{
+ int i;
+
+ for (i = 0; i <= OMAP_ADC_END_VALUE - OMAP_ADC_START_VALUE; i++)
+ if (temp < adc_to_temp[i])
+ return OMAP_ADC_START_VALUE + i - 1;
+ return -EINVAL;
+}
+
+static int omap_read_current_temp(struct omap_temp_sensor *temp_sensor)
+{
+ int adc;
+
+ adc = omap_temp_sensor_readl(temp_sensor, TEMP_SENSOR_CTRL_OFFSET);
+ adc &= (OMAP4_BGAP_TEMP_SENSOR_DTEMP_MASK);
+
+ if (!temp_sensor->is_efuse_valid)
+ pr_err_once("Invalid EFUSE, Non-trimmed BGAP, \
+ Temp not accurate\n");
+
+ if (adc < OMAP_ADC_START_VALUE || adc > OMAP_ADC_END_VALUE) {
+ pr_err("%s:Invalid adc code reported by the sensor %d",
+ __func__, adc);
+ return -EINVAL;
+ }
+
+ return adc_to_temp_conversion(adc);
+}
+
+static void omap_configure_temp_sensor_thresholds(struct omap_temp_sensor
+ *temp_sensor)
+{
+ u32 temp = 0, t_hot, t_cold, tshut_hot, tshut_cold;
+
+ t_hot = temp_to_adc_conversion(BGAP_THRESHOLD_T_HOT);
+ t_cold = temp_to_adc_conversion(BGAP_THRESHOLD_T_COLD);
+
+ if ((t_hot == -EINVAL) || (t_cold == -EINVAL)) {
+ pr_err("%s:Temp thresholds out of bounds\n", __func__);
+ return;
+ }
+ temp |= ((t_hot << OMAP4_T_HOT_SHIFT) | (t_cold << OMAP4_T_COLD_SHIFT));
+ omap_temp_sensor_writel(temp_sensor, temp, BGAP_THRESHOLD_OFFSET);
+
+ tshut_hot = temp_to_adc_conversion(TSHUT_THRESHOLD_TSHUT_HOT);
+ tshut_cold = temp_to_adc_conversion(TSHUT_THRESHOLD_TSHUT_COLD);
+ if ((tshut_hot == -EINVAL) || (tshut_cold == -EINVAL)) {
+ pr_err("%s:Temp shutdown thresholds out of bounds\n", __func__);
+ return;
+ }
+ temp |= ((tshut_hot << OMAP4_TSHUT_HOT_SHIFT)
+ | (tshut_cold << OMAP4_TSHUT_COLD_SHIFT));
+ omap_temp_sensor_writel(temp_sensor, temp, BGAP_TSHUT_OFFSET);
+}
+
+static void omap_configure_temp_sensor_counter(struct omap_temp_sensor
+ *temp_sensor, u32 counter)
+{
+ u32 val;
+
+ val = omap_temp_sensor_readl(temp_sensor, BGAP_COUNTER_OFFSET);
+ val = val & ~(OMAP4_COUNTER_MASK);
+ val = val | (counter << OMAP4_COUNTER_SHIFT);
+ omap_temp_sensor_writel(temp_sensor, val, BGAP_COUNTER_OFFSET);
+}
+
+static void omap_enable_continuous_mode(struct omap_temp_sensor *temp_sensor)
+{
+ u32 val;
+
+ val = omap_temp_sensor_readl(temp_sensor, BGAP_CTRL_OFFSET);
+
+ val = val | (1 << OMAP4_SINGLE_MODE_SHIFT);
+
+ omap_temp_sensor_writel(temp_sensor, val, BGAP_CTRL_OFFSET);
+}
+
+/*
+ * sysfs hook functions
+ */
+static ssize_t omap_temp_show_current(struct device *dev,
+ struct device_attribute *devattr,
+ char *buf)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct omap_temp_sensor *temp_sensor = platform_get_drvdata(pdev);
+
+ return sprintf(buf, "%d\n", omap_read_current_temp(temp_sensor));
+}
+
+static ssize_t omap_throttle_store(struct device *dev,
+ struct device_attribute *devattr, const char *buf, size_t count)
+{
+ if (count && buf[0] == '1')
+ omap_thermal_throttle();
+ else
+ omap_thermal_unthrottle();
+
+ return count;
+}
+
+static DEVICE_ATTR(temperature, S_IRUGO, omap_temp_show_current, NULL);
+static DEVICE_ATTR(throttle, S_IWUSR, NULL, omap_throttle_store);
+static struct attribute *omap_temp_sensor_attributes[] = {
+ &dev_attr_temperature.attr,
+ &dev_attr_throttle.attr,
+ NULL
+};
+
+static const struct attribute_group omap_temp_sensor_group = {
+ .attrs = omap_temp_sensor_attributes,
+};
+
+static int omap_temp_sensor_enable(struct omap_temp_sensor *temp_sensor)
+{
+ u32 temp;
+ u32 ret = 0;
+ unsigned long clk_rate;
+
+ unsigned long flags;
+
+ spin_lock_irqsave(&temp_sensor->lock, flags);
+
+ if (temp_sensor->clk_on) {
+ pr_err("clock already on\n");
+ goto out;
+ }
+
+ ret = pm_runtime_get_sync(&temp_sensor->pdev->dev);
+ if (ret) {
+ pr_err("%s:get sync failed\n", __func__);
+ ret = -EINVAL;
+ goto out;
+ }
+
+ clk_set_rate(temp_sensor->clock, 1000000);
+ clk_rate = clk_get_rate(temp_sensor->clock);
+ temp_sensor->clk_rate = clk_rate;
+
+ temp = omap_temp_sensor_readl(temp_sensor,
+ TEMP_SENSOR_CTRL_OFFSET);
+ temp &= ~(OMAP4_BGAP_TEMPSOFF_MASK);
+
+ /* write BGAP_TEMPSOFF should be reset to 0 */
+ omap_temp_sensor_writel(temp_sensor, temp,
+ TEMP_SENSOR_CTRL_OFFSET);
+ temp_sensor->clk_on = 1;
+
+out:
+spin_unlock_irqrestore(&temp_sensor->lock, flags);
+ return ret;
+}
+
+
+static int omap_temp_sensor_disable(struct omap_temp_sensor *temp_sensor)
+{
+ u32 temp;
+ u32 ret = 0;
+ u32 counter = 1000;
+ unsigned long flags;
+
+ spin_lock_irqsave(&temp_sensor->lock, flags);
+
+ if (!temp_sensor->clk_on) {
+ pr_err("clock already off\n");
+ goto out;
+ }
+ temp = omap_temp_sensor_readl(temp_sensor,
+ TEMP_SENSOR_CTRL_OFFSET);
+ temp |= OMAP4_BGAP_TEMPSOFF_MASK;
+
+ /* write BGAP_TEMPSOFF should be set to 1 before gating clock */
+ omap_temp_sensor_writel(temp_sensor, temp,
+ TEMP_SENSOR_CTRL_OFFSET);
+ temp = omap_temp_sensor_readl(temp_sensor, BGAP_STATUS_OFFSET);
+
+ /* wait till the clean stop bit is set */
+ while ((temp & OMAP4_CLEAN_STOP_MASK) && --counter)
+ temp = omap_temp_sensor_readl(temp_sensor,
+ BGAP_STATUS_OFFSET);
+ /* Gate the clock */
+ ret = pm_runtime_put_sync_suspend(&temp_sensor->pdev->dev);
+ if (ret) {
+ pr_err("%s:put sync failed\n", __func__);
+ ret = -EINVAL;
+ goto out;
+ }
+ temp_sensor->clk_on = 0;
+
+out:
+ spin_unlock_irqrestore(&temp_sensor->lock, flags);
+ return ret;
+}
+
+static irqreturn_t omap_tshut_irq_handler(int irq, void *data)
+{
+ struct omap_temp_sensor *temp_sensor = (struct omap_temp_sensor *)data;
+
+ /* Need to handle thermal mgmt in bootloader
+ * to avoid restart again at kernel level
+ */
+ if (temp_sensor->is_efuse_valid) {
+ pr_emerg("%s: Thermal shutdown reached rebooting device\n",
+ __func__);
+ kernel_restart(NULL);
+ } else {
+ pr_err("%s:Invalid EFUSE, Non-trimmed BGAP\n", __func__);
+ }
+
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t omap_talert_irq_handler(int irq, void *data)
+{
+ struct omap_temp_sensor *temp_sensor = (struct omap_temp_sensor *)data;
+ int t_hot, t_cold, temp_offset;
+
+ t_hot = omap_temp_sensor_readl(temp_sensor, BGAP_STATUS_OFFSET)
+ & OMAP4_HOT_FLAG_MASK;
+ t_cold = omap_temp_sensor_readl(temp_sensor, BGAP_STATUS_OFFSET)
+ & OMAP4_COLD_FLAG_MASK;
+ temp_offset = omap_temp_sensor_readl(temp_sensor, BGAP_CTRL_OFFSET);
+ if (t_hot) {
+ omap_thermal_throttle();
+ temp_offset &= ~(OMAP4_MASK_HOT_MASK);
+ temp_offset |= OMAP4_MASK_COLD_MASK;
+ } else if (t_cold) {
+ omap_thermal_unthrottle();
+ temp_offset &= ~(OMAP4_MASK_COLD_MASK);
+ temp_offset |= OMAP4_MASK_HOT_MASK;
+ }
+
+ omap_temp_sensor_writel(temp_sensor, temp_offset, BGAP_CTRL_OFFSET);
+
+ return IRQ_HANDLED;
+}
+
+static int __devinit omap_temp_sensor_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct omap_temp_sensor_pdata *pdata = pdev->dev.platform_data;
+ struct omap_temp_sensor *temp_sensor;
+ struct resource *mem;
+ int ret = 0, val;
+
+ if (!pdata) {
+ dev_err(dev, "%s: platform data missing\n", __func__);
+ return -EINVAL;
+ }
+
+ temp_sensor = kzalloc(sizeof(struct omap_temp_sensor), GFP_KERNEL);
+ if (!temp_sensor)
+ return -ENOMEM;
+
+ spin_lock_init(&temp_sensor->lock);
+
+ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!mem) {
+ dev_err(dev, "%s:no mem resource\n", __func__);
+ ret = -EINVAL;
+ goto plat_res_err;
+ }
+
+ temp_sensor->irq = platform_get_irq_byname(pdev, "thermal_alert");
+ if (temp_sensor->irq < 0) {
+ dev_err(dev, "%s:Cannot get thermal alert irq\n",
+ __func__);
+ ret = -EINVAL;
+ goto get_irq_err;
+ }
+
+ ret = gpio_request_one(OMAP_TSHUT_GPIO, GPIOF_DIR_IN,
+ "thermal_shutdown");
+ if (ret) {
+ dev_err(dev, "%s: Could not get tshut_gpio\n",
+ __func__);
+ goto tshut_gpio_req_err;
+ }
+
+ temp_sensor->tshut_irq = gpio_to_irq(OMAP_TSHUT_GPIO);
+ if (temp_sensor->tshut_irq < 0) {
+ dev_err(dev, "%s:Cannot get thermal shutdown irq\n",
+ __func__);
+ ret = -EINVAL;
+ goto get_tshut_irq_err;
+ }
+
+ temp_sensor->phy_base = pdata->offset;
+ temp_sensor->pdev = pdev;
+ temp_sensor->dev = dev;
+
+ pm_runtime_enable(dev);
+ pm_runtime_irq_safe(dev);
+
+ /*
+ * check if the efuse has a non-zero value if not
+ * it is an untrimmed sample and the temperatures
+ * may not be accurate */
+ if (omap_readl(OMAP4_CTRL_MODULE_CORE +
+ OMAP4_CTRL_MODULE_CORE_STD_FUSE_OPP_BGAP))
+ temp_sensor->is_efuse_valid = 1;
+
+ temp_sensor->clock = clk_get(&temp_sensor->pdev->dev, "fck");
+ if (IS_ERR(temp_sensor->clock)) {
+ ret = PTR_ERR(temp_sensor->clock);
+ pr_err("%s:Unable to get fclk: %d\n", __func__, ret);
+ ret = -EINVAL;
+ goto clk_get_err;
+ }
+
+ ret = omap_temp_sensor_enable(temp_sensor);
+ if (ret) {
+ dev_err(dev, "%s:Cannot enable temp sensor\n", __func__);
+ goto sensor_enable_err;
+ }
+
+ platform_set_drvdata(pdev, temp_sensor);
+
+ omap_enable_continuous_mode(temp_sensor);
+ omap_configure_temp_sensor_thresholds(temp_sensor);
+ /* 1 ms */
+ omap_configure_temp_sensor_counter(temp_sensor, 1);
+
+ /* Wait till the first conversion is done wait for at least 1ms */
+ mdelay(2);
+
+ /* Read the temperature once due to hw issue*/
+ omap_read_current_temp(temp_sensor);
+
+ /* Set 2 seconds time as default counter */
+ omap_configure_temp_sensor_counter(temp_sensor,
+ temp_sensor->clk_rate * 2);
+ ret = request_threaded_irq(temp_sensor->irq, NULL,
+ omap_talert_irq_handler,
+ IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+ "temp_sensor", (void *)temp_sensor);
+ if (ret) {
+ dev_err(dev, "Request threaded irq failed.\n");
+ goto req_irq_err;
+ }
+
+ ret = request_threaded_irq(temp_sensor->tshut_irq, NULL,
+ omap_tshut_irq_handler,
+ IRQF_TRIGGER_RISING | IRQF_ONESHOT,
+ "tshut", (void *)temp_sensor);
+ if (ret) {
+ dev_err(dev, "Request threaded irq failed for TSHUT.\n");
+ goto tshut_irq_req_err;
+ }
+
+ ret = sysfs_create_group(&pdev->dev.kobj, &omap_temp_sensor_group);
+ if (ret) {
+ dev_err(&pdev->dev, "could not create sysfs files\n");
+ goto sysfs_create_err;
+ }
+
+ /* unmask the T_COLD and unmask T_HOT at init */
+ val = omap_temp_sensor_readl(temp_sensor, BGAP_CTRL_OFFSET);
+ val |= OMAP4_MASK_COLD_MASK;
+ val |= OMAP4_MASK_HOT_MASK;
+ omap_temp_sensor_writel(temp_sensor, val, BGAP_CTRL_OFFSET);
+
+ dev_info(dev, "%s probed", pdata->name);
+
+ temp_sensor_pm = temp_sensor;
+ return 0;
+
+sysfs_create_err:
+ free_irq(temp_sensor->tshut_irq, temp_sensor);
+tshut_irq_req_err:
+ free_irq(temp_sensor->irq, temp_sensor);
+req_irq_err:
+ platform_set_drvdata(pdev, NULL);
+ omap_temp_sensor_disable(temp_sensor);
+sensor_enable_err:
+ clk_put(temp_sensor->clock);
+clk_get_err:
+ pm_runtime_disable(dev);
+get_tshut_irq_err:
+ gpio_free(OMAP_TSHUT_GPIO);
+tshut_gpio_req_err:
+get_irq_err:
+plat_res_err:
+ kfree(temp_sensor);
+ return ret;
+}
+
+static int __devexit omap_temp_sensor_remove(struct platform_device *pdev)
+{
+ struct omap_temp_sensor *temp_sensor = platform_get_drvdata(pdev);
+
+ sysfs_remove_group(&pdev->dev.kobj, &omap_temp_sensor_group);
+ omap_temp_sensor_disable(temp_sensor);
+ clk_put(temp_sensor->clock);
+ platform_set_drvdata(pdev, NULL);
+ if (temp_sensor->irq)
+ free_irq(temp_sensor->irq, temp_sensor);
+ if (temp_sensor->tshut_irq)
+ free_irq(temp_sensor->tshut_irq, temp_sensor);
+ kfree(temp_sensor);
+
+ return 0;
+}
+
+#ifdef CONFIG_PM
+static void omap_temp_sensor_save_ctxt(struct omap_temp_sensor *temp_sensor)
+{
+ temp_sensor_context.temp_sensor_ctrl =
+ omap_temp_sensor_readl(temp_sensor, TEMP_SENSOR_CTRL_OFFSET);
+ temp_sensor_context.bg_ctrl =
+ omap_temp_sensor_readl(temp_sensor, BGAP_CTRL_OFFSET);
+ temp_sensor_context.bg_counter =
+ omap_temp_sensor_readl(temp_sensor, BGAP_COUNTER_OFFSET);
+ temp_sensor_context.bg_threshold =
+ omap_temp_sensor_readl(temp_sensor, BGAP_THRESHOLD_OFFSET);
+ temp_sensor_context.temp_sensor_tshut_threshold =
+ omap_temp_sensor_readl(temp_sensor, BGAP_TSHUT_OFFSET);
+}
+
+static void omap_temp_sensor_restore_ctxt(struct omap_temp_sensor *temp_sensor)
+{
+ omap_temp_sensor_writel(temp_sensor,
+ temp_sensor_context.temp_sensor_ctrl,
+ TEMP_SENSOR_CTRL_OFFSET);
+ omap_temp_sensor_writel(temp_sensor,
+ temp_sensor_context.bg_ctrl,
+ BGAP_CTRL_OFFSET);
+ omap_temp_sensor_writel(temp_sensor,
+ temp_sensor_context.bg_counter,
+ BGAP_COUNTER_OFFSET);
+ omap_temp_sensor_writel(temp_sensor,
+ temp_sensor_context.bg_threshold,
+ BGAP_THRESHOLD_OFFSET);
+ omap_temp_sensor_writel(temp_sensor,
+ temp_sensor_context.temp_sensor_tshut_threshold,
+ BGAP_TSHUT_OFFSET);
+}
+
+static int omap_temp_sensor_suspend(struct platform_device *pdev,
+ pm_message_t state)
+{
+ struct omap_temp_sensor *temp_sensor = platform_get_drvdata(pdev);
+
+ omap_temp_sensor_disable(temp_sensor);
+
+ return 0;
+}
+
+static int omap_temp_sensor_resume(struct platform_device *pdev)
+{
+ struct omap_temp_sensor *temp_sensor = platform_get_drvdata(pdev);
+
+ omap_temp_sensor_enable(temp_sensor);
+
+ return 0;
+}
+
+void omap_temp_sensor_idle(int idle_state)
+{
+ if (idle_state)
+ omap_temp_sensor_disable(temp_sensor_pm);
+ else
+ omap_temp_sensor_enable(temp_sensor_pm);
+}
+
+#else
+omap_temp_sensor_suspend NULL
+omap_temp_sensor_resume NULL
+
+#endif /* CONFIG_PM */
+
+static int omap_temp_sensor_runtime_suspend(struct device *dev)
+{
+ struct omap_temp_sensor *temp_sensor =
+ platform_get_drvdata(to_platform_device(dev));
+
+ omap_temp_sensor_save_ctxt(temp_sensor);
+
+ return 0;
+}
+
+static int omap_temp_sensor_runtime_resume(struct device *dev)
+{
+ static int context_loss_count;
+ int temp;
+ struct omap_temp_sensor *temp_sensor =
+ platform_get_drvdata(to_platform_device(dev));
+
+ temp = omap_device_get_context_loss_count(to_platform_device(dev));
+
+ if (temp != context_loss_count && context_loss_count != 0)
+ omap_temp_sensor_restore_ctxt(temp_sensor);
+
+ context_loss_count = temp;
+
+ return 0;
+}
+
+static const struct dev_pm_ops omap_temp_sensor_dev_pm_ops = {
+ .runtime_suspend = omap_temp_sensor_runtime_suspend,
+ .runtime_resume = omap_temp_sensor_runtime_resume,
+};
+
+static struct platform_driver omap_temp_sensor_driver = {
+ .probe = omap_temp_sensor_probe,
+ .remove = omap_temp_sensor_remove,
+ .suspend = omap_temp_sensor_suspend,
+ .resume = omap_temp_sensor_resume,
+ .driver = {
+ .name = "omap_temp_sensor",
+ .pm = &omap_temp_sensor_dev_pm_ops,
+ },
+};
+
+int __init omap_temp_sensor_init(void)
+{
+ if (!cpu_is_omap446x())
+ return 0;
+
+ return platform_driver_register(&omap_temp_sensor_driver);
+}
+
+static void __exit omap_temp_sensor_exit(void)
+{
+ platform_driver_unregister(&omap_temp_sensor_driver);
+}
+
+module_init(omap_temp_sensor_init);
+module_exit(omap_temp_sensor_exit);
+
+MODULE_DESCRIPTION("OMAP446X Temperature Sensor Driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRIVER_NAME);
+MODULE_AUTHOR("Texas Instruments Inc");
diff --git a/drivers/net/wireless/bcmdhd/Makefile b/drivers/net/wireless/bcmdhd/Makefile
index 9984363..56500b7 100644
--- a/drivers/net/wireless/bcmdhd/Makefile
+++ b/drivers/net/wireless/bcmdhd/Makefile
@@ -26,4 +26,6 @@ bcmdhd-objs += wl_cfg80211.o wl_cfgp2p.o dhd_linux_mon.o
DHDCFLAGS += -DWL_CFG80211
endif
EXTRA_CFLAGS = $(DHDCFLAGS)
+ifeq ($(CONFIG_BCMDHD),m)
EXTRA_LDFLAGS += --strip-debug
+endif
diff --git a/drivers/net/wireless/bcmdhd/include/linuxver.h b/drivers/net/wireless/bcmdhd/include/linuxver.h
index b64d0bb..e1c62b7 100644
--- a/drivers/net/wireless/bcmdhd/include/linuxver.h
+++ b/drivers/net/wireless/bcmdhd/include/linuxver.h
@@ -70,6 +70,7 @@
#include <linux/pci.h>
#include <linux/interrupt.h>
#include <linux/netdevice.h>
+#include <linux/semaphore.h>
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28))
#undef IP_TOS
#endif
@@ -123,11 +124,9 @@ typedef irqreturn_t(*FN_ISR) (int irq, void *dev_id, struct pt_regs *ptregs);
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 67)
-#ifndef SANDGATE2G
#define MOD_INC_USE_COUNT
#define MOD_DEC_USE_COUNT
#endif
-#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
#include <linux/sched.h>
diff --git a/drivers/net/wireless/bcmdhd/wl_android.h b/drivers/net/wireless/bcmdhd/wl_android.h
index 289a326..17373b7 100644
--- a/drivers/net/wireless/bcmdhd/wl_android.h
+++ b/drivers/net/wireless/bcmdhd/wl_android.h
@@ -1,9 +1,27 @@
/*
* Linux cfg80211 driver - Android related functions
*
- * $Copyright Open Broadcom Corporation$
+ * Copyright (C) 1999-2011, Broadcom Corporation
*
- * $Id: wl_android.c,v 1.1.4.1.2.14 2011/02/09 01:40:07 linm Exp $
+ * Unless you and Broadcom execute a separate written software license
+ * agreement governing use of this software, this software is licensed to you
+ * under the terms of the GNU General Public License version 2 (the "GPL"),
+ * available at http://www.broadcom.com/licenses/GPLv2.php, with the
+ * following added to such license:
+ *
+ * As a special exception, the copyright holders of this software give you
+ * permission to link this software with independent modules, and to copy and
+ * distribute the resulting executable under terms of your choice, provided that
+ * you also meet, for each linked independent module, the terms and conditions of
+ * the license of that module. An independent module is a module which is not
+ * derived from this software. The special exception does not apply to any
+ * modifications of the software.
+ *
+ * Notwithstanding the above, under no circumstances may you combine this
+ * software in any way with any other Broadcom software provided under a license
+ * other than the GPL, without Broadcom's express prior written consent.
+ *
+ * $Id: wl_android.c,v 1.1.4.1.2.14 2011/02/09 01:40:07 Exp $
*/
#include <linux/module.h>
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.h b/drivers/net/wireless/bcmdhd/wl_cfg80211.h
index 4dea132..838003b 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfg80211.h
+++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.h
@@ -499,7 +499,7 @@ extern void wl_cfg80211_set_sdio_func(void *func); /* set sdio function info */
extern struct sdio_func *wl_cfg80211_get_sdio_func(void); /* set sdio function info */
extern s32 wl_cfg80211_up(void); /* dongle up */
extern s32 wl_cfg80211_down(void); /* dongle down */
-extern s32 wl_cfg80211_notify_ifadd(struct net_device *net, s32 idx,
+extern s32 wl_cfg80211_notify_ifadd(struct net_device *net, s32 idx,
int (*_net_attach)(dhd_pub_t *dhdp, int ifidx));
extern s32 wl_cfg80211_ifdel_ops(struct net_device *net);
extern s32 wl_cfg80211_notify_ifdel(struct net_device *net);
diff --git a/drivers/net/wireless/bcmdhd/wl_iw.c b/drivers/net/wireless/bcmdhd/wl_iw.c
index 494538c..ae28c6d 100644
--- a/drivers/net/wireless/bcmdhd/wl_iw.c
+++ b/drivers/net/wireless/bcmdhd/wl_iw.c
@@ -1261,7 +1261,6 @@ wl_iw_set_dtim_skip(
&iovbuf, sizeof(iovbuf))) >= 0) {
p += snprintf(p, MAX_WX_STRING, "OK");
-
net_os_set_dtim_skip(dev, bcn_li_dtim);
WL_TRACE(("%s: set dtim_skip %d OK\n", __FUNCTION__,
@@ -1471,8 +1470,8 @@ wl_iw_set_pno_set(
}
if (wrqu->data.length < (strlen(PNOSETUP_SET_CMD) + sizeof(cmd_tlv_t))) {
- WL_ERROR(("%s aggument=%d less %d\n", __FUNCTION__,
- wrqu->data.length, strlen(PNOSETUP_SET_CMD) + sizeof(cmd_tlv_t)));
+ WL_ERROR(("%s argument=%d less %d\n", __FUNCTION__,
+ wrqu->data.length, (int)(strlen(PNOSETUP_SET_CMD) + sizeof(cmd_tlv_t))));
goto exit_proc;
}
@@ -1959,6 +1958,7 @@ static int iwpriv_get_assoc_list(struct net_device *dev,
return -EINVAL;
}
+
iw = *(wl_iw_t **)netdev_priv(dev);
net_os_wake_lock(dev);
@@ -1985,6 +1985,7 @@ static int iwpriv_get_assoc_list(struct net_device *dev,
WL_SOFTAP(("%s: got %d stations\n", __FUNCTION__,
sta_maclist->count));
+
memset(mac_lst, 0, sizeof(mac_lst));
p_mac_str = mac_lst;
@@ -3119,7 +3120,6 @@ wl_iw_force_specific_scan(iscan_info_t *iscan)
static void
wl_iw_send_scan_complete(iscan_info_t *iscan)
{
-#ifndef SANDGATE2G
union iwreq_data wrqu;
memset(&wrqu, 0, sizeof(wrqu));
@@ -3131,7 +3131,6 @@ wl_iw_send_scan_complete(iscan_info_t *iscan)
g_first_broadcast_scan = BROADCAST_SCAN_FIRST_RESULT_READY;
#endif
WL_TRACE(("Send Event ISCAN complete\n"));
-#endif
}
static int
@@ -6094,8 +6093,8 @@ wl_iw_set_cscan(
}
if (wrqu->data.length < (strlen(CSCAN_COMMAND) + sizeof(cscan_tlv_t))) {
- WL_ERROR(("%s aggument=%d less %d\n", __FUNCTION__,
- wrqu->data.length, strlen(CSCAN_COMMAND) + sizeof(cscan_tlv_t)));
+ WL_ERROR(("%s argument=%d less %d\n", __FUNCTION__,
+ wrqu->data.length, (int)(strlen(CSCAN_COMMAND) + sizeof(cscan_tlv_t))));
return -1;
}
@@ -6274,7 +6273,7 @@ thr_wait_for_2nd_eth_dev(void *data)
}
DHD_OS_WAKE_LOCK(iw->pub);
complete(&tsk_ctl->completed);
- if (down_timeout(&tsk_ctl->sema, msecs_to_jiffies(1000)) != 0) {
+ if (down_timeout(&tsk_ctl->sema, msecs_to_jiffies(1000)) != 0) {
#else
if (down_interruptible(&tsk_ctl->sema) != 0) {
#endif
@@ -7335,69 +7334,68 @@ wl_iw_set_priv(
return -EFAULT;
}
- if (strnicmp(extra, "SCAN-ACTIVE", strlen("SCAN-ACTIVE")) == 0) {
+ if (strnicmp(extra, "SCAN-ACTIVE", strlen("SCAN-ACTIVE")) == 0) {
#ifdef ENABLE_ACTIVE_PASSIVE_SCAN_SUPPRESS
WL_TRACE(("%s: active scan setting suppressed\n", dev->name));
#else
ret = wl_iw_set_active_scan(dev, info, (union iwreq_data *)dwrq, extra);
#endif
- }
- else if (strnicmp(extra, "SCAN-PASSIVE", strlen("SCAN-PASSIVE")) == 0)
+ }
+ else if (strnicmp(extra, "SCAN-PASSIVE", strlen("SCAN-PASSIVE")) == 0)
#ifdef ENABLE_ACTIVE_PASSIVE_SCAN_SUPPRESS
WL_TRACE(("%s: passive scan setting suppressed\n", dev->name));
#else
ret = wl_iw_set_passive_scan(dev, info, (union iwreq_data *)dwrq, extra);
#endif
- else if (strnicmp(extra, "RSSI", strlen("RSSI")) == 0)
+ else if (strnicmp(extra, "RSSI", strlen("RSSI")) == 0)
ret = wl_iw_get_rssi(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, "LINKSPEED", strlen("LINKSPEED")) == 0)
+ else if (strnicmp(extra, "LINKSPEED", strlen("LINKSPEED")) == 0)
ret = wl_iw_get_link_speed(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, "MACADDR", strlen("MACADDR")) == 0)
+ else if (strnicmp(extra, "MACADDR", strlen("MACADDR")) == 0)
ret = wl_iw_get_macaddr(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, "COUNTRY", strlen("COUNTRY")) == 0)
+ else if (strnicmp(extra, "COUNTRY", strlen("COUNTRY")) == 0)
ret = wl_iw_set_country(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, "STOP", strlen("STOP")) == 0)
+ else if (strnicmp(extra, "STOP", strlen("STOP")) == 0)
ret = wl_iw_control_wl_off(dev, info);
- else if (strnicmp(extra, BAND_GET_CMD, strlen(BAND_GET_CMD)) == 0)
+ else if (strnicmp(extra, BAND_GET_CMD, strlen(BAND_GET_CMD)) == 0)
ret = wl_iw_get_band(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, BAND_SET_CMD, strlen(BAND_SET_CMD)) == 0)
+ else if (strnicmp(extra, BAND_SET_CMD, strlen(BAND_SET_CMD)) == 0)
ret = wl_iw_set_band(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, DTIM_SKIP_GET_CMD, strlen(DTIM_SKIP_GET_CMD)) == 0)
+ else if (strnicmp(extra, DTIM_SKIP_GET_CMD, strlen(DTIM_SKIP_GET_CMD)) == 0)
ret = wl_iw_get_dtim_skip(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, DTIM_SKIP_SET_CMD, strlen(DTIM_SKIP_SET_CMD)) == 0)
+ else if (strnicmp(extra, DTIM_SKIP_SET_CMD, strlen(DTIM_SKIP_SET_CMD)) == 0)
ret = wl_iw_set_dtim_skip(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, SETSUSPEND_CMD, strlen(SETSUSPEND_CMD)) == 0)
+ else if (strnicmp(extra, SETSUSPEND_CMD, strlen(SETSUSPEND_CMD)) == 0)
ret = wl_iw_set_suspend(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, TXPOWER_SET_CMD, strlen(TXPOWER_SET_CMD)) == 0)
+ else if (strnicmp(extra, TXPOWER_SET_CMD, strlen(TXPOWER_SET_CMD)) == 0)
ret = wl_iw_set_txpower(dev, info, (union iwreq_data *)dwrq, extra);
#if defined(PNO_SUPPORT)
- else if (strnicmp(extra, PNOSSIDCLR_SET_CMD, strlen(PNOSSIDCLR_SET_CMD)) == 0)
+ else if (strnicmp(extra, PNOSSIDCLR_SET_CMD, strlen(PNOSSIDCLR_SET_CMD)) == 0)
ret = wl_iw_set_pno_reset(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, PNOSETUP_SET_CMD, strlen(PNOSETUP_SET_CMD)) == 0)
+ else if (strnicmp(extra, PNOSETUP_SET_CMD, strlen(PNOSETUP_SET_CMD)) == 0)
ret = wl_iw_set_pno_set(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, PNOENABLE_SET_CMD, strlen(PNOENABLE_SET_CMD)) == 0)
+ else if (strnicmp(extra, PNOENABLE_SET_CMD, strlen(PNOENABLE_SET_CMD)) == 0)
ret = wl_iw_set_pno_enable(dev, info, (union iwreq_data *)dwrq, extra);
#endif
#if defined(CSCAN)
- else if (strnicmp(extra, CSCAN_COMMAND, strlen(CSCAN_COMMAND)) == 0)
+ else if (strnicmp(extra, CSCAN_COMMAND, strlen(CSCAN_COMMAND)) == 0)
ret = wl_iw_set_cscan(dev, info, (union iwreq_data *)dwrq, extra);
#endif
- else if (strnicmp(extra, "POWERMODE", strlen("POWERMODE")) == 0)
+ else if (strnicmp(extra, "POWERMODE", strlen("POWERMODE")) == 0)
ret = wl_iw_set_power_mode(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, "BTCOEXMODE", strlen("BTCOEXMODE")) == 0)
+ else if (strnicmp(extra, "BTCOEXMODE", strlen("BTCOEXMODE")) == 0)
ret = wl_iw_set_btcoex_dhcp(dev, info, (union iwreq_data *)dwrq, extra);
- else if (strnicmp(extra, "GETPOWER", strlen("GETPOWER")) == 0)
+ else if (strnicmp(extra, "GETPOWER", strlen("GETPOWER")) == 0)
ret = wl_iw_get_power_mode(dev, info, (union iwreq_data *)dwrq, extra);
#ifdef SOFTAP
- else if (strnicmp(extra, "ASCII_CMD", strlen("ASCII_CMD")) == 0) {
-
- wl_iw_process_private_ascii_cmd(dev, info, (union iwreq_data *)dwrq, extra);
- }
+ else if (strnicmp(extra, "ASCII_CMD", strlen("ASCII_CMD")) == 0) {
+ wl_iw_process_private_ascii_cmd(dev, info, (union iwreq_data *)dwrq, extra);
+ }
else if (strnicmp(extra, "AP_MAC_LIST_SET", strlen("AP_MAC_LIST_SET")) == 0) {
WL_SOFTAP(("penguin, set AP_MAC_LIST_SET\n"));
set_ap_mac_list(dev, (extra + PROFILE_OFFSET));
- }
+ }
#endif
else {
WL_ERROR(("Unknown PRIVATE command %s - ignored\n", extra));
@@ -8130,9 +8128,7 @@ wl_iw_event(struct net_device *dev, wl_event_msg_t *e, void* data)
iwpmkidcand->flags |= IW_PMKID_CAND_PREAUTH;
bcopy(&pmkidcand->BSSID, &iwpmkidcand->bssid.sa_data,
ETHER_ADDR_LEN);
-#ifndef SANDGATE2G
wireless_send_event(dev, cmd, &wrqu, extra);
-#endif
pmkidcand++;
count--;
}
@@ -8182,14 +8178,12 @@ wl_iw_event(struct net_device *dev, wl_event_msg_t *e, void* data)
WL_TRACE(("Unknown Event %d: ignoring\n", event_type));
break;
}
-#ifndef SANDGATE2G
if (cmd) {
if (cmd == SIOCGIWSCAN)
wireless_send_event(dev, cmd, &wrqu, NULL);
else
wireless_send_event(dev, cmd, &wrqu, extra);
}
-#endif
#if WIRELESS_EXT > 14
@@ -8197,9 +8191,7 @@ wl_iw_event(struct net_device *dev, wl_event_msg_t *e, void* data)
if (wl_iw_check_conn_fail(e, extra, sizeof(extra))) {
cmd = IWEVCUSTOM;
wrqu.data.length = strlen(extra);
-#ifndef SANDGATE2G
wireless_send_event(dev, cmd, &wrqu, extra);
-#endif
}
#endif
diff --git a/drivers/remoteproc/remoteproc.c b/drivers/remoteproc/remoteproc.c
index a697ccf..7502fa0 100644
--- a/drivers/remoteproc/remoteproc.c
+++ b/drivers/remoteproc/remoteproc.c
@@ -250,6 +250,19 @@ unlock_mutext:
mutex_unlock(&rproc->lock);
}
+static void rproc_reset_poolmem(struct rproc *rproc)
+{
+ struct rproc_mem_pool *pool = rproc->memory_pool;
+
+ if (!pool || !pool->mem_base || !pool->mem_size) {
+ pr_warn("invalid pool\n");
+ return;
+ }
+
+ pool->cur_base = pool->mem_base;
+ pool->cur_size = pool->mem_size;
+}
+
static int rproc_add_mem_entry(struct rproc *rproc, struct fw_resource *rsc)
{
struct rproc_mem_entry *me = rproc->memory_maps;
@@ -279,7 +292,7 @@ static int rproc_alloc_poolmem(struct rproc *rproc, u32 size, phys_addr_t *pa)
struct rproc_mem_pool *pool = rproc->memory_pool;
*pa = 0;
- if (!pool || !pool->mem_base) {
+ if (!pool || !pool->mem_base || !pool->mem_size) {
pr_warn("invalid pool\n");
return -EINVAL;
}
@@ -680,6 +693,9 @@ void rproc_put(struct rproc *rproc)
rproc->trace_buf0 = rproc->trace_buf1 = NULL;
+ rproc_reset_poolmem(rproc);
+ memset(rproc->memory_maps, 0, sizeof(rproc->memory_maps));
+
/*
* make sure rproc is really running before powering it off.
* this is important, because the fw loading might have failed.
diff --git a/drivers/rpmsg/rpmsg_omx.c b/drivers/rpmsg/rpmsg_omx.c
index 01fc65a..9684b11 100644
--- a/drivers/rpmsg/rpmsg_omx.c
+++ b/drivers/rpmsg/rpmsg_omx.c
@@ -80,18 +80,6 @@ struct rpmsg_omx_instance {
#endif
};
-/* the packet structure (actual message sent to omx service) */
-struct omx_packet {
- uint16_t desc; /* descriptor, and omx service status */
- uint16_t msg_id; /* message id */
- uint32_t flags; /* Set to a fixed value for now. */
- uint32_t fxn_idx; /* Index into OMX service's function table.*/
- int32_t result; /* The OMX function status. */
- uint32_t data_size;/* Size of in/out data to/from the function. */
- uint32_t data[0]; /* Payload of data_size char's passed to
- function. */
-};
-
static struct class *rpmsg_omx_class;
static dev_t rpmsg_omx_dev;
diff --git a/drivers/rpmsg/virtio_rpmsg_bus.c b/drivers/rpmsg/virtio_rpmsg_bus.c
index 5ae755a..619070a 100644
--- a/drivers/rpmsg/virtio_rpmsg_bus.c
+++ b/drivers/rpmsg/virtio_rpmsg_bus.c
@@ -418,13 +418,20 @@ static int rpmsg_destroy_channel_by_info(struct virtproc_info *vrp,
static void *get_a_buf(struct virtproc_info *vrp)
{
unsigned int len;
+ void *buf = NULL;
+
+ /* protect svq from simultaneous concurrent manipulations */
+ mutex_lock(&vrp->svq_lock);
/* either pick the next unused buffer */
if (vrp->last_sbuf < vrp->num_bufs / 2)
- return vrp->sbufs + vrp->buf_size * vrp->last_sbuf++;
+ buf = vrp->sbufs + vrp->buf_size * vrp->last_sbuf++;
/* or recycle a used one */
else
- return virtqueue_get_buf(vrp->svq, &len);
+ buf = virtqueue_get_buf(vrp->svq, &len);
+
+ mutex_unlock(&vrp->svq_lock);
+ return buf;
}
/* XXX: the blocking 'wait' mechanism hasn't been tested yet */
diff --git a/drivers/video/omap2/dsscomp/base.c b/drivers/video/omap2/dsscomp/base.c
index 7c3b0b1..b54fc50 100644
--- a/drivers/video/omap2/dsscomp/base.c
+++ b/drivers/video/omap2/dsscomp/base.c
@@ -448,24 +448,44 @@ void dump_ovl_info(struct dsscomp_dev *cdev, struct dss2_ovl_info *oi)
(void *) oi->ba, (void *) oi->uv, c->stride);
}
+static void print_mgr_info(struct dsscomp_dev *cdev,
+ struct dss2_mgr_info *mi)
+{
+ printk("(dis%d(%s) alpha=%d col=%08x ilace=%d) ",
+ mi->ix,
+ (mi->ix < cdev->num_displays && cdev->displays[mi->ix]) ?
+ cdev->displays[mi->ix]->name : "NONE",
+ mi->alpha_blending, mi->default_color,
+ mi->interlaced);
+}
+
void dump_comp_info(struct dsscomp_dev *cdev, struct dsscomp_setup_mgr_data *d,
const char *phase)
{
- struct dss2_mgr_info *mi = &d->mgr;
+ if (!(debug & DEBUG_COMPOSITIONS))
+ return;
+
+ dev_info(DEV(cdev), "[%p] %s: %c%c%c ",
+ *phase == 'q' ? (void *) d->sync_id : d, phase,
+ (d->mode & DSSCOMP_SETUP_MODE_APPLY) ? 'A' : '-',
+ (d->mode & DSSCOMP_SETUP_MODE_DISPLAY) ? 'D' : '-',
+ (d->mode & DSSCOMP_SETUP_MODE_CAPTURE) ? 'C' : '-');
+ print_mgr_info(cdev, &d->mgr);
+ printk("n=%d\n", d->num_ovls);
+}
+void dump_total_comp_info(struct dsscomp_dev *cdev,
+ struct dsscomp_setup_dispc_data *d,
+ const char *phase)
+{
if (!(debug & DEBUG_COMPOSITIONS))
return;
- dev_info(DEV(cdev), "[%p] %s: %c%c%c"
- "(dis%d(%s) alpha=%d col=%08x ilace=%d n=%d)\n",
+ dev_info(DEV(cdev), "[%p] %s: %c%c%c ",
*phase == 'q' ? (void *) d->sync_id : d, phase,
(d->mode & DSSCOMP_SETUP_MODE_APPLY) ? 'A' : '-',
(d->mode & DSSCOMP_SETUP_MODE_DISPLAY) ? 'D' : '-',
- (d->mode & DSSCOMP_SETUP_MODE_CAPTURE) ? 'C' : '-',
- mi->ix,
- (mi->ix < cdev->num_displays && cdev->displays[mi->ix]) ?
- cdev->displays[mi->ix]->name : "NONE",
- mi->alpha_blending, mi->default_color,
- mi->interlaced,
- d->num_ovls);
+ (d->mode & DSSCOMP_SETUP_MODE_CAPTURE) ? 'C' : '-');
+ print_mgr_info(cdev, &d->mgr);
+ printk("n=%d\n", d->num_ovls);
}
diff --git a/drivers/video/omap2/dsscomp/device.c b/drivers/video/omap2/dsscomp/device.c
index 9bc14fc..eb57c4a 100644
--- a/drivers/video/omap2/dsscomp/device.c
+++ b/drivers/video/omap2/dsscomp/device.c
@@ -381,45 +381,46 @@ static long comp_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
struct dsscomp_dev *cdev = container_of(dev, struct dsscomp_dev, dev);
void __user *ptr = (void __user *)arg;
- struct {
- struct dsscomp_setup_mgr_data set;
- struct dss2_ovl_info ovl[MAX_OVERLAYS];
- } p;
+ union {
+ struct {
+ struct dsscomp_setup_mgr_data set;
+ struct dss2_ovl_info ovl[MAX_OVERLAYS];
+ } m;
+ struct dsscomp_setup_dispc_data dispc;
+ struct dsscomp_display_info dis;
+ struct dsscomp_check_ovl_data chk;
+ } u;
dsscomp_gralloc_init(cdev);
switch (cmd) {
case DSSCOMP_SETUP_MGR:
{
- r = copy_from_user(&p.set, ptr, sizeof(p.set)) ? :
- p.set.num_ovls >= ARRAY_SIZE(p.ovl) ? -EINVAL :
- copy_from_user(&p.ovl, (void __user *)arg + sizeof(p.set),
- sizeof(*p.ovl) * p.set.num_ovls) ? :
- setup_mgr(cdev, &p.set);
+ r = copy_from_user(&u.m.set, ptr, sizeof(u.m.set)) ? :
+ u.m.set.num_ovls >= ARRAY_SIZE(u.m.ovl) ? -EINVAL :
+ copy_from_user(&u.m.ovl,
+ (void __user *)arg + sizeof(u.m.set),
+ sizeof(*u.m.ovl) * u.m.set.num_ovls) ? :
+ setup_mgr(cdev, &u.m.set);
break;
}
- case DSSCOMP_SETUP_MGR_G:
+ case DSSCOMP_SETUP_DISPC:
{
- r = copy_from_user(&p.set, ptr, sizeof(p.set)) ? :
- p.set.num_ovls >= ARRAY_SIZE(p.ovl) ? -EINVAL :
- copy_from_user(&p.ovl, (void __user *)arg + sizeof(p.set),
- sizeof(*p.ovl) * p.set.num_ovls) ? :
- dsscomp_gralloc_queue_ioctl(&p.set);
+ r = copy_from_user(&u.dispc, ptr, sizeof(u.dispc)) ? :
+ dsscomp_gralloc_queue_ioctl(&u.dispc);
break;
}
case DSSCOMP_QUERY_DISPLAY:
{
- struct dsscomp_display_info dis;
- r = copy_from_user(&dis, ptr, sizeof(dis)) ? :
- query_display(cdev, &dis) ? :
- copy_to_user(ptr, &dis, sizeof(dis));
+ r = copy_from_user(&u.dis, ptr, sizeof(u.dis)) ? :
+ query_display(cdev, &u.dis) ? :
+ copy_to_user(ptr, &u.dis, sizeof(u.dis));
break;
}
case DSSCOMP_CHECK_OVL:
{
- struct dsscomp_check_ovl_data chk;
- r = copy_from_user(&chk, ptr, sizeof(chk)) ? :
- check_ovl(cdev, &chk);
+ r = copy_from_user(&u.chk, ptr, sizeof(u.chk)) ? :
+ check_ovl(cdev, &u.chk);
break;
}
default:
diff --git a/drivers/video/omap2/dsscomp/dsscomp.h b/drivers/video/omap2/dsscomp/dsscomp.h
index 8634f04..6deeda0 100644
--- a/drivers/video/omap2/dsscomp/dsscomp.h
+++ b/drivers/video/omap2/dsscomp/dsscomp.h
@@ -109,7 +109,7 @@ int dsscomp_queue_init(struct dsscomp_dev *cdev);
void dsscomp_queue_exit(void);
void dsscomp_gralloc_init(struct dsscomp_dev *cdev);
void dsscomp_gralloc_exit(void);
-int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_mgr_data *d);
+int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_dispc_data *d);
int dsscomp_wait(struct dsscomp_sync_obj *sync, enum dsscomp_wait_phase phase,
int timeout);
@@ -126,5 +126,8 @@ void swap_rb_in_mgr_info(struct dss2_mgr_info *mi);
void dump_ovl_info(struct dsscomp_dev *cdev, struct dss2_ovl_info *oi);
void dump_comp_info(struct dsscomp_dev *cdev, struct dsscomp_setup_mgr_data *d,
const char *phase);
+void dump_total_comp_info(struct dsscomp_dev *cdev,
+ struct dsscomp_setup_dispc_data *d,
+ const char *phase);
#endif
diff --git a/drivers/video/omap2/dsscomp/gralloc.c b/drivers/video/omap2/dsscomp/gralloc.c
index 914c6bd..fe3e2a2 100644
--- a/drivers/video/omap2/dsscomp/gralloc.c
+++ b/drivers/video/omap2/dsscomp/gralloc.c
@@ -86,7 +86,7 @@ static void dsscomp_gralloc_cb(void *data, int status)
/* This is just test code for now that does the setup + apply.
It still uses userspace virtual addresses, but maps non
TILER buffers into 1D */
-int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_mgr_data *d)
+int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_dispc_data *d)
{
struct tiler_pa_info *pas[MAX_OVERLAYS];
s32 ret;
@@ -119,7 +119,7 @@ int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_mgr_data *d)
return ret;
}
-int dsscomp_gralloc_queue(struct dsscomp_setup_mgr_data *d,
+int dsscomp_gralloc_queue(struct dsscomp_setup_dispc_data *d,
struct tiler_pa_info **pas,
void (*cb_fn)(void *, int), void *cb_arg)
{
@@ -135,7 +135,7 @@ int dsscomp_gralloc_queue(struct dsscomp_setup_mgr_data *d,
/* reserve tiler areas if not already done so */
dsscomp_gralloc_init(cdev);
- dump_comp_info(cdev, d, "queue");
+ dump_total_comp_info(cdev, d, "queue");
for (i = 0; i < d->num_ovls; i++)
dump_ovl_info(cdev, d->ovls + i);
@@ -283,7 +283,7 @@ static void dsscomp_early_suspend_cb(void *data, int status)
static void dsscomp_early_suspend(struct early_suspend *h)
{
- struct dsscomp_setup_mgr_data d = {
+ struct dsscomp_setup_dispc_data d = {
.mgr.alpha_blending = 1,
};
int err;
diff --git a/include/linux/rpmsg_omx.h b/include/linux/rpmsg_omx.h
index d5c1585..15503d5 100644
--- a/include/linux/rpmsg_omx.h
+++ b/include/linux/rpmsg_omx.h
@@ -41,7 +41,7 @@
#define OMX_IOCIONREGISTER _IOWR(OMX_IOC_MAGIC, 2, struct ion_fd_data)
#define OMX_IOCIONUNREGISTER _IOWR(OMX_IOC_MAGIC, 3, struct ion_fd_data)
-#define OMX_IOC_MAXNR (1)
+#define OMX_IOC_MAXNR (3)
#ifdef __KERNEL__
@@ -129,4 +129,16 @@ struct omx_conn_req {
char name[48];
} __packed;
+/* the packet structure (actual message sent to omx service) */
+struct omx_packet {
+ uint16_t desc; /* descriptor, and omx service status */
+ uint16_t msg_id; /* message id */
+ uint32_t flags; /* Set to a fixed value for now. */
+ uint32_t fxn_idx; /* Index into OMX service's function table.*/
+ int32_t result; /* The OMX function status. */
+ uint32_t data_size;/* Size of in/out data to/from the function. */
+ uint32_t data[0]; /* Payload of data_size char's passed to
+ function. */
+};
+
#endif /* RPMSG_OMX_H */
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index 582e4ae..cbc6bb0 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -8,7 +8,7 @@
#define TEMP_VALID_LIFETIME (7*86400)
#define TEMP_PREFERRED_LIFETIME (86400)
-#define REGEN_MAX_RETRY (5)
+#define REGEN_MAX_RETRY (3)
#define MAX_DESYNC_FACTOR (600)
#define ADDR_CHECK_FREQUENCY (120*HZ)
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index 11cf373..51a7031 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -41,6 +41,7 @@ struct inet6_ifaddr {
struct in6_addr addr;
__u32 prefix_len;
+ /* In seconds, relative to tstamp. Expiry is at tstamp + HZ * lft. */
__u32 valid_lft;
__u32 prefered_lft;
atomic_t refcnt;
diff --git a/include/sound/omap-abe-dsp.h b/include/sound/omap-abe-dsp.h
index 60c405d..a1d969a 100644
--- a/include/sound/omap-abe-dsp.h
+++ b/include/sound/omap-abe-dsp.h
@@ -14,6 +14,9 @@
struct omap4_abe_dsp_pdata {
/* Return context loss count due to PM states changing */
int (*get_context_loss_count)(struct device *dev);
+ int (*device_scale)(struct device *req_dev,
+ struct device *target_dev,
+ unsigned long rate);
};
#endif
diff --git a/include/video/dsscomp.h b/include/video/dsscomp.h
index 993c5fe..6ffa436 100644
--- a/include/video/dsscomp.h
+++ b/include/video/dsscomp.h
@@ -479,6 +479,22 @@ struct dsscomp_check_ovl_data {
};
/*
+ * This structure is used to set up the entire DISPC (all managers).
+ * For now we only have LCD manager supported.
+ */
+struct dsscomp_setup_dispc_data {
+ __u32 sync_id; /* synchronization ID */
+
+ struct dss2_rect_t win; /* update region, set w/h to 0 for fullscreen */
+ enum dsscomp_setup_mode mode;
+ __u16 num_ovls; /* # of overlays used in the composition */
+ __u16 get_sync_obj; /* ioctl should return a sync object */
+
+ struct dss2_mgr_info mgr;
+ struct dss2_ovl_info ovls[5]; /* up to 5 overlays to set up */
+};
+
+/*
* ioctl: DSSCOMP_WB_COPY, struct dsscomp_wb_copy_data
*
* Requirements:
@@ -562,6 +578,6 @@ struct dsscomp_wait_data {
#define DSSCOMP_QUERY_DISPLAY _IOWR('O', 131, struct dsscomp_display_info)
#define DSSCOMP_WAIT _IOW('O', 132, struct dsscomp_wait_data)
-#define DSSCOMP_SETUP_MGR_G _IOW('O', 127, struct dsscomp_setup_mgr_data)
+#define DSSCOMP_SETUP_DISPC _IOW('O', 127, struct dsscomp_setup_dispc_data)
#endif
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 498b927..cf2cf62 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -824,12 +824,13 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i
{
struct inet6_dev *idev = ifp->idev;
struct in6_addr addr, *tmpaddr;
- unsigned long tmp_prefered_lft, tmp_valid_lft, tmp_cstamp, tmp_tstamp, age;
+ unsigned long tmp_prefered_lft, tmp_valid_lft, tmp_tstamp, age;
unsigned long regen_advance;
int tmp_plen;
int ret = 0;
int max_addresses;
u32 addr_flags;
+ unsigned long now = jiffies;
write_lock(&idev->lock);
if (ift) {
@@ -874,7 +875,7 @@ retry:
goto out;
}
memcpy(&addr.s6_addr[8], idev->rndid, 8);
- age = (jiffies - ifp->tstamp) / HZ;
+ age = (now - ifp->tstamp) / HZ;
tmp_valid_lft = min_t(__u32,
ifp->valid_lft,
idev->cnf.temp_valid_lft + age);
@@ -884,7 +885,6 @@ retry:
idev->cnf.max_desync_factor);
tmp_plen = ifp->prefix_len;
max_addresses = idev->cnf.max_addresses;
- tmp_cstamp = ifp->cstamp;
tmp_tstamp = ifp->tstamp;
spin_unlock_bh(&ifp->lock);
@@ -929,7 +929,7 @@ retry:
ift->ifpub = ifp;
ift->valid_lft = tmp_valid_lft;
ift->prefered_lft = tmp_prefered_lft;
- ift->cstamp = tmp_cstamp;
+ ift->cstamp = now;
ift->tstamp = tmp_tstamp;
spin_unlock_bh(&ift->lock);
@@ -1988,25 +1988,50 @@ ok:
#ifdef CONFIG_IPV6_PRIVACY
read_lock_bh(&in6_dev->lock);
/* update all temporary addresses in the list */
- list_for_each_entry(ift, &in6_dev->tempaddr_list, tmp_list) {
- /*
- * When adjusting the lifetimes of an existing
- * temporary address, only lower the lifetimes.
- * Implementations must not increase the
- * lifetimes of an existing temporary address
- * when processing a Prefix Information Option.
- */
+ list_for_each_entry(ift, &in6_dev->tempaddr_list,
+ tmp_list) {
+ int age, max_valid, max_prefered;
+
if (ifp != ift->ifpub)
continue;
+ /*
+ * RFC 4941 section 3.3:
+ * If a received option will extend the lifetime
+ * of a public address, the lifetimes of
+ * temporary addresses should be extended,
+ * subject to the overall constraint that no
+ * temporary addresses should ever remain
+ * "valid" or "preferred" for a time longer than
+ * (TEMP_VALID_LIFETIME) or
+ * (TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR),
+ * respectively.
+ */
+ age = (now - ift->cstamp) / HZ;
+ max_valid = in6_dev->cnf.temp_valid_lft - age;
+ if (max_valid < 0)
+ max_valid = 0;
+
+ max_prefered = in6_dev->cnf.temp_prefered_lft -
+ in6_dev->cnf.max_desync_factor -
+ age;
+ if (max_prefered < 0)
+ max_prefered = 0;
+
+ if (valid_lft > max_valid)
+ valid_lft = max_valid;
+
+ if (prefered_lft > max_prefered)
+ prefered_lft = max_prefered;
+
spin_lock(&ift->lock);
flags = ift->flags;
- if (ift->valid_lft > valid_lft &&
- ift->valid_lft - valid_lft > (jiffies - ift->tstamp) / HZ)
- ift->valid_lft = valid_lft + (jiffies - ift->tstamp) / HZ;
- if (ift->prefered_lft > prefered_lft &&
- ift->prefered_lft - prefered_lft > (jiffies - ift->tstamp) / HZ)
- ift->prefered_lft = prefered_lft + (jiffies - ift->tstamp) / HZ;
+ ift->valid_lft = valid_lft;
+ ift->prefered_lft = prefered_lft;
+ ift->tstamp = now;
+ if (prefered_lft > 0)
+ ift->flags &= ~IFA_F_DEPRECATED;
+
spin_unlock(&ift->lock);
if (!(flags&IFA_F_TENTATIVE))
ipv6_ifa_notify(0, ift);
@@ -2014,9 +2039,11 @@ ok:
if ((create || list_empty(&in6_dev->tempaddr_list)) && in6_dev->cnf.use_tempaddr > 0) {
/*
- * When a new public address is created as described in [ADDRCONF],
- * also create a new temporary address. Also create a temporary
- * address if it's enabled but no temporary address currently exists.
+ * When a new public address is created as
+ * described in [ADDRCONF], also create a new
+ * temporary address. Also create a temporary
+ * address if it's enabled but no temporary
+ * address currently exists.
*/
read_unlock_bh(&in6_dev->lock);
ipv6_create_tempaddr(ifp, NULL);
diff --git a/sound/soc/omap/abe/abe_api.h b/sound/soc/omap/abe/abe_api.h
index ba3f7be..15e8408 100644
--- a/sound/soc/omap/abe/abe_api.h
+++ b/sound/soc/omap/abe/abe_api.h
@@ -70,10 +70,14 @@
#define ABE_TASK_ID(ID) (OMAP_ABE_D_TASKSLIST_ADDR + sizeof(ABE_STask)*(ID))
-#define TASK_ASRC_VX_DL_SLT 1
-#define TASK_ASRC_VX_DL_IDX 2
+#define TASK_ASRC_VX_DL_SLT 0
+#define TASK_ASRC_VX_DL_IDX 3
#define TASK_VX_DL_SLT 1
#define TASK_VX_DL_IDX 3
+#define TASK_DL2Mixer_SLT 1
+#define TASK_DL2Mixer_IDX 6
+#define TASK_DL1Mixer_SLT 2
+#define TASK_DL1Mixer_IDX 0
#define TASK_VX_UL_SLT 12
#define TASK_VX_UL_IDX 5
#define TASK_BT_DL_48_8_SLT 14
@@ -89,6 +93,7 @@
#define TASK_ASRC_BT_DL_SLT 18
#define TASK_ASRC_BT_DL_IDX 6
+
struct omap_abe {
void __iomem *io_base[5];
u32 firmware_version_number;
@@ -132,15 +137,6 @@ abehal_status abe_reset_hal(void);
*/
abehal_status abe_load_fw_param(u32 *FW);
/**
- * abe_reload_fw - Reload ABE Firmware after OFF mode
- */
-abehal_status abe_reload_fw(void);
-/**
- * abe_load_fw - Load ABE Firmware and initialize memories
- *
- */
-abehal_status abe_load_fw(void);
-/**
* abe_irq_processing - Process ABE interrupt
*
* This subroutine is call upon reception of "MA_IRQ_99 ABE_MPU_IRQ" Audio
@@ -521,4 +517,15 @@ abehal_status abe_set_debug_trace(abe_dbg_t debug);
*/
void abe_init_mem(void __iomem **_io_base);
+/**
+ * abe_write_pdmdl_offset - write the desired offset on the DL1/DL2 paths
+ *
+ * Parameters:
+ * path: 1 for the DL1 ABE path, 2 for the DL2 ABE path
+ * offset_left: integer value that will be added on all PDM left samples
+ * offset_right: integer value that will be added on all PDM right samples
+ *
+ */
+void abe_write_pdmdl_offset(u32 path, u32 offset_left, u32 offset_right);
+
#endif/* _ABE_API_H_ */
diff --git a/sound/soc/omap/abe/abe_asrc.c b/sound/soc/omap/abe/abe_asrc.c
index bd49149..4a52235 100644
--- a/sound/soc/omap/abe/abe_asrc.c
+++ b/sound/soc/omap/abe/abe_asrc.c
@@ -346,10 +346,17 @@ void abe_init_asrc_vx_dl(s32 dppm)
mem_tag = ABE_SMEM;
mem_addr = ASRC_DL_VX_Coefs_labelID;
el[i] = (mem_tag << 16) + (mem_addr << 2);
- el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
- el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
- el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
- el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ if (dppm == 0) {
+ el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ } else {
+ el[i + 1] = OMAP_ABE_C_COEFASRC1_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC1_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC2_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC2_VX_SIZE >> 2);
+ }
i = i + 3;
/* 10. CMEM for ASRC_DL_VX_Coefs pointer */
/* ASRC_DL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
@@ -533,10 +540,17 @@ void abe_init_asrc_vx_ul(s32 dppm)
mem_tag = ABE_SMEM;
mem_addr = ASRC_UL_VX_Coefs_labelID;
el[i] = (mem_tag << 16) + (mem_addr << 2);
- el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
- el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
- el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
- el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ if (dppm == 0) {
+ el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ } else {
+ el[i + 1] = OMAP_ABE_C_COEFASRC1_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC1_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC2_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC2_VX_SIZE >> 2);
+ }
i = i + 3;
/* 10. CMEM for ASRC_UL_VX_Coefs pointer */
/* ASRC_UL_VX_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
@@ -739,10 +753,17 @@ void abe_init_asrc_mm_ext_in(s32 dppm)
mem_tag = ABE_SMEM;
mem_addr = ASRC_MM_EXT_IN_Coefs_labelID;
el[i] = (mem_tag << 16) + (mem_addr << 2);
- el[i + 1] = OMAP_ABE_C_COEFASRC16_MM_ADDR >> 2;
- el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_MM_SIZE >> 2);
- el[i + 2] = OMAP_ABE_C_COEFASRC15_MM_ADDR >> 2;
- el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_MM_SIZE >> 2);
+ if (dppm == 0) {
+ el[i + 1] = OMAP_ABE_C_COEFASRC16_MM_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_MM_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC15_MM_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_MM_SIZE >> 2);
+ } else {
+ el[i + 1] = OMAP_ABE_C_COEFASRC1_MM_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC1_MM_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC2_MM_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC2_MM_SIZE >> 2);
+ }
i = i + 3;
/*10. CMEM for ASRC_MM_EXT_IN_Coefs pointer */
/* ASRC_MM_EXT_IN_Coefs = C_CoefASRC16_MM_ADDR/C_CoefASRC16_MM_sizeof/
@@ -924,10 +945,17 @@ void abe_init_asrc_bt_ul(s32 dppm)
mem_tag = ABE_SMEM;
mem_addr = ASRC_BT_UL_Coefs_labelID;
el[i] = (mem_tag << 16) + (mem_addr << 2);
- el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
- el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
- el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
- el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ if (dppm == 0) {
+ el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ } else {
+ el[i + 1] = OMAP_ABE_C_COEFASRC1_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC1_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC2_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC2_VX_SIZE >> 2);
+ }
i = i + 3;
/* 10. CMEM for ASRC_BT_UL_Coefs pointer */
/* ASRC_BT_UL_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
@@ -1111,10 +1139,17 @@ void abe_init_asrc_bt_dl(s32 dppm)
mem_tag = ABE_SMEM;
mem_addr = ASRC_BT_DL_Coefs_labelID;
el[i] = (mem_tag << 16) + (mem_addr << 2);
- el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
- el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
- el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
- el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ if (dppm == 0) {
+ el[i + 1] = OMAP_ABE_C_COEFASRC16_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC16_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC15_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC15_VX_SIZE >> 2);
+ } else {
+ el[i + 1] = OMAP_ABE_C_COEFASRC1_VX_ADDR >> 2;
+ el[i + 1] = (el[i + 1] << 8) + (OMAP_ABE_C_COEFASRC1_VX_SIZE >> 2);
+ el[i + 2] = OMAP_ABE_C_COEFASRC2_VX_ADDR >> 2;
+ el[i + 2] = (el[i + 2] << 8) + (OMAP_ABE_C_COEFASRC2_VX_SIZE >> 2);
+ }
i = i + 3;
/* 10. CMEM for ASRC_BT_DL_Coefs pointer */
/* ASRC_BT_DL_Coefs = C_CoefASRC16_VX_ADDR/C_CoefASRC16_VX_sizeof/0/1/
diff --git a/sound/soc/omap/abe/abe_cm_addr.h b/sound/soc/omap/abe/abe_cm_addr.h
index 29f7f27..e5c97f3 100644
--- a/sound/soc/omap/abe/abe_cm_addr.h
+++ b/sound/soc/omap/abe/abe_cm_addr.h
@@ -1,317 +1,217 @@
/*
-
- This file is provided under a dual BSD/GPLv2 license. When using or
- redistributing this file, you may do so under either license.
-
- GPL LICENSE SUMMARY
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution
- in the file called LICENSE.GPL.
-
- BSD LICENSE
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Texas Instruments Incorporated nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-#define OMAP_ABE_INIT_CM_ADDR 0x0
-#define OMAP_ABE_INIT_CM_SIZE 0x4DC
-
-#define OMAP_ABE_C_DATA_LSB_2_ADDR 0x4DC
-#define OMAP_ABE_C_DATA_LSB_2_SIZE 0x4
-
-#define OMAP_ABE_C_1_ALPHA_ADDR 0x4E0
-#define OMAP_ABE_C_1_ALPHA_SIZE 0x48
-
-#define OMAP_ABE_C_ALPHA_ADDR 0x528
-#define OMAP_ABE_C_ALPHA_SIZE 0x48
-
-#define OMAP_ABE_C_GAINSWRAMP_ADDR 0x570
-#define OMAP_ABE_C_GAINSWRAMP_SIZE 0x38
-
-#define OMAP_ABE_C_GAINS_DL1M_ADDR 0x5A8
-#define OMAP_ABE_C_GAINS_DL1M_SIZE 0x10
-
-#define OMAP_ABE_C_GAINS_DL2M_ADDR 0x5B8
-#define OMAP_ABE_C_GAINS_DL2M_SIZE 0x10
-
-#define OMAP_ABE_C_GAINS_ECHOM_ADDR 0x5C8
-#define OMAP_ABE_C_GAINS_ECHOM_SIZE 0x8
-
-#define OMAP_ABE_C_GAINS_SDTM_ADDR 0x5D0
-#define OMAP_ABE_C_GAINS_SDTM_SIZE 0x8
-
-#define OMAP_ABE_C_GAINS_VXRECM_ADDR 0x5D8
-#define OMAP_ABE_C_GAINS_VXRECM_SIZE 0x10
-
-#define OMAP_ABE_C_GAINS_ULM_ADDR 0x5E8
-#define OMAP_ABE_C_GAINS_ULM_SIZE 0x10
-
-#define OMAP_ABE_C_GAINS_BTUL_ADDR 0x5F8
-#define OMAP_ABE_C_GAINS_BTUL_SIZE 0x8
-
-#define OMAP_ABE_C_SDT_COEFS_ADDR 0x600
-#define OMAP_ABE_C_SDT_COEFS_SIZE 0x24
-
-#define OMAP_ABE_C_COEFASRC1_VX_ADDR 0x624
-#define OMAP_ABE_C_COEFASRC1_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC2_VX_ADDR 0x670
-#define OMAP_ABE_C_COEFASRC2_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC3_VX_ADDR 0x6BC
-#define OMAP_ABE_C_COEFASRC3_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC4_VX_ADDR 0x708
-#define OMAP_ABE_C_COEFASRC4_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC5_VX_ADDR 0x754
-#define OMAP_ABE_C_COEFASRC5_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC6_VX_ADDR 0x7A0
-#define OMAP_ABE_C_COEFASRC6_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC7_VX_ADDR 0x7EC
-#define OMAP_ABE_C_COEFASRC7_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC8_VX_ADDR 0x838
-#define OMAP_ABE_C_COEFASRC8_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC9_VX_ADDR 0x884
-#define OMAP_ABE_C_COEFASRC9_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC10_VX_ADDR 0x8D0
-#define OMAP_ABE_C_COEFASRC10_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC11_VX_ADDR 0x91C
-#define OMAP_ABE_C_COEFASRC11_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC12_VX_ADDR 0x968
-#define OMAP_ABE_C_COEFASRC12_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC13_VX_ADDR 0x9B4
-#define OMAP_ABE_C_COEFASRC13_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC14_VX_ADDR 0xA00
-#define OMAP_ABE_C_COEFASRC14_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC15_VX_ADDR 0xA4C
-#define OMAP_ABE_C_COEFASRC15_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_COEFASRC16_VX_ADDR 0xA98
-#define OMAP_ABE_C_COEFASRC16_VX_SIZE 0x4C
-
-#define OMAP_ABE_C_ALPHACURRENT_UL_VX_ADDR 0xAE4
-#define OMAP_ABE_C_ALPHACURRENT_UL_VX_SIZE 0x4
-
-#define OMAP_ABE_C_BETACURRENT_UL_VX_ADDR 0xAE8
-#define OMAP_ABE_C_BETACURRENT_UL_VX_SIZE 0x4
-
-#define OMAP_ABE_C_ALPHACURRENT_DL_VX_ADDR 0xAEC
-#define OMAP_ABE_C_ALPHACURRENT_DL_VX_SIZE 0x4
-
-#define OMAP_ABE_C_BETACURRENT_DL_VX_ADDR 0xAF0
-#define OMAP_ABE_C_BETACURRENT_DL_VX_SIZE 0x4
-
-#define OMAP_ABE_C_COEFASRC1_MM_ADDR 0xAF4
-#define OMAP_ABE_C_COEFASRC1_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC2_MM_ADDR 0xB3C
-#define OMAP_ABE_C_COEFASRC2_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC3_MM_ADDR 0xB84
-#define OMAP_ABE_C_COEFASRC3_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC4_MM_ADDR 0xBCC
-#define OMAP_ABE_C_COEFASRC4_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC5_MM_ADDR 0xC14
-#define OMAP_ABE_C_COEFASRC5_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC6_MM_ADDR 0xC5C
-#define OMAP_ABE_C_COEFASRC6_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC7_MM_ADDR 0xCA4
-#define OMAP_ABE_C_COEFASRC7_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC8_MM_ADDR 0xCEC
-#define OMAP_ABE_C_COEFASRC8_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC9_MM_ADDR 0xD34
-#define OMAP_ABE_C_COEFASRC9_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC10_MM_ADDR 0xD7C
-#define OMAP_ABE_C_COEFASRC10_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC11_MM_ADDR 0xDC4
-#define OMAP_ABE_C_COEFASRC11_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC12_MM_ADDR 0xE0C
-#define OMAP_ABE_C_COEFASRC12_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC13_MM_ADDR 0xE54
-#define OMAP_ABE_C_COEFASRC13_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC14_MM_ADDR 0xE9C
-#define OMAP_ABE_C_COEFASRC14_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC15_MM_ADDR 0xEE4
-#define OMAP_ABE_C_COEFASRC15_MM_SIZE 0x48
-
-#define OMAP_ABE_C_COEFASRC16_MM_ADDR 0xF2C
-#define OMAP_ABE_C_COEFASRC16_MM_SIZE 0x48
-
-#define OMAP_ABE_C_ALPHACURRENT_MM_EXT_IN_ADDR 0xF74
-#define OMAP_ABE_C_ALPHACURRENT_MM_EXT_IN_SIZE 0x4
-
-#define OMAP_ABE_C_BETACURRENT_MM_EXT_IN_ADDR 0xF78
-#define OMAP_ABE_C_BETACURRENT_MM_EXT_IN_SIZE 0x4
-
-#define OMAP_ABE_C_DL2_L_COEFS_ADDR 0xF7C
-#define OMAP_ABE_C_DL2_L_COEFS_SIZE 0x64
-
-#define OMAP_ABE_C_DL2_R_COEFS_ADDR 0xFE0
-#define OMAP_ABE_C_DL2_R_COEFS_SIZE 0x64
-
-#define OMAP_ABE_C_DL1_COEFS_ADDR 0x1044
-#define OMAP_ABE_C_DL1_COEFS_SIZE 0x64
-
-#define OMAP_ABE_C_SRC_3_LP_COEFS_ADDR 0x10A8
-#define OMAP_ABE_C_SRC_3_LP_COEFS_SIZE 0x2C
-
-#define OMAP_ABE_C_SRC_3_LP_GAIN_COEFS_ADDR 0x10D4
-#define OMAP_ABE_C_SRC_3_LP_GAIN_COEFS_SIZE 0x2C
-
-#define OMAP_ABE_C_SRC_3_HP_COEFS_ADDR 0x1100
-#define OMAP_ABE_C_SRC_3_HP_COEFS_SIZE 0x14
-
-#define OMAP_ABE_C_SRC_6_LP_COEFS_ADDR 0x1114
-#define OMAP_ABE_C_SRC_6_LP_COEFS_SIZE 0x2C
-
-#define OMAP_ABE_C_SRC_6_LP_GAIN_COEFS_ADDR 0x1140
-#define OMAP_ABE_C_SRC_6_LP_GAIN_COEFS_SIZE 0x2C
-
-#define OMAP_ABE_C_SRC_6_HP_COEFS_ADDR 0x116C
-#define OMAP_ABE_C_SRC_6_HP_COEFS_SIZE 0x1C
-
-#define OMAP_ABE_C_APS_DL1_COEFFS1_ADDR 0x1188
-#define OMAP_ABE_C_APS_DL1_COEFFS1_SIZE 0x24
-
-#define OMAP_ABE_C_APS_DL1_M_COEFFS2_ADDR 0x11AC
-#define OMAP_ABE_C_APS_DL1_M_COEFFS2_SIZE 0xC
-
-#define OMAP_ABE_C_APS_DL1_C_COEFFS2_ADDR 0x11B8
-#define OMAP_ABE_C_APS_DL1_C_COEFFS2_SIZE 0xC
-
-#define OMAP_ABE_C_APS_DL2_L_COEFFS1_ADDR 0x11C4
-#define OMAP_ABE_C_APS_DL2_L_COEFFS1_SIZE 0x24
-
-#define OMAP_ABE_C_APS_DL2_R_COEFFS1_ADDR 0x11E8
-#define OMAP_ABE_C_APS_DL2_R_COEFFS1_SIZE 0x24
-
-#define OMAP_ABE_C_APS_DL2_L_M_COEFFS2_ADDR 0x120C
-#define OMAP_ABE_C_APS_DL2_L_M_COEFFS2_SIZE 0xC
-
-#define OMAP_ABE_C_APS_DL2_R_M_COEFFS2_ADDR 0x1218
-#define OMAP_ABE_C_APS_DL2_R_M_COEFFS2_SIZE 0xC
-
-#define OMAP_ABE_C_APS_DL2_L_C_COEFFS2_ADDR 0x1224
-#define OMAP_ABE_C_APS_DL2_L_C_COEFFS2_SIZE 0xC
-
-#define OMAP_ABE_C_APS_DL2_R_C_COEFFS2_ADDR 0x1230
-#define OMAP_ABE_C_APS_DL2_R_C_COEFFS2_SIZE 0xC
-
-#define OMAP_ABE_C_ALPHACURRENT_ECHO_REF_ADDR 0x123C
-#define OMAP_ABE_C_ALPHACURRENT_ECHO_REF_SIZE 0x4
-
-#define OMAP_ABE_C_BETACURRENT_ECHO_REF_ADDR 0x1240
-#define OMAP_ABE_C_BETACURRENT_ECHO_REF_SIZE 0x4
-
-#define OMAP_ABE_C_APS_DL1_EQ_ADDR 0x1244
-#define OMAP_ABE_C_APS_DL1_EQ_SIZE 0x24
-
-#define OMAP_ABE_C_APS_DL2_L_EQ_ADDR 0x1268
-#define OMAP_ABE_C_APS_DL2_L_EQ_SIZE 0x24
-
-#define OMAP_ABE_C_APS_DL2_R_EQ_ADDR 0x128C
-#define OMAP_ABE_C_APS_DL2_R_EQ_SIZE 0x24
-
-#define OMAP_ABE_C_VIBRA2_CONSTS_ADDR 0x12B0
-#define OMAP_ABE_C_VIBRA2_CONSTS_SIZE 0x10
-
-#define OMAP_ABE_C_VIBRA1_COEFFS_ADDR 0x12C0
-#define OMAP_ABE_C_VIBRA1_COEFFS_SIZE 0x2C
-
-#define OMAP_ABE_C_48_96_LP_COEFS_ADDR 0x12EC
-#define OMAP_ABE_C_48_96_LP_COEFS_SIZE 0x3C
-
-#define OMAP_ABE_C_96_48_AMIC_COEFS_ADDR 0x1328
-#define OMAP_ABE_C_96_48_AMIC_COEFS_SIZE 0x4C
-
-#define OMAP_ABE_C_96_48_DMIC_COEFS_ADDR 0x1374
-#define OMAP_ABE_C_96_48_DMIC_COEFS_SIZE 0x4C
-
-#define OMAP_ABE_C_INPUT_SCALE_ADDR 0x13C0
-#define OMAP_ABE_C_INPUT_SCALE_SIZE 0x4
-
-#define OMAP_ABE_C_OUTPUT_SCALE_ADDR 0x13C4
-#define OMAP_ABE_C_OUTPUT_SCALE_SIZE 0x4
-
-#define OMAP_ABE_C_MUTE_SCALING_ADDR 0x13C8
-#define OMAP_ABE_C_MUTE_SCALING_SIZE 0x4
-
-#define OMAP_ABE_C_GAINS_0DB_ADDR 0x13CC
-#define OMAP_ABE_C_GAINS_0DB_SIZE 0x8
-
-#define OMAP_ABE_C_ALPHACURRENT_BT_UL_ADDR 0x13D4
-#define OMAP_ABE_C_ALPHACURRENT_BT_UL_SIZE 0x4
-
-#define OMAP_ABE_C_BETACURRENT_BT_UL_ADDR 0x13D8
-#define OMAP_ABE_C_BETACURRENT_BT_UL_SIZE 0x4
-
-#define OMAP_ABE_C_ALPHACURRENT_BT_DL_ADDR 0x13DC
-#define OMAP_ABE_C_ALPHACURRENT_BT_DL_SIZE 0x4
-
-#define OMAP_ABE_C_BETACURRENT_BT_DL_ADDR 0x13E0
-#define OMAP_ABE_C_BETACURRENT_BT_DL_SIZE 0x4
+ *
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#define OMAP_ABE_INIT_CM_ADDR 0x0
+#define OMAP_ABE_INIT_CM_SIZE 0x640
+#define OMAP_ABE_C_DATA_LSB_2_ADDR 0x640
+#define OMAP_ABE_C_DATA_LSB_2_SIZE 0x4
+#define OMAP_ABE_C_1_ALPHA_ADDR 0x644
+#define OMAP_ABE_C_1_ALPHA_SIZE 0x48
+#define OMAP_ABE_C_ALPHA_ADDR 0x68C
+#define OMAP_ABE_C_ALPHA_SIZE 0x48
+#define OMAP_ABE_C_GAINSWRAMP_ADDR 0x6D4
+#define OMAP_ABE_C_GAINSWRAMP_SIZE 0x38
+#define OMAP_ABE_C_GAINS_DL1M_ADDR 0x70C
+#define OMAP_ABE_C_GAINS_DL1M_SIZE 0x10
+#define OMAP_ABE_C_GAINS_DL2M_ADDR 0x71C
+#define OMAP_ABE_C_GAINS_DL2M_SIZE 0x10
+#define OMAP_ABE_C_GAINS_ECHOM_ADDR 0x72C
+#define OMAP_ABE_C_GAINS_ECHOM_SIZE 0x8
+#define OMAP_ABE_C_GAINS_SDTM_ADDR 0x734
+#define OMAP_ABE_C_GAINS_SDTM_SIZE 0x8
+#define OMAP_ABE_C_GAINS_VXRECM_ADDR 0x73C
+#define OMAP_ABE_C_GAINS_VXRECM_SIZE 0x10
+#define OMAP_ABE_C_GAINS_ULM_ADDR 0x74C
+#define OMAP_ABE_C_GAINS_ULM_SIZE 0x10
+#define OMAP_ABE_C_GAINS_BTUL_ADDR 0x75C
+#define OMAP_ABE_C_GAINS_BTUL_SIZE 0x8
+#define OMAP_ABE_C_SDT_COEFS_ADDR 0x764
+#define OMAP_ABE_C_SDT_COEFS_SIZE 0x24
+#define OMAP_ABE_C_COEFASRC1_VX_ADDR 0x788
+#define OMAP_ABE_C_COEFASRC1_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC2_VX_ADDR 0x7D4
+#define OMAP_ABE_C_COEFASRC2_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC3_VX_ADDR 0x820
+#define OMAP_ABE_C_COEFASRC3_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC4_VX_ADDR 0x86C
+#define OMAP_ABE_C_COEFASRC4_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC5_VX_ADDR 0x8B8
+#define OMAP_ABE_C_COEFASRC5_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC6_VX_ADDR 0x904
+#define OMAP_ABE_C_COEFASRC6_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC7_VX_ADDR 0x950
+#define OMAP_ABE_C_COEFASRC7_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC8_VX_ADDR 0x99C
+#define OMAP_ABE_C_COEFASRC8_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC9_VX_ADDR 0x9E8
+#define OMAP_ABE_C_COEFASRC9_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC10_VX_ADDR 0xA34
+#define OMAP_ABE_C_COEFASRC10_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC11_VX_ADDR 0xA80
+#define OMAP_ABE_C_COEFASRC11_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC12_VX_ADDR 0xACC
+#define OMAP_ABE_C_COEFASRC12_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC13_VX_ADDR 0xB18
+#define OMAP_ABE_C_COEFASRC13_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC14_VX_ADDR 0xB64
+#define OMAP_ABE_C_COEFASRC14_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC15_VX_ADDR 0xBB0
+#define OMAP_ABE_C_COEFASRC15_VX_SIZE 0x4C
+#define OMAP_ABE_C_COEFASRC16_VX_ADDR 0xBFC
+#define OMAP_ABE_C_COEFASRC16_VX_SIZE 0x4C
+#define OMAP_ABE_C_ALPHACURRENT_UL_VX_ADDR 0xC48
+#define OMAP_ABE_C_ALPHACURRENT_UL_VX_SIZE 0x4
+#define OMAP_ABE_C_BETACURRENT_UL_VX_ADDR 0xC4C
+#define OMAP_ABE_C_BETACURRENT_UL_VX_SIZE 0x4
+#define OMAP_ABE_C_ALPHACURRENT_DL_VX_ADDR 0xC50
+#define OMAP_ABE_C_ALPHACURRENT_DL_VX_SIZE 0x4
+#define OMAP_ABE_C_BETACURRENT_DL_VX_ADDR 0xC54
+#define OMAP_ABE_C_BETACURRENT_DL_VX_SIZE 0x4
+#define OMAP_ABE_C_COEFASRC1_MM_ADDR 0xC58
+#define OMAP_ABE_C_COEFASRC1_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC2_MM_ADDR 0xCA0
+#define OMAP_ABE_C_COEFASRC2_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC3_MM_ADDR 0xCE8
+#define OMAP_ABE_C_COEFASRC3_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC4_MM_ADDR 0xD30
+#define OMAP_ABE_C_COEFASRC4_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC5_MM_ADDR 0xD78
+#define OMAP_ABE_C_COEFASRC5_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC6_MM_ADDR 0xDC0
+#define OMAP_ABE_C_COEFASRC6_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC7_MM_ADDR 0xE08
+#define OMAP_ABE_C_COEFASRC7_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC8_MM_ADDR 0xE50
+#define OMAP_ABE_C_COEFASRC8_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC9_MM_ADDR 0xE98
+#define OMAP_ABE_C_COEFASRC9_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC10_MM_ADDR 0xEE0
+#define OMAP_ABE_C_COEFASRC10_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC11_MM_ADDR 0xF28
+#define OMAP_ABE_C_COEFASRC11_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC12_MM_ADDR 0xF70
+#define OMAP_ABE_C_COEFASRC12_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC13_MM_ADDR 0xFB8
+#define OMAP_ABE_C_COEFASRC13_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC14_MM_ADDR 0x1000
+#define OMAP_ABE_C_COEFASRC14_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC15_MM_ADDR 0x1048
+#define OMAP_ABE_C_COEFASRC15_MM_SIZE 0x48
+#define OMAP_ABE_C_COEFASRC16_MM_ADDR 0x1090
+#define OMAP_ABE_C_COEFASRC16_MM_SIZE 0x48
+#define OMAP_ABE_C_ALPHACURRENT_MM_EXT_IN_ADDR 0x10D8
+#define OMAP_ABE_C_ALPHACURRENT_MM_EXT_IN_SIZE 0x4
+#define OMAP_ABE_C_BETACURRENT_MM_EXT_IN_ADDR 0x10DC
+#define OMAP_ABE_C_BETACURRENT_MM_EXT_IN_SIZE 0x4
+#define OMAP_ABE_C_DL2_L_COEFS_ADDR 0x10E0
+#define OMAP_ABE_C_DL2_L_COEFS_SIZE 0x64
+#define OMAP_ABE_C_DL2_R_COEFS_ADDR 0x1144
+#define OMAP_ABE_C_DL2_R_COEFS_SIZE 0x64
+#define OMAP_ABE_C_DL1_COEFS_ADDR 0x11A8
+#define OMAP_ABE_C_DL1_COEFS_SIZE 0x64
+#define OMAP_ABE_C_SRC_3_LP_COEFS_ADDR 0x120C
+#define OMAP_ABE_C_SRC_3_LP_COEFS_SIZE 0x34
+#define OMAP_ABE_C_SRC_3_LP_GAIN_COEFS_ADDR 0x1240
+#define OMAP_ABE_C_SRC_3_LP_GAIN_COEFS_SIZE 0x34
+#define OMAP_ABE_C_SRC_3_HP_COEFS_ADDR 0x1274
+#define OMAP_ABE_C_SRC_3_HP_COEFS_SIZE 0x14
+#define OMAP_ABE_C_SRC_6_LP_COEFS_ADDR 0x1288
+#define OMAP_ABE_C_SRC_6_LP_COEFS_SIZE 0x34
+#define OMAP_ABE_C_SRC_6_LP_GAIN_COEFS_ADDR 0x12BC
+#define OMAP_ABE_C_SRC_6_LP_GAIN_COEFS_SIZE 0x34
+#define OMAP_ABE_C_SRC_6_HP_COEFS_ADDR 0x12F0
+#define OMAP_ABE_C_SRC_6_HP_COEFS_SIZE 0x1C
+#define OMAP_ABE_C_ALPHACURRENT_ECHO_REF_ADDR 0x130C
+#define OMAP_ABE_C_ALPHACURRENT_ECHO_REF_SIZE 0x4
+#define OMAP_ABE_C_BETACURRENT_ECHO_REF_ADDR 0x1310
+#define OMAP_ABE_C_BETACURRENT_ECHO_REF_SIZE 0x4
+#define OMAP_ABE_C_VIBRA2_CONSTS_ADDR 0x1314
+#define OMAP_ABE_C_VIBRA2_CONSTS_SIZE 0x10
+#define OMAP_ABE_C_VIBRA1_COEFFS_ADDR 0x1324
+#define OMAP_ABE_C_VIBRA1_COEFFS_SIZE 0x2C
+#define OMAP_ABE_C_48_96_LP_COEFS_ADDR 0x1350
+#define OMAP_ABE_C_48_96_LP_COEFS_SIZE 0x3C
+#define OMAP_ABE_C_96_48_AMIC_COEFS_ADDR 0x138C
+#define OMAP_ABE_C_96_48_AMIC_COEFS_SIZE 0x4C
+#define OMAP_ABE_C_96_48_DMIC_COEFS_ADDR 0x13D8
+#define OMAP_ABE_C_96_48_DMIC_COEFS_SIZE 0x4C
+#define OMAP_ABE_C_INPUT_SCALE_ADDR 0x1424
+#define OMAP_ABE_C_INPUT_SCALE_SIZE 0x4
+#define OMAP_ABE_C_OUTPUT_SCALE_ADDR 0x1428
+#define OMAP_ABE_C_OUTPUT_SCALE_SIZE 0x4
+#define OMAP_ABE_C_MUTE_SCALING_ADDR 0x142C
+#define OMAP_ABE_C_MUTE_SCALING_SIZE 0x4
+#define OMAP_ABE_C_GAINS_0DB_ADDR 0x1430
+#define OMAP_ABE_C_GAINS_0DB_SIZE 0x8
+#define OMAP_ABE_C_ALPHACURRENT_BT_DL_ADDR 0x1438
+#define OMAP_ABE_C_ALPHACURRENT_BT_DL_SIZE 0x4
+#define OMAP_ABE_C_BETACURRENT_BT_DL_ADDR 0x143C
+#define OMAP_ABE_C_BETACURRENT_BT_DL_SIZE 0x4
+#define OMAP_ABE_C_ALPHACURRENT_BT_UL_ADDR 0x1440
+#define OMAP_ABE_C_ALPHACURRENT_BT_UL_SIZE 0x4
+#define OMAP_ABE_C_BETACURRENT_BT_UL_ADDR 0x1444
+#define OMAP_ABE_C_BETACURRENT_BT_UL_SIZE 0x4
+#define OMAP_ABE_C_SRC_FIR6_LP_GAIN_COEFS_ADDR 0x1448
+#define OMAP_ABE_C_SRC_FIR6_LP_GAIN_COEFS_SIZE 0x2A0
+#define OMAP_ABE_C_SRC_44P1_COEFS_ADDR 0x16E8
+#define OMAP_ABE_C_SRC_44P1_COEFS_SIZE 0x480
+#define OMAP_ABE_C_SRC_MM_DL_44P1_STEP_ADDR 0x1B68
+#define OMAP_ABE_C_SRC_MM_DL_44P1_STEP_SIZE 0x8
+#define OMAP_ABE_C_SRC_TONES_44P1_STEP_ADDR 0x1B70
+#define OMAP_ABE_C_SRC_TONES_44P1_STEP_SIZE 0x8
+#define OMAP_ABE_C_SRC_44P1_MULFAC2_ADDR 0x1B78
+#define OMAP_ABE_C_SRC_44P1_MULFAC2_SIZE 0x8
diff --git a/sound/soc/omap/abe/abe_core.c b/sound/soc/omap/abe/abe_core.c
index da24b7a..cdfbcea 100644
--- a/sound/soc/omap/abe/abe_core.c
+++ b/sound/soc/omap/abe/abe_core.c
@@ -68,6 +68,7 @@
#include "abe_aess.h"
#include "abe_port.h"
#include "abe_mem.h"
+#include "abe_taskid.h"
#define OMAP_ABE_IRQ_FIFO_MASK ((OMAP_ABE_D_MCUIRQFIFO_SIZE >> 2) - 1)
@@ -475,8 +476,9 @@ int omap_abe_set_opp_processing(struct omap_abe *abe, u32 opp)
/* Write Multiframe inside DMEM */
omap_abe_mem_write(abe, OMAP_ABE_DMEM,
OMAP_ABE_D_MAXTASKBYTESINSLOT_ADDR, &dOppMode32, sizeof(u32));
+
sio_desc_address = OMAP_ABE_D_IODESCR_ADDR + (OMAP_ABE_MM_EXT_IN_PORT *
- sizeof(struct ABE_SIODescriptor));
+ sizeof(struct ABE_SIODescriptor));
omap_abe_mem_read(abe, OMAP_ABE_DMEM, sio_desc_address,
(u32 *) &sio_desc, sizeof(sio_desc));
if (dOppMode32 == DOPPMODE32_OPP100) {
@@ -484,48 +486,79 @@ int omap_abe_set_opp_processing(struct omap_abe *abe, u32 opp)
sio_desc.smem_addr1 = smem_mm_ext_in_opp100;
/* Init MM_EXT_IN ASRC and enable its adaptation */
abe_init_asrc_mm_ext_in(250);
- } else {
+ } else
/* at OPP 50 or without ASRC */
sio_desc.smem_addr1 = smem_mm_ext_in_opp50;
- }
omap_abe_mem_write(abe, OMAP_ABE_DMEM, sio_desc_address,
- (u32 *) &sio_desc, sizeof(sio_desc));
+ (u32 *) &sio_desc, sizeof(sio_desc));
sio_desc_address = OMAP_ABE_D_IODESCR_ADDR + (OMAP_ABE_BT_VX_UL_PORT *
- sizeof(struct ABE_SIODescriptor));
+ sizeof(struct ABE_SIODescriptor));
omap_abe_mem_read(abe, OMAP_ABE_DMEM, sio_desc_address,
(u32 *) &sio_desc, sizeof(sio_desc));
- if (dOppMode32 == DOPPMODE32_OPP100) {
- /* ASRC input buffer, size 40 */
- sio_desc.smem_addr1 = smem_bt_vx_ul_opp100;
- /* Init MM_EXT_IN ASRC and enable its adaptation */
- abe_init_asrc_bt_ul(250);
+
+ if (abe_port[OMAP_ABE_BT_VX_UL_PORT].format.f == 8000) {
+ if (dOppMode32 == DOPPMODE32_OPP100)
+ /* ASRC input buffer, size 40 */
+ sio_desc.smem_addr1 = smem_bt_vx_ul_opp100;
+ else
+ /* at OPP 50 without ASRC */
+ sio_desc.smem_addr1 = BT_UL_8k_labelID;
} else {
- /* at OPP 50 or without ASRC */
- sio_desc.smem_addr1 = smem_bt_vx_ul_opp50;
+ if (dOppMode32 == DOPPMODE32_OPP100)
+ /* ASRC input buffer, size 40 */
+ sio_desc.smem_addr1 = smem_bt_vx_ul_opp100;
+ else
+ /* at OPP 50 without ASRC */
+ sio_desc.smem_addr1 = BT_UL_16k_labelID;
}
omap_abe_mem_write(abe, OMAP_ABE_DMEM, sio_desc_address,
(u32 *) &sio_desc, sizeof(sio_desc));
sio_desc_address = OMAP_ABE_D_IODESCR_ADDR + (OMAP_ABE_BT_VX_DL_PORT *
- sizeof(struct ABE_SIODescriptor));
+ sizeof(struct ABE_SIODescriptor));
omap_abe_mem_read(abe, OMAP_ABE_DMEM, sio_desc_address,
- (u32 *) &sio_desc, sizeof(sio_desc));
- if (dOppMode32 == DOPPMODE32_OPP100) {
- /* ASRC input buffer, size 40 */
- sio_desc.smem_addr1 = smem_bt_vx_dl_opp100;
- /* Init MM_EXT_IN ASRC and enable its adaptation */
- abe_init_asrc_bt_dl(250);
+ (u32 *) &sio_desc, sizeof(sio_desc));
+
+#define ABE_TASK_ID(ID) (OMAP_ABE_D_TASKSLIST_ADDR + sizeof(ABE_STask)*(ID))
+#define TASK_BT_DL_48_8_SLT 14
+#define TASK_BT_DL_48_8_IDX 4
+ if (abe_port[OMAP_ABE_BT_VX_DL_PORT].format.f == 8000) {
+ if (dOppMode32 == DOPPMODE32_OPP100) {
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8_OPP100);
+ sio_desc.smem_addr1 = BT_DL_8k_opp100_labelID;
+ } else {
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8);
+ sio_desc.smem_addr1 = BT_DL_8k_labelID;
+ }
} else {
- /* at OPP 50 or without ASRC */
- sio_desc.smem_addr1 = smem_bt_vx_dl_opp50;
+ if (dOppMode32 == DOPPMODE32_OPP100) {
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_16_OPP100);
+ sio_desc.smem_addr1 = BT_DL_16k_opp100_labelID;
+ } else {
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_16);
+ sio_desc.smem_addr1 = BT_DL_16k_labelID;
+ }
}
+ omap_abe_mem_write(abe, OMAP_ABE_DMEM, OMAP_ABE_D_MULTIFRAME_ADDR,
+ (u32 *) abe->MultiFrame, sizeof(abe->MultiFrame));
+
omap_abe_mem_write(abe, OMAP_ABE_DMEM, sio_desc_address,
(u32 *) &sio_desc, sizeof(sio_desc));
+ if (dOppMode32 == DOPPMODE32_OPP100) {
+ /* Init BT_VX_UL ASRC and enable its adaptation */
+ abe_init_asrc_bt_ul(250);
+ /* Init BT_VX_DL ASRC and enable its adaptation */
+ abe_init_asrc_bt_dl(-250);
+ }
return 0;
}
diff --git a/sound/soc/omap/abe/abe_def.h b/sound/soc/omap/abe/abe_def.h
index 2cce906..ac1d263 100644
--- a/sound/soc/omap/abe/abe_def.h
+++ b/sound/soc/omap/abe/abe_def.h
@@ -243,7 +243,7 @@
#define MUTE_GAIN -12000L
#define GAIN_TOOLOW -13000L
#define GAIN_MUTE MUTE_GAIN
-#define RAMP_MINLENGTH 3L
+#define RAMP_MINLENGTH 0L
/* ramp_t is in milli- seconds */
#define RAMP_0MS 0L
#define RAMP_1MS 1L
diff --git a/sound/soc/omap/abe/abe_define.h b/sound/soc/omap/abe/abe_define.h
index 1dfa0a3..41b700a 100644
--- a/sound/soc/omap/abe/abe_define.h
+++ b/sound/soc/omap/abe/abe_define.h
@@ -1,67 +1,66 @@
/*
-
- This file is provided under a dual BSD/GPLv2 license. When using or
- redistributing this file, you may do so under either license.
-
- GPL LICENSE SUMMARY
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution
- in the file called LICENSE.GPL.
-
- BSD LICENSE
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Texas Instruments Incorporated nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
+ *
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
#ifndef _ABE_DEFINE_H_
#define _ABE_DEFINE_H_
#define ATC_DESCRIPTOR_NUMBER 64
#define PROCESSING_SLOTS 25
-#define TASK_POOL_LENGTH 128
+#define TASK_POOL_LENGTH 136
#define MCU_IRQ 0x24
#define MCU_IRQ_SHIFT2 0x90
#define DMA_REQ_SHIFT2 0x210
@@ -89,11 +88,25 @@
#define VIBRA1_IIR_MEMSIZE 11
#define SAMP_LOOP_96K 24
#define SAMP_LOOP_48K 12
+#define SAMP_LOOP_48KM1 11
+#define SAMP_LOOP_48KM2 10
#define SAMP_LOOP_16K 4
#define SAMP_LOOP_8K 2
-#define INPUT_SCALE_SHIFTM2 5056
-#define OUTPUT_SCALE_SHIFTM2 5060
-#define MUTE_SCALING 5064
+#define INPUT_SCALE_SHIFTM2 5156
+#define SATURATION 8420
+#define SATURATION_7FFF 8416
+#define OUTPUT_SCALE_SHIFTM2 5160
+#define NTAPS_SRC_44P1 24
+#define NTAPS_SRC_44P1_M4 96
+#define NTAPS_SRC_44P1_THR 48
+#define NTAPS_SRC_44P1_THRM4 192
+#define DRIFT_COUNTER_44P1M1 443
+#define NB_OF_PHASES_SRC44P1 12
+#define NB_OF_PHASES_SRC44P1M1 11
+#define SRC44P1_BUFFER_SIZE 96
+#define SRC44P1_BUFFER_SIZE_M4 384
+#define SRC44P1_INIT_RPTR 60
+#define MUTE_SCALING 5164
#define ABE_PMEM 1
#define ABE_CMEM 2
#define ABE_SMEM 3
@@ -101,4 +114,7 @@
#define ABE_ATC 5
#define ASRC_BT_UL_FIR_L 19
#define ASRC_BT_DL_FIR_L 19
+#define SRC44P1_COEF_ADDR 1466
+#define NTAPS_P_SRC_44P1_M4 144
+
#endif /* _ABE_DEFINE_H_ */
diff --git a/sound/soc/omap/abe/abe_dm_addr.h b/sound/soc/omap/abe/abe_dm_addr.h
index 5d10e11..a9c67a1 100644
--- a/sound/soc/omap/abe/abe_dm_addr.h
+++ b/sound/soc/omap/abe/abe_dm_addr.h
@@ -1,360 +1,229 @@
/*
-
- This file is provided under a dual BSD/GPLv2 license. When using or
- redistributing this file, you may do so under either license.
-
- GPL LICENSE SUMMARY
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution
- in the file called LICENSE.GPL.
-
- BSD LICENSE
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Texas Instruments Incorporated nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#define OMAP_ABE_D_ATCDESCRIPTORS_ADDR 0x0
-#define OMAP_ABE_D_ATCDESCRIPTORS_SIZE 0x200
-
-#define OMAP_ABE_STACK_ADDR 0x200
-#define OMAP_ABE_STACK_SIZE 0x70
-
-#define OMAP_ABE_D_VERSION_ADDR 0x270
-#define OMAP_ABE_D_VERSION_SIZE 0x4
-
-#define OMAP_ABE_D_BT_DL_FIFO_ADDR 0x400
-#define OMAP_ABE_D_BT_DL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_BT_UL_FIFO_ADDR 0x600
-#define OMAP_ABE_D_BT_UL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_MM_EXT_OUT_FIFO_ADDR 0x800
-#define OMAP_ABE_D_MM_EXT_OUT_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_MM_EXT_IN_FIFO_ADDR 0xA00
-#define OMAP_ABE_D_MM_EXT_IN_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_MM_UL2_FIFO_ADDR 0xC00
-#define OMAP_ABE_D_MM_UL2_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_VX_UL_FIFO_ADDR 0xE00
-#define OMAP_ABE_D_VX_UL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_VX_DL_FIFO_ADDR 0x1000
-#define OMAP_ABE_D_VX_DL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_DMIC_UL_FIFO_ADDR 0x1200
-#define OMAP_ABE_D_DMIC_UL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_MM_UL_FIFO_ADDR 0x1400
-#define OMAP_ABE_D_MM_UL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_MM_DL_FIFO_ADDR 0x1600
-#define OMAP_ABE_D_MM_DL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_TONES_DL_FIFO_ADDR 0x1800
-#define OMAP_ABE_D_TONES_DL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_VIB_DL_FIFO_ADDR 0x1A00
-#define OMAP_ABE_D_VIB_DL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_MCPDM_DL_FIFO_ADDR 0x1C00
-#define OMAP_ABE_D_MCPDM_DL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_MCPDM_UL_FIFO_ADDR 0x1E00
-#define OMAP_ABE_D_MCPDM_UL_FIFO_SIZE 0x1E0
-
-#define OMAP_ABE_D_DEBUG_FIFO_ADDR 0x1FE0
-#define OMAP_ABE_D_DEBUG_FIFO_SIZE 0x60
-
-#define OMAP_ABE_D_DEBUG_FIFO_HAL_ADDR 0x2040
-#define OMAP_ABE_D_DEBUG_FIFO_HAL_SIZE 0x20
-
-#define OMAP_ABE_D_IODESCR_ADDR 0x2060
-#define OMAP_ABE_D_IODESCR_SIZE 0x280
-
-#define OMAP_ABE_D_ZERO_ADDR 0x22E0
-#define OMAP_ABE_D_ZERO_SIZE 0x4
-
-#define OMAP_ABE_DBG_TRACE1_ADDR 0x22E4
-#define OMAP_ABE_DBG_TRACE1_SIZE 0x1
-
-#define OMAP_ABE_DBG_TRACE2_ADDR 0x22E5
-#define OMAP_ABE_DBG_TRACE2_SIZE 0x1
-
-#define OMAP_ABE_DBG_TRACE3_ADDR 0x22E6
-#define OMAP_ABE_DBG_TRACE3_SIZE 0x1
-
-#define OMAP_ABE_D_MULTIFRAME_ADDR 0x22E8
-#define OMAP_ABE_D_MULTIFRAME_SIZE 0x190
-
-#define OMAP_ABE_D_TASKSLIST_ADDR 0x2478
-#define OMAP_ABE_D_TASKSLIST_SIZE 0x800
-
-#define OMAP_ABE_D_IDLETASK_ADDR 0x2C78
-#define OMAP_ABE_D_IDLETASK_SIZE 0x2
-
-#define OMAP_ABE_D_TYPELENGTHCHECK_ADDR 0x2C7A
-#define OMAP_ABE_D_TYPELENGTHCHECK_SIZE 0x2
-
-#define OMAP_ABE_D_MAXTASKBYTESINSLOT_ADDR 0x2C7C
-#define OMAP_ABE_D_MAXTASKBYTESINSLOT_SIZE 0x2
-
-#define OMAP_ABE_D_REWINDTASKBYTES_ADDR 0x2C7E
-#define OMAP_ABE_D_REWINDTASKBYTES_SIZE 0x2
-
-#define OMAP_ABE_D_PCURRENTTASK_ADDR 0x2C80
-#define OMAP_ABE_D_PCURRENTTASK_SIZE 0x2
-
-#define OMAP_ABE_D_PFASTLOOPBACK_ADDR 0x2C82
-#define OMAP_ABE_D_PFASTLOOPBACK_SIZE 0x2
-
-#define OMAP_ABE_D_PNEXTFASTLOOPBACK_ADDR 0x2C84
-#define OMAP_ABE_D_PNEXTFASTLOOPBACK_SIZE 0x4
-
-#define OMAP_ABE_D_PPCURRENTTASK_ADDR 0x2C88
-#define OMAP_ABE_D_PPCURRENTTASK_SIZE 0x2
-
-#define OMAP_ABE_D_SLOTCOUNTER_ADDR 0x2C8C
-#define OMAP_ABE_D_SLOTCOUNTER_SIZE 0x2
-
-#define OMAP_ABE_D_LOOPCOUNTER_ADDR 0x2C90
-#define OMAP_ABE_D_LOOPCOUNTER_SIZE 0x4
-
-#define OMAP_ABE_D_REWINDFLAG_ADDR 0x2C94
-#define OMAP_ABE_D_REWINDFLAG_SIZE 0x2
-
-#define OMAP_ABE_D_SLOT23_CTRL_ADDR 0x2C98
-#define OMAP_ABE_D_SLOT23_CTRL_SIZE 0x4
-
-#define OMAP_ABE_D_MCUIRQFIFO_ADDR 0x2C9C
-#define OMAP_ABE_D_MCUIRQFIFO_SIZE 0x40
-
-#define OMAP_ABE_D_PINGPONGDESC_ADDR 0x2CDC
-#define OMAP_ABE_D_PINGPONGDESC_SIZE 0x18
-
-#define OMAP_ABE_D_PP_MCU_IRQ_ADDR 0x2CF4
-#define OMAP_ABE_D_PP_MCU_IRQ_SIZE 0x2
-
-#define OMAP_ABE_D_CTRLPORTFIFO_ADDR 0x2D00
-#define OMAP_ABE_D_CTRLPORTFIFO_SIZE 0x10
-
-#define OMAP_ABE_D_IDLE_STATE_ADDR 0x2D10
-#define OMAP_ABE_D_IDLE_STATE_SIZE 0x4
-
-#define OMAP_ABE_D_STOP_REQUEST_ADDR 0x2D14
-#define OMAP_ABE_D_STOP_REQUEST_SIZE 0x4
-
-#define OMAP_ABE_D_REF0_ADDR 0x2D18
-#define OMAP_ABE_D_REF0_SIZE 0x2
-
-#define OMAP_ABE_D_DEBUGREGISTER_ADDR 0x2D1C
-#define OMAP_ABE_D_DEBUGREGISTER_SIZE 0x8C
-
-#define OMAP_ABE_D_GCOUNT_ADDR 0x2DA8
-#define OMAP_ABE_D_GCOUNT_SIZE 0x2
-
-#define OMAP_ABE_D_DCCOUNTER_ADDR 0x2DAC
-#define OMAP_ABE_D_DCCOUNTER_SIZE 0x4
-
-#define OMAP_ABE_D_DCSUM_ADDR 0x2DB0
-#define OMAP_ABE_D_DCSUM_SIZE 0x8
-
-#define OMAP_ABE_D_FASTCOUNTER_ADDR 0x2DB8
-#define OMAP_ABE_D_FASTCOUNTER_SIZE 0x4
-
-#define OMAP_ABE_D_SLOWCOUNTER_ADDR 0x2DBC
-#define OMAP_ABE_D_SLOWCOUNTER_SIZE 0x4
-
-#define OMAP_ABE_D_AUPLINKROUTING_ADDR 0x2DC0
-#define OMAP_ABE_D_AUPLINKROUTING_SIZE 0x20
-
-#define OMAP_ABE_D_VIRTAUDIOLOOP_ADDR 0x2DE0
-#define OMAP_ABE_D_VIRTAUDIOLOOP_SIZE 0x4
-
-#define OMAP_ABE_D_ASRCVARS_DL_VX_ADDR 0x2DE4
-#define OMAP_ABE_D_ASRCVARS_DL_VX_SIZE 0x20
-
-#define OMAP_ABE_D_ASRCVARS_UL_VX_ADDR 0x2E04
-#define OMAP_ABE_D_ASRCVARS_UL_VX_SIZE 0x20
-
-#define OMAP_ABE_D_COEFADDRESSES_VX_ADDR 0x2E24
-#define OMAP_ABE_D_COEFADDRESSES_VX_SIZE 0x20
-
-#define OMAP_ABE_D_ASRCVARS_MM_EXT_IN_ADDR 0x2E44
-#define OMAP_ABE_D_ASRCVARS_MM_EXT_IN_SIZE 0x20
-
-#define OMAP_ABE_D_COEFADDRESSES_MM_ADDR 0x2E64
-#define OMAP_ABE_D_COEFADDRESSES_MM_SIZE 0x20
-
-#define OMAP_ABE_D_APS_DL1_M_THRESHOLDS_ADDR 0x2E84
-#define OMAP_ABE_D_APS_DL1_M_THRESHOLDS_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL1_M_IRQ_ADDR 0x2E8C
-#define OMAP_ABE_D_APS_DL1_M_IRQ_SIZE 0x2
-
-#define OMAP_ABE_D_APS_DL1_C_IRQ_ADDR 0x2E8E
-#define OMAP_ABE_D_APS_DL1_C_IRQ_SIZE 0x2
-
-#define OMAP_ABE_D_TRACEBUFADR_ADDR 0x2E90
-#define OMAP_ABE_D_TRACEBUFADR_SIZE 0x2
-
-#define OMAP_ABE_D_TRACEBUFOFFSET_ADDR 0x2E92
-#define OMAP_ABE_D_TRACEBUFOFFSET_SIZE 0x2
-
-#define OMAP_ABE_D_TRACEBUFLENGTH_ADDR 0x2E94
-#define OMAP_ABE_D_TRACEBUFLENGTH_SIZE 0x2
-
-#define OMAP_ABE_D_ASRCVARS_ECHO_REF_ADDR 0x2E98
-#define OMAP_ABE_D_ASRCVARS_ECHO_REF_SIZE 0x20
-
-#define OMAP_ABE_D_PEMPTY_ADDR 0x2EB8
-#define OMAP_ABE_D_PEMPTY_SIZE 0x4
-
-#define OMAP_ABE_D_APS_DL2_L_M_IRQ_ADDR 0x2EBC
-#define OMAP_ABE_D_APS_DL2_L_M_IRQ_SIZE 0x2
-
-#define OMAP_ABE_D_APS_DL2_L_C_IRQ_ADDR 0x2EBE
-#define OMAP_ABE_D_APS_DL2_L_C_IRQ_SIZE 0x2
-
-#define OMAP_ABE_D_APS_DL2_R_M_IRQ_ADDR 0x2EC0
-#define OMAP_ABE_D_APS_DL2_R_M_IRQ_SIZE 0x2
-
-#define OMAP_ABE_D_APS_DL2_R_C_IRQ_ADDR 0x2EC2
-#define OMAP_ABE_D_APS_DL2_R_C_IRQ_SIZE 0x2
-
-#define OMAP_ABE_D_APS_DL1_C_THRESHOLDS_ADDR 0x2EC4
-#define OMAP_ABE_D_APS_DL1_C_THRESHOLDS_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL2_L_M_THRESHOLDS_ADDR 0x2ECC
-#define OMAP_ABE_D_APS_DL2_L_M_THRESHOLDS_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL2_L_C_THRESHOLDS_ADDR 0x2ED4
-#define OMAP_ABE_D_APS_DL2_L_C_THRESHOLDS_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL2_R_M_THRESHOLDS_ADDR 0x2EDC
-#define OMAP_ABE_D_APS_DL2_R_M_THRESHOLDS_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL2_R_C_THRESHOLDS_ADDR 0x2EE4
-#define OMAP_ABE_D_APS_DL2_R_C_THRESHOLDS_SIZE 0x8
-
-#define OMAP_ABE_D_ECHO_REF_48_16_WRAP_ADDR 0x2EEC
-#define OMAP_ABE_D_ECHO_REF_48_16_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_ECHO_REF_48_8_WRAP_ADDR 0x2EF4
-#define OMAP_ABE_D_ECHO_REF_48_8_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_BT_UL_16_48_WRAP_ADDR 0x2EFC
-#define OMAP_ABE_D_BT_UL_16_48_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_BT_UL_8_48_WRAP_ADDR 0x2F04
-#define OMAP_ABE_D_BT_UL_8_48_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_BT_DL_48_16_WRAP_ADDR 0x2F0C
-#define OMAP_ABE_D_BT_DL_48_16_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_BT_DL_48_8_WRAP_ADDR 0x2F14
-#define OMAP_ABE_D_BT_DL_48_8_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_VX_DL_16_48_WRAP_ADDR 0x2F1C
-#define OMAP_ABE_D_VX_DL_16_48_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_VX_DL_8_48_WRAP_ADDR 0x2F24
-#define OMAP_ABE_D_VX_DL_8_48_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_VX_UL_48_16_WRAP_ADDR 0x2F2C
-#define OMAP_ABE_D_VX_UL_48_16_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_VX_UL_48_8_WRAP_ADDR 0x2F34
-#define OMAP_ABE_D_VX_UL_48_8_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL1_IRQS_WRAP_ADDR 0x2F3C
-#define OMAP_ABE_D_APS_DL1_IRQS_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL2_L_IRQS_WRAP_ADDR 0x2F44
-#define OMAP_ABE_D_APS_DL2_L_IRQS_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_APS_DL2_R_IRQS_WRAP_ADDR 0x2F4C
-#define OMAP_ABE_D_APS_DL2_R_IRQS_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_NEXTMULTIFRAME_ADDR 0x2F54
-#define OMAP_ABE_D_NEXTMULTIFRAME_SIZE 0x8
-
-#define OMAP_ABE_D_HW_TEST_ADDR 0x2F5C
-#define OMAP_ABE_D_HW_TEST_SIZE 0x8
-
-#define OMAP_ABE_D_TRACEBUFADR_HAL_ADDR 0x2F64
-#define OMAP_ABE_D_TRACEBUFADR_HAL_SIZE 0x4
-
-#define OMAP_ABE_D_DEBUG_HAL_TASK_ADDR 0x3000
-#define OMAP_ABE_D_DEBUG_HAL_TASK_SIZE 0x800
-
-#define OMAP_ABE_D_DEBUG_FW_TASK_ADDR 0x3800
-#define OMAP_ABE_D_DEBUG_FW_TASK_SIZE 0x100
-
-#define OMAP_ABE_D_FWMEMINIT_ADDR 0x3900
-#define OMAP_ABE_D_FWMEMINIT_SIZE 0x3C0
-
-#define OMAP_ABE_D_FWMEMINITDESCR_ADDR 0x3CC0
-#define OMAP_ABE_D_FWMEMINITDESCR_SIZE 0x10
-
-#define OMAP_ABE_D_ASRCVARS_BT_UL_ADDR 0x3CD0
-#define OMAP_ABE_D_ASRCVARS_BT_UL_SIZE 0x20
-
-#define OMAP_ABE_D_ASRCVARS_BT_DL_ADDR 0x3CF0
-#define OMAP_ABE_D_ASRCVARS_BT_DL_SIZE 0x20
-
-#define OMAP_ABE_D_BT_DL_48_8_OPP100_WRAP_ADDR 0x3D10
-#define OMAP_ABE_D_BT_DL_48_8_OPP100_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_BT_DL_48_16_OPP100_WRAP_ADDR 0x3D18
-#define OMAP_ABE_D_BT_DL_48_16_OPP100_WRAP_SIZE 0x8
-
-#define OMAP_ABE_D_PING_ADDR 0x4000
-#define OMAP_ABE_D_PING_SIZE 0x6000
-
-#define OMAP_ABE_D_PONG_ADDR 0xA000
-#define OMAP_ABE_D_PONG_SIZE 0x6000
+ *
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#define OMAP_ABE_D_ATCDESCRIPTORS_ADDR 0x0
+#define OMAP_ABE_D_ATCDESCRIPTORS_SIZE 0x200
+#define OMAP_ABE_STACK_ADDR 0x200
+#define OMAP_ABE_STACK_SIZE 0x70
+#define OMAP_ABE_D_VERSION_ADDR 0x270
+#define OMAP_ABE_D_VERSION_SIZE 0x4
+#define OMAP_ABE_D_IODESCR_ADDR 0x274
+#define OMAP_ABE_D_IODESCR_SIZE 0x280
+#define OMAP_ABE_D_ZERO_ADDR 0x4F4
+#define OMAP_ABE_D_ZERO_SIZE 0x4
+#define OMAP_ABE_DBG_TRACE1_ADDR 0x4F8
+#define OMAP_ABE_DBG_TRACE1_SIZE 0x1
+#define OMAP_ABE_DBG_TRACE2_ADDR 0x4F9
+#define OMAP_ABE_DBG_TRACE2_SIZE 0x1
+#define OMAP_ABE_DBG_TRACE3_ADDR 0x4FA
+#define OMAP_ABE_DBG_TRACE3_SIZE 0x1
+#define OMAP_ABE_D_MULTIFRAME_ADDR 0x4FC
+#define OMAP_ABE_D_MULTIFRAME_SIZE 0x190
+#define OMAP_ABE_D_IDLETASK_ADDR 0x68C
+#define OMAP_ABE_D_IDLETASK_SIZE 0x2
+#define OMAP_ABE_D_TYPELENGTHCHECK_ADDR 0x68E
+#define OMAP_ABE_D_TYPELENGTHCHECK_SIZE 0x2
+#define OMAP_ABE_D_MAXTASKBYTESINSLOT_ADDR 0x690
+#define OMAP_ABE_D_MAXTASKBYTESINSLOT_SIZE 0x2
+#define OMAP_ABE_D_REWINDTASKBYTES_ADDR 0x692
+#define OMAP_ABE_D_REWINDTASKBYTES_SIZE 0x2
+#define OMAP_ABE_D_PCURRENTTASK_ADDR 0x694
+#define OMAP_ABE_D_PCURRENTTASK_SIZE 0x2
+#define OMAP_ABE_D_PFASTLOOPBACK_ADDR 0x696
+#define OMAP_ABE_D_PFASTLOOPBACK_SIZE 0x2
+#define OMAP_ABE_D_PNEXTFASTLOOPBACK_ADDR 0x698
+#define OMAP_ABE_D_PNEXTFASTLOOPBACK_SIZE 0x4
+#define OMAP_ABE_D_PPCURRENTTASK_ADDR 0x69C
+#define OMAP_ABE_D_PPCURRENTTASK_SIZE 0x2
+#define OMAP_ABE_D_SLOTCOUNTER_ADDR 0x6A0
+#define OMAP_ABE_D_SLOTCOUNTER_SIZE 0x2
+#define OMAP_ABE_D_LOOPCOUNTER_ADDR 0x6A4
+#define OMAP_ABE_D_LOOPCOUNTER_SIZE 0x4
+#define OMAP_ABE_D_REWINDFLAG_ADDR 0x6A8
+#define OMAP_ABE_D_REWINDFLAG_SIZE 0x2
+#define OMAP_ABE_D_SLOT23_CTRL_ADDR 0x6AC
+#define OMAP_ABE_D_SLOT23_CTRL_SIZE 0x4
+#define OMAP_ABE_D_MCUIRQFIFO_ADDR 0x6B0
+#define OMAP_ABE_D_MCUIRQFIFO_SIZE 0x40
+#define OMAP_ABE_D_PINGPONGDESC_ADDR 0x6F0
+#define OMAP_ABE_D_PINGPONGDESC_SIZE 0x18
+#define OMAP_ABE_D_PP_MCU_IRQ_ADDR 0x708
+#define OMAP_ABE_D_PP_MCU_IRQ_SIZE 0x2
+#define OMAP_ABE_D_SRC44P1_MMDL_STRUCT_ADDR 0x70C
+#define OMAP_ABE_D_SRC44P1_MMDL_STRUCT_SIZE 0x12
+#define OMAP_ABE_D_SRC44P1_TONES_STRUCT_ADDR 0x720
+#define OMAP_ABE_D_SRC44P1_TONES_STRUCT_SIZE 0x12
+#define OMAP_ABE_D_CTRLPORTFIFO_ADDR 0x740
+#define OMAP_ABE_D_CTRLPORTFIFO_SIZE 0x10
+#define OMAP_ABE_D_IDLE_STATE_ADDR 0x750
+#define OMAP_ABE_D_IDLE_STATE_SIZE 0x4
+#define OMAP_ABE_D_STOP_REQUEST_ADDR 0x754
+#define OMAP_ABE_D_STOP_REQUEST_SIZE 0x4
+#define OMAP_ABE_D_REF0_ADDR 0x758
+#define OMAP_ABE_D_REF0_SIZE 0x2
+#define OMAP_ABE_D_DEBUGREGISTER_ADDR 0x75C
+#define OMAP_ABE_D_DEBUGREGISTER_SIZE 0x8C
+#define OMAP_ABE_D_GCOUNT_ADDR 0x7E8
+#define OMAP_ABE_D_GCOUNT_SIZE 0x2
+#define OMAP_ABE_D_FASTCOUNTER_ADDR 0x7EC
+#define OMAP_ABE_D_FASTCOUNTER_SIZE 0x4
+#define OMAP_ABE_D_SLOWCOUNTER_ADDR 0x7F0
+#define OMAP_ABE_D_SLOWCOUNTER_SIZE 0x4
+#define OMAP_ABE_D_AUPLINKROUTING_ADDR 0x7F4
+#define OMAP_ABE_D_AUPLINKROUTING_SIZE 0x20
+#define OMAP_ABE_D_VIRTAUDIOLOOP_ADDR 0x814
+#define OMAP_ABE_D_VIRTAUDIOLOOP_SIZE 0x4
+#define OMAP_ABE_D_ASRCVARS_DL_VX_ADDR 0x818
+#define OMAP_ABE_D_ASRCVARS_DL_VX_SIZE 0x20
+#define OMAP_ABE_D_ASRCVARS_UL_VX_ADDR 0x838
+#define OMAP_ABE_D_ASRCVARS_UL_VX_SIZE 0x20
+#define OMAP_ABE_D_COEFADDRESSES_VX_ADDR 0x858
+#define OMAP_ABE_D_COEFADDRESSES_VX_SIZE 0x20
+#define OMAP_ABE_D_ASRCVARS_MM_EXT_IN_ADDR 0x878
+#define OMAP_ABE_D_ASRCVARS_MM_EXT_IN_SIZE 0x20
+#define OMAP_ABE_D_COEFADDRESSES_MM_ADDR 0x898
+#define OMAP_ABE_D_COEFADDRESSES_MM_SIZE 0x20
+#define OMAP_ABE_D_TRACEBUFADR_ADDR 0x8B8
+#define OMAP_ABE_D_TRACEBUFADR_SIZE 0x2
+#define OMAP_ABE_D_TRACEBUFOFFSET_ADDR 0x8BA
+#define OMAP_ABE_D_TRACEBUFOFFSET_SIZE 0x2
+#define OMAP_ABE_D_TRACEBUFLENGTH_ADDR 0x8BC
+#define OMAP_ABE_D_TRACEBUFLENGTH_SIZE 0x2
+#define OMAP_ABE_D_PEMPTY_ADDR 0x8C0
+#define OMAP_ABE_D_PEMPTY_SIZE 0x54
+#define OMAP_ABE_D_ECHO_REF_48_16_WRAP_ADDR 0x914
+#define OMAP_ABE_D_ECHO_REF_48_16_WRAP_SIZE 0x8
+#define OMAP_ABE_D_ECHO_REF_48_8_WRAP_ADDR 0x91C
+#define OMAP_ABE_D_ECHO_REF_48_8_WRAP_SIZE 0x8
+#define OMAP_ABE_D_BT_UL_16_48_WRAP_ADDR 0x924
+#define OMAP_ABE_D_BT_UL_16_48_WRAP_SIZE 0x8
+#define OMAP_ABE_D_BT_UL_8_48_WRAP_ADDR 0x92C
+#define OMAP_ABE_D_BT_UL_8_48_WRAP_SIZE 0x8
+#define OMAP_ABE_D_BT_DL_48_16_WRAP_ADDR 0x934
+#define OMAP_ABE_D_BT_DL_48_16_WRAP_SIZE 0x8
+#define OMAP_ABE_D_BT_DL_48_8_WRAP_ADDR 0x93C
+#define OMAP_ABE_D_BT_DL_48_8_WRAP_SIZE 0x8
+#define OMAP_ABE_D_VX_DL_16_48_WRAP_ADDR 0x944
+#define OMAP_ABE_D_VX_DL_16_48_WRAP_SIZE 0x8
+#define OMAP_ABE_D_VX_DL_8_48_WRAP_ADDR 0x94C
+#define OMAP_ABE_D_VX_DL_8_48_WRAP_SIZE 0x8
+#define OMAP_ABE_D_VX_UL_48_16_WRAP_ADDR 0x954
+#define OMAP_ABE_D_VX_UL_48_16_WRAP_SIZE 0x8
+#define OMAP_ABE_D_VX_UL_48_8_WRAP_ADDR 0x95C
+#define OMAP_ABE_D_VX_UL_48_8_WRAP_SIZE 0x8
+#define OMAP_ABE_D_ASRCVARS_BT_UL_ADDR 0x964
+#define OMAP_ABE_D_ASRCVARS_BT_UL_SIZE 0x20
+#define OMAP_ABE_D_ASRCVARS_BT_DL_ADDR 0x984
+#define OMAP_ABE_D_ASRCVARS_BT_DL_SIZE 0x20
+#define OMAP_ABE_D_BT_DL_48_8_OPP100_WRAP_ADDR 0x9A4
+#define OMAP_ABE_D_BT_DL_48_8_OPP100_WRAP_SIZE 0x8
+#define OMAP_ABE_D_BT_DL_48_16_OPP100_WRAP_ADDR 0x9AC
+#define OMAP_ABE_D_BT_DL_48_16_OPP100_WRAP_SIZE 0x8
+#define OMAP_ABE_D_VX_DL_8_48_FIR_WRAP_ADDR 0x9B4
+#define OMAP_ABE_D_VX_DL_8_48_FIR_WRAP_SIZE 0x8
+#define OMAP_ABE_D_BT_UL_8_48_FIR_WRAP_ADDR 0x9BC
+#define OMAP_ABE_D_BT_UL_8_48_FIR_WRAP_SIZE 0x8
+#define OMAP_ABE_D_TASKSLIST_ADDR 0x9C4
+#define OMAP_ABE_D_TASKSLIST_SIZE 0x880
+#define OMAP_ABE_D_HW_TEST_ADDR 0x1244
+#define OMAP_ABE_D_HW_TEST_SIZE 0x28
+#define OMAP_ABE_D_TRACEBUFADR_HAL_ADDR 0x126C
+#define OMAP_ABE_D_TRACEBUFADR_HAL_SIZE 0x4
+#define OMAP_ABE_D_DEBUG_FW_TASK_ADDR 0x1400
+#define OMAP_ABE_D_DEBUG_FW_TASK_SIZE 0x100
+#define OMAP_ABE_D_DEBUG_FIFO_ADDR 0x1500
+#define OMAP_ABE_D_DEBUG_FIFO_SIZE 0x60
+#define OMAP_ABE_D_DEBUG_FIFO_HAL_ADDR 0x1560
+#define OMAP_ABE_D_DEBUG_FIFO_HAL_SIZE 0x20
+#define OMAP_ABE_D_FWMEMINIT_ADDR 0x1580
+#define OMAP_ABE_D_FWMEMINIT_SIZE 0x3C0
+#define OMAP_ABE_D_FWMEMINITDESCR_ADDR 0x1940
+#define OMAP_ABE_D_FWMEMINITDESCR_SIZE 0x10
+#define OMAP_ABE_D_BT_DL_FIFO_ADDR 0x1C00
+#define OMAP_ABE_D_BT_DL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_BT_UL_FIFO_ADDR 0x1E00
+#define OMAP_ABE_D_BT_UL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_MM_EXT_OUT_FIFO_ADDR 0x2000
+#define OMAP_ABE_D_MM_EXT_OUT_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_MM_EXT_IN_FIFO_ADDR 0x2200
+#define OMAP_ABE_D_MM_EXT_IN_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_MM_UL2_FIFO_ADDR 0x2400
+#define OMAP_ABE_D_MM_UL2_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_DMIC_UL_FIFO_ADDR 0x2600
+#define OMAP_ABE_D_DMIC_UL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_MM_UL_FIFO_ADDR 0x2800
+#define OMAP_ABE_D_MM_UL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_MM_DL_FIFO_ADDR 0x2A00
+#define OMAP_ABE_D_MM_DL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_TONES_DL_FIFO_ADDR 0x2C00
+#define OMAP_ABE_D_TONES_DL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_VIB_DL_FIFO_ADDR 0x2E00
+#define OMAP_ABE_D_VIB_DL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_DEBUG_HAL_TASK_ADDR 0x3000
+#define OMAP_ABE_D_DEBUG_HAL_TASK_SIZE 0x800
+#define OMAP_ABE_D_MCPDM_DL_FIFO_ADDR 0x3800
+#define OMAP_ABE_D_MCPDM_DL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_MCPDM_UL_FIFO_ADDR 0x3A00
+#define OMAP_ABE_D_MCPDM_UL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_VX_UL_FIFO_ADDR 0x3C00
+#define OMAP_ABE_D_VX_UL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_VX_DL_FIFO_ADDR 0x3E00
+#define OMAP_ABE_D_VX_DL_FIFO_SIZE 0x1E0
+#define OMAP_ABE_D_PING_ADDR 0x4000
+#define OMAP_ABE_D_PING_SIZE 0x6000
+#define OMAP_ABE_D_PONG_ADDR 0xA000
+#define OMAP_ABE_D_PONG_SIZE 0x6000
diff --git a/sound/soc/omap/abe/abe_firmware.c b/sound/soc/omap/abe/abe_firmware.c
index b6b3d4d..01e6e31 100644
--- a/sound/soc/omap/abe/abe_firmware.c
+++ b/sound/soc/omap/abe/abe_firmware.c
@@ -1,14 +1,813 @@
-0x00009110, /* VERSION NUMBER */
-0x00002000, /* PMEM LENGTH IN BYTES */
-0x000013E4, /* CMEM LENGTH IN BYTES */
-0x00010000, /* DMEM LENGTH IN BYTES */
-0x000044F0, /* SMEM LENGTH IN BYTES */
+0xabeabe00,
+0x00000000,
+0x000187fc,
+0x00000c60,
+0x00000001,
+0x00009460,
+0x00000006,
+0x20314c44,
+0x61757145,
+0x657a696c,
+0x00000072,
+0x00000000,
+0x00000004,
+0x00000019,
+0x74616c46,
+0x73657220,
+0x736e6f70,
+0x00000065,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x64302073,
+0x00000042,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426432,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x322d2073,
+0x00426430,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x20324c44,
+0x7466654c,
+0x75714520,
+0x7a696c61,
+0x00007265,
+0x00000004,
+0x00000019,
+0x74616c46,
+0x73657220,
+0x736e6f70,
+0x00000065,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x64302073,
+0x00000042,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426432,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x322d2073,
+0x00426430,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x20324c44,
+0x68676952,
+0x71452074,
+0x696c6175,
+0x0072657a,
+0x00000004,
+0x00000019,
+0x74616c46,
+0x73657220,
+0x736e6f70,
+0x00000065,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x64302073,
+0x00000042,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426432,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x322d2073,
+0x00426430,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x65646953,
+0x656e6f74,
+0x75714520,
+0x7a696c61,
+0x00007265,
+0x00000004,
+0x00000009,
+0x74616c46,
+0x73657220,
+0x736e6f70,
+0x00000065,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x64302073,
+0x00000042,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426432,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426438,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x43494d41,
+0x75714520,
+0x7a696c61,
+0x00007265,
+0x00000000,
+0x00000003,
+0x00000013,
+0x68676948,
+0x7361702d,
+0x64302073,
+0x00000042,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426432,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426438,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x43494d44,
+0x75714520,
+0x7a696c61,
+0x00007265,
+0x00000000,
+0x00000003,
+0x00000013,
+0x68676948,
+0x7361702d,
+0x64302073,
+0x00000042,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426432,
+0x00000000,
+0x68676948,
+0x7361702d,
+0x312d2073,
+0x00426438,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xff8cbb51,
+0x000ace72,
+0xfff53192,
+0x007344b1,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xffc65da8,
+0x00567385,
+0xffa98c7d,
+0x0039a258,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xffe8f244,
+0x00452938,
+0xffbad6c8,
+0x00170dbc,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xff8cbb51,
+0x000ace72,
+0xfff53192,
+0x007344b1,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xffc65da8,
+0x00567385,
+0xffa98c7d,
+0x0039a258,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xffe8f244,
+0x00452938,
+0xffbad6c8,
+0x00170dbc,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xff8cbb51,
+0x000ace72,
+0xfff53192,
+0x007344b1,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xffc65da8,
+0x00567385,
+0xffa98c7d,
+0x0039a258,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xffe8f244,
+0x00452938,
+0xffbad6c8,
+0x00170dbc,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00040002,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0xff8cbb51,
+0x000ace72,
+0xfff53192,
+0x007344b1,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0xffc65da8,
+0x00567385,
+0xffa98c7d,
+0x0039a258,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0x00000000,
+0xffe8f244,
+0x00452938,
+0xffbad6c8,
+0x00170dbc,
+0x00000000,
+0x0067cd91,
+0xfff596e6,
+0x000b29a2,
+0xffc1248b,
+0xfffd1080,
+0xfffaca4c,
+0xfffab048,
+0xfffdb0ac,
+0x00024f54,
+0x00054fb8,
+0x000535b4,
+0x0002ef80,
+0x003edb7b,
+0x001d92ec,
+0xff962b59,
+0x000bd422,
+0xffe48132,
+0x002dbdc2,
+0xffc7a94a,
+0x0033fbe6,
+0xffdd3502,
+0x000fea26,
+0xfff0490f,
+0xffd10817,
+0xffaca4df,
+0xffab0493,
+0xffdb0acb,
+0x0024f537,
+0x0054fb6f,
+0x00535b23,
+0x002ef7eb,
+0x000fb6f3,
+0x001d930c,
+0xff962afd,
+0x000bd42a,
+0xffe48122,
+0x002dbdda,
+0xffc7a932,
+0x0033fbf6,
+0xffdd34fa,
+0x000fea26,
+0xfff82487,
+0xffe8840b,
+0xffd6526f,
+0xffd5824b,
+0xffed8567,
+0x00127a9b,
+0x002a7db7,
+0x0029ad93,
+0x00177bf7,
+0x0007db7b,
+0x001d930c,
+0xff962afd,
+0x000bd42a,
+0xffe48122,
+0x002dbdda,
+0xffc7a932,
+0x0033fbf6,
+0xffdd34fa,
+0x000fea26,
+0xffc1248b,
+0xfffd1080,
+0xfffaca4c,
+0xfffab048,
+0xfffdb0ac,
+0x00024f54,
+0x00054fb8,
+0x000535b4,
+0x0002ef80,
+0x003edb7b,
+0x001d92ec,
+0xff962b59,
+0x000bd422,
+0xffe48132,
+0x002dbdc2,
+0xffc7a94a,
+0x0033fbe6,
+0xffdd3502,
+0x000fea26,
+0xfff0490f,
+0xffd10817,
+0xffaca4df,
+0xffab0493,
+0xffdb0acb,
+0x0024f537,
+0x0054fb6f,
+0x00535b23,
+0x002ef7eb,
+0x000fb6f3,
+0x001d930c,
+0xff962afd,
+0x000bd42a,
+0xffe48122,
+0x002dbdda,
+0xffc7a932,
+0x0033fbf6,
+0xffdd34fa,
+0x000fea26,
+0xfff82487,
+0xffe8840b,
+0xffd6526f,
+0xffd5824b,
+0xffed8567,
+0x00127a9b,
+0x002a7db7,
+0x0029ad93,
+0x00177bf7,
+0x0007db7b,
+0x001d930c,
+0xff962afd,
+0x000bd42a,
+0xffe48122,
+0x002dbdda,
+0xffc7a932,
+0x0033fbf6,
+0xffdd34fa,
+0x000fea26,
+0x00009460,
+0x00002000,
+0x00001b80,
+0x00010000,
+0x00004c68,
0x1600200f,
-0x0a000670,
+0x0a000940,
0x08200000,
0x08200000,
0x07800000,
-0x1602d1ce,
+0x160075ce,
0x014000e0,
0x014000e1,
0x014000e2,
@@ -27,31 +826,31 @@
0x014000ef,
0x144000e4,
0x9e000000,
-0x0a200c40,
+0x0a200e10,
0x9e000040,
-0x0a200c40,
+0x0a200e10,
0x9e000080,
-0x0a200c40,
+0x0a200e10,
0x9e0000c0,
-0x0a200c40,
+0x0a200e10,
0x9e080000,
-0x0a200c40,
+0x0a200e10,
0x9e080100,
-0x0a200c40,
+0x0a200e10,
0x9e080200,
-0x0a200c40,
+0x0a200e10,
0x9e080300,
-0x0a200c40,
+0x0a200e10,
0x9e080400,
-0x0a200c40,
+0x0a200e10,
0x9e080500,
-0x0a200c40,
+0x0a200e10,
0x9e080600,
-0x0a200c40,
+0x0a200e10,
0x9e080700,
-0x0a200c40,
+0x0a200e10,
0x9c050800,
-0x0a200c40,
+0x0a200e10,
0x16000010,
0x16000001,
0x17000102,
@@ -59,20 +858,65 @@
0x17800103,
0x01400043,
0x98020000,
+0x160003c6,
+0x07800000,
+0x07800000,
+0x9c03b660,
+0x0a0003f0,
0x9d0c8118,
0x07800000,
+0x9c0c07b0,
0x9f16001a,
0x9f12021a,
0x9f12031a,
0x9f12051a,
-0x98800380,
+0x9f092020,
+0x9f082030,
+0x9c0c07b0,
+0x9f092060,
+0x9f082070,
+0x988003d0,
+0x07800000,
0x9d0c8118,
0x08200000,
+0x160003c6,
+0x07800000,
+0x07800000,
+0x9c03b660,
+0x0a000540,
+0x9d0c8158,
+0x07800000,
+0x9c0c07b0,
+0x9f16001a,
+0x9f12021a,
+0x9f12031a,
+0x9f12051a,
+0x9f040040,
+0x9c0c07b0,
+0x9f03fc10,
+0x9f092060,
+0x9f082070,
+0x98800520,
+0x07800000,
+0x9d0c8158,
+0x08200000,
+0x160003c6,
+0x07800000,
+0x07800000,
+0x9c03b660,
+0x0a000690,
0x9d0c8118,
0x07800000,
+0x9c0c07b0,
0x9f15001a,
0x9f11041a,
-0x98800410,
+0x9f092020,
+0x9f082030,
+0x9c0c07b0,
+0x9f092060,
+0x9f082070,
+0x98800670,
+0x07800000,
0x9d0c8118,
0x08200000,
0x400002c0,
@@ -106,46 +950,30 @@
0x9d01b260,
0x9d02bc70,
0x08200000,
-0x1602c7c6,
+0x16006906,
0x00000068,
0x16003fc5,
0x01000058,
-0x1602c88a,
+0x160069ca,
0x000000a9,
0x16003fc6,
0x00000068,
0x0400089b,
0x4000009c,
-0x1602c80e,
+0x1600694e,
0x410000ec,
0x0600000c,
-0x1600274d,
-0x0a800870,
-0x1602e903,
-0x00000030,
-0x00000231,
-0x00000435,
-0x04800211,
-0x04400511,
-0x1602c944,
-0x0000004e,
-0x0300010e,
-0x04800211,
-0x04400511,
-0x0300010c,
-0x04800211,
-0x04400511,
-0x03000109,
-0x01000231,
-0x0a200480,
+0x1601270d,
+0x0a800a40,
+0x0a200750,
0x04800299,
0x410000a9,
0x05c00b90,
-0x4ac00700,
+0x4ac009d0,
0x04a01085,
-0x1602c8c4,
+0x16006a04,
0x40000047,
-0x1602c94e,
+0x16006a8e,
0x04200599,
0x400000e1,
0x04800177,
@@ -154,25 +982,25 @@
0x04a00111,
0x410000e1,
0x06000001,
-0x4aa00a50,
-0x1602c90d,
+0x4aa00c20,
+0x16006a4d,
0x400000d6,
-0x16022e89,
+0x16004fc9,
0x400002d7,
0x04800166,
0x410000a9,
0x04900077,
0x010000d6,
0x010002d7,
-0x1602c7c6,
+0x16006906,
0x00000068,
0x16003fc5,
0x01000058,
0x1600c005,
-0x1602d141,
+0x16007541,
0x16000002,
0x40000011,
-0x1602d100,
+0x16007500,
0x9e0e0550,
0xdd140530,
0x160ffff4,
@@ -181,8 +1009,8 @@
0x08400000,
0x01000004,
0x9d140550,
-0x0a8006b0,
-0x0a000a50,
+0x0a800980,
+0x0a000c20,
0x048006ff,
0x013ffafb,
0x013ffcfc,
@@ -190,10 +1018,10 @@
0x04a0020b,
0x004002bc,
0x0600000c,
-0x1600274d,
-0x0a800bf0,
-0x0a200480,
-0x0a000b90,
+0x1601270d,
+0x0a800dc0,
+0x0a200750,
+0x0a000d60,
0x003ffefe,
0x003ffcfc,
0x003ffafb,
@@ -220,64 +1048,80 @@
0x9d033260,
0x08200000,
0x9f158048,
+0x9c0c07b0,
+0x9f092020,
+0x9f082030,
+0x9c0c07b0,
+0x9f092060,
+0x9f082070,
0x07800000,
0x07800000,
0x9d088118,
-0x98800d80,
+0x98800f50,
0x08200000,
0x9f158048,
0x9f040040,
-0x07800000,
+0x9c0c07b0,
0x9f03fc10,
-0x07800000,
+0x9f092020,
+0x9f082030,
+0x9c0c07b0,
+0x9f092060,
+0x9f082070,
0x07800000,
0x07800000,
0x9d188148,
-0x98800de0,
+0x98801010,
0x08200000,
0x9f158048,
+0x9c0c07b0,
+0x9f092020,
+0x9f082030,
+0x9c0c07b0,
+0x9f092060,
+0x9f082070,
0x07800000,
-0x07800000,
-0x9d188148,
0x9d188108,
-0x98800e80,
+0x9d188148,
+0x988010f0,
0x08200000,
0x9f158048,
-0x07800000,
-0x07800000,
-0x9d0e0040,
-0x07800000,
+0x9c0c07b0,
+0x9f092060,
+0x9f082070,
+0x9c0c07b0,
+0x9f092020,
+0x9f082030,
0x07800000,
0x9d1e8148,
0x9d1e8108,
-0x98800ef0,
+0x988011b0,
0x08200000,
0x9f158018,
0x9f040010,
-0x07800000,
+0x9c0c07b0,
0x9f03fc10,
-0x07800000,
-0x07800000,
-0x07800000,
-0x9d0e0010,
-0x07800000,
-0x07800000,
+0x9f092020,
+0x9f082030,
+0x9c0c07b0,
+0x9f092060,
+0x9f082070,
0x9d1e8108,
-0x98800f90,
+0x98801270,
0x08200000,
0x9c080048,
0x9f1d0010,
0x07800000,
0x07800000,
0x9d0c8118,
-0x98801060,
+0x98801330,
0x08200000,
0x9c180028,
0x9f1d0010,
0x07800000,
0x07800000,
0x9d0c8108,
-0x988010d0,
+0x988013a0,
0x08200000,
0x9c180068,
0x9c180028,
@@ -285,7 +1129,7 @@
0x07800000,
0x07800000,
0x9d0c8148,
-0x98801140,
+0x98801410,
0x08200000,
0x9c1e0048,
0x9c1e0008,
@@ -293,14 +1137,14 @@
0x07800000,
0x07800000,
0x9d0c8148,
-0x988011c0,
+0x98801490,
0x08200000,
0x9c1e0008,
0x9f1d0010,
0x07800000,
0x07800000,
0x9d0c8108,
-0x98801240,
+0x98801510,
0x08200000,
0x160004a4,
0x160004b5,
@@ -324,30 +1168,46 @@
0x07800000,
0x07800000,
0x9d0c8518,
-0x98801320,
+0x988015f0,
0x9d032340,
0x9d032c50,
0x9d033560,
0x08200000,
+0x160003c2,
0x16000504,
0x16000515,
0x16000526,
+0x9c011720,
0x9c03a440,
0x9c03ad50,
0x9c03b660,
0x160000bd,
0x9f158418,
-0x9f1585b8,
+0x9c0c02b0,
+0x9f091020,
+0x9f081030,
+0x9c0c02b0,
+0x9f091060,
+0x9f081070,
0x07800000,
-0x9d188108,
-0x9d188148,
-0x9d188188,
+0x9d180108,
+0x9d180148,
+0x9f158518,
+0x9c0c02b0,
+0x9f091020,
+0x9f081030,
+0x9c0c02b0,
+0x9f091060,
+0x9f081070,
+0x07800000,
+0x9d180108,
+0x9d180148,
0x9c0c0618,
0x07800000,
-0x9d1881c8,
-0x9d188108,
-0x9d188148,
-0x988014d0,
+0x07800000,
+0x9d180108,
+0x9d180148,
+0x988017c0,
0x9d032440,
0x9d032d50,
0x9d033660,
@@ -361,7 +1221,7 @@
0x9d188108,
0x9f158038,
0x07800000,
-0x98801630,
+0x98801a00,
0x9d188108,
0x08200000,
0x9e088100,
@@ -383,7 +1243,7 @@
0x07800000,
0x07800000,
0x9d0c8118,
-0x988017b0,
+0x98801b80,
0x08200000,
0x08200000,
0x08200000,
@@ -413,23 +1273,23 @@
0x9f0020b0,
0x9f0400d0,
0x05800560,
-0x0a8019d0,
+0x0a801da0,
0x9c0c0510,
-0x0a0019e0,
+0x0a001db0,
0x9c0c0618,
0x16000014,
0x9d0c81e8,
0x9d0c8148,
-0x0a801a50,
+0x0a801e20,
0x9c0c05b0,
0x9c0c0510,
-0x0a001a70,
+0x0a001e40,
0x9c0c06b8,
0x9c0c0618,
0x07800000,
0x9d0c81e8,
0x9d0c8148,
-0x98801850,
+0x98801c20,
0x9d180750,
0x08200000,
0x9d019220,
@@ -438,17 +1298,154 @@
0x413ffefe,
0x16000040,
0x9c010910,
-0x0a202e80,
+0x0a204610,
0x14400040,
0x9c030810,
0x16000171,
0x9c009f30,
0x9c019220,
-0x0a202980,
+0x0a204110,
0x9c009830,
0x003ffefe,
0x048ffeff,
0x08200000,
+0x40001807,
+0x160000bd,
+0x05800370,
+0x9e088000,
+0x0ba00000,
+0x41801003,
+0x14400073,
+0x9e088200,
+0x16001806,
+0x16000005,
+0x04200377,
+0x05800570,
+0x17800566,
+0x04000677,
+0x04a09076,
+0x05800560,
+0x16000184,
+0x4ac021e0,
+0x04a0c077,
+0x160003d6,
+0x05800570,
+0x9d02b060,
+0x0ac02130,
+0x01801005,
+0x0a002170,
+0x9c1800a8,
+0x9d02b060,
+0x07800000,
+0xa0062019,
+0x07800000,
+0x9c02b060,
+0x9d0c8118,
+0x98802140,
+0x07800000,
+0x08200000,
+0x01000015,
+0x9e0f0050,
+0x9e0f0450,
+0x9e0f0140,
+0x08200000,
+0x40001807,
+0x160000bd,
+0x05800370,
+0x9e088000,
+0x0ba00000,
+0x048002ff,
+0x41801003,
+0x14400073,
+0x013ffefe,
+0x9e088200,
+0x16001806,
+0x16000005,
+0x04200377,
+0x05800570,
+0x17800566,
+0x04000677,
+0x04a09076,
+0x05800560,
+0x00000212,
+0x4ac027c0,
+0x04a0c077,
+0x05800570,
+0x00000413,
+0x4ac023d0,
+0x04800816,
+0x01801005,
+0x00001017,
+0x9e0e0760,
+0xdc029e30,
+0x16000a44,
+0x9e0e0470,
+0xdc029320,
+0x160000bd,
+0x9c1807a4,
+0x9c1807e0,
+0xdc03a540,
+0x160003d2,
+0x40000613,
+0x16000184,
+0x00000010,
+0x9d029020,
+0x0a002500,
+0x9d0c8118,
+0x9d029020,
+0x9f0608b0,
+0xa0062019,
+0xdc029020,
+0x04a00133,
+0xdd0c0618,
+0x04a00100,
+0x9f040020,
+0xdc100388,
+0x05800050,
+0x9f040070,
+0x9f1185b2,
+0x0ae02650,
+0xdd100380,
+0x05800350,
+0x9e0f0450,
+0x4ae02680,
+0x160000b0,
+0x9f0304b0,
+0x9d029020,
+0x9d100380,
+0x4a002500,
+0x16001bb3,
+0x9d100380,
+0x9c1800a8,
+0x07800000,
+0x9f1d8010,
+0x9f138612,
+0x9f1f8012,
+0x988024d0,
+0x07800000,
+0x9d0c8118,
+0x04800814,
+0x9e0e0740,
+0x01000613,
+0x01000010,
+0x00000413,
+0x9e088400,
+0x9d188704,
+0x9d188740,
+0x01001014,
+0x9d029e30,
+0x003ffefe,
+0x048ffeff,
+0x9d029e30,
+0x08200000,
+0x9f030410,
+0x160003c4,
+0x160000b0,
+0x16001bb3,
+0x9e0f0250,
+0x9e0f0450,
+0x9e0f0040,
+0x0a0026e0,
0x40000024,
0x048002ff,
0x41000224,
@@ -457,7 +1454,23 @@
0x04000400,
0x9e0f0150,
0x01000025,
-0x0a201d80,
+0x0a202bb0,
+0x403ffefe,
+0x16000007,
+0x9e0f0170,
+0x048ffeff,
+0x08200000,
+0x40000024,
+0x048002ff,
+0x41000224,
+0x16000005,
+0x413ffefe,
+0x16000016,
+0x41800dc6,
+0x04000400,
+0x9e0f0150,
+0x01000025,
+0x0a2034f0,
0x403ffefe,
0x16000007,
0x9e0f0170,
@@ -467,7 +1480,20 @@
0x413ffefe,
0x16000005,
0x01000025,
-0x0a201d80,
+0x0a202bb0,
+0x40000024,
+0x16000005,
+0x403ffefe,
+0x04200454,
+0x41000224,
+0x048ffeff,
+0x08200000,
+0x048002ff,
+0x413ffefe,
+0x16000005,
+0x01000025,
+0x01800dc5,
+0x0a2034f0,
0x40000024,
0x16000005,
0x403ffefe,
@@ -492,25 +1518,25 @@
0x9c180674,
0x9c180650,
0x058001a0,
-0x0aa02280,
+0x0aa030b0,
0x04800144,
0x04400044,
0x05800040,
-0x0aa01fc0,
+0x0aa02df0,
0x05800160,
-0x0ac01f60,
+0x0ac02d90,
0x9e090000,
0x07800000,
0x07800000,
0x9e0d0500,
0x9d040508,
-0x0a002150,
+0x0a002f80,
0x9d040008,
0x9e090000,
0x07800000,
0x9d040008,
0x9e0d0500,
-0x0a002150,
+0x0a002f80,
0x9d040008,
0x9e090000,
0x07800000,
@@ -519,18 +1545,18 @@
0x1280010a,
0x048001a9,
0x05800940,
-0x0aa02150,
+0x0aa02f80,
0x05800160,
0x40000628,
0x160ffff9,
-0x0ac020e0,
+0x0ac02f10,
0x05800180,
-0x0ae02150,
+0x0ae02f80,
0x160ffff6,
0x160ffff7,
-0x0a002120,
+0x0a002f50,
0x05800810,
-0x0ae02150,
+0x0ae02f80,
0x16000016,
0x16000007,
0x9d044690,
@@ -538,10 +1564,10 @@
0x9d180674,
0x05800160,
0x9d180654,
-0x0ac021c0,
+0x0ac02ff0,
0x0420040a,
0x04a001ab,
-0x4a0021f0,
+0x4a003020,
0x044000bb,
0x0480014b,
0x044000bb,
@@ -553,24 +1579,24 @@
0x12000288,
0x12000299,
0x9e0e8280,
-0xca002390,
+0xca0031c0,
0x1e0e8390,
0xdd040604,
0x05800160,
-0x0ac02330,
+0x0ac03160,
0x9d040008,
0x9e090000,
0x07800000,
0x05800040,
0x9e0d0500,
-0x0aa02390,
+0x0aa031c0,
0x9d040508,
-0x0a002390,
+0x0a0031c0,
0x9e090000,
0x05800040,
0x9d040008,
0x9e0d0500,
-0x0a802390,
+0x0a8031c0,
0x9d040508,
0x9c1d06c4,
0xdc1d0644,
@@ -583,7 +1609,7 @@
0x9d108700,
0x00000cc9,
0x06000008,
-0x0aa02590,
+0x0aa033c0,
0xdc1d0684,
0x14400005,
0xdc1d0604,
@@ -594,16 +1620,16 @@
0xdd108700,
0x160ffff8,
0x05800540,
-0x0aa02550,
+0x0aa03380,
0x05800160,
-0x0ac02540,
+0x0ac03370,
0x01000027,
-0x0a002550,
+0x0a003380,
0x01000028,
0x9e088000,
0xa0054dba,
0xa005c81a,
-0x0a002620,
+0x0a003450,
0x9e088000,
0xa0054dba,
0xa005c81a,
@@ -616,56 +1642,206 @@
0x9d0446a0,
0x9e0f0070,
0x9d0c8118,
-0x98801e20,
+0x98802c50,
0x003ffefb,
0x003ffcfa,
0x003ffaf9,
0x003ff8f8,
0x048ff8ff,
0x08200000,
-0x9c0c0018,
-0x9f0b0010,
+0x048008ff,
+0x413ff8f8,
+0x1440000d,
+0x9c038e10,
+0x413ffaf9,
0x04a001dd,
+0x413ffcfa,
+0x16000001,
+0x413ffefb,
+0x04a00100,
+0x9c100400,
+0x9c100480,
+0x9c1d06c4,
+0x9f085030,
+0x9c180674,
+0x9c180650,
+0x058001a0,
+0x4aa03a20,
+0x160000f7,
+0x04800144,
+0x04400744,
+0x05800740,
+0x0aa03740,
+0x05800160,
+0x0ac036e0,
+0x9e090000,
0x07800000,
-0x9d0c8318,
0x07800000,
-0xa00602ba,
-0x9c0c0018,
-0x9f0b0010,
-0x9d0c82b8,
+0x9e0d0500,
+0x9d040508,
+0x0a0038e0,
+0x9d040008,
+0x9e090000,
0x07800000,
-0x9d0c8318,
-0x98802720,
+0x9d040008,
+0x9e0d0500,
+0x0a0038e0,
+0x9d040008,
+0x9e090000,
+0x160000f7,
0x07800000,
-0xa00602ba,
-0x9c0c0118,
-0x16000015,
-0x9d0c81b8,
-0x9d0c82b8,
-0x9f092010,
-0x9f0920b0,
-0x9c1d05c0,
-0x9f0930c0,
-0x9c1d0548,
-0x9f093860,
-0x06000006,
-0x0aa028a0,
-0x06000017,
-0x0aa028a0,
+0x9e0d0500,
+0x1280017a,
+0x048001a9,
+0x05800940,
+0x0aa038e0,
+0x05800160,
+0x00000ec8,
+0x40000688,
+0x160ffff9,
+0x0ac03870,
+0x05800810,
+0x0ae038e0,
+0x160ffff6,
+0x160ffff7,
+0x0a0038b0,
+0x05800180,
+0x0ae038e0,
+0x16000016,
+0x16000007,
+0x9d044690,
+0x04a00144,
+0x9d180674,
+0x05800160,
+0x9d180654,
+0x4ac03960,
+0x160000f7,
+0x0420047a,
+0x04a001ab,
+0x4a003990,
+0x044007bb,
+0x0480014b,
+0x044007bb,
+0x1440004a,
+0x120001aa,
+0x42000a38,
+0x120001bb,
+0x42000b39,
+0x12000288,
+0x12000299,
+0x9e0e8280,
+0xca003b30,
+0x1e0e8390,
+0xdd040604,
+0x05800160,
+0x0ac03ad0,
+0x9d040008,
+0x9e090000,
0x07800000,
-0x9c0c0118,
-0x9c0c01b0,
-0x9f082010,
-0x9f0820b0,
-0x9c1d05c0,
-0x9f0830c0,
-0x9c1d0548,
-0x9f083860,
-0x06000006,
-0x0aa02970,
-0x06000017,
-0x0aa02970,
+0x060000f4,
+0x9e0d0500,
+0x0aa03b30,
+0x9d040508,
+0x0a003b30,
+0x9e090000,
+0x060000f4,
+0x9d040008,
+0x9e0d0500,
+0x0a803b30,
+0x9d040508,
+0x060000f4,
+0x0aa03db0,
+0x9c1d0600,
+0x9f065060,
+0x9f020830,
+0x9f095010,
+0xdc1d0600,
+0x160fffe9,
+0x9f065060,
+0x9f020c30,
+0x0600000a,
+0x0a803db0,
+0x9f095010,
+0x00800dcb,
+0x16000028,
+0x0600000a,
+0x0aa03db0,
+0x0600000b,
+0x0a803d20,
+0x0600000d,
+0x0aa03db0,
+0x9d044480,
+0x9d044780,
+0x9c100480,
+0x9c100700,
+0x9d044490,
+0x9d044790,
+0x9d044680,
+0x9d108480,
+0x9d108700,
+0x0a003e30,
+0x058000d0,
+0x0aa03db0,
+0x9d044490,
+0x9c100700,
+0x9d044790,
+0x9d108480,
+0x9d108700,
+0x9d044480,
+0x9d044780,
+0x9c1d06c4,
+0xdc1d0644,
+0x1f0400b0,
+0x9c100700,
+0x9f040010,
+0x9d108480,
0x07800000,
+0x9d108700,
+0x9c1d06c4,
+0x07800000,
+0x9f0940b0,
+0x07800000,
+0x00800cc9,
+0x06000008,
+0x0aa03fe0,
+0xdc1d0684,
+0x160000f5,
+0xdc1d0604,
+0x160fff8a,
+0x04a00255,
+0xdd108480,
+0x16000017,
+0xdd108700,
+0x160ffff8,
+0x05800540,
+0x0aa03fa0,
+0x05800160,
+0x0ac03f90,
+0x01000027,
+0x0a003fa0,
+0x01000028,
+0x9e088000,
+0xa0054dba,
+0xa005c81a,
+0x0a004070,
+0x9e088000,
+0xa0054dba,
+0xa005c81a,
+0x160fffaa,
+0x9f1f80b0,
+0x9f1e0010,
+0x9f040020,
+0x9f040070,
+0x9f020810,
+0x9d0446a0,
+0x9e0f0070,
+0x9d0c8118,
+0x98803590,
+0x003ffefb,
+0x003ffcfa,
+0x003ffaf9,
+0x003ff8f8,
+0x048ff8ff,
0x08200000,
0x9c0c0018,
0x1440001d,
@@ -678,7 +1854,7 @@
0x9d0c8318,
0x9d0c81b8,
0x9d0c02b8,
-0x988029d0,
+0x98804160,
0x07800000,
0xa00602ba,
0x07800000,
@@ -703,7 +1879,7 @@
0x07800000,
0x9d0c8318,
0x9d0c02b8,
-0x98802b00,
+0x98804290,
0x9c0c0018,
0xa00602ba,
0x07800000,
@@ -728,7 +1904,7 @@
0x9d0c8298,
0x9d0c8338,
0x9d0c8198,
-0x98802ce0,
+0x98804470,
0x07800000,
0xa00602ba,
0xa006821a,
@@ -743,9 +1919,9 @@
0xdd040008,
0x06000001,
0x04a00111,
-0x0aa02e00,
+0x0aa04590,
0x9d0c8118,
-0x98802de0,
+0x98804570,
0x08200000,
0x9c0c02b0,
0x9c0c0018,
@@ -755,15 +1931,18 @@
0xdd0c81b8,
0x06000005,
0x04a00155,
-0x0aa02ed0,
-0x98802e90,
+0x0aa04660,
+0x98804620,
0x08200000,
+0x9c039e30,
+0x07800000,
0x9c0c0018,
-0x9e0e0620,
+0x9f138510,
0x1600004d,
+0x07800000,
0x9d0c8318,
0x07800000,
-0x9c0c0610,
+0x9c0c0510,
0xa00602ba,
0x07800000,
0x9d0c8318,
@@ -771,13 +1950,14 @@
0x9d0c02b8,
0x07800000,
0x9c0c0018,
+0x9f138510,
0xa00602ba,
0x07800000,
0x9d0c8318,
0x9d0c81b8,
0x9d0c02b8,
-0x98802f80,
-0x9c0c0610,
+0x98804740,
+0x9c0c0510,
0xa00602ba,
0x07800000,
0x9d0c8318,
@@ -790,6 +1970,26 @@
0x9d0c81b8,
0x9d0c82b8,
0x08200000,
+0x9c0c0018,
+0x1440001d,
+0x04a001dd,
+0x9d0c8218,
+0x07800000,
+0x9c0c0018,
+0xa00582ba,
+0x07800000,
+0x07800000,
+0x9d0c81b8,
+0x98804960,
+0x1440001d,
+0x9d0c8218,
+0x04a001dd,
+0xa00582ba,
+0x07800000,
+0x07800000,
+0x9d0c81b8,
+0x988049e0,
+0x08200000,
0x9f160028,
0x9f168298,
0x04a001dd,
@@ -798,22 +1998,35 @@
0x07800000,
0x9f160028,
0x9f168298,
-0x98803170,
+0x98804a80,
0x9d0c8128,
0x08200000,
0x9f160020,
0x9f168098,
+0x9c0c03b0,
+0x9f092020,
+0x9f082030,
+0x9c0c03b0,
+0x9f092060,
+0x9f082070,
+0x07800000,
0x07800000,
0x9d0c8108,
0x9d0c8258,
-0x988031e0,
+0x98804af0,
0x08200000,
-0x9f160010,
-0x9f168068,
+0x9f160020,
+0x9f168098,
+0x9c0c02b0,
+0x9f092020,
+0x9f082030,
+0x9c0c02b0,
+0x9f092060,
+0x9f082070,
0x07800000,
0x07800000,
-0x9d0c8128,
-0x98803250,
+0x9d0c8118,
+0x98804bd0,
0x08200000,
0x9d008810,
0x1280020d,
@@ -837,7 +2050,7 @@
0x9d0c87b8,
0x9d1082c8,
0x9d108288,
-0x98803320,
+0x98804d00,
0x08200000,
0x00000003,
0x00000205,
@@ -850,22 +2063,22 @@
0x07800000,
0x07800000,
0x9d0c8128,
-0x988034a0,
+0x98804e80,
0x08200000,
0x048002ff,
0x013ffefe,
0x00801605,
-0x16002a63,
+0x16012ac3,
0x12000155,
0x0200035e,
0x0b200000,
0x00800405,
-0x16002a63,
+0x16012ac3,
0x12000155,
0x0200035e,
0x0b200000,
0x00801705,
-0x16002a63,
+0x16012ac3,
0x12000155,
0x0200035e,
0x0b200000,
@@ -885,7 +2098,7 @@
0xdc180404,
0x06000003,
0x9c180480,
-0x0aa03ae0,
+0x0aa054c0,
0x9c052b20,
0x9c042820,
0x9c023970,
@@ -894,38 +2107,38 @@
0x40800503,
0x0600000d,
0x9d01b060,
-0x4a803840,
+0x4a805220,
0x0400033d,
0x04200427,
0x04200d77,
0x05800750,
-0x0ae03840,
+0x0ae05220,
0x16000006,
0x16000145,
-0x0a003ac0,
+0x0a0054a0,
0x160fffd6,
0x05800420,
-0x0ae039c0,
+0x0ae053a0,
0x160fffe6,
0x04000344,
0x05800420,
-0x0ae03ab0,
+0x0ae05490,
0x160ffff6,
0x04000344,
0x05800420,
-0x0ae03ab0,
+0x0ae05490,
0x16000006,
0x04000344,
0x05800420,
-0x0ae03ab0,
+0x0ae05490,
0x16000016,
0x04000344,
0x05800420,
-0x0ae03ab0,
+0x0ae05490,
0x16000026,
0x04000344,
0x05800420,
-0x0ae03ab0,
+0x0ae05490,
0x16000036,
0x013ffcf6,
0x12000132,
@@ -944,7 +2157,7 @@
0x003ffcf6,
0x00800715,
0x01000606,
-0x0a003ef0,
+0x0a0058d0,
0x9c042b20,
0x9c052920,
0x9c023870,
@@ -956,43 +2169,43 @@
0x160fffb6,
0x00800503,
0x05800420,
-0x0ae03df0,
+0x0ae057d0,
0x160fffc6,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x160fffd6,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x160fffe6,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x160ffff6,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x16000006,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x16000016,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x16000026,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x16000036,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x16000046,
0x04000344,
0x05800420,
-0x0ae03ed0,
+0x0ae058b0,
0x16000056,
0x013ffcf6,
0x12000232,
@@ -1010,16 +2223,18 @@
0x003ffcf6,
0x01000606,
0x00800715,
-0x16002a66,
+0x16012ac6,
0x413ffefe,
0x12000155,
0x00000202,
0x00800d04,
0x0200056e,
-0x16013c06,
-0x16013c47,
+0x16020e05,
+0x16014246,
+0x16014287,
0x0400042d,
0x04a001dd,
+0x9e0e0750,
0x9e0e0260,
0x9e0e0370,
0x0b200000,
@@ -1033,7 +2248,7 @@
0x06000005,
0x40800f02,
0x04c07f77,
-0x4a804120,
+0x4a805b20,
0x04500273,
0x00800a02,
0x9e088100,
@@ -1069,7 +2284,7 @@
0x07800000,
0x16000003,
0x9e0c8100,
-0x1602dc06,
+0x16007f46,
0x00000064,
0x1600003d,
0x04a00122,
@@ -1084,8 +2299,8 @@
0x9d0c810c,
0x9d0c815c,
0x9d0c81ac,
-0x98804330,
-0x0aa042b0,
+0x98805d30,
+0x0aa05cb0,
0x9e0f0120,
0x08200000,
0x4080070d,
@@ -1097,42 +2312,42 @@
0x413ffefe,
0x06000004,
0x9c03a950,
-0x4aa044d0,
+0x4aa05ed0,
0x144000d2,
-0x0a204790,
+0x0a206190,
0x40000e04,
0x1440002d,
0x06000004,
-0x0a804610,
+0x0a806010,
0x05800d40,
-0x0ae04510,
-0x0a204640,
-0x0a0045c0,
+0x0ae05f10,
+0x0a206040,
+0x0a005fc0,
0x042004d2,
0x1440004d,
-0x0a204640,
-0x0a204790,
+0x0a206040,
+0x0a206190,
0x06000002,
-0x0a8045c0,
+0x0a805fc0,
0x1440002d,
0x00000e04,
0x05800d40,
-0x0ac04610,
-0x0a204640,
+0x0ac06010,
+0x0a206040,
0x003ffefe,
0x40800905,
0x048ffeff,
0x9d03a950,
0x08200000,
0x04a0012d,
-0x0a201690,
-0x0a0045c0,
-0x16013c06,
+0x0a201a60,
+0x0a005fc0,
+0x16014246,
0x40800605,
0x048002ff,
0x413ffefe,
0x144000d3,
-0x16002a6e,
+0x16012ace,
0x9e0e0260,
0x12000155,
0x420005ee,
@@ -1153,19 +2368,19 @@
0x40000403,
0x04c001d7,
0x06000007,
-0x4a804880,
+0x4a806280,
0x16000017,
0x00001604,
0x06000004,
-0x0a8049a0,
+0x0a8063a0,
0x40001405,
0x048001dd,
0x01000e04,
0x01000c05,
-0x0a0048f0,
+0x0a0062f0,
0x00001204,
0x06000004,
-0x0a8049a0,
+0x0a8063a0,
0x40001005,
0x048001dd,
0x01000e04,
@@ -1175,11 +2390,11 @@
0x16000005,
0x40800a04,
0x05c00630,
-0x0a804990,
+0x0a806390,
0x12000233,
0x9e0e0530,
0x9d140550,
-0x0a0049a0,
+0x0a0063a0,
0x01800017,
0x08200000,
0x048008ff,
@@ -1187,15 +2402,15 @@
0x1440001d,
0x013ffaf9,
0x413ffcfa,
-0x1602c909,
+0x16006a49,
0x413ffefb,
-0x1601fe02,
+0x16015002,
0x00000095,
0x00000296,
0x9c018201,
0x01000025,
0x41400226,
-0x16020603,
+0x16002743,
0x04800122,
0x9e088200,
0x9e090300,
@@ -1205,92 +2420,48 @@
0x01c00127,
0x01c0012b,
0x9c018201,
-0x98804aa0,
+0x988064a0,
0x04800633,
0x1440001d,
0x00000034,
0x04802833,
0x01c00124,
-0x98804b50,
-0x1602e8ca,
+0x98806550,
0x16002102,
-0x408000a4,
-0x1602ebcd,
-0x408001a5,
-0x16000007,
0x9e0e0220,
-0x408002a8,
0x16000806,
-0x408003a9,
-0x12000155,
-0x410000a7,
-0x04500544,
+0x16007eca,
+0x16007f0b,
0x9d140270,
-0x408000d5,
-0x12000288,
-0x410002a7,
-0x04500844,
-0x408001d8,
-0x12000399,
-0x408002d6,
-0x04500944,
-0x410000d7,
-0x1602ec0a,
-0x408003d9,
-0x12000455,
-0x410002d7,
-0x04500544,
-0x408000a5,
-0x12000588,
-0x408001a2,
-0x04500844,
-0x408002a8,
-0x12000666,
-0x410000a7,
-0x04500644,
-0x408003a6,
-0x12000799,
-0x410002a7,
-0x04500944,
-0x12000855,
-0x04500544,
-0x1602db8a,
-0x1602dbcb,
-0x12000922,
-0x04500244,
-0x12000a88,
-0x04500844,
-0x400000a8,
-0x12000b66,
-0x400000b9,
-0x04500644,
+0x000000a8,
+0x000000b9,
0x04a00188,
0x04a00199,
0x16000005,
0x16000006,
0x06000008,
-0x0aa04f50,
+0x0aa06690,
0x16000015,
0x000002a8,
0x06000009,
-0x0aa04f90,
+0x0aa066d0,
0x16000016,
0x000002b9,
-0x1602cf42,
+0x16007082,
0x410000a8,
0x12000166,
0x410000b9,
0x04500655,
0x40800021,
-0x1602c90d,
+0x16006a4d,
0x41800027,
0x06000004,
-0x0aa05080,
+0x0aa067c0,
0x06000005,
-0x0aa05100,
+0x0aa06840,
0x06000001,
-0x0aa05190,
-0x0a005280,
+0x0aa068d0,
+0x0a0069c0,
0x160000a8,
0x400000d6,
0x12000c88,
@@ -1298,7 +2469,7 @@
0x07800000,
0x06000005,
0x9d180078,
-0x0a805170,
+0x0a8068b0,
0x160000c8,
0x400000d6,
0x12000c88,
@@ -1307,7 +2478,7 @@
0x07800000,
0x9d180078,
0x06000001,
-0x0a805200,
+0x0a806940,
0x160000d8,
0x400000d6,
0x12000c88,
@@ -1316,21 +2487,21 @@
0x07800000,
0x9d180078,
0x16000903,
-0x16000fa9,
+0x16000fb9,
0x16000016,
0x9e0e0530,
0x16000007,
0x9d03c890,
0x07800000,
0x9d140570,
-0x1602c988,
+0x16006ac8,
0x40000280,
0x16000013,
0x00000084,
0x06000000,
0x40000049,
-0x1602c942,
-0x4a805320,
+0x16006a82,
+0x4a806a60,
0x16000005,
0x04200959,
0x05800590,
@@ -1340,7 +2511,7 @@
0x17800363,
0x04800233,
0x01000023,
-0x1601fe02,
+0x16015002,
0x01004a23,
0x403ffefb,
0x16002202,
@@ -1354,20 +2525,20 @@
0x08200000,
0x048008ff,
0x413ff8f8,
-0x1601fe02,
+0x16015002,
0x013ffaf9,
0x013ffcfa,
0x413ffefb,
0x04803322,
-0x1602e045,
-0x16000dfd,
+0x16008385,
+0x16000e0d,
0x00000454,
0x00000856,
0x9c0768d0,
0x01c00124,
0x01c00126,
0x40000087,
-0x16002b99,
+0x16003129,
0x0000028d,
0x40000c54,
0x12000299,
@@ -1376,7 +2547,7 @@
0x0180012d,
0x9e0e0490,
0x41400224,
-0x16002ba8,
+0x16003138,
0x41400226,
0x12000288,
0x9c100480,
@@ -1421,15 +2592,15 @@
0x128002bb,
0x01c0012b,
0x04800222,
-0x1602de45,
-0x16000e1d,
+0x16008185,
+0x16000e2d,
0x00000454,
0x00000856,
0x9c0768d0,
0x01c00124,
0x01c00126,
0x40000087,
-0x16002bb9,
+0x16003149,
0x0000028d,
0x40000c54,
0x12000299,
@@ -1438,7 +2609,7 @@
0x0180012d,
0x9e0e0490,
0x41400224,
-0x16002bc8,
+0x16003158,
0x41400226,
0x12000288,
0x9c100480,
@@ -1482,20 +2653,20 @@
0x07800000,
0x06000033,
0x9e0e8220,
-0x0aa05cd0,
+0x0aa07410,
0x9c1d0004,
0x9c1d0044,
0x07800000,
0x9d0c0210,
-0x0a005d80,
+0x0a0074c0,
0x06000023,
-0x0aa05d30,
+0x0aa07470,
0x9c1d0004,
0x9d040004,
0x9d100200,
-0x0a005d80,
+0x0a0074c0,
0x06000043,
-0x0aa05d80,
+0x0aa074c0,
0x9c180024,
0x9d040004,
0x9d180200,
@@ -1503,379 +2674,7 @@
0x05c00740,
0x17800644,
0x01000004,
-0x0a005bf0,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
+0x0a007330,
0x00000000,
0x00000000,
0x00000000,
@@ -2107,14 +2906,14 @@
0x00001001,
0x00001000,
0x00001000,
-0x00001000,
-0x00001000,
-0x00001001,
0x00001001,
0x00001000,
0x00001001,
0x00001001,
0x00001001,
+0x00000000,
+0x00000000,
+0x00001001,
0x00001001,
0x00001000,
0x00001001,
@@ -2141,21 +2940,21 @@
0x00001001,
0x00000001,
0x00001000,
-0x00002e24,
+0x00000858,
0x00001000,
0x00001001,
0x00000001,
0x00001000,
-0x00002e24,
+0x00000858,
0x00151000,
-0x00002e24,
-0x00002e24,
+0x00000858,
+0x00000858,
0x00151000,
0x00001000,
0x00001001,
0x00000001,
0x00001000,
-0x00002e64,
+0x00000898,
0x00001000,
0x00001001,
0x00001000,
@@ -2172,26 +2971,26 @@
0x00001000,
0x00001000,
0x00001000,
-0x00001051,
+0x00001061,
0x00001031,
-0x00001051,
+0x00001061,
0x00001021,
-0x00001051,
+0x00001061,
0x00001031,
-0x00001051,
+0x00001061,
0x00001021,
-0x00001051,
+0x00001061,
0x00001031,
-0x00001051,
+0x00001061,
0x00001021,
-0x00001051,
+0x00001061,
0x00001031,
-0x00001051,
+0x00001061,
0x00001021,
-0x00001051,
-0x00001031,
-0x00001051,
+0x00001061,
0x00001021,
+0x00001061,
+0x00001031,
0x00151000,
0x00001000,
0x00001000,
@@ -2202,47 +3001,47 @@
0x00000000,
0x00000000,
0x00001071,
-0x00000000,
+0x000000aa,
0x00001071,
0x00000000,
-0x00001041,
-0x00001001,
-0x00000000,
-0x00001000,
-0x00001011,
-0x00001001,
-0x00000000,
0x00000000,
0x00000000,
0x00001000,
-0x00001011,
-0x00001001,
-0x00000000,
-0x00001041,
-0x00001041,
0x00001000,
+0x000000a6,
+0x000000a8,
0x00001000,
0x00001000,
-0x00001011,
-0x00001001,
0x00001000,
-0x00001011,
-0x00001001,
0x00001000,
-0x00001011,
-0x00001001,
0x00000000,
-0x00001000,
-0x00001011,
-0x00001001,
0x00000000,
0x00001000,
-0x00001001,
-0x00001001,
-0x00001041,
+0x003c1000,
0x00001000,
-0x00001041,
+0x003c1000,
0x00001001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
0x00001001,
0x00001000,
0x00001051,
@@ -2256,11 +3055,12 @@
0x00001001,
0x00001001,
0x00001001,
+0x00001001,
0x0000fff9,
0x00001000,
0x00001000,
0x00000000,
-0x00001000,
+0x00001001,
0x00001091,
0x00001000,
0x00001000,
@@ -2333,9 +3133,6 @@
0x00000000,
0x00000000,
0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
0x00001000,
0x00001001,
0x00000000,
@@ -2345,8 +3142,8 @@
0x00001001,
0x00000001,
0x00001000,
-0x00002e24,
-0x00002e24,
+0x00000858,
+0x00000858,
0x00001000,
0x00151000,
0x00151000,
@@ -2357,8 +3154,99 @@
0x00001001,
0x00000001,
0x00001000,
-0x00002e24,
-0x00002e24,
+0x00000858,
+0x00000858,
+0x00000000,
+0x00000000,
+0x00001001,
+0x00000000,
+0x00000000,
+0x00001000,
+0x00000000,
+0x00000000,
+0x00001001,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
0x00000000,
0x00000000,
0x00000000,
@@ -3117,136 +4005,72 @@
0x00000000,
0x00000000,
0x00000000,
-0x000695c4,
-0x007cdb3b,
-0x000870d8,
-0x000870d8,
-0x007cdb3b,
-0x000695c4,
-0x004470ec,
-0x00fa825a,
-0x000c7322,
-0x00f02316,
-0x000b4d9e,
-0x0013c14c,
-0x0005da48,
-0x00195288,
-0x00195288,
-0x0005da48,
-0x0013c14c,
-0x004470ec,
-0x00fa825a,
-0x000c7322,
-0x00f02316,
-0x000b4d9e,
+0x004b54e7,
+0x002866b7,
+0x0002526c,
+0x005d3e43,
+0x0002526c,
+0x002866b7,
+0x004b54e7,
+0x0090828c,
+0x00097262,
+0x00e8875a,
+0x0021f9ea,
+0x00e1aff2,
+0x000feece,
+0x000387fc,
+0x0079341b,
+0x0006f740,
+0x00045eec,
+0x0006f740,
+0x0079341b,
+0x000387fc,
+0x0090828c,
+0x00097262,
+0x00e8875a,
+0x0021f9ea,
+0x00e1aff2,
+0x000feece,
0x007de295,
0x00f821da,
0x007de295,
0x008431e5,
0x0007dde2,
-0x000271f8,
-0x00fb6e08,
-0x0002d334,
-0x0002d334,
-0x00fb6e08,
-0x000271f8,
-0x00421c2d,
-0x00f4e40e,
-0x00188dd6,
-0x00e410d6,
-0x001066c6,
-0x000eabd0,
-0x00e49430,
-0x0010f338,
-0x0010f338,
-0x00e49430,
-0x000eabd0,
-0x00421c2d,
-0x00f4e40e,
-0x00188dd6,
-0x00e410d6,
-0x001066c6,
-0x008e3ba9,
-0x000aaa6a,
-0x00f5559a,
-0x0071c459,
-0x00651dd9,
-0x00f5c6b6,
-0x000b0ede,
-0x00000003,
-0x00000003,
-0x0002c197,
-0x0005832b,
-0x0002c197,
-0x00000003,
-0x00000003,
-0x0084a705,
-0x0007da1a,
-0x00000003,
-0x000430ab,
-0x007ff7a1,
-0x00000003,
-0x000430ab,
-0x007ff7a1,
-0x00000003,
-0x00000003,
-0x0002c197,
-0x0005832b,
-0x0002c197,
-0x00000003,
-0x00000003,
-0x0084a705,
-0x0007da1a,
-0x00000003,
-0x00000003,
-0x0002c197,
-0x0005832b,
-0x0002c197,
-0x00000003,
-0x00000003,
-0x0084a705,
-0x0007da1a,
-0x00000003,
-0x000430ab,
-0x007ff7a1,
-0x00000003,
-0x000430ab,
-0x007ff7a1,
-0x00000003,
-0x000430ab,
-0x007ff7a1,
-0x00000003,
-0x000430ab,
-0x007ff7a1,
+0x0012f747,
+0x00c81d03,
+0x005f165b,
+0x0094600b,
+0x005f165b,
+0x00c81d03,
+0x0012f747,
+0x00aa0ab1,
+0x001057be,
+0x00d5b832,
+0x003b8bf6,
+0x00cfd2ca,
+0x00154066,
+0x0071cb9f,
+0x00fac2b8,
+0x0008ea18,
+0x00f5e900,
+0x0008ea18,
+0x00fac2b8,
+0x0071cb9f,
+0x00aa0ab1,
+0x001057be,
+0x00d5b832,
+0x003b8bf6,
+0x00cfd2ca,
+0x00154066,
+0x0084edbd,
+0x007b1245,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00762489,
0x00000020,
0x003fffe0,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00040002,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00040002,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00040002,
-0x00000000,
-0x00000000,
-0x00000000,
-0x00000000,
0x00269ec3,
0x000d0ff4,
0x00051eba,
@@ -3315,8 +4139,8 @@
0x0033fbe6,
0x00dd3502,
0x000fea26,
-0x003c0001,
-0x00080002,
+0x00400000,
+0x00100002,
0x007f0001,
0x00040002,
0x00040002,
@@ -3324,8 +4148,468 @@
0x003fffe0,
0x00000020,
0x003fffe0,
+0x0000e95b,
+0x00045e13,
+0x00e38bd3,
+0x0049a0eb,
+0x0086a523,
+0x00021a60,
+0x00b3b22b,
+0x00c008cb,
+0x0003ee58,
+0x00f98190,
+0x0007bebc,
+0x00f927cc,
+0x000369f8,
+0x000210a0,
+0x00f7d700,
+0x000cf630,
+0x00f0b350,
+0x000f00d8,
+0x00f45884,
+0x0004930c,
+0x000cca50,
+0x00d5b1a0,
+0x0036ee50,
+0x00c50200,
+0x00c1a4a3,
+0x005fc0f5,
+0x004f99c8,
+0x00026924,
+0x00ff83fb,
+0x0008de8b,
+0x00de91f3,
+0x0044c043,
+0x00a56883,
+0x0040eb8b,
+0x001e74a3,
+0x00fd21b0,
+0x000554e4,
+0x00f94c68,
+0x000647f4,
+0x00fc5390,
+0x00c48fa3,
+0x00067e44,
+0x00f4b078,
+0x000daa00,
+0x00f31630,
+0x00095c18,
+0x00fd153c,
+0x00f92d4c,
+0x00187260,
+0x00d118b0,
+0x002e0ce0,
+0x00dfc588,
+0x00d88710,
+0x005ade01,
+0x0069ab18,
+0x000581a8,
+0x00ff0f2b,
+0x000a2003,
+0x00e0f9b3,
+0x00341ca3,
+0x00d0769b,
+0x00f72c73,
+0x0079f1eb,
+0x00fbed28,
+0x0005aab8,
+0x00fa5660,
+0x0003b918,
+0x00028fb3,
+0x00fb129c,
+0x00098f30,
+0x00f3bff8,
+0x000bc1d8,
+0x00f7e048,
+0x000228e8,
+0x0005dda0,
+0x00f00dc0,
+0x001eb940,
+0x00d459f0,
+0x001db068,
+0x00fcb1e0,
+0x00bb70e0,
+0x00500125,
+0x00423c25,
+0x000cb760,
+0x00ff3a63,
+0x0008dcf3,
+0x00e89f33,
+0x001cf00b,
+0x00fdff03,
+0x00b7a13b,
+0x0002d9ac,
+0x00fb9038,
+0x0004ee8c,
+0x00fc6088,
+0x0025bba3,
+0x000396e8,
+0x00f82434,
+0x000abf70,
+0x00f51e3c,
+0x0007b174,
+0x0083c45b,
+0x00fadcd0,
+0x000d0158,
+0x00eaba28,
+0x001ef828,
+0x00de61d8,
+0x00091358,
+0x00172bd8,
+0x00aaa5f8,
+0x007f9968,
+0x004ead35,
+0x0016d358,
+0x00ff9df3,
+0x00063423,
+0x00f2bc93,
+0x0004db3b,
+0x002510d3,
+0x008d0163,
+0x00032dec,
+0x00fc0c14,
+0x00035394,
+0x00bfd6bb,
+0x00fd7bc4,
+0x000653e0,
+0x00f6c644,
+0x0009e92c,
+0x00f874d4,
+0x00025014,
+0x000466f8,
+0x00f4e050,
+0x00113910,
+0x00e9e9d8,
+0x0019a460,
+0x00ed06b8,
+0x00f3f088,
+0x002b3ea8,
+0x00a75d50,
+0x00573b88,
+0x0058acdd,
+0x00253e48,
+0x00ffe99b,
+0x00034623,
+0x00fca67b,
+0x00f0ade3,
+0x003f433b,
+0x00fdf30c,
+0x0002e438,
+0x00fd3880,
+0x004d26e3,
+0x006be023,
+0x00fafa08,
+0x0007c8c0,
+0x00f72900,
+0x000747f8,
+0x00fd12b4,
+0x00fcac44,
+0x0009b130,
+0x00f14b30,
+0x0011de10,
+0x00ed7168,
+0x00102888,
+0x00fd78fc,
+0x00e1dd38,
+0x003632e8,
+0x00b0f308,
+0x002ad4a0,
+0x005ec5d9,
+0x00385800,
+0x00fed5c7,
+0x0001d26f,
+0x00fa588b,
+0x000daca7,
+0x00e3d6d3,
+0x00339bc7,
+0x00a97e63,
+0x00021db8,
+0x00fcd778,
+0x00049f28,
+0x00f8fde8,
+0x000d23e8,
+0x007d7e59,
+0x00f89bb0,
+0x000259b4,
+0x00d1846b,
+0x0003ff83,
+0x000bf0f7,
+0x00f0e3cf,
+0x000ca4f7,
+0x00f77a0b,
+0x0004c883,
+0x00fdcf83,
+0x0000c0c7,
+0x00ff662f,
+0x0002ff27,
+0x00f6afb3,
+0x0016defb,
+0x00cfc55f,
+0x005b288f,
+0x00fd84f0,
+0x000411f4,
+0x00f99078,
+0x000a2044,
+0x00ef1978,
+0x0024d648,
+0x007aa5a5,
+0x00e7c3e8,
+0x000aa4ec,
+0x00fa6a80,
+0x000304e0,
+0x009a1a6f,
+0x0032b7db,
+0x00e8d6d7,
+0x000963f3,
+0x00fcc6cf,
+0x0000dc7b,
+0x00ffda2f,
+0x00ff1ed3,
+0x0004309f,
+0x00f31b9b,
+0x001faed3,
+0x00bcc34f,
+0x00020190,
+0x00fc755c,
+0x0005e8c8,
+0x00f675cc,
+0x000f6978,
+0x00e54b98,
+0x003efe58,
+0x007512ad,
+0x00daf028,
+0x001174bc,
+0x00f652f4,
+0x000589a8,
+0x00fce2b4,
+0x006b13b7,
+0x00ca4a77,
+0x00188ddf,
+0x00f61837,
+0x000357df,
+0x00ff2823,
+0x00fed6b7,
+0x00054b13,
+0x00efed7f,
+0x0027599b,
+0x00ac68e3,
+0x00028110,
+0x00fb8cf0,
+0x00077d74,
+0x00f3c420,
+0x00141628,
+0x00dc4340,
+0x005ac084,
+0x006d00dd,
+0x00d23fd0,
+0x00167f08,
+0x00f33398,
+0x00077ccc,
+0x00fbb300,
+0x00025c40,
+0x00b2862b,
+0x0024406f,
+0x00f10627,
+0x00052b3f,
+0x00feadf3,
+0x00fe9647,
+0x00062edf,
+0x00ed7c03,
+0x002d1867,
+0x00a04bef,
+0x0002df40,
+0x00fae088,
+0x0008acc0,
+0x00f1b5e8,
+0x0017c370,
+0x00d4b638,
+0x0077237c,
+0x0062c57d,
+0x00cd9f14,
+0x00199c28,
+0x00f12c50,
+0x0008c91c,
+0x00fae638,
+0x0002d380,
+0x00a270f7,
+0x002c1793,
+0x00edb29f,
+0x00065057,
+0x00fe69af,
+0x00fe678b,
+0x0006badb,
+0x00ec1c5f,
+0x00302fa7,
+0x0099df87,
+0x00031180,
+0x00fa8294,
+0x000957b0,
+0x00f07efc,
+0x001a1714,
+0x00cf5714,
+0x00498dbd,
+0x0056cb65,
+0x00cccae8,
+0x001ac64c,
+0x00f04854,
+0x0009661c,
+0x00fa8180,
+0x00030f60,
+0x009a52c3,
+0x00300017,
+0x00ec1ad7,
+0x0006cf1f,
+0x00fe552f,
+0x00fe552f,
+0x0006cf1f,
+0x00ec1ad7,
+0x00300017,
+0x009a52c3,
+0x00030f60,
+0x00fa8180,
+0x0009661c,
+0x00f04854,
+0x001ac64c,
+0x00cccae8,
+0x0056cb65,
+0x00498dbd,
+0x00cf5714,
+0x001a1714,
+0x00f07efc,
+0x000957b0,
+0x00fa8294,
+0x00031180,
+0x0099df87,
+0x00302fa7,
+0x00ec1c5f,
+0x0006badb,
+0x00fe678b,
+0x00fe69af,
+0x00065057,
+0x00edb29f,
+0x002c1793,
+0x00a270f7,
+0x0002d380,
+0x00fae638,
+0x0008c91c,
+0x00f12c50,
+0x00199c28,
+0x00cd9f14,
+0x0062c57d,
+0x0077237c,
+0x00d4b638,
+0x0017c370,
+0x00f1b5e8,
+0x0008acc0,
+0x00fae088,
+0x0002df40,
+0x00a04bef,
+0x002d1867,
+0x00ed7c03,
+0x00062edf,
+0x00fe9647,
+0x00feadf3,
+0x00052b3f,
+0x00f10627,
+0x0024406f,
+0x00b2862b,
+0x00025c40,
+0x00fbb300,
+0x00077ccc,
+0x00f33398,
+0x00167f08,
+0x00d23fd0,
+0x006d00dd,
+0x005ac084,
+0x00dc4340,
+0x00141628,
+0x00f3c420,
+0x00077d74,
+0x00fb8cf0,
+0x00028110,
+0x00ac68e3,
+0x0027599b,
+0x00efed7f,
+0x00054b13,
+0x00fed6b7,
+0x00ff2823,
+0x000357df,
+0x00f61837,
+0x00188ddf,
+0x00ca4a77,
+0x006b13b7,
+0x00fce2b4,
+0x000589a8,
+0x00f652f4,
+0x001174bc,
+0x00daf028,
+0x007512ad,
+0x003efe58,
+0x00e54b98,
+0x000f6978,
+0x00f675cc,
+0x0005e8c8,
+0x00fc755c,
+0x00020190,
+0x00bcc34f,
+0x001faed3,
+0x00f31b9b,
+0x0004309f,
+0x00ff1ed3,
+0x00ffda2f,
+0x0000dc7b,
+0x00fcc6cf,
+0x000963f3,
+0x00e8d6d7,
+0x0032b7db,
+0x009a1a6f,
+0x000304e0,
+0x00fa6a80,
+0x000aa4ec,
+0x00e7c3e8,
+0x007aa5a5,
+0x0024d648,
+0x00ef1978,
+0x000a2044,
+0x00f99078,
+0x000411f4,
+0x00fd84f0,
+0x005b288f,
+0x00cfc55f,
+0x0016defb,
+0x00f6afb3,
+0x0002ff27,
+0x00ff662f,
+0x0000c0c7,
+0x00fdcf83,
+0x0004c883,
+0x00f77a0b,
+0x000ca4f7,
+0x00f0e3cf,
+0x000bf0f7,
+0x0003ff83,
+0x00d1846b,
+0x000259b4,
+0x00f89bb0,
+0x007d7e59,
+0x000d23e8,
+0x00f8fde8,
+0x00049f28,
+0x00fcd778,
+0x00021db8,
+0x00a97e63,
+0x00339bc7,
+0x00e3d6d3,
+0x000daca7,
+0x00fa588b,
+0x0001d26f,
+0x00fed5c7,
0x00000000,
+0x00040002,
0x00000000,
+0x00040002,
+0x00020002,
+0x00f80002,
0x00000000,
0x00000000,
0x00000000,
@@ -3480,32 +4764,9 @@
0x00000000,
0x00000000,
0x00000000,
-0x00009110,
-0x03130298,
-0x02DE031E,
-0x004302E8,
-0x0325003A,
-0x032C0344,
-0x043D02C9,
-0x049B0351,
-0x018100CA,
-0x026C01AD,
-0x00B402AB,
-0x01BE01CC,
-0x054505BB,
-0x000202F3,
-0x00DE00D8,
-0x00EF00E8,
-0x010600F9,
-0x0124010D,
-0x0114011C,
-0x0146012B,
-0x0003015D,
-0x017F017E,
-0x041C0180,
-0x01690366,
0x00000000,
0x00000000,
+0x00009460,
0x00000000,
0x00000000,
0x00000000,
@@ -3769,10 +5030,14 @@
0x00000000,
0x00000000,
0x00000000,
+0x00000010,
0x00000000,
0x00000000,
+0x000004fc,
0x00000000,
0x00000000,
+0x00000018,
+0x000004f4,
0x00000000,
0x00000000,
0x00000000,
@@ -3796,10 +5061,16 @@
0x00000000,
0x00000000,
0x00000000,
+0x00a0000c,
+0x003c00a1,
0x00000000,
0x00000000,
+0x000005ba,
+0x00a2000c,
+0x003c00a3,
0x00000000,
0x00000000,
+0x000005ba,
0x00000000,
0x00000000,
0x00000000,
@@ -3845,6 +5116,9 @@
0x00000000,
0x00000000,
0x00000000,
+0x0000000a,
+0x7fff7fff,
+0x7fff7fff,
0x00000000,
0x00000000,
0x00000000,
@@ -3854,18 +5128,48 @@
0x00000000,
0x00000000,
0x00000000,
+0x00000004,
+0x00000001,
0x00000000,
0x00000000,
0x00000000,
+0x003ffff0,
0x00000000,
+0x00400000,
+0x00000004,
+0x00000001,
0x00000000,
0x00000000,
0x00000000,
+0x003ffff0,
0x00000000,
+0x00400000,
+0x01f501e2,
+0x021b0208,
+0x0241022e,
+0x02670254,
+0x028d027a,
+0x02b302a0,
+0x02d902c6,
+0x02ff02ec,
+0x00000004,
+0x00000001,
0x00000000,
0x00000000,
0x00000000,
+0x003ffff0,
0x00000000,
+0x00400000,
+0x03280316,
+0x034c033a,
+0x0370035e,
+0x03940382,
+0x03b803a6,
+0x03dc03ca,
+0x040003ee,
+0x04240412,
+0x00001400,
+0x000000ff,
0x00000000,
0x00000000,
0x00000000,
@@ -3887,125 +5191,557 @@
0x00000000,
0x00000000,
0x00000000,
+0x0aa40c24,
+0x00000c34,
+0x0a940c04,
+0x00000c14,
+0x0e640bb4,
+0x00000ba4,
+0x0e540b94,
+0x00000b84,
+0x0a840be4,
+0x00000bf4,
+0x0a740bc4,
+0x00000bd4,
+0x0e440b34,
+0x00000b24,
+0x0e340b14,
+0x00000b04,
+0x0a640b64,
+0x00000b74,
+0x0a540b44,
+0x00000b54,
+0x00000004,
+0x00000001,
0x00000000,
0x00000000,
0x00000000,
+0x003ffff0,
0x00000000,
+0x00400000,
+0x00000004,
+0x00000001,
0x00000000,
0x00000000,
0x00000000,
+0x003ffff0,
0x00000000,
+0x00400000,
+0x0a740bc4,
+0x000010f4,
+0x0a840be4,
+0x00001104,
+0x11340b14,
0x00000000,
+0x0e540b94,
0x00000000,
+0x00560014,
+0x00570003,
+0x005a0058,
+0x00000013,
+0x00560014,
+0x00570006,
+0x00610058,
+0x00000013,
+0x00560019,
+0x00570003,
+0x005a0058,
+0x033c0013,
+0x00560019,
+0x00570006,
+0x00610058,
+0x033c0013,
+0x00640014,
+0x0065010d,
+0x00680066,
+0x00000012,
+0x005b0015,
+0x005c0002,
+0x005f005d,
+0x00000013,
+0x005b0015,
+0x005c0005,
+0x0062005d,
+0x00000013,
+0x005b001a,
+0x005c0002,
+0x005f005d,
+0x038c0013,
+0x005b001a,
+0x005c0005,
+0x0062005d,
+0x038c0013,
+0x01050003,
+0x0001008e,
+0x00900001,
0x00000000,
+0x01060003,
+0x0001008f,
+0x00910001,
0x00000000,
+0x01070003,
+0x00010129,
+0x00900001,
0x00000000,
+0x01070003,
+0x0001012a,
+0x00910001,
0x00000000,
+0x004d0003,
+0x0001008e,
+0x00900001,
0x00000000,
+0x004d0003,
+0x0001008f,
+0x00910001,
0x00000000,
+0x0032000b,
+0x00710030,
+0x004e0072,
0x00000000,
+0x00010013,
+0x00010001,
+0x01100001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01110001,
0x00000000,
+0x000d000a,
+0x000f000e,
+0x00110010,
0x00000000,
+0x00280000,
+0x002b002a,
+0x002d002c,
0x00000000,
+0x00240000,
+0x00790024,
+0x00920074,
0x00000000,
+0x00030000,
+0x007a0003,
+0x00930075,
0x00000000,
+0x00240000,
+0x007b0024,
+0x00940077,
0x00000000,
+0x00060000,
+0x007c0006,
+0x00950078,
0x00000000,
+0x00290000,
+0x007d0105,
+0x00920073,
0x00000000,
+0x008e0000,
+0x007e0060,
+0x00930075,
0x00000000,
+0x00290000,
+0x007f0106,
+0x00940076,
0x00000000,
+0x008f0000,
+0x00800063,
+0x00950078,
0x00000000,
+0x01080000,
+0x00810108,
+0x00920074,
0x00000000,
+0x010b0000,
+0x0082010b,
+0x00930075,
0x00000000,
+0x01080000,
+0x00830108,
+0x00940077,
0x00000000,
+0x010c0000,
+0x0084010c,
+0x00950078,
0x00000000,
+0x00310000,
+0x00850107,
+0x00920073,
0x00000000,
+0x01290000,
+0x00860109,
+0x00930075,
0x00000000,
+0x00310000,
+0x00870107,
+0x00940076,
0x00000000,
+0x012a0000,
+0x0088010a,
+0x00950078,
0x00000000,
+0x00270000,
+0x008b004d,
+0x00920073,
0x00000000,
+0x008e0000,
+0x008c008d,
+0x00930075,
0x00000000,
+0x00270000,
+0x0089004d,
+0x00940076,
0x00000000,
+0x008f0000,
+0x008a008d,
+0x00950078,
0x00000000,
+0x00310000,
+0x006f002f,
+0x004e0070,
0x00000000,
+0x00300018,
+0x00980051,
+0x009700d0,
0x00000000,
+0x002f0018,
+0x00960050,
+0x009700d2,
0x00000000,
+0x002e0008,
+0x003c0031,
+0x00000017,
0x00000000,
+0x00220008,
+0x003c0032,
+0x00000018,
0x00000000,
+0x0137000c,
+0x00010001,
+0x01380001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00db0001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00dc0001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00dd0001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00de0001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00df0001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e00001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e10001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e20001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e30001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e40001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e50001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e60001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e70001,
0x00000000,
+0x0001000d,
+0x00010001,
+0x00e80001,
0x00000000,
+0x00fb000e,
+0x00010001,
+0x00fc0001,
0x00000000,
+0x002f0005,
+0x001c0027,
+0x00000030,
0x00000000,
+0x002a0005,
+0x001d002e,
+0x00000021,
0x00000000,
+0x00080006,
+0x00260021,
+0x0000001a,
0x00000000,
+0x00080006,
+0x00260022,
+0x0000001b,
0x00000000,
+0x00080007,
+0x00260021,
+0x0000001a,
0x00000000,
+0x00080007,
+0x00260022,
+0x0000001b,
0x00000000,
+0x00080006,
+0x006a0069,
+0x0000001e,
0x00000000,
+0x00080006,
+0x006a0029,
+0x0000001f,
0x00000000,
+0x00080007,
+0x006a0029,
+0x0000001f,
0x00000000,
+0x00c10001,
+0x00ca0052,
+0x0000011e,
0x00000000,
+0x00030004,
+0x000c0024,
+0x00900001,
0x00000000,
+0x00060004,
+0x000c0024,
+0x00910001,
0x00000000,
+0x010b0004,
+0x000c0108,
+0x00900001,
0x00000000,
+0x010c0004,
+0x000c0108,
+0x00910001,
0x00000000,
+0x00300004,
+0x00fe0051,
+0x00fd0001,
0x00000000,
+0x002f0004,
+0x00fe0050,
+0x00fd0001,
0x00000000,
+0x00410002,
+0x00430042,
+0x00000016,
0x00000000,
+0x00330002,
+0x00350034,
+0x00000013,
0x00000000,
+0x00360002,
+0x00380037,
+0x00000014,
0x00000000,
+0x00390002,
+0x003b003a,
+0x00000015,
0x00000000,
+0x00690002,
+0x006c006b,
+0x00000019,
0x00000000,
+0x01080002,
+0x0040003f,
+0x00000020,
0x00000000,
+0x00080002,
+0x00470046,
+0x00000019,
0x00000000,
+0x00cf0002,
+0x00c900c0,
+0x00000019,
0x00000000,
+0x010d0002,
+0x010f010e,
+0x00000019,
0x00000000,
+0x00270002,
+0x00450044,
+0x00000019,
0x00000000,
+0x00010002,
+0x00010001,
+0x00000019,
0x00000000,
+0x00010009,
+0x00010028,
+0x00530001,
0x00000000,
+0x00010009,
+0x00010023,
+0x00540001,
0x00000000,
+0x00c00011,
+0x00c200c1,
+0x00c700c3,
0x00000000,
+0x00c80010,
+0x00cb00ca,
+0x00ce00cc,
0x00000000,
+0x00010013,
+0x00010001,
+0x01120001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01130001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01140001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01150001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01160001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01170001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01180001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01190001,
0x00000000,
+0x0001000f,
+0x00010001,
+0x00010001,
0x00000000,
+0x00490012,
+0x00d30041,
+0x00d600d4,
0x00000000,
+0x004a0012,
+0x00d80033,
+0x00d700d5,
0x00000000,
+0x004b0012,
+0x00d90036,
+0x00d700d5,
0x00000000,
+0x004c0012,
+0x00da0039,
+0x00d700d5,
0x00000000,
+0x011b0016,
+0x011c0001,
+0x011d0001,
0x00000000,
+0x00010017,
+0x00010001,
+0x00000001,
0x00000000,
+0x011f0014,
+0x0121010b,
+0x01240122,
+0x00000013,
+0x011f0014,
+0x0121010c,
+0x01250122,
+0x00000013,
+0x011f0019,
+0x0121010b,
+0x01240122,
+0x04040013,
+0x011f0019,
+0x0121010c,
+0x01250122,
+0x04040013,
+0x01260015,
+0x012d012b,
+0x0130012e,
+0x00000013,
+0x01260015,
+0x012d012c,
+0x0131012e,
+0x00000013,
+0x0126001a,
+0x012d012b,
+0x0130012e,
+0x02c40013,
+0x0126001a,
+0x012d012c,
+0x0131012e,
+0x02c40013,
+0x01290000,
+0x00860127,
+0x00930075,
0x00000000,
+0x012a0000,
+0x00880128,
+0x00950078,
0x00000000,
+0x00010013,
+0x00010001,
+0x01320001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01330001,
0x00000000,
+0x0003001b,
+0x01340024,
+0x01350001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01360001,
0x00000000,
+0x010b001b,
+0x013a0108,
+0x01350001,
0x00000000,
+0x00010013,
+0x00010001,
+0x01390001,
0x00000000,
+0x00a7001c,
+0x00a60008,
+0x009e009c,
0x00000000,
+0x00a9001c,
+0x00a80025,
+0x009f009d,
0x00000000,
+0x00a7001d,
+0x00a60008,
+0x009e009c,
0x00000000,
+0x00a9001d,
+0x00a80025,
+0x009f009d,
0x00000000,
0x00000000,
0x00000000,
@@ -4053,6 +5789,33 @@
0x00000000,
0x00000000,
0x00000000,
+0x00003000,
+0x04a40411,
+0x045704af,
+0x00620461,
+0x004d0038,
+0x04e204bd,
+0x044204ca,
+0x04ef05dd,
+0x00e7063b,
+0x01ea01be,
+0x00d10424,
+0x028402a2,
+0x06b9072f,
+0x02ae046c,
+0x04900292,
+0x01fb0223,
+0x00f50002,
+0x010f0101,
+0x0127011b,
+0x013a0133,
+0x01490151,
+0x01580141,
+0x019a0173,
+0x01bb0003,
+0x01bd01bc,
+0x050405bc,
+0x000001a6,
0x00000000,
0x00000000,
0x00000000,
@@ -4463,6 +6226,10 @@
0x00000000,
0x00000000,
0x00000000,
+0x00001580,
+0x00001580,
+0x00001580,
+0x0000193f,
0x00000000,
0x00000000,
0x00000000,
@@ -5658,505 +7425,121 @@
0x00000000,
0x00000000,
0x00000000,
-0x00B90011,
-0x009E009D,
-0x00A0009F,
0x00000000,
-0x002F0011,
-0x00A400A3,
-0x00A600A5,
0x00000000,
-0x00BA0011,
-0x00AC00AB,
-0x00A100AD,
0x00000000,
-0x00BA0011,
-0x00B200B1,
-0x00B400B3,
0x00000000,
-0x00BB0011,
-0x00AF00AE,
-0x00A200B0,
0x00000000,
-0x00BB0011,
-0x00B600B5,
-0x00B800B7,
0x00000000,
-0x00560014,
-0x00570003,
-0x005A0058,
-0x00000013,
-0x00560014,
-0x00570006,
-0x00610058,
-0x00000013,
-0x00640014,
-0x0065010C,
-0x00680066,
-0x00000012,
-0x005B0015,
-0x005C0002,
-0x005F005D,
-0x00000013,
-0x005B0015,
-0x005C0005,
-0x0062005D,
-0x00000013,
-0x01040003,
-0x0001008E,
-0x00900001,
0x00000000,
-0x01050003,
-0x0001008F,
-0x00910001,
0x00000000,
-0x01060003,
-0x0001012B,
-0x00900001,
0x00000000,
-0x01060003,
-0x0001012C,
-0x00910001,
0x00000000,
-0x004D0003,
-0x0001008E,
-0x00900001,
0x00000000,
-0x004D0003,
-0x0001008F,
-0x00910001,
0x00000000,
-0x0032000A,
-0x00710030,
-0x004E0072,
0x00000000,
-0x00BA0000,
-0x00A700BA,
-0x009C00A9,
0x00000000,
-0x00BB0000,
-0x00A800BB,
-0x009C00AA,
0x00000000,
-0x0030000A,
-0x00BE0030,
-0x009C00BF,
0x00000000,
-0x00010013,
-0x00010001,
-0x010F0001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01100001,
0x00000000,
-0x000D0009,
-0x000F000E,
-0x00110010,
0x00000000,
-0x00280000,
-0x002B002A,
-0x002D002C,
0x00000000,
-0x00240000,
-0x00790024,
-0x00920074,
0x00000000,
-0x00030000,
-0x007A0003,
-0x00930075,
0x00000000,
-0x00240000,
-0x007B0024,
-0x00940077,
0x00000000,
-0x00060000,
-0x007C0006,
-0x00950078,
0x00000000,
-0x00290000,
-0x007D0104,
-0x00920073,
0x00000000,
-0x008E0000,
-0x007E0060,
-0x00930075,
0x00000000,
-0x00290000,
-0x007F0105,
-0x00940076,
0x00000000,
-0x008F0000,
-0x00800063,
-0x00950078,
0x00000000,
-0x01070000,
-0x00810107,
-0x00920074,
0x00000000,
-0x010A0000,
-0x0082010A,
-0x00930075,
0x00000000,
-0x01070000,
-0x00830107,
-0x00940077,
0x00000000,
-0x010B0000,
-0x0084010B,
-0x00950078,
0x00000000,
-0x00310000,
-0x00850106,
-0x00920073,
0x00000000,
-0x012B0000,
-0x00860108,
-0x00930075,
0x00000000,
-0x00310000,
-0x00870106,
-0x00940076,
0x00000000,
-0x012C0000,
-0x00880109,
-0x00950078,
0x00000000,
-0x00270000,
-0x008B004D,
-0x00920073,
0x00000000,
-0x008E0000,
-0x008C008D,
-0x00930075,
0x00000000,
-0x00270000,
-0x0089004D,
-0x00940076,
0x00000000,
-0x008F0000,
-0x008A008D,
-0x00950078,
0x00000000,
-0x00310000,
-0x006F002F,
-0x004E0070,
0x00000000,
-0x002F0000,
-0x009A00B9,
-0x009C009B,
0x00000000,
-0x002F0000,
-0x00BC002F,
-0x009C00BD,
0x00000000,
-0x00300018,
-0x00980051,
-0x009700D1,
0x00000000,
-0x002F0018,
-0x00960050,
-0x009700D1,
0x00000000,
-0x002E0007,
-0x00010031,
-0x00000017,
0x00000000,
-0x00220007,
-0x00010032,
-0x00000018,
0x00000000,
-0x00CF000B,
-0x00010001,
-0x00D00001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00DA0001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00DB0001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00DC0001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00DD0001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00DE0001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00DF0001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E00001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E10001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E20001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E30001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E40001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E50001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E60001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E70001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E80001,
0x00000000,
-0x0001000C,
-0x00010001,
-0x00E90001,
0x00000000,
-0x00FA000D,
-0x00010001,
-0x00FB0001,
0x00000000,
-0x002F0005,
-0x001C0027,
-0x00000030,
0x00000000,
-0x002A0005,
-0x001D002E,
-0x00000021,
0x00000000,
-0x00080006,
-0x00260021,
-0x0000001A,
0x00000000,
-0x00080006,
-0x00260022,
-0x0000001B,
0x00000000,
-0x00080006,
-0x006A0069,
-0x0000001E,
0x00000000,
-0x00080006,
-0x006A0029,
-0x0000001F,
0x00000000,
-0x00C10001,
-0x00C90052,
-0x00000120,
0x00000000,
-0x00030004,
-0x000C0024,
-0x00900001,
0x00000000,
-0x00060004,
-0x000C0024,
-0x00910001,
0x00000000,
-0x010A0004,
-0x000C0107,
-0x00900001,
0x00000000,
-0x010B0004,
-0x000C0107,
-0x00910001,
0x00000000,
-0x00300004,
-0x00FD0051,
-0x00FC0001,
0x00000000,
-0x002F0004,
-0x00FD0050,
-0x00FC0001,
0x00000000,
-0x00410002,
-0x00430042,
-0x00000016,
0x00000000,
-0x00330002,
-0x00350034,
-0x00000013,
0x00000000,
-0x00360002,
-0x00380037,
-0x00000014,
0x00000000,
-0x00390002,
-0x003B003A,
-0x00000015,
0x00000000,
-0x00690002,
-0x006C006B,
-0x00000019,
0x00000000,
-0x01070002,
-0x0040003F,
-0x00000020,
0x00000000,
-0x00080002,
-0x00470046,
-0x00000019,
0x00000000,
-0x00300002,
-0x00BB00BA,
-0x00000019,
0x00000000,
-0x00CE0002,
-0x00C800C0,
-0x00000019,
0x00000000,
-0x010C0002,
-0x010E010D,
-0x00000019,
0x00000000,
-0x00270002,
-0x00450044,
-0x00000019,
0x00000000,
-0x003C0002,
-0x003E003D,
-0x00000019,
0x00000000,
-0x00010008,
-0x00010028,
-0x00530001,
0x00000000,
-0x00010008,
-0x00010023,
-0x00540001,
0x00000000,
-0x00C00010,
-0x00C200C1,
-0x00C700C3,
0x00000000,
-0x00C8000F,
-0x00CA00C9,
-0x00CD00CB,
0x00000000,
-0x00010013,
-0x00010001,
-0x01110001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01120001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01130001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01140001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01150001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01160001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01170001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01180001,
0x00000000,
-0x0001000E,
-0x00010001,
-0x00010001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01190001,
0x00000000,
-0x00010013,
-0x00010001,
-0x011A0001,
0x00000000,
-0x00010013,
-0x00010001,
-0x011B0001,
0x00000000,
-0x00490012,
-0x00D20041,
-0x00D500D3,
0x00000000,
-0x004A0012,
-0x00D70033,
-0x00D600D4,
0x00000000,
-0x004B0012,
-0x00D80036,
-0x00D600D4,
0x00000000,
-0x004C0012,
-0x00D90039,
-0x00D600D4,
0x00000000,
-0x011D0016,
-0x011E0001,
-0x011F0001,
0x00000000,
-0x00010017,
-0x00010001,
-0x00000001,
0x00000000,
-0x01210014,
-0x0123010A,
-0x01260124,
-0x00000013,
-0x01210014,
-0x0123010B,
-0x01270124,
-0x00000013,
-0x01280015,
-0x012F012D,
-0x01320130,
-0x00000013,
-0x01280015,
-0x012F012E,
-0x01330130,
-0x00000013,
-0x012B0000,
-0x00860129,
-0x00930075,
0x00000000,
-0x012C0000,
-0x0088012A,
-0x00950078,
0x00000000,
-0x00010013,
-0x00010001,
-0x01340001,
0x00000000,
-0x00010013,
-0x00010001,
-0x01350001,
0x00000000,
0x00000000,
0x00000000,
@@ -6171,14 +7554,10 @@
0x00000000,
0x00000000,
0x00000000,
-0x00000010,
0x00000000,
0x00000000,
-0x000022E8,
0x00000000,
0x00000000,
-0x00000018,
-0x000022E0,
0x00000000,
0x00000000,
0x00000000,
@@ -6246,12 +7625,9 @@
0x00000000,
0x00000000,
0x00000000,
-0x0000000A,
0x00000000,
0x00000000,
0x00000000,
-0x7FFF7FFF,
-0x7FFF7FFF,
0x00000000,
0x00000000,
0x00000000,
@@ -6261,103 +7637,29 @@
0x00000000,
0x00000000,
0x00000000,
-0x00000004,
-0x00000001,
0x00000000,
0x00000000,
0x00000000,
-0x003FFFF0,
0x00000000,
-0x00400000,
-0x00000004,
-0x00000001,
0x00000000,
0x00000000,
0x00000000,
-0x003FFFF0,
0x00000000,
-0x00400000,
-0x019C0189,
-0x01C201AF,
-0x01E801D5,
-0x020E01FB,
-0x02340221,
-0x025A0247,
-0x0280026D,
-0x02A60293,
-0x00000004,
-0x00000001,
0x00000000,
0x00000000,
0x00000000,
-0x003FFFF0,
0x00000000,
-0x00400000,
-0x02CF02BD,
-0x02F302E1,
-0x03170305,
-0x033B0329,
-0x035F034D,
-0x03830371,
-0x03A70395,
-0x03CB03B9,
-0x00008363,
-0x00000428,
-0x00000000,
-0x00003800,
-0x000000FF,
-0x00000004,
-0x00000001,
0x00000000,
0x00000000,
0x00000000,
-0x003FFFF0,
0x00000000,
-0x00400000,
0x00000000,
0x00000000,
0x00000000,
-0x000CE13D,
-0x00006845,
-0x00008363,
-0x00000428,
-0x000CE13D,
-0x00006845,
-0x00008363,
-0x00000428,
-0x000CE13D,
-0x00006845,
-0x25782728,
-0x00002738,
-0x25682708,
-0x00002718,
-0x297826B8,
-0x000026A8,
-0x29682698,
-0x00002688,
-0x255826E8,
-0x000026F8,
-0x254826C8,
-0x000026D8,
-0x29582638,
-0x00002628,
-0x29482618,
-0x00002608,
-0x25382668,
-0x00002678,
-0x25282648,
-0x00002658,
-0x27582488,
-0x00002478,
-0x259824A8,
-0x00002498,
-0x25A824C8,
-0x000024B8,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
-0x00003000,
0x00000000,
0x00000000,
0x00000000,
@@ -7212,30 +8514,14 @@
0x00000000,
0x00000000,
0x00000000,
-0x00003900,
-0x00003900,
-0x00003900,
-0x00003CBF,
-0x00000004,
-0x00000001,
0x00000000,
0x00000000,
0x00000000,
-0x003FFFF0,
0x00000000,
-0x00400000,
-0x00000004,
-0x00000001,
0x00000000,
0x00000000,
0x00000000,
-0x003FFFF0,
0x00000000,
-0x00400000,
-0x254826C8,
-0x00002C08,
-0x255826E8,
-0x00002C18,
0x00000000,
0x00000000,
0x00000000,
@@ -19713,468 +20999,470 @@
0x00000000,
0x00000000,
0x00000000,
-0x00041603,
+0x00046f03,
0x00000000,
-0x00041902,
+0x00047202,
0x00000000,
-0x00066A03,
+0x0006ba03,
0x00000000,
-0x00046305,
+0x0004bc05,
0x00000000,
-0x00046804,
+0x0004c104,
0x00000000,
-0x00066505,
+0x0006b505,
0x00000000,
-0x0001830C,
+0x0001dc0c,
0x00000000,
-0x00046C28,
+0x0004c528,
0x00000000,
-0x0004BC28,
+0x00051528,
0x00000000,
-0x0006F206,
+0x0006ef06,
0x00000000,
-0x00022A18,
+0x00028318,
0x00000000,
-0x00013A12,
+0x00019312,
0x00000000,
-0x00014C12,
-0x00013700,
-0x00015C24,
-0x00013812,
-0x00014A12,
+0x0001a512,
+0x00019000,
+0x0001b524,
+0x00019112,
+0x0001a312,
0x00120024,
-0x00057800,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015C0E,
-0x00015F0C,
-0x00016A04,
-0x00015F0C,
-0x00016E04,
-0x00000000,
-0x00017202,
-0x00000000,
-0x00017402,
-0x00016B0C,
-0x00017604,
-0x00016B0C,
-0x00017A04,
-0x00017E02,
-0x00017E02,
+0x0006dc00,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b50e,
+0x0001b80c,
+0x0001c304,
+0x0001b80c,
+0x0001c704,
0x00000000,
-0x00018F0C,
+0x0001cb02,
0x00000000,
-0x00019B0C,
+0x0001cd02,
+0x0001c40c,
+0x0001cf04,
+0x0001c40c,
+0x0001d304,
+0x0001d702,
+0x0001d702,
0x00000000,
-0x0001770C,
+0x0001e80c,
0x00000000,
-0x00016B0C,
+0x0001f40c,
0x00000000,
-0x00015F0C,
-0x00016B0C,
-0x0001770C,
+0x0001d00c,
0x00000000,
-0x0001A70C,
+0x0001c40c,
0x00000000,
-0x0001BF0C,
+0x0001b80c,
+0x0001c40c,
+0x0001d00c,
0x00000000,
-0x0001CB0C,
+0x0002000c,
0x00000000,
-0x0001FD0C,
-0x00020909,
-0x00020909,
+0x0002180c,
0x00000000,
-0x00018009,
-0x000B0009,
+0x0002240c,
0x00000000,
+0x0002560c,
+0x00026209,
+0x00026209,
0x00000000,
-0x0001B30C,
+0x0001d909,
+0x000b0009,
0x00000000,
-0x00066D0C,
0x00000000,
-0x0006790C,
+0x00020c0c,
0x00000000,
-0x0006850C,
+0x0006bd0c,
0x00000000,
-0x0006910C,
+0x0006c90c,
0x00000000,
-0x0002420C,
-0x00022A18,
-0x0002720C,
-0x00022A18,
-0x00027E0C,
+0x0006d50c,
0x00000000,
-0x00024E0C,
-0x00022A00,
-0x00028A0C,
-0x00022A00,
-0x0002960C,
+0x0006e10c,
0x00000000,
-0x00025A0C,
-0x00022A18,
-0x0002A20C,
-0x00022A18,
-0x0002AE0C,
+0x00029b0c,
+0x00028318,
+0x0002cb0c,
+0x00083900,
+0x0002d70c,
0x00000000,
-0x0008230C,
-0x00022A18,
-0x00082F0C,
-0x00022A18,
-0x00083B0C,
-0x00022A18,
-0x0002BA0C,
-0x00022A18,
-0x0002C60C,
+0x0002a70c,
+0x00028300,
+0x0002e30c,
+0x00083900,
+0x0002ef0c,
0x00000000,
-0x0002660C,
-0x00022A18,
-0x0002D20C,
-0x00022A18,
-0x0002DE0C,
-0x00022A18,
-0x0002EA0C,
-0x00022A18,
-0x0002F60C,
-0x00022A18,
-0x0003020C,
-0x00022A18,
-0x00030E0C,
+0x0002b30c,
+0x00028318,
+0x0002fb0c,
+0x00083900,
+0x0003070c,
+0x00083801,
+0x00083901,
0x00000000,
-0x00031A78,
0x00000000,
-0x00039218,
0x00000000,
-0x0003AA18,
0x00000000,
-0x0003C218,
+0x00028318,
+0x0003130c,
+0x00083900,
+0x00031f0c,
0x00000000,
-0x0003DA18,
+0x0002bf0c,
+0x00028318,
+0x00032b0c,
+0x00083900,
+0x0003370c,
+0x00028318,
+0x0003430c,
+0x00083900,
+0x00034f0c,
+0x00028318,
+0x00035b0c,
+0x00083900,
+0x0003670c,
0x00000000,
-0x00040A0C,
-0x000B0019,
+0x00037378,
0x00000000,
-0x000B0009,
+0x0003eb18,
0x00000000,
+0x00040318,
0x00000000,
-0x00041B18,
+0x00041b18,
0x00000000,
0x00043318,
0x00000000,
-0x00044B18,
-0x000B2DD8,
+0x0004630c,
+0x000b0019,
+0x00000000,
+0x000b0009,
0x00000000,
-0x000B2DD4,
0x00000000,
-0x000B2DC0,
+0x00047418,
0x00000000,
+0x00048c18,
0x00000000,
-0x00046C28,
-0x00029313,
-0x0002A613,
-0x00046C28,
-0x0002BB00,
-0x0002BC00,
-0x000B7900,
+0x0004a418,
+0x000b080c,
+0x00000000,
+0x000b0808,
+0x00000000,
+0x000b07f4,
+0x00000000,
+0x00000000,
+0x0004c528,
+0x0002ec13,
+0x0002ff13,
+0x0004c528,
+0x00031400,
+0x00031500,
+0x00020600,
0x00590002,
-0x00217800,
-0x00000000,
-0x00049428,
-0x00029313,
-0x0002A613,
-0x00049428,
-0x0002B900,
-0x0002BA00,
-0x000B8100,
-0x005E0002,
-0x00212800,
-0x00000000,
-0x00049428,
+0x00038c00,
+0x00000000,
+0x0004ed28,
+0x0002ec13,
+0x0002ff13,
+0x0004ed28,
+0x00031200,
+0x00031300,
+0x00020e00,
+0x005e0002,
+0x00033c00,
+0x00000000,
+0x0004ed28,
0x00590004,
-0x00217800,
-0x005E0004,
-0x00212800,
-0x00000000,
-0x00049428,
-0x00000000,
-0x0004BC28,
-0x0003B912,
-0x0003CB12,
-0x0004BC28,
-0x0003DD00,
-0x0003DE00,
-0x000B9100,
-0x0067000C,
-0x00226800,
-0x00000000,
-0x0004E40C,
-0x0001BF0C,
-0x00015F0C,
-0x00000000,
-0x0004F00C,
-0x00000000,
-0x0004FC0C,
-0x00022A18,
-0x0005080C,
-0x00022A18,
-0x0005140C,
-0x00053919,
-0x00053919,
-0x00000000,
-0x00041119,
-0x00052019,
-0x00052019,
-0x0003F819,
-0x0003DF19,
-0x00000000,
-0x0004450B,
-0x00000000,
-0x0004500B,
-0x00000000,
-0x00045B07,
-0x00000000,
-0x00042A0B,
-0x00000000,
-0x0004350B,
-0x00000000,
-0x00044005,
-0x0005760B,
-0x0005760B,
-0x00058107,
-0x00058107,
-0x0005880B,
-0x0005880B,
-0x00059305,
-0x00059305,
-0x0005980B,
-0x0005980B,
-0x0005A307,
-0x0005A307,
-0x0005AA0B,
-0x0005AA0B,
-0x0005B505,
-0x0005B505,
-0x0005BC0B,
-0x0005BC0B,
-0x0005C707,
-0x0005C707,
-0x0005CE0B,
-0x0005CE0B,
-0x0005D905,
-0x0005D905,
-0x0005DE0B,
-0x0005DE0B,
-0x0005E907,
-0x0005E907,
-0x0005F00B,
-0x0005F00B,
-0x0005FB05,
-0x0005FB05,
-0x0006120B,
-0x0006120B,
-0x00061D07,
-0x00061D07,
-0x0006000B,
-0x0006000B,
-0x00060B05,
-0x00060B05,
-0x00000000,
-0x00063D28,
-0x00000000,
-0x00057002,
-0x00000000,
-0x00057204,
+0x00038c00,
+0x005e0004,
+0x00033c00,
+0x00000000,
+0x0004ed28,
+0x00000000,
+0x00051528,
+0x00041212,
+0x00042412,
+0x00051528,
+0x00043600,
+0x00043700,
+0x00021e00,
+0x0067000c,
+0x00047c00,
+0x00000000,
+0x00053d0c,
+0x0002180c,
+0x0001b80c,
+0x00000000,
+0x0005490c,
+0x00083900,
+0x0005550c,
+0x00028318,
+0x0005610c,
+0x00083900,
+0x00056d0c,
+0x00059219,
+0x00059219,
+0x00000000,
+0x00046a19,
+0x00057919,
+0x00057919,
+0x00045119,
+0x00043819,
+0x00000000,
+0x0004a20d,
+0x00000000,
+0x0004af0d,
+0x00000000,
+0x0004bc07,
+0x00000000,
+0x0004830d,
+0x00000000,
+0x0004900d,
+0x00000000,
+0x00049d05,
+0x0005cf0d,
+0x0005cf0d,
+0x0005dc07,
+0x0005dc07,
+0x0005e30d,
+0x0005e30d,
+0x0005f005,
+0x0005f005,
+0x0005f50d,
+0x0005f50d,
+0x00060207,
+0x00060207,
+0x0006090d,
+0x0006090d,
+0x00061605,
+0x00061605,
+0x00061b0d,
+0x00061b0d,
+0x00062807,
+0x00062807,
+0x00062f0d,
+0x00062f0d,
+0x00063c05,
+0x00063c05,
+0x0006410d,
+0x0006410d,
+0x00064e07,
+0x00064e07,
+0x0006550d,
+0x0006550d,
+0x00066205,
+0x00066205,
+0x00067b0d,
+0x00067b0d,
+0x00068805,
+0x00068805,
+0x0006670d,
+0x0006670d,
+0x00067407,
+0x00067407,
+0x00000000,
+0x00068d28,
+0x00000000,
+0x0005c902,
+0x00000000,
+0x0005cb04,
0x00000006,
0x00000000,
0x00000003,
0x00000000,
-0x000B000B,
+0x000b000d,
0x00000000,
0x00010007,
0x00000000,
-0x000B000B,
+0x000b000d,
0x00000000,
0x00030005,
0x00000000,
-0x0005520F,
-0x0005520F,
-0x000B000F,
-0x0008A800,
-0x0005610F,
-0x0005610F,
+0x0005ab0f,
+0x0005ab0f,
+0x0000000f,
+0x00000000,
+0x0005ba0f,
+0x0005ba0f,
0x00030007,
0x00000000,
-0x00062209,
-0x00062209,
-0x00046209,
-0x00046209,
-0x000B0009,
0x00000000,
0x00000000,
-0x00063102,
-0x00062B03,
-0x00062B03,
-0x000BA102,
-0x00046B03,
-0x00000003,
-0x002E8C00,
-0x00000003,
-0x002EBC00,
-0x00000003,
-0x002EC000,
0x00000000,
-0x00063302,
-0x00062E03,
-0x00062E03,
-0x000BB102,
-0x00046E03,
-0x00000003,
-0x002E8E00,
-0x00069D09,
-0x00069D09,
-0x0006A609,
-0x0006A609,
-0x00000000,
-0x00047109,
-0x00000000,
-0x00047A09,
-0x00000000,
-0x00063502,
-0x0006AF03,
-0x0006AF03,
-0x000BB302,
-0x00048303,
-0x00000000,
-0x00063902,
-0x0006B203,
-0x0006B203,
-0x000BB702,
-0x00048603,
-0x00000000,
-0x00063702,
-0x0006B503,
-0x0006B503,
-0x000BB502,
-0x00048903,
-0x00000003,
-0x002EBE00,
0x00000000,
-0x00063B02,
-0x0006B803,
-0x0006B803,
-0x000BB902,
-0x00048C03,
-0x00000003,
-0x002EC200,
-0x00000000,
-0x0006BB0C,
-0x00022A18,
-0x0006C70C,
-0x00022A18,
-0x0006D30C,
-0x0006DF09,
-0x0006DF09,
-0x00000000,
-0x00049109,
-0x0006E809,
-0x0006E809,
-0x0004A309,
-0x00049A09,
-0x00000000,
-0x00072A06,
-0x00022A00,
-0x00074818,
-0x0007600B,
-0x0007600B,
-0x00000000,
-0x0004B00B,
-0x00013700,
-0x00073018,
-0x0007600B,
-0x0007600B,
-0x00074818,
-0x00072A06,
-0x00C4000B,
-0x0000C500,
-0x00000000,
-0x0006F806,
-0x00022A18,
-0x0006FF18,
-0x0004AC04,
-0x0006FE00,
-0x00013700,
-0x00071700,
-0x000BAE00,
-0x00071812,
-0x00EA00CC,
-0x000026FF,
-0x00000000,
-0x0006F206,
0x00000000,
-0x00100020,
-0x00F42CDC,
-0x0000002C,
+0x0005ba01,
+0x00000000,
+0x0005ba01,
+0x000c0364,
+0x00000007,
+0x002003b4,
+0x00000007,
+0x00000000,
+0x0006da02,
+0x00000000,
+0x00098802,
+0x00000000,
+0x0006dc02,
0x00000000,
-0x0004BB0F,
-0x00078313,
-0x00078313,
+0x00098a02,
+0x0006de02,
+0x00098c01,
0x00000000,
-0x0004CA13,
0x00000000,
-0x0004DD13,
+0x00000000,
+0x0008c860,
+0x00000000,
+0x0008c860,
+0x00000000,
+0x00092860,
+0x00000000,
+0x00092860,
+0x00050c01,
+0x00083918,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00072706,
+0x00028300,
+0x00074518,
+0x00075d0b,
+0x00075d0b,
+0x00000000,
+0x0004c90b,
+0x00019000,
+0x00072d18,
+0x00075d0b,
+0x00075d0b,
+0x00074518,
+0x00072706,
+0x00c4000b,
+0x0000c500,
+0x00000000,
+0x0006f506,
+0x00083900,
+0x0006f506,
+0x00028318,
+0x0006fc18,
+0x0004c504,
+0x0006fb00,
+0x00019000,
+0x00071400,
+0x00023000,
+0x00071512,
+0x00ea00cd,
+0x000026ff,
+0x00000000,
+0x0006ef06,
+0x0006ee00,
+0x0004d40f,
+0x00000000,
+0x00000000,
+0x0006ed00,
+0x0004d40f,
+0x00078013,
+0x00078013,
+0x00000000,
+0x0004e313,
+0x00000000,
+0x0004f613,
0x00170013,
0x00000000,
0x00170013,
0x00000000,
-0x00079613,
-0x00079613,
-0x0007A913,
-0x0007A913,
-0x0007BC13,
-0x0007BC13,
-0x00002060,
+0x00079313,
+0x00079313,
+0x0007a613,
+0x0007a613,
+0x0007b913,
+0x0007b913,
+0x00000274,
0x00000000,
-0x00002088,
+0x0000029c,
0x00000000,
-0x000020B0,
+0x000002c4,
0x00000000,
-0x000020D8,
+0x000002ec,
0x00000000,
-0x00002100,
+0x00000314,
0x00000000,
-0x00002128,
+0x0000033c,
0x00000000,
-0x00002150,
+0x00000364,
0x00000000,
-0x00002178,
+0x0000038c,
0x00000000,
-0x000021A0,
+0x000003b4,
0x00000000,
-0x000021C8,
+0x000003dc,
0x00000000,
-0x000021F0,
+0x00000404,
0x00000000,
-0x00002218,
+0x0000042c,
0x00000000,
-0x00002240,
+0x00000454,
0x00000000,
-0x00002268,
+0x0000047c,
0x00000000,
-0x00002290,
+0x000004a4,
0x00000000,
-0x000022B8,
+0x000004cc,
0x00000000,
0x00000000,
0x00000000,
@@ -20209,124 +21497,300 @@
0x00000000,
0x00000000,
0x00000000,
-0x000B2710,
-0x000F00EA,
+0x0001ac10,
+0x000f00eb,
0x00000000,
0x00000002,
0x00000000,
0x00000000,
-0x00013700,
+0x00019000,
+0x00000000,
+0x00019a0c,
+0x00000000,
+0x0007cc02,
+0x00000000,
+0x0007ce04,
+0x00000000,
+0x0007d206,
+0x00000000,
+0x0007d80c,
+0x00000000,
+0x0007e418,
+0x00000000,
+0x00044b0c,
+0x00000000,
+0x0004570c,
+0x00000000,
+0x0002300c,
+0x00000000,
+0x00023c0c,
+0x00000000,
+0x00024802,
+0x00000000,
+0x00024b04,
+0x00000000,
+0x00025002,
+0x00000000,
+0x00025204,
+0x00000000,
+0x0007fc0c,
+0x00028318,
+0x0008080c,
+0x00083900,
+0x0008140c,
+0x00000914,
+0x00000000,
+0x0000091c,
+0x00000000,
+0x00000924,
+0x00000000,
+0x0000092c,
+0x00000000,
+0x00000934,
+0x00000000,
+0x0000093c,
+0x00000000,
+0x00000944,
+0x00000000,
+0x0000094c,
+0x00000000,
+0x00000954,
+0x00000000,
+0x0000095c,
+0x00000000,
+0x00000000,
+0x00013d00,
+0x00000000,
+0x00056000,
+0x00013d00,
+0x00019000,
+0x00001940,
+0x00000000,
+0x00050c00,
+0x00050c01,
+0x00000000,
+0x00083a28,
+0x00000000,
+0x00083a28,
+0x0002ec13,
+0x0002ff13,
+0x00083a28,
+0x00051000,
+0x00051100,
+0x00025900,
+0x00230002,
+0x0002c401,
+0x00230004,
+0x0002c401,
+0x00000000,
+0x00086228,
+0x00000000,
+0x00086228,
+0x00000000,
+0x00086228,
+0x00000000,
+0x00088a02,
+0x00000000,
+0x00088c04,
+0x00000000,
+0x00024803,
+0x00000000,
+0x00024b05,
+0x0002ec13,
+0x0002ff13,
+0x00086228,
+0x00050e00,
+0x00050f00,
+0x00026100,
+0x002f0002,
+0x00040401,
+0x002f0004,
+0x00040401,
+0x000009a4,
+0x00000000,
+0x000009ac,
+0x00000000,
+0x000512a8,
+0x0008901c,
+0x0006001c,
+0x00000000,
+0x000009b4,
+0x00000000,
+0x00000000,
+0x00100020,
+0x000806f0,
+0x00000007,
+0x000009bc,
+0x00000000,
+0x000512a8,
+0x0008ac1c,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
0x00000000,
-0x0001410C,
0x00000000,
-0x0007CF02,
0x00000000,
-0x0007D104,
0x00000000,
-0x0007D506,
0x00000000,
-0x0007DB0C,
0x00000000,
-0x0007E748,
0x00000000,
-0x0003F20C,
0x00000000,
-0x0003FE0C,
0x00000000,
-0x0001D70C,
0x00000000,
-0x0001E30C,
0x00000000,
-0x0001EF02,
0x00000000,
-0x0001F204,
0x00000000,
-0x0001F702,
0x00000000,
-0x0001F904,
0x00000000,
-0x0007FF0C,
-0x00022A18,
-0x00080B0C,
-0x00022A18,
-0x0008170C,
-0x00002EEC,
0x00000000,
-0x00002EF4,
0x00000000,
-0x00002EFC,
0x00000000,
-0x00002F04,
0x00000000,
-0x00002F0C,
0x00000000,
-0x00002F14,
0x00000000,
-0x00002F1C,
0x00000000,
-0x00002F24,
0x00000000,
-0x00002F2C,
0x00000000,
-0x00002F34,
0x00000000,
-0x00002F3C,
0x00000000,
-0x00002F44,
0x00000000,
-0x00002F4C,
0x00000000,
0x00000000,
-0x0008B800,
0x00000000,
-0x000E4000,
-0x0008B800,
-0x00013700,
-0x00003CC0,
0x00000000,
-0x0004F300,
-0x0004F301,
0x00000000,
-0x00084828,
0x00000000,
-0x00084828,
-0x00029313,
-0x0002A613,
-0x00084828,
-0x0004F500,
-0x0004F600,
-0x000F3400,
-0x00250002,
-0x0020B001,
-0x00250004,
-0x0020B001,
0x00000000,
-0x00087028,
0x00000000,
-0x00087028,
0x00000000,
-0x00087028,
0x00000000,
-0x00089802,
0x00000000,
-0x00089A04,
0x00000000,
-0x0001EF03,
0x00000000,
-0x0001F205,
-0x00029313,
-0x0002A613,
-0x00087028,
-0x0004F700,
-0x0004F800,
-0x000F3C00,
-0x00310002,
-0x0021F001,
-0x00310004,
-0x0021F001,
-0x00003D10,
0x00000000,
-0x00003D18,
0x00000000,
0x00000000,
0x00000000,
@@ -23076,6 +24540,10 @@
0x00000000,
0x00000000,
0x00000000,
+0x00000001,
+0x00000001,
+0x00000001,
+0x00000001,
0x00000000,
0x00000000,
0x00000000,
@@ -23100,6 +24568,7 @@
0x00000000,
0x00000000,
0x00000000,
+0x0000001b,
0x00000000,
0x00000000,
0x00000000,
@@ -23151,23 +24620,41 @@
0x00000000,
0x00000000,
0x00000000,
+0x00000003,
0x00000000,
+0x00000003,
0x00000000,
+0x00000003,
0x00000000,
+0x00000006,
0x00000000,
+0x00000006,
0x00000000,
+0x00000006,
0x00000000,
+0x00000009,
0x00000000,
+0x00000009,
0x00000000,
+0x00000009,
0x00000000,
+0x00000005,
0x00000000,
+0x00000005,
0x00000000,
+0x00000005,
0x00000000,
+0x00000007,
0x00000000,
+0x00000007,
0x00000000,
+0x00000007,
0x00000000,
+0x00000008,
0x00000000,
+0x00000008,
0x00000000,
+0x00000008,
0x00000000,
0x00000000,
0x00000000,
@@ -23288,7 +24775,6 @@
0x00000000,
0x00000000,
0x00000000,
-0x0000001B,
0x00000000,
0x00000000,
0x00000000,
@@ -23340,41 +24826,413 @@
0x00000000,
0x00000000,
0x00000000,
-0x00000003,
0x00000000,
-0x00000003,
0x00000000,
-0x00000003,
0x00000000,
-0x00000006,
0x00000000,
-0x00000006,
0x00000000,
-0x00000006,
0x00000000,
-0x00000009,
0x00000000,
-0x00000009,
0x00000000,
-0x00000009,
0x00000000,
-0x00000005,
0x00000000,
-0x00000005,
0x00000000,
-0x00000005,
0x00000000,
-0x00000007,
0x00000000,
-0x00000007,
0x00000000,
-0x00000007,
0x00000000,
-0x00000008,
0x00000000,
-0x00000008,
0x00000000,
-0x00000008,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00e66666,
+0x00199999,
+0x00199999,
+0x00199999,
+0x00000000,
+0x00000000,
+0x00e66666,
+0x00e66666,
+0x00ffffff,
+0x00ffffff,
+0x00199999,
+0x00199999,
+0x00f33333,
+0x000ccccc,
+0x00f33333,
+0x00f33333,
+0x00199999,
+0x00e66666,
+0x00f33333,
+0x00f33333,
+0x00f33333,
+0x000ccccc,
+0x00199999,
+0x00199999,
+0x000ccccc,
+0x00162b95,
+0x00f33333,
+0x000ccccc,
+0x00e66666,
+0x00000000,
+0x00f33333,
+0x00f33333,
+0x000ccccc,
+0x00e9d46a,
+0x00199999,
+0x00e66666,
+0x000ccccc,
+0x00e9d46a,
+0x00f33333,
+0x00f33333,
+0x00e66666,
+0x00ffffff,
+0x00f33333,
+0x000ccccc,
+0x000ccccc,
+0x00162b95,
+0x00199999,
+0x00199999,
+0x00162b95,
+0x0018ba4a,
+0x000ccccc,
+0x00162b95,
+0x00000000,
+0x00121a18,
+0x00f33333,
+0x000ccccc,
+0x00e9d46a,
+0x0006a032,
+0x00e66666,
+0x00000000,
+0x00e9d46a,
+0x00f95fcd,
+0x00f33333,
+0x00f33333,
+0x00ffffff,
+0x00ede5e7,
+0x000ccccc,
+0x00e9d46a,
+0x00162b95,
+0x00e745b5,
+0x00199999,
+0x00e66666,
+0x00162b95,
+0x00e745b5,
+0x000ccccc,
+0x00e9d46a,
+0x00000000,
+0x00ede5e7,
+0x00f33333,
+0x00f33333,
+0x00e9d46a,
+0x00f95fcf,
+0x00e66666,
+0x00ffffff,
+0x00e9d46a,
+0x0006a032,
+0x00f33333,
+0x000ccccc,
+0x00ffffff,
+0x00121a18,
+0x000ccccc,
+0x00162b95,
+0x00162b95,
+0x0018ba4a,
+0x00199999,
+0x00199999,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x007fffff,
+0x00800000,
+0x001fffff,
+0x00e00000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
+0x00000000,
0x00000000,
0x00000000,
0x00000000,
@@ -23706,102 +25564,8 @@
0x00000000,
0x00000000,
0x00000000,
-0x00E66666,
-0x00199999,
-0x00199999,
-0x00199999,
0x00000000,
0x00000000,
-0x00E66666,
-0x00E66666,
-0x00FFFFFF,
-0x00FFFFFF,
-0x00199999,
-0x00199999,
-0x00F33333,
-0x000CCCCC,
-0x00F33333,
-0x00F33333,
-0x00199999,
-0x00E66666,
-0x00F33333,
-0x00F33333,
-0x00F33333,
-0x000CCCCC,
-0x00199999,
-0x00199999,
-0x000CCCCC,
-0x00162B95,
-0x00F33333,
-0x000CCCCC,
-0x00E66666,
-0x00000000,
-0x00F33333,
-0x00F33333,
-0x000CCCCC,
-0x00E9D46A,
-0x00199999,
-0x00E66666,
-0x000CCCCC,
-0x00E9D46A,
-0x00F33333,
-0x00F33333,
-0x00E66666,
-0x00FFFFFF,
-0x00F33333,
-0x000CCCCC,
-0x000CCCCC,
-0x00162B95,
-0x00199999,
-0x00199999,
-0x00162B95,
-0x0018BA4A,
-0x000CCCCC,
-0x00162B95,
-0x00000000,
-0x00121A18,
-0x00F33333,
-0x000CCCCC,
-0x00E9D46A,
-0x0006A032,
-0x00E66666,
-0x00000000,
-0x00E9D46A,
-0x00F95FCD,
-0x00F33333,
-0x00F33333,
-0x00FFFFFF,
-0x00EDE5E7,
-0x000CCCCC,
-0x00E9D46A,
-0x00162B95,
-0x00E745B5,
-0x00199999,
-0x00E66666,
-0x00162B95,
-0x00E745B5,
-0x000CCCCC,
-0x00E9D46A,
-0x00000000,
-0x00EDE5E7,
-0x00F33333,
-0x00F33333,
-0x00E9D46A,
-0x00F95FCF,
-0x00E66666,
-0x00FFFFFF,
-0x00E9D46A,
-0x0006A032,
-0x00F33333,
-0x000CCCCC,
-0x00FFFFFF,
-0x00121A18,
-0x000CCCCC,
-0x00162B95,
-0x00162B95,
-0x0018BA4A,
-0x00199999,
-0x00199999,
0x00000000,
0x00000000,
0x00000000,
@@ -23946,8 +25710,6 @@
0x00000000,
0x00000000,
0x00000000,
-0x00010000,
-0x00010000,
0x00000000,
0x00000000,
0x00000000,
@@ -24120,3 +25882,5 @@
0x00000000,
0x00000000,
0x00000000,
+0x000049cc,
+0x000049cc,
diff --git a/sound/soc/omap/abe/abe_functionsid.h b/sound/soc/omap/abe/abe_functionsid.h
index a2bf7dc..db21988 100644
--- a/sound/soc/omap/abe/abe_functionsid.h
+++ b/sound/soc/omap/abe/abe_functionsid.h
@@ -1,61 +1,60 @@
/*
-
- This file is provided under a dual BSD/GPLv2 license. When using or
- redistributing this file, you may do so under either license.
-
- GPL LICENSE SUMMARY
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution
- in the file called LICENSE.GPL.
-
- BSD LICENSE
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Texas Instruments Incorporated nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
+ *
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
#ifndef _ABE_FUNCTIONSID_H_
#define _ABE_FUNCTIONSID_H_
/*
@@ -68,17 +67,17 @@
#define C_ABE_FW_FUNCTION_OS0Fill 4
#define C_ABE_FW_FUNCTION_mixer2 5
#define C_ABE_FW_FUNCTION_mixer4 6
-#define C_ABE_FW_FUNCTION_inplaceGain 7
-#define C_ABE_FW_FUNCTION_StreamRouting 8
-#define C_ABE_FW_FUNCTION_gainConverge 9
-#define C_ABE_FW_FUNCTION_dualIir 10
-#define C_ABE_FW_FUNCTION_IO_DL_pp 11
-#define C_ABE_FW_FUNCTION_IO_generic 12
-#define C_ABE_FW_FUNCTION_irq_fifo_debug 13
-#define C_ABE_FW_FUNCTION_synchronize_pointers 14
-#define C_ABE_FW_FUNCTION_VIBRA2 15
-#define C_ABE_FW_FUNCTION_VIBRA1 16
-#define C_ABE_FW_FUNCTION_APS_core 17
+#define C_ABE_FW_FUNCTION_mixer4_dual_mono 7
+#define C_ABE_FW_FUNCTION_inplaceGain 8
+#define C_ABE_FW_FUNCTION_StreamRouting 9
+#define C_ABE_FW_FUNCTION_gainConverge 10
+#define C_ABE_FW_FUNCTION_dualIir 11
+#define C_ABE_FW_FUNCTION_IO_DL_pp 12
+#define C_ABE_FW_FUNCTION_IO_generic 13
+#define C_ABE_FW_FUNCTION_irq_fifo_debug 14
+#define C_ABE_FW_FUNCTION_synchronize_pointers 15
+#define C_ABE_FW_FUNCTION_VIBRA2 16
+#define C_ABE_FW_FUNCTION_VIBRA1 17
#define C_ABE_FW_FUNCTION_IIR_SRC_MIC 18
#define C_ABE_FW_FUNCTION_wrappers 19
#define C_ABE_FW_FUNCTION_ASRC_DL_wrapper 20
@@ -86,6 +85,11 @@
#define C_ABE_FW_FUNCTION_mem_init 22
#define C_ABE_FW_FUNCTION_debug_vx_asrc 23
#define C_ABE_FW_FUNCTION_IIR_SRC2 24
+#define C_ABE_FW_FUNCTION_ASRC_DL_wrapper_sibling 25
+#define C_ABE_FW_FUNCTION_ASRC_UL_wrapper_sibling 26
+#define C_ABE_FW_FUNCTION_FIR6 27
+#define C_ABE_FW_FUNCTION_SRC44P1 28
+#define C_ABE_FW_FUNCTION_SRC44P1_1211 29
/*
* COPY function ID definitions
*/
diff --git a/sound/soc/omap/abe/abe_gain.c b/sound/soc/omap/abe/abe_gain.c
index a31894d..9c148da 100644
--- a/sound/soc/omap/abe/abe_gain.c
+++ b/sound/soc/omap/abe/abe_gain.c
@@ -403,21 +403,6 @@ int omap_abe_write_equalizer(struct omap_abe *abe,
/* three DMIC are clear at the same time DMIC0 DMIC1 DMIC2 */
eq_mem_len *= 3;
break;
- case APS1:
- eq_offset = OMAP_ABE_C_APS_DL1_COEFFS1_ADDR;
- eq_mem = OMAP_ABE_S_APS_IIRMEM1_ADDR;
- eq_mem_len = OMAP_ABE_S_APS_IIRMEM1_SIZE;
- break;
- case APS2L:
- eq_offset = OMAP_ABE_C_APS_DL2_L_COEFFS1_ADDR;
- eq_mem = OMAP_ABE_S_APS_M_IIRMEM2_ADDR;
- eq_mem_len = OMAP_ABE_S_APS_M_IIRMEM2_SIZE;
- break;
- case APS2R:
- eq_offset = OMAP_ABE_C_APS_DL2_R_COEFFS1_ADDR;
- eq_mem = OMAP_ABE_S_APS_M_IIRMEM2_ADDR;
- eq_mem_len = OMAP_ABE_S_APS_M_IIRMEM2_SIZE;
- break;
}
/* reset SMEM buffers before the coefficients are loaded */
omap_abe_reset_mem(abe, OMAP_ABE_SMEM, eq_mem, eq_mem_len);
@@ -633,7 +618,9 @@ int omap_abe_write_gain(struct omap_abe *abe,
}
ramp = maximum(minimum(RAMP_MAXLENGTH, ramp), RAMP_MINLENGTH);
/* ramp data should be interpolated in the table instead */
- ramp_index = 8;
+ ramp_index = 3;
+ if ((RAMP_2MS <= ramp) && (ramp < RAMP_5MS))
+ ramp_index = 8;
if ((RAMP_5MS <= ramp) && (ramp < RAMP_50MS))
ramp_index = 24;
if ((RAMP_50MS <= ramp) && (ramp < RAMP_500MS))
diff --git a/sound/soc/omap/abe/abe_ini.c b/sound/soc/omap/abe/abe_ini.c
index 5a2bf08..288a3d3 100644
--- a/sound/soc/omap/abe/abe_ini.c
+++ b/sound/soc/omap/abe/abe_ini.c
@@ -174,10 +174,10 @@ EXPORT_SYMBOL(abe_load_fw_param);
* @abe: Pointer on abe handle
*
*/
-int omap_abe_load_fw(struct omap_abe *abe)
+int omap_abe_load_fw(struct omap_abe *abe, u32 *firmware)
{
_log(ABE_ID_LOAD_FW, 0, 0, 0);
- abe_load_fw_param((u32 *) abe_firmware_array);
+ abe_load_fw_param(firmware);
omap_abe_reset_all_ports(abe);
omap_abe_build_scheduler_table(abe);
omap_abe_reset_all_sequence(abe);
@@ -189,30 +189,40 @@ EXPORT_SYMBOL(omap_abe_load_fw);
/**
* abe_reload_fw - Reload ABE Firmware after OFF mode
*/
-int abe_reload_fw(void)
+int omap_abe_reload_fw(struct omap_abe *abe, u32 *firmware)
{
abe->warm_boot = 0;
- abe_load_fw_param((u32 *) abe_firmware_array);
+ abe_load_fw_param(firmware);
omap_abe_build_scheduler_table(abe);
omap_abe_dbg_reset(&abe->dbg);
/* IRQ circular read pointer in DMEM */
abe->irq_dbg_read_ptr = 0;
/* Restore Gains not managed by the drivers */
omap_abe_write_gain(abe, GAINS_SPLIT, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_SPLIT, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL1, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL1, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL2, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL2, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
return 0;
}
-EXPORT_SYMBOL(abe_reload_fw);
+EXPORT_SYMBOL(omap_abe_reload_fw);
+
+/**
+ * omap_abe_get_default_fw
+ *
+ * Get default ABE firmware
+ */
+u32 *omap_abe_get_default_fw(struct omap_abe *abe)
+{
+ return (u32 *)abe_firmware_array;
+}
/**
* abe_build_scheduler_table
@@ -231,210 +241,100 @@ void omap_abe_build_scheduler_table(struct omap_abe *abe)
i < sizeof(abe->MultiFrame); i++)
*ptr++ = 0;
- /* MultiFrame[0][0] = 0; */
- /* MultiFrame[0][1] = 0; */
abe->MultiFrame[0][2] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_DL)*/;
- /* MultiFrame[0][3] = 0; */
- /* MultiFrame[0][4] = 0; */
- /* MultiFrame[0][5] = 0; */
- /* MultiFrame[0][6] = 0; */
- /* MultiFrame[0][7] = 0; */
- /* MultiFrame[1][0] = 0; */
- /* MultiFrame[1][1] = 0; */
- abe->MultiFrame[1][2] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_8);
- abe->MultiFrame[1][3] = ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_8_48);
- /* MultiFrame[1][4] = 0; */
- /* MultiFrame[1][5] = 0; */
+ abe->MultiFrame[0][3] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_8);
+
+ abe->MultiFrame[1][3] = ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_8_48_FIR);
abe->MultiFrame[1][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2Mixer);
abe->MultiFrame[1][7] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_VIB_DL)*/;
+
abe->MultiFrame[2][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1Mixer);
abe->MultiFrame[2][1] = ABE_TASK_ID(C_ABE_FW_TASK_SDTMixer);
- /* MultiFrame[2][2] = 0; */
- /* MultiFrame[2][3] = 0; */
- /* MultiFrame[2][4] = 0; */
abe->MultiFrame[2][5] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_DMIC)*/;
- /* MultiFrame[2][6] = 0; */
- /* MultiFrame[2][7] = 0; */
+
abe->MultiFrame[3][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_GAIN);
- /* MultiFrame[3][1] = 0; */
- /* MultiFrame[3][2] = 0; */
- /* MultiFrame[3][3] = 0; */
- /* MultiFrame[3][4] = 0; */
- /* MultiFrame[3][5] = 0; */
abe->MultiFrame[3][6] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_GAIN);
abe->MultiFrame[3][7] = ABE_TASK_ID(C_ABE_FW_TASK_DL2_EQ);
+
abe->MultiFrame[4][0] = ABE_TASK_ID(C_ABE_FW_TASK_DL1_EQ);
- /* MultiFrame[4][1] = 0; */
abe->MultiFrame[4][2] = ABE_TASK_ID(C_ABE_FW_TASK_VXRECMixer);
abe->MultiFrame[4][3] = ABE_TASK_ID(C_ABE_FW_TASK_VXREC_SPLIT);
- /* MultiFrame[4][4] = 0; */
- /* MultiFrame[4][5] = 0; */
abe->MultiFrame[4][6] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA1);
abe->MultiFrame[4][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA2);
+
abe->MultiFrame[5][0] = 0;
abe->MultiFrame[5][1] = ABE_TASK_ID(C_ABE_FW_TASK_EARP_48_96_LP);
abe->MultiFrame[5][2] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_UL)*/;
- /* MultiFrame[5][3] = 0; */
- /* MultiFrame[5][4] = 0; */
- /* MultiFrame[5][5] = 0; */
- /* MultiFrame[5][6] = 0; */
abe->MultiFrame[5][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA_SPLIT);
+
abe->MultiFrame[6][0] = ABE_TASK_ID(C_ABE_FW_TASK_EARP_48_96_LP);
- /* MultiFrame[6][1] = 0; */
- /* MultiFrame[6][2] = 0; */
- /* MultiFrame[6][3] = 0; */
- /* MultiFrame[6][4] = 0; */
- abe->MultiFrame[6][5] = ABE_TASK_ID(C_ABE_FW_TASK_EchoMixer);
- /* MultiFrame[6][6] = 0; */
- /* MultiFrame[6][7] = 0; */
+ abe->MultiFrame[6][4] = ABE_TASK_ID(C_ABE_FW_TASK_EchoMixer);
+ abe->MultiFrame[6][5] = ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_SPLIT);
+
abe->MultiFrame[7][0] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_DL)*/;
- /* MultiFrame[7][1] = 0; */
- abe->MultiFrame[7][2] = ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_SPLIT);
abe->MultiFrame[7][3] = ABE_TASK_ID(C_ABE_FW_TASK_DBG_SYNC);
- /* MultiFrame[7][4] = 0; */
abe->MultiFrame[7][5] = ABE_TASK_ID(C_ABE_FW_TASK_ECHO_REF_SPLIT);
- /* MultiFrame[7][6] = 0; */
- /* MultiFrame[7][7] = 0; */
- /* MultiFrame[8][0] = 0; */
- /* MultiFrame[8][1] = 0; */
+
abe->MultiFrame[8][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC1_96_48_LP);
- /* MultiFrame[8][3] = 0; */
abe->MultiFrame[8][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC1_SPLIT);
- /* MultiFrame[8][5] = 0; */
- /* MultiFrame[8][6] = 0; */
- /* MultiFrame[8][7] = 0; */
- /* MultiFrame[9][0] = 0; */
- /* MultiFrame[9][1] = 0; */
+
abe->MultiFrame[9][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC2_96_48_LP);
- /* MultiFrame[9][3] = 0; */
abe->MultiFrame[9][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC2_SPLIT);
- /* MultiFrame[9][5] = 0; */
abe->MultiFrame[9][6] = 0;
abe->MultiFrame[9][7] = ABE_TASK_ID(C_ABE_FW_TASK_IHF_48_96_LP);
- /* MultiFrame[10][0] = 0; */
- /* MultiFrame[10][1] = 0; */
+
abe->MultiFrame[10][2] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC3_96_48_LP);
- /* MultiFrame[10][3] = 0; */
abe->MultiFrame[10][4] = ABE_TASK_ID(C_ABE_FW_TASK_DMIC3_SPLIT);
- /* MultiFrame[10][5] = 0; */
- /* MultiFrame[10][6] = 0; */
abe->MultiFrame[10][7] = ABE_TASK_ID(C_ABE_FW_TASK_IHF_48_96_LP);
- /* MultiFrame[11][0] = 0; */
- /* MultiFrame[11][1] = 0; */
+
abe->MultiFrame[11][2] = ABE_TASK_ID(C_ABE_FW_TASK_AMIC_96_48_LP);
- /* MultiFrame[11][3] = 0; */
abe->MultiFrame[11][4] = ABE_TASK_ID(C_ABE_FW_TASK_AMIC_SPLIT);
- /* MultiFrame[11][5] = 0; */
- /* MultiFrame[11][6] = 0; */
abe->MultiFrame[11][7] = ABE_TASK_ID(C_ABE_FW_TASK_VIBRA_PACK);
- /* MultiFrame[12][0] = 0; */
- /* MultiFrame[12][1] = 0; */
- /* MultiFrame[12][2] = 0; */
+
abe->MultiFrame[12][3] = ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_ROUTING);
abe->MultiFrame[12][4] = ABE_TASK_ID(C_ABE_FW_TASK_ULMixer);
abe->MultiFrame[12][5] = ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_8);
- /* MultiFrame[12][6] = 0; */
- /* MultiFrame[12][7] = 0; */
- /* MultiFrame[13][0] = 0; */
- /* MultiFrame[13][1] = 0; */
+
abe->MultiFrame[13][2] = ABE_TASK_ID(C_ABE_FW_TASK_MM_UL2_ROUTING);
abe->MultiFrame[13][3] = ABE_TASK_ID(C_ABE_FW_TASK_SideTone);
- /* MultiFrame[13][4] = 0; */
abe->MultiFrame[13][5] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_DL)*/;
- /* MultiFrame[13][6] = 0; */
- /* MultiFrame[13][7] = 0; */
- /* MultiFrame[14][0] = 0; */
- /* MultiFrame[14][1] = 0; */
- /* MultiFrame[14][2] = 0; */
+
abe->MultiFrame[14][3] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_DMIC)*/;
abe->MultiFrame[14][4] = ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8);
- /* MultiFrame[14][5] = 0; */
- /* MultiFrame[14][6] = 0; */
- /* MultiFrame[14][7] = 0; */
+
abe->MultiFrame[15][0] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_EXT_OUT)*/;
- /* MultiFrame[15][1] = 0; */
- /* MultiFrame[15][2] = 0; */
abe->MultiFrame[15][3] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_UL)*/;
- /* MultiFrame[15][4] = 0; */
- /* MultiFrame[15][5] = 0; */
abe->MultiFrame[15][6] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_UL_8);
- /* MultiFrame[15][7] = 0; */
- /* MultiFrame[16][0] = 0; */
- /* MultiFrame[16][1] = 0; */
+
abe->MultiFrame[16][2] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_8);
abe->MultiFrame[16][3] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_UL)*/;
- /* MultiFrame[16][4] = 0; */
- /* MultiFrame[16][5] = 0; */
- /* MultiFrame[16][6] = 0; */
- /* MultiFrame[16][7] = 0; */
- /* MultiFrame[17][0] = 0; */
- /* MultiFrame[17][1] = 0; */
+
abe->MultiFrame[17][2] = ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_8_48);
abe->MultiFrame[17][3] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_UL2)*/;
- /* MultiFrame[17][4] = 0; */
- /* MultiFrame[17][5] = 0; */
- /* MultiFrame[17][6] = 0; */
- /* MultiFrame[17][7] = 0; */
+
abe->MultiFrame[18][0] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_DL)*/;
- /* MultiFrame[18][1] = 0; */
- /* MultiFrame[18][2] = 0; */
- /* MultiFrame[18][3] = 0; */
- /* MultiFrame[18][4] = 0; */
- /* MultiFrame[18][5] = 0; */
abe->MultiFrame[18][6] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_DL_8);
- /* MultiFrame[18][7] = 0; */
+
abe->MultiFrame[19][0] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_PDM_DL)*/;
- /* MultiFrame[19][1] = 0 */
- /* MultiFrame[19][2] = 0; */
- /* MultiFrame[19][3] = 0; */
- /* MultiFrame[19][4] = 0; */
- /* MultiFrame[19][5] = 0; */
+
/* MM_UL is moved to OPP 100% */
abe->MultiFrame[19][6] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_UL)*/;
- /* MultiFrame[19][7] = 0; */
+
abe->MultiFrame[20][0] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_TONES_DL)*/;
- /* MultiFrame[20][1] = 0; */
- /* MultiFrame[20][2] = 0; */
- /* MultiFrame[20][3] = 0; */
- /* MultiFrame[20][4] = 0; */
- /* MultiFrame[20][5] = 0; */
abe->MultiFrame[20][6] = ABE_TASK_ID(C_ABE_FW_TASK_ASRC_MM_EXT_IN);
- /* MultiFrame[20][7] = 0; */
- /* MultiFrame[21][0] = 0; */
+
abe->MultiFrame[21][1] = ABE_TASK_ID(C_ABE_FW_TASK_DEBUGTRACE_VX_ASRCs);
- /* MultiFrame[21][2] = 0; */
abe->MultiFrame[21][3] = 0/*ABE_TASK_ID(C_ABE_FW_TASK_IO_MM_EXT_IN)*/;
- /* MultiFrame[21][4] = 0; */
- /* MultiFrame[21][5] = 0; */
- /* MultiFrame[21][6] = 0; */
- /* MultiFrame[21][7] = 0; */
/* MUST STAY ON SLOT 22 */
abe->MultiFrame[22][0] = ABE_TASK_ID(C_ABE_FW_TASK_DEBUG_IRQFIFO);
abe->MultiFrame[22][1] = ABE_TASK_ID(C_ABE_FW_TASK_INIT_FW_MEMORY);
abe->MultiFrame[22][2] = 0;
- /* MultiFrame[22][3] = 0; */
/* MM_EXT_IN_SPLIT task must be after IO_MM_EXT_IN and before
ASRC_MM_EXT_IN in order to manage OPP50 <-> transitions */
abe->MultiFrame[22][4] = ABE_TASK_ID(C_ABE_FW_TASK_MM_EXT_IN_SPLIT);
- /* MultiFrame[22][5] = 0; */
- /* MultiFrame[22][6] = 0; */
- /* MultiFrame[22][7] = 0; */
+
abe->MultiFrame[23][0] = ABE_TASK_ID(C_ABE_FW_TASK_GAIN_UPDATE);
- /* MultiFrame[23][1] = 0; */
- /* MultiFrame[23][2] = 0; */
- /* MultiFrame[23][3] = 0; */
- /* MultiFrame[23][4] = 0; */
- /* MultiFrame[23][5] = 0; */
- /* MultiFrame[23][6] = 0; */
- /* MultiFrame[23][7] = 0; */
- /* MultiFrame[24][0] = 0; */
- /* MultiFrame[24][1] = 0; */
- /* MultiFrame[24][2] = 0; */
- /* MultiFrame[24][3] = 0; */
- /* MultiFrame[24][4] = 0; */
- /* MultiFrame[24][5] = 0; */
- /* MultiFrame[24][6] = 0; */
- /* MultiFrame[24][7] = 0; */
+
omap_abe_mem_write(abe, OMAP_ABE_DMEM, OMAP_ABE_D_MULTIFRAME_ADDR,
(u32 *) abe->MultiFrame, sizeof(abe->MultiFrame));
/* reset the uplink router */
@@ -473,75 +373,75 @@ void omap_abe_reset_all_ports(struct omap_abe *abe)
omap_abe_reset_port(i);
/* mixers' configuration */
omap_abe_write_mixer(abe, MIXDL1, MUTE_GAIN,
- RAMP_100MS, MIX_DL1_INPUT_MM_DL);
+ RAMP_5MS, MIX_DL1_INPUT_MM_DL);
omap_abe_write_mixer(abe, MIXDL1, MUTE_GAIN,
- RAMP_100MS, MIX_DL1_INPUT_MM_UL2);
+ RAMP_5MS, MIX_DL1_INPUT_MM_UL2);
omap_abe_write_mixer(abe, MIXDL1, MUTE_GAIN,
- RAMP_100MS, MIX_DL1_INPUT_VX_DL);
+ RAMP_5MS, MIX_DL1_INPUT_VX_DL);
omap_abe_write_mixer(abe, MIXDL1, MUTE_GAIN,
- RAMP_100MS, MIX_DL1_INPUT_TONES);
+ RAMP_5MS, MIX_DL1_INPUT_TONES);
omap_abe_write_mixer(abe, MIXDL2, MUTE_GAIN,
- RAMP_100MS, MIX_DL2_INPUT_TONES);
+ RAMP_5MS, MIX_DL2_INPUT_TONES);
omap_abe_write_mixer(abe, MIXDL2, MUTE_GAIN,
- RAMP_100MS, MIX_DL2_INPUT_VX_DL);
+ RAMP_5MS, MIX_DL2_INPUT_VX_DL);
omap_abe_write_mixer(abe, MIXDL2, MUTE_GAIN,
- RAMP_100MS, MIX_DL2_INPUT_MM_DL);
+ RAMP_5MS, MIX_DL2_INPUT_MM_DL);
omap_abe_write_mixer(abe, MIXDL2, MUTE_GAIN,
- RAMP_100MS, MIX_DL2_INPUT_MM_UL2);
+ RAMP_5MS, MIX_DL2_INPUT_MM_UL2);
omap_abe_write_mixer(abe, MIXSDT, MUTE_GAIN,
- RAMP_100MS, MIX_SDT_INPUT_UP_MIXER);
+ RAMP_5MS, MIX_SDT_INPUT_UP_MIXER);
omap_abe_write_mixer(abe, MIXSDT, GAIN_0dB,
- RAMP_100MS, MIX_SDT_INPUT_DL1_MIXER);
+ RAMP_5MS, MIX_SDT_INPUT_DL1_MIXER);
omap_abe_write_mixer(abe, MIXECHO, MUTE_GAIN,
- RAMP_100MS, MIX_ECHO_DL1);
+ RAMP_5MS, MIX_ECHO_DL1);
omap_abe_write_mixer(abe, MIXECHO, MUTE_GAIN,
- RAMP_100MS, MIX_ECHO_DL2);
+ RAMP_5MS, MIX_ECHO_DL2);
omap_abe_write_mixer(abe, MIXAUDUL, MUTE_GAIN,
- RAMP_100MS, MIX_AUDUL_INPUT_MM_DL);
+ RAMP_5MS, MIX_AUDUL_INPUT_MM_DL);
omap_abe_write_mixer(abe, MIXAUDUL, MUTE_GAIN,
- RAMP_100MS, MIX_AUDUL_INPUT_TONES);
+ RAMP_5MS, MIX_AUDUL_INPUT_TONES);
omap_abe_write_mixer(abe, MIXAUDUL, GAIN_0dB,
- RAMP_100MS, MIX_AUDUL_INPUT_UPLINK);
+ RAMP_5MS, MIX_AUDUL_INPUT_UPLINK);
omap_abe_write_mixer(abe, MIXAUDUL, MUTE_GAIN,
- RAMP_100MS, MIX_AUDUL_INPUT_VX_DL);
+ RAMP_5MS, MIX_AUDUL_INPUT_VX_DL);
omap_abe_write_mixer(abe, MIXVXREC, MUTE_GAIN,
- RAMP_100MS, MIX_VXREC_INPUT_TONES);
+ RAMP_5MS, MIX_VXREC_INPUT_TONES);
omap_abe_write_mixer(abe, MIXVXREC, MUTE_GAIN,
- RAMP_100MS, MIX_VXREC_INPUT_VX_DL);
+ RAMP_5MS, MIX_VXREC_INPUT_VX_DL);
omap_abe_write_mixer(abe, MIXVXREC, MUTE_GAIN,
- RAMP_100MS, MIX_VXREC_INPUT_MM_DL);
+ RAMP_5MS, MIX_VXREC_INPUT_MM_DL);
omap_abe_write_mixer(abe, MIXVXREC, MUTE_GAIN,
- RAMP_100MS, MIX_VXREC_INPUT_VX_UL);
+ RAMP_5MS, MIX_VXREC_INPUT_VX_UL);
omap_abe_write_gain(abe, GAINS_DMIC1, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_DMIC1, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_DMIC2, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_DMIC2, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_DMIC3, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_DMIC3, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_AMIC, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_AMIC, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_SPLIT, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_SPLIT, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL1, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL1, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL2, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_DL2, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
omap_abe_write_gain(abe, GAINS_BTUL, GAIN_0dB,
- RAMP_100MS, GAIN_LEFT_OFFSET);
+ RAMP_5MS, GAIN_LEFT_OFFSET);
omap_abe_write_gain(abe, GAINS_BTUL, GAIN_0dB,
- RAMP_100MS, GAIN_RIGHT_OFFSET);
+ RAMP_5MS, GAIN_RIGHT_OFFSET);
}
diff --git a/sound/soc/omap/abe/abe_initxxx_labels.h b/sound/soc/omap/abe/abe_initxxx_labels.h
index 2331dfb..66f1856 100644
--- a/sound/soc/omap/abe/abe_initxxx_labels.h
+++ b/sound/soc/omap/abe/abe_initxxx_labels.h
@@ -1,64 +1,62 @@
/*
-
- This file is provided under a dual BSD/GPLv2 license. When using or
- redistributing this file, you may do so under either license.
-
- GPL LICENSE SUMMARY
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution
- in the file called LICENSE.GPL.
-
- BSD LICENSE
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Texas Instruments Incorporated nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
+ *
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
#ifndef _ABE_INITXXX_LABELS_H_
#define _ABE_INITXXX_LABELS_H_
-
#define Dummy_Regs_labelID 0
#define Dummy_AM_labelID 1
#define Voice_8k_UL_labelID 2
@@ -119,9 +117,9 @@
#define DMIC3_labelID 57
#define DMIC3_L_labelID 58
#define DMIC3_R_labelID 59
-#define MIC4_labelID 60
-#define MIC4_L_labelID 61
-#define MIC4_R_labelID 62
+#define SaturationMinMax_labelID 60
+#define TEMPORARY0_labelID 61
+#define TEMPORARY1_labelID 62
#define BT_UL_L_labelID 63
#define BT_UL_R_labelID 64
#define AMIC_labelID 65
@@ -213,44 +211,44 @@
#define SRC_48_96_LP_labelID 151
#define IHF_48_96_LP_DATA_labelID 152
#define EQ_VX_UL_16K_labelID 153
-#define pAPS_iir1_p23_labelID 154
-#define pAPS_iir1_p45_labelID 155
-#define APS_IIR_Regs_labelID 156
-#define pAPS_core_DL1_p1_labelID 157
-#define pAPS_core_DL1_p23_labelID 158
-#define pAPS_core_DL1_p45_labelID 159
-#define pAPS_core_DL1_r_labelID 160
-#define pAPS_DL2L_core_r_labelID 161
-#define pAPS_DL2R_core_r_labelID 162
-#define pAPS_COIL_core_DL1_p1_labelID 163
-#define pAPS_COIL_core_DL1_p23_labelID 164
-#define pAPS_COIL_core_DL1_p45_labelID 165
-#define pAPS_COIL_core_DL1_r_labelID 166
-#define DL2_L_APS_IIR_p23_labelID 167
-#define DL2_R_APS_IIR_p23_labelID 168
-#define DL2_L_APS_IIR_p45_labelID 169
-#define DL2_R_APS_IIR_p45_labelID 170
-#define DL2_L_APS_CORE_p1_labelID 171
-#define DL2_L_APS_CORE_p23_labelID 172
-#define DL2_L_APS_CORE_p45_labelID 173
-#define DL2_R_APS_CORE_p1_labelID 174
-#define DL2_R_APS_CORE_p23_labelID 175
-#define DL2_R_APS_CORE_p45_labelID 176
-#define DL2_L_APS_COIL_CORE_p1_labelID 177
-#define DL2_L_APS_COIL_CORE_p23_labelID 178
-#define DL2_L_APS_COIL_CORE_p45_labelID 179
-#define pAPS_COIL_DL2L_core_r_labelID 180
-#define DL2_R_APS_COIL_CORE_p1_labelID 181
-#define DL2_R_APS_COIL_CORE_p23_labelID 182
-#define DL2_R_APS_COIL_CORE_p45_labelID 183
-#define pAPS_COIL_DL2R_core_r_labelID 184
-#define DL1_APS_labelID 185
-#define DL2_L_APS_labelID 186
-#define DL2_R_APS_labelID 187
-#define DL1_APS_EQ_p23_labelID 188
-#define DL1_APS_EQ_p45_labelID 189
-#define DL2_APS_EQ_p23_labelID 190
-#define DL2_APS_EQ_p45_labelID 191
+#define AB0_labelID 154
+#define AC0_labelID 155
+#define MM_DL_C_labelID 156
+#define TONES_C_labelID 157
+#define MM_DL_44P1_REGS_labelID 158
+#define TONES_44P1_REGS_labelID 159
+#define MM_DL_44P1_DRIFT_labelID 160
+#define MM_DL_44P1_XK_labelID 161
+#define TONES_44P1_DRIFT_labelID 162
+#define TONES_44P1_XK_labelID 163
+#define SRC_44P1_MULFAC1_2_labelID 164
+#define A00_labelID 165
+#define MM_DL_44P1_WPTR_labelID 166
+#define MM_DL_44P1_RPTR_labelID 167
+#define TONES_44P1_WPTR_labelID 168
+#define TONES_44P1_RPTR_labelID 169
+#define C_0DB_SAT_labelID 170
+#define AC_labelID 171
+#define AD_labelID 172
+#define AE_labelID 173
+#define AF_labelID 174
+#define AG_labelID 175
+#define AH_labelID 176
+#define AI_labelID 177
+#define AJ_labelID 178
+#define AK_labelID 179
+#define AL_labelID 180
+#define AM_labelID 181
+#define AN_labelID 182
+#define AO_labelID 183
+#define AP_labelID 184
+#define AQ_labelID 185
+#define AR_labelID 186
+#define AS_labelID 187
+#define AT_labelID 188
+#define AU_labelID 189
+#define AV_labelID 190
+#define AW_labelID 191
#define pVIBRA1_p0_labelID 192
#define pVIBRA1_p1_labelID 193
#define pVIBRA1_p23_labelID 194
@@ -259,114 +257,204 @@
#define pVibra1_pR2_labelID 197
#define pVibra1_pR3_labelID 198
#define pVIBRA1_r_labelID 199
-#define pVIBRA2_p0_labelID 200
-#define pVIBRA2_p1_labelID 201
-#define pVIBRA2_p23_labelID 202
-#define pVIBRA2_p45_labelID 203
-#define pCtrl_p67_labelID 204
-#define pVIBRA2_r_labelID 205
-#define VIBRA_labelID 206
-#define PING_labelID 207
-#define PING_Regs_labelID 208
-#define UP_48_96_LP_COEFS_labelID 209
-#define AMIC_96_48_data_labelID 210
-#define DOWN_96_48_AMIC_Coefs_labelID 211
-#define DOWN_96_48_DMIC_Coefs_labelID 212
-#define DOWN_96_48_AMIC_Regs_labelID 213
-#define DOWN_96_48_DMIC_Regs_labelID 214
-#define DMIC0_96_48_data_labelID 215
-#define DMIC1_96_48_data_labelID 216
-#define DMIC2_96_48_data_labelID 217
-#define SIO_DMIC_labelID 218
-#define SIO_PDM_UL_labelID 219
-#define SIO_BT_VX_UL_labelID 220
-#define SIO_MM_UL_labelID 221
-#define SIO_MM_UL2_labelID 222
-#define SIO_VX_UL_labelID 223
-#define SIO_MM_DL_labelID 224
-#define SIO_VX_DL_labelID 225
-#define SIO_TONES_DL_labelID 226
-#define SIO_VIB_DL_labelID 227
-#define SIO_BT_VX_DL_labelID 228
-#define SIO_PDM_DL_labelID 229
-#define SIO_MM_EXT_OUT_labelID 230
-#define SIO_MM_EXT_IN_labelID 231
-#define SIO_TDM_OUT_labelID 232
-#define SIO_TDM_IN_labelID 233
-#define DMIC_ATC_PTR_labelID 234
-#define MCPDM_UL_ATC_PTR_labelID 235
-#define BT_VX_UL_ATC_PTR_labelID 236
-#define MM_UL_ATC_PTR_labelID 237
-#define MM_UL2_ATC_PTR_labelID 238
-#define VX_UL_ATC_PTR_labelID 239
-#define MM_DL_ATC_PTR_labelID 240
-#define VX_DL_ATC_PTR_labelID 241
-#define TONES_DL_ATC_PTR_labelID 242
-#define VIB_DL_ATC_PTR_labelID 243
-#define BT_VX_DL_ATC_PTR_labelID 244
-#define PDM_DL_ATC_PTR_labelID 245
-#define MM_EXT_OUT_ATC_PTR_labelID 246
-#define MM_EXT_IN_ATC_PTR_labelID 247
-#define TDM_OUT_ATC_PTR_labelID 248
-#define TDM_IN_ATC_PTR_labelID 249
-#define MCU_IRQ_FIFO_ptr_labelID 250
-#define DEBUG_IRQ_FIFO_reg_labelID 251
-#define UP_DOWN_48_96_labelID 252
-#define OSR96_2_labelID 253
-#define DEBUG_GAINS_labelID 254
-#define DBG_8K_PATTERN_labelID 255
-#define DBG_16K_PATTERN_labelID 256
-#define DBG_24K_PATTERN_labelID 257
-#define DBG_48K_PATTERN_labelID 258
-#define DBG_96K_PATTERN_labelID 259
-#define UL_VX_UL_48_8K_labelID 260
-#define UL_VX_UL_48_16K_labelID 261
-#define BT_DL_labelID 262
-#define BT_UL_labelID 263
-#define BT_DL_8k_labelID 264
-#define BT_DL_16k_labelID 265
-#define BT_UL_8k_labelID 266
-#define BT_UL_16k_labelID 267
-#define MM_EXT_IN_labelID 268
-#define MM_EXT_IN_L_labelID 269
-#define MM_EXT_IN_R_labelID 270
-#define ECHO_REF_48_16_WRAP_labelID 271
-#define ECHO_REF_48_8_WRAP_labelID 272
-#define BT_UL_16_48_WRAP_labelID 273
-#define BT_UL_8_48_WRAP_labelID 274
-#define BT_DL_48_16_WRAP_labelID 275
-#define BT_DL_48_8_WRAP_labelID 276
-#define VX_DL_16_48_WRAP_labelID 277
-#define VX_DL_8_48_WRAP_labelID 278
-#define VX_UL_48_16_WRAP_labelID 279
-#define VX_UL_48_8_WRAP_labelID 280
-#define APS_DL1_IRQs_WRAP_labelID 281
-#define APS_DL2_L_IRQs_WRAP_labelID 282
-#define APS_DL2_R_IRQs_WRAP_labelID 283
-#define ATC_NULL_BUFFER_labelID 284
-#define MEM_INIT_hal_mem_labelID 285
-#define MEM_INIT_write_mem_labelID 286
-#define MEM_INIT_regs_labelID 287
-#define GAIN_0DB_labelID 288
-#define XinASRC_BT_UL_labelID 289
-#define IO_BT_UL_ASRC_labelID 290
-#define ASRC_BT_UL_Coefs_labelID 291
-#define ASRC_BT_UL_Alpha_labelID 292
-#define ASRC_BT_UL_VarsBeta_labelID 293
-#define ASRC_BT_UL_8k_Regs_labelID 294
-#define ASRC_BT_UL_16k_Regs_labelID 295
-#define XinASRC_BT_DL_labelID 296
-#define DL_48_8_DEC_labelID 297
-#define DL_48_16_DEC_labelID 298
-#define BT_DL_8k_TEMP_labelID 299
-#define BT_DL_16k_TEMP_labelID 300
-#define BT_DL_8k_opp100_labelID 301
-#define BT_DL_16k_opp100_labelID 302
-#define ASRC_BT_DL_Coefs_labelID 303
-#define ASRC_BT_DL_Alpha_labelID 304
-#define ASRC_BT_DL_VarsBeta_labelID 305
-#define ASRC_BT_DL_8k_Regs_labelID 306
-#define ASRC_BT_DL_16k_Regs_labelID 307
-#define BT_DL_48_8_OPP100_WRAP_labelID 308
-#define BT_DL_48_16_OPP100_WRAP_labelID 309
+#define pVIBRA2_p0_0_labelID 200
+#define pVIBRA2_p0_labelID 201
+#define pVIBRA2_p1_labelID 202
+#define pVIBRA2_p23_labelID 203
+#define pVIBRA2_p45_labelID 204
+#define pCtrl_p67_labelID 205
+#define pVIBRA2_r_labelID 206
+#define VIBRA_labelID 207
+#define UP_48_96_LP_COEFS_DC_HF_labelID 208
+#define AX_labelID 209
+#define UP_48_96_LP_COEFS_DC_HS_labelID 210
+#define AMIC_96_48_data_labelID 211
+#define DOWN_96_48_AMIC_Coefs_labelID 212
+#define DOWN_96_48_DMIC_Coefs_labelID 213
+#define DOWN_96_48_AMIC_Regs_labelID 214
+#define DOWN_96_48_DMIC_Regs_labelID 215
+#define DMIC0_96_48_data_labelID 216
+#define DMIC1_96_48_data_labelID 217
+#define DMIC2_96_48_data_labelID 218
+#define SIO_DMIC_labelID 219
+#define SIO_PDM_UL_labelID 220
+#define SIO_BT_VX_UL_labelID 221
+#define SIO_MM_UL_labelID 222
+#define SIO_MM_UL2_labelID 223
+#define SIO_VX_UL_labelID 224
+#define SIO_MM_DL_labelID 225
+#define SIO_VX_DL_labelID 226
+#define SIO_TONES_DL_labelID 227
+#define SIO_VIB_DL_labelID 228
+#define SIO_BT_VX_DL_labelID 229
+#define SIO_PDM_DL_labelID 230
+#define SIO_MM_EXT_OUT_labelID 231
+#define SIO_MM_EXT_IN_labelID 232
+#define SIO_TDM_OUT_labelID 233
+#define SIO_TDM_IN_labelID 234
+#define DMIC_ATC_PTR_labelID 235
+#define MCPDM_UL_ATC_PTR_labelID 236
+#define BT_VX_UL_ATC_PTR_labelID 237
+#define MM_UL_ATC_PTR_labelID 238
+#define MM_UL2_ATC_PTR_labelID 239
+#define VX_UL_ATC_PTR_labelID 240
+#define MM_DL_ATC_PTR_labelID 241
+#define VX_DL_ATC_PTR_labelID 242
+#define TONES_DL_ATC_PTR_labelID 243
+#define VIB_DL_ATC_PTR_labelID 244
+#define BT_VX_DL_ATC_PTR_labelID 245
+#define PDM_DL_ATC_PTR_labelID 246
+#define MM_EXT_OUT_ATC_PTR_labelID 247
+#define MM_EXT_IN_ATC_PTR_labelID 248
+#define TDM_OUT_ATC_PTR_labelID 249
+#define TDM_IN_ATC_PTR_labelID 250
+#define MCU_IRQ_FIFO_ptr_labelID 251
+#define DEBUG_IRQ_FIFO_reg_labelID 252
+#define UP_DOWN_48_96_labelID 253
+#define OSR96_2_labelID 254
+#define DEBUG_GAINS_labelID 255
+#define DBG_8K_PATTERN_labelID 256
+#define DBG_16K_PATTERN_labelID 257
+#define DBG_24K_PATTERN_labelID 258
+#define DBG_48K_PATTERN_labelID 259
+#define DBG_96K_PATTERN_labelID 260
+#define UL_VX_UL_48_8K_labelID 261
+#define UL_VX_UL_48_16K_labelID 262
+#define BT_DL_labelID 263
+#define BT_UL_labelID 264
+#define BT_DL_8k_labelID 265
+#define BT_DL_16k_labelID 266
+#define BT_UL_8k_labelID 267
+#define BT_UL_16k_labelID 268
+#define MM_EXT_IN_labelID 269
+#define MM_EXT_IN_L_labelID 270
+#define MM_EXT_IN_R_labelID 271
+#define ECHO_REF_48_16_WRAP_labelID 272
+#define ECHO_REF_48_8_WRAP_labelID 273
+#define BT_UL_16_48_WRAP_labelID 274
+#define BT_UL_8_48_WRAP_labelID 275
+#define BT_DL_48_16_WRAP_labelID 276
+#define BT_DL_48_8_WRAP_labelID 277
+#define VX_DL_16_48_WRAP_labelID 278
+#define VX_DL_8_48_WRAP_labelID 279
+#define VX_UL_48_16_WRAP_labelID 280
+#define VX_UL_48_8_WRAP_labelID 281
+#define ATC_NULL_BUFFER_labelID 282
+#define MEM_INIT_hal_mem_labelID 283
+#define MEM_INIT_write_mem_labelID 284
+#define MEM_INIT_regs_labelID 285
+#define GAIN_0DB_labelID 286
+#define XinASRC_BT_UL_labelID 287
+#define IO_BT_UL_ASRC_labelID 288
+#define ASRC_BT_UL_Coefs_labelID 289
+#define ASRC_BT_UL_Alpha_labelID 290
+#define ASRC_BT_UL_VarsBeta_labelID 291
+#define ASRC_BT_UL_8k_Regs_labelID 292
+#define ASRC_BT_UL_16k_Regs_labelID 293
+#define XinASRC_BT_DL_labelID 294
+#define DL_48_8_DEC_labelID 295
+#define DL_48_16_DEC_labelID 296
+#define BT_DL_8k_TEMP_labelID 297
+#define BT_DL_16k_TEMP_labelID 298
+#define BT_DL_8k_opp100_labelID 299
+#define BT_DL_16k_opp100_labelID 300
+#define ASRC_BT_DL_Coefs_labelID 301
+#define ASRC_BT_DL_Alpha_labelID 302
+#define ASRC_BT_DL_VarsBeta_labelID 303
+#define ASRC_BT_DL_8k_Regs_labelID 304
+#define ASRC_BT_DL_16k_Regs_labelID 305
+#define BT_DL_48_8_OPP100_WRAP_labelID 306
+#define BT_DL_48_16_OPP100_WRAP_labelID 307
+#define VX_DL_8_48_OSR_LP_labelID 308
+#define SRC_FIR6_OSR_LP_labelID 309
+#define VX_DL_8_48_FIR_WRAP_labelID 310
+#define PING_labelID 311
+#define PING_Regs_labelID 312
+#define BT_UL_8_48_FIR_WRAP_labelID 313
+#define BT_UL_8_48_OSR_LP_labelID 314
+#define Dummy_315_labelID 315
+#define Dummy_316_labelID 316
+#define Dummy_317_labelID 317
+#define Dummy_318_labelID 318
+#define Dummy_319_labelID 319
+#define Dummy_320_labelID 320
+#define Dummy_321_labelID 321
+#define Dummy_322_labelID 322
+#define Dummy_323_labelID 323
+#define Dummy_324_labelID 324
+#define Dummy_325_labelID 325
+#define Dummy_326_labelID 326
+#define Dummy_327_labelID 327
+#define Dummy_328_labelID 328
+#define Dummy_329_labelID 329
+#define Dummy_330_labelID 330
+#define Dummy_331_labelID 331
+#define Dummy_332_labelID 332
+#define Dummy_333_labelID 333
+#define Dummy_334_labelID 334
+#define Dummy_335_labelID 335
+#define Dummy_336_labelID 336
+#define Dummy_337_labelID 337
+#define Dummy_338_labelID 338
+#define Dummy_339_labelID 339
+#define Dummy_340_labelID 340
+#define Dummy_341_labelID 341
+#define Dummy_342_labelID 342
+#define Dummy_343_labelID 343
+#define Dummy_344_labelID 344
+#define Dummy_345_labelID 345
+#define Dummy_346_labelID 346
+#define Dummy_347_labelID 347
+#define Dummy_348_labelID 348
+#define Dummy_349_labelID 349
+#define Dummy_350_labelID 350
+#define Dummy_351_labelID 351
+#define Dummy_352_labelID 352
+#define Dummy_353_labelID 353
+#define Dummy_354_labelID 354
+#define Dummy_355_labelID 355
+#define Dummy_356_labelID 356
+#define Dummy_357_labelID 357
+#define Dummy_358_labelID 358
+#define Dummy_359_labelID 359
+#define Dummy_360_labelID 360
+#define Dummy_361_labelID 361
+#define Dummy_362_labelID 362
+#define Dummy_363_labelID 363
+#define Dummy_364_labelID 364
+#define Dummy_365_labelID 365
+#define Dummy_366_labelID 366
+#define Dummy_367_labelID 367
+#define Dummy_368_labelID 368
+#define Dummy_369_labelID 369
+#define Dummy_370_labelID 370
+#define Dummy_371_labelID 371
+#define Dummy_372_labelID 372
+#define Dummy_373_labelID 373
+#define Dummy_374_labelID 374
+#define Dummy_375_labelID 375
+#define Dummy_376_labelID 376
+#define Dummy_377_labelID 377
+#define Dummy_378_labelID 378
+#define Dummy_379_labelID 379
+#define Dummy_380_labelID 380
+#define Dummy_381_labelID 381
+#define Dummy_382_labelID 382
+#define Dummy_383_labelID 383
+#define Dummy_384_labelID 384
+#define Dummy_385_labelID 385
+#define Dummy_386_labelID 386
+#define Dummy_387_labelID 387
+#define Dummy_388_labelID 388
+#define Dummy_389_labelID 389
+#define Dummy_390_labelID 390
+#define Dummy_391_labelID 391
+#define Dummy_392_labelID 392
+#define Dummy_393_labelID 393
+#define Dummy_394_labelID 394
+#define Dummy_395_labelID 395
+#define Dummy_396_labelID 396
+#define Dummy_397_labelID 397
+#define Dummy_398_labelID 398
+#define Dummy_399_labelID 399
#endif /* _ABE_INITXXXX_LABELS_H_ */
diff --git a/sound/soc/omap/abe/abe_main.c b/sound/soc/omap/abe/abe_main.c
index 1e874e6..8e64f74 100644
--- a/sound/soc/omap/abe/abe_main.c
+++ b/sound/soc/omap/abe/abe_main.c
@@ -97,7 +97,9 @@ int omap_abe_connect_debug_trace(struct omap_abe *abe,
struct omap_abe_dma *dma2);
int omap_abe_reset_hal(struct omap_abe *abe);
-int omap_abe_load_fw(struct omap_abe *abe);
+int omap_abe_load_fw(struct omap_abe *abe, u32 *firmware);
+int omap_abe_reload_fw(struct omap_abe *abe, u32 *firmware);
+u32* omap_abe_get_default_fw(struct omap_abe *abe);
int omap_abe_wakeup(struct omap_abe *abe);
int omap_abe_irq_processing(struct omap_abe *abe);
int omap_abe_clear_irq(struct omap_abe *abe);
@@ -149,6 +151,7 @@ int omap_abe_read_gain(struct omap_abe *abe,
u32 id, u32 *f_g, u32 p);
int omap_abe_read_mixer(struct omap_abe *abe,
u32 id, u32 *f_g, u32 p);
+int omap_abe_mono_mixer(struct omap_abe *abe, u32 id, u32 on_off);
extern struct omap_abe *abe;
@@ -205,14 +208,31 @@ EXPORT_SYMBOL(abe_reset_hal);
* abe_load_fw - Load ABE Firmware and initialize memories
*
*/
-u32 abe_load_fw(void)
+u32 abe_load_fw(u32 *firmware)
{
- omap_abe_load_fw(abe);
+ omap_abe_load_fw(abe, firmware);
return 0;
}
EXPORT_SYMBOL(abe_load_fw);
/**
+ * abe_reload_fw - Reload ABE Firmware and initialize memories
+ *
+ */
+u32 abe_reload_fw(u32 *firmware)
+{
+ omap_abe_reload_fw(abe, firmware);
+ return 0;
+}
+EXPORT_SYMBOL(abe_reload_fw);
+
+u32* abe_get_default_fw(void)
+{
+ return omap_abe_get_default_fw(abe);
+}
+EXPORT_SYMBOL(abe_get_default_fw);
+
+/**
* abe_wakeup - Wakeup ABE
*
* Wakeup ABE in case of retention
@@ -725,4 +745,19 @@ abehal_status abe_use_compensated_gain(u32 on_off)
omap_abe_use_compensated_gain(abe, (int)(on_off));
return 0;
}
+
+/**
+ * abe_mono_mixer
+ * @id: name of the mixer (MIXDL1, MIXDL2, MIXAUDUL)
+ * on_off: enable\disable flag
+ *
+ * This API Programs DL1Mixer or DL2Mixer to output mono data
+ * on both left and right data paths.
+ */
+int abe_mono_mixer(u32 id, u32 on_off)
+{
+ return omap_abe_mono_mixer(abe, id, on_off);
+}
+EXPORT_SYMBOL(abe_mono_mixer);
+
EXPORT_SYMBOL(abe_use_compensated_gain);
diff --git a/sound/soc/omap/abe/abe_main.h b/sound/soc/omap/abe/abe_main.h
index 15f23cc..67f6aae 100644
--- a/sound/soc/omap/abe/abe_main.h
+++ b/sound/soc/omap/abe/abe_main.h
@@ -615,8 +615,9 @@ extern u32 abe_irq_pingpong_player_id;
void abe_init_mem(void __iomem **_io_base);
u32 abe_reset_hal(void);
-u32 abe_load_fw(void);
-u32 abe_reload_fw(void);
+int abe_load_fw(u32 *firmware);
+int abe_reload_fw(u32 *firmware);
+u32 *abe_get_default_fw(void);
u32 abe_wakeup(void);
u32 abe_irq_processing(void);
u32 abe_clear_irq(void);
@@ -639,6 +640,7 @@ u32 abe_write_gain(u32 id, s32 f_g, u32 ramp, u32 p);
u32 abe_write_mixer(u32 id, s32 f_g, u32 f_ramp, u32 p);
u32 abe_read_gain(u32 id, u32 *f_g, u32 p);
u32 abe_read_mixer(u32 id, u32 *f_g, u32 p);
+int abe_mono_mixer(u32 id, u32 on_off);
u32 abe_set_router_configuration(u32 id, u32 k, u32 *param);
u32 abe_set_opp_processing(u32 opp);
u32 abe_disable_data_transfer(u32 id);
diff --git a/sound/soc/omap/abe/abe_port.c b/sound/soc/omap/abe/abe_port.c
index c2610a0..3b1ef5b 100644
--- a/sound/soc/omap/abe/abe_port.c
+++ b/sound/soc/omap/abe/abe_port.c
@@ -192,6 +192,9 @@ void omap_abe_clean_temporary_buffers(struct omap_abe *abe, u32 id)
OMAP_ABE_S_VX_DL_8_48_LP_DATA_ADDR,
OMAP_ABE_S_VX_DL_8_48_LP_DATA_SIZE);
omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
+ OMAP_ABE_S_VX_DL_8_48_OSR_LP_DATA_ADDR,
+ OMAP_ABE_S_VX_DL_8_48_OSR_LP_DATA_SIZE);
+ omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
OMAP_ABE_S_VX_DL_16_48_HP_DATA_ADDR,
OMAP_ABE_S_VX_DL_16_48_HP_DATA_SIZE);
omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
@@ -254,18 +257,6 @@ void omap_abe_clean_temporary_buffers(struct omap_abe *abe, u32 id)
omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
OMAP_ABE_S_IHF_48_96_LP_DATA_ADDR,
OMAP_ABE_S_IHF_48_96_LP_DATA_SIZE);
- omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
- OMAP_ABE_S_APS_DL1_EQ_DATA_ADDR,
- OMAP_ABE_S_APS_DL1_EQ_DATA_SIZE);
- omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
- OMAP_ABE_S_APS_DL2_EQ_DATA_ADDR,
- OMAP_ABE_S_APS_DL2_EQ_DATA_SIZE);
- omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
- OMAP_ABE_S_APS_DL2_L_IIRMEM1_ADDR,
- OMAP_ABE_S_APS_DL2_L_IIRMEM1_SIZE);
- omap_abe_reset_mem(abe, OMAP_ABE_SMEM,
- OMAP_ABE_S_APS_DL2_R_IIRMEM1_ADDR,
- OMAP_ABE_S_APS_DL2_R_IIRMEM1_SIZE);
omap_abe_reset_gain_mixer(abe, GAINS_DL1, GAIN_LEFT_OFFSET);
omap_abe_reset_gain_mixer(abe, GAINS_DL1, GAIN_RIGHT_OFFSET);
omap_abe_reset_gain_mixer(abe, GAINS_DL2, GAIN_LEFT_OFFSET);
@@ -323,9 +314,10 @@ void omap_abe_disable_enable_dma_request(struct omap_abe *abe, u32 id,
sio_desc_address, (u32 *) &sio_desc,
sizeof(sio_desc));
if (on_off) {
- sio_desc.atc_irq_data =
- (u8) abe_port[id].protocol.p.prot_dmareq.
- dma_data;
+ if (abe_port[id].protocol.protocol_switch != SERIAL_PORT_PROT)
+ sio_desc.atc_irq_data =
+ (u8) abe_port[id].protocol.p.prot_dmareq.
+ dma_data;
sio_desc.on_off = 0x80;
} else {
sio_desc.atc_irq_data = 0;
@@ -639,13 +631,26 @@ int omap_abe_enable_data_transfer(struct omap_abe *abe, u32 id)
abe_init_io_tasks(OMAP_ABE_DMIC_PORT, &format, protocol);
}
if (id == OMAP_ABE_VX_UL_PORT) {
- /* Init VX_UL ASRC and enable its adaptation */
- abe_init_asrc_vx_ul(0);
+ if (abe_port[OMAP_ABE_VX_DL_PORT].status == OMAP_ABE_PORT_ACTIVITY_RUNNING) {
+ /* VX_DL port already started, hence no need to
+ initialize ASRC */
+ } else {
+ /* Init VX_UL ASRC & VX_DL ASRC and enable its adaptation */
+ abe_init_asrc_vx_ul(-250);
+ abe_init_asrc_vx_dl(250);
+ }
}
if (id == OMAP_ABE_VX_DL_PORT) {
- /* Init VX_DL ASRC and enable its adaptation */
- abe_init_asrc_vx_dl(0);
+ if (abe_port[OMAP_ABE_VX_UL_PORT].status == OMAP_ABE_PORT_ACTIVITY_RUNNING) {
+ /* VX_UL port already started, hence no need to
+ initialize ASRC */
+ } else {
+ /* Init VX_UL ASRC & VX_DL ASRC and enable its adaptation */
+ abe_init_asrc_vx_ul(-250);
+ abe_init_asrc_vx_dl(250);
+ }
}
+
/* local host variable status= "port is running" */
abe_port[id].status = OMAP_ABE_PORT_ACTIVITY_RUNNING;
/* enable DMA requests */
@@ -681,12 +686,14 @@ int omap_abe_connect_cbpr_dmareq_port(struct omap_abe *abe,
abe_port[id].protocol.p.prot_dmareq.iter = abe_dma_port_iteration(f);
abe_port[id].protocol.p.prot_dmareq.dma_addr = ABE_DMASTATUS_RAW;
abe_port[id].protocol.p.prot_dmareq.dma_data = (1 << d);
- abe_port[id].status = OMAP_ABE_PORT_INITIALIZED;
/* load the dma_t with physical information from AE memory mapping */
abe_init_dma_t(id, &((abe_port[id]).protocol));
+
/* load the micro-task parameters */
abe_init_io_tasks(id, &((abe_port[id]).format),
&((abe_port[id]).protocol));
+ abe_port[id].status = OMAP_ABE_PORT_INITIALIZED;
+
/* load the ATC descriptors - disabled */
omap_abe_init_atc(abe, id);
/* return the dma pointer address */
@@ -772,10 +779,12 @@ int omap_abe_connect_serial_port(struct omap_abe *abe,
/* check the iteration of ATC */
(abe_port[id]).protocol.p.prot_serial.iter =
abe_dma_port_iter_factor(f);
- abe_port[id].status = OMAP_ABE_PORT_INITIALIZED;
+
/* load the micro-task parameters */
abe_init_io_tasks(id, &((abe_port[id]).format),
&((abe_port[id]).protocol));
+ abe_port[id].status = OMAP_ABE_PORT_INITIALIZED;
+
/* load the ATC descriptors - disabled */
omap_abe_init_atc(abe, id);
@@ -1105,46 +1114,92 @@ void abe_init_io_tasks(u32 id, abe_data_format_t *format,
case OMAP_ABE_VX_DL_PORT:
/* check for 8kHz/16kHz */
if (abe_port[id].format.f == 8000) {
- abe->MultiFrame[TASK_ASRC_VX_DL_SLT]
- [TASK_ASRC_VX_DL_IDX] =
- ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_8);
abe->MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] =
- ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_8_48);
+ ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_8_48_FIR);
/*Voice_8k_DL_labelID */
smem1 = IO_VX_DL_ASRC_labelID;
+
+ if ((abe_port[OMAP_ABE_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is VX_DL_PORT
+ * both VX_UL ASRC and VX_DL ASRC will add/remove sample
+ * referring to VX_DL flow_counter */
+ abe->MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_8);
+ abe->MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_8_SIB);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
} else {
- abe->MultiFrame[TASK_ASRC_VX_DL_SLT]
- [TASK_ASRC_VX_DL_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_ASRC_VX_DL_16);
abe->MultiFrame[TASK_VX_DL_SLT][TASK_VX_DL_IDX] =
ABE_TASK_ID(C_ABE_FW_TASK_VX_DL_16_48);
/* Voice_16k_DL_labelID */
smem1 = IO_VX_DL_ASRC_labelID;
+
+ if ((abe_port[OMAP_ABE_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is VX_DL_PORT
+ * both VX_UL ASRC and VX_DL ASRC will add/remove sample
+ * referring to VX_DL flow_counter */
+ abe->MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_16);
+ abe->MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_16_SIB);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
}
- abe->MultiFrame[0][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_DL);
+ abe->MultiFrame[0][2] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_DL);
break;
case OMAP_ABE_VX_UL_PORT:
/* check for 8kHz/16kHz */
if (abe_port[id].format.f == 8000) {
- abe->MultiFrame[TASK_ASRC_VX_UL_SLT]
- [TASK_ASRC_VX_UL_IDX] =
- ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_8);
abe->MultiFrame[TASK_VX_UL_SLT][TASK_VX_UL_IDX] =
ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_8);
/* MultiFrame[TASK_ECHO_SLT][TASK_ECHO_IDX] =
ABE_TASK_ID(C_ABE_FW_TASK_ECHO_REF_48_8); */
smem1 = Voice_8k_UL_labelID;
+
+ if ((abe_port[OMAP_ABE_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is VX_UL_PORT
+ * both VX_UL ASRC and VX_DL ASRC will add/remove sample
+ * referring to VX_UL flow_counter */
+ abe->MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_8_SIB);
+ abe->MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_8);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
} else {
- abe->MultiFrame[TASK_ASRC_VX_UL_SLT]
- [TASK_ASRC_VX_UL_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_ASRC_VX_UL_16);
abe->MultiFrame[TASK_VX_UL_SLT][TASK_VX_UL_IDX] =
ABE_TASK_ID(C_ABE_FW_TASK_VX_UL_48_16);
/* MultiFrame[TASK_ECHO_SLT][TASK_ECHO_IDX] =
ABE_TASK_ID(C_ABE_FW_TASK_ECHO_REF_48_16); */
smem1 = Voice_16k_UL_labelID;
+
+ if ((abe_port[OMAP_ABE_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is VX_UL_PORT
+ * both VX_UL ASRC and VX_DL ASRC will add/remove sample
+ * referring to VX_UL flow_counter */
+ abe->MultiFrame[TASK_ASRC_VX_DL_SLT][TASK_ASRC_VX_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_DL_16_SIB);
+ abe->MultiFrame[TASK_ASRC_VX_UL_SLT][TASK_ASRC_VX_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_VX_UL_16);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
}
abe->MultiFrame[16][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_VX_UL);
break;
@@ -1153,41 +1208,55 @@ void abe_init_io_tasks(u32 id, abe_data_format_t *format,
omap_abe_mem_read(abe, OMAP_ABE_DMEM,
OMAP_ABE_D_MAXTASKBYTESINSLOT_ADDR, &dOppMode32,
sizeof(u32));
+
if (abe_port[id].format.f == 8000) {
- abe->MultiFrame[TASK_ASRC_BT_DL_SLT]
- [TASK_ASRC_BT_DL_IDX] =
- ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_DL_8);
if (dOppMode32 == DOPPMODE32_OPP100) {
- abe->MultiFrame[TASK_BT_DL_48_8_SLT]
- [TASK_BT_DL_48_8_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_BT_DL_48_8_OPP100);
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8_OPP100);
smem1 = BT_DL_8k_opp100_labelID;
} else {
- abe->MultiFrame[TASK_BT_DL_48_8_SLT]
- [TASK_BT_DL_48_8_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_BT_DL_48_8);
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_8);
smem1 = BT_DL_8k_labelID;
}
+ if ((abe_port[OMAP_ABE_BT_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_BT_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is BT_VX_DL_PORT
+ * both BT_VX_DL ASRC and BT_VX_UL ASRC will add/remove sample
+ * referring to BT_VX_DL flow_counter */
+ abe->MultiFrame[TASK_ASRC_BT_DL_SLT][TASK_ASRC_BT_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_DL_8);
+ abe->MultiFrame[TASK_ASRC_BT_UL_SLT][TASK_ASRC_BT_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_UL_8_SIB);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
} else {
- abe->MultiFrame[TASK_ASRC_BT_DL_SLT]
- [TASK_ASRC_BT_DL_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_ASRC_BT_DL_16);
if (dOppMode32 == DOPPMODE32_OPP100) {
- abe->MultiFrame[TASK_BT_DL_48_8_SLT]
- [TASK_BT_DL_48_8_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_BT_DL_48_16_OPP100);
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_16_OPP100);
smem1 = BT_DL_16k_opp100_labelID;
} else {
- abe->MultiFrame[TASK_BT_DL_48_8_SLT]
- [TASK_BT_DL_48_8_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_BT_DL_48_16);
+ abe->MultiFrame[TASK_BT_DL_48_8_SLT][TASK_BT_DL_48_8_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_BT_DL_48_16);
smem1 = BT_DL_16k_labelID;
}
+ if ((abe_port[OMAP_ABE_BT_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_BT_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is BT_VX_DL_PORT
+ * both BT_VX_DL ASRC and BT_VX_UL ASRC will add/remove sample
+ * referring to BT_VX_DL flow_counter */
+ abe->MultiFrame[TASK_ASRC_BT_DL_SLT][TASK_ASRC_BT_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_DL_16);
+ abe->MultiFrame[TASK_ASRC_BT_UL_SLT][TASK_ASRC_BT_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_UL_16_SIB);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
}
abe->MultiFrame[13][5] = ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_DL);
break;
@@ -1197,12 +1266,9 @@ void abe_init_io_tasks(u32 id, abe_data_format_t *format,
omap_abe_mem_read(abe, OMAP_ABE_DMEM,
OMAP_ABE_D_MAXTASKBYTESINSLOT_ADDR, &dOppMode32,
sizeof(u32));
+
if (abe_port[id].format.f == 8000) {
- abe->MultiFrame[TASK_ASRC_BT_UL_SLT]
- [TASK_ASRC_BT_UL_IDX] =
- ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_UL_8);
- abe->MultiFrame[TASK_BT_UL_8_48_SLT]
- [TASK_BT_UL_8_48_IDX] =
+ abe->MultiFrame[TASK_BT_UL_8_48_SLT][TASK_BT_UL_8_48_IDX] =
ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_8_48);
if (dOppMode32 == DOPPMODE32_OPP100)
/* ASRC input buffer, size 40 */
@@ -1210,13 +1276,22 @@ void abe_init_io_tasks(u32 id, abe_data_format_t *format,
else
/* at OPP 50 without ASRC */
smem1 = BT_UL_8k_labelID;
+ if ((abe_port[OMAP_ABE_BT_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_BT_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is BT_VX_UL_PORT */
+ /* both BT_VX_UL ASRC and BT_VX_DL ASRC will add/remove sample
+ referring to BT_VX_UL flow_counter */
+ abe->MultiFrame[TASK_ASRC_BT_UL_SLT][TASK_ASRC_BT_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_UL_8);
+ abe->MultiFrame[TASK_ASRC_BT_DL_SLT][TASK_ASRC_BT_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_DL_8_SIB);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
} else {
- abe->MultiFrame[TASK_ASRC_BT_UL_SLT]
- [TASK_ASRC_BT_UL_IDX] =
- ABE_TASK_ID
- (C_ABE_FW_TASK_ASRC_BT_UL_16);
- abe->MultiFrame[TASK_BT_UL_8_48_SLT]
- [TASK_BT_UL_8_48_IDX] =
+ abe->MultiFrame[TASK_BT_UL_8_48_SLT][TASK_BT_UL_8_48_IDX] =
ABE_TASK_ID(C_ABE_FW_TASK_BT_UL_16_48);
if (dOppMode32 == DOPPMODE32_OPP100)
/* ASRC input buffer, size 40 */
@@ -1224,6 +1299,20 @@ void abe_init_io_tasks(u32 id, abe_data_format_t *format,
else
/* at OPP 50 without ASRC */
smem1 = BT_UL_16k_labelID;
+ if ((abe_port[OMAP_ABE_BT_VX_UL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE) &&
+ (abe_port[OMAP_ABE_BT_VX_DL_PORT].status ==
+ OMAP_ABE_PORT_ACTIVITY_IDLE)) {
+ /* the 1st opened port is BT_VX_UL_PORT */
+ /* both BT_VX_UL ASRC and BT_VX_DL ASRC will add/remove sample
+ referring to BT_VX_UL flow_counter */
+ abe->MultiFrame[TASK_ASRC_BT_UL_SLT][TASK_ASRC_BT_UL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_UL_16);
+ abe->MultiFrame[TASK_ASRC_BT_DL_SLT][TASK_ASRC_BT_DL_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ASRC_BT_DL_16_SIB);
+ } else {
+ /* Do nothing, Scheduling Table has already been patched */
+ }
}
abe->MultiFrame[15][3] = ABE_TASK_ID(C_ABE_FW_TASK_IO_BT_VX_UL);
break;
@@ -1579,3 +1668,79 @@ abehal_status abe_read_remaining_data(u32 port, u32 *n)
return 0;
}
EXPORT_SYMBOL(abe_read_remaining_data);
+
+/**
+ * omap_abe_mono_mixer
+ * @id: name of the mixer (MIXDL1, MIXDL2 or MIXAUDUL)
+ * on_off: enable\disable flag
+ *
+ * This API Programs DL1Mixer or DL2Mixer to output mono data
+ * on both left and right data paths.
+ */
+int omap_abe_mono_mixer(struct omap_abe *abe, u32 id, u32 on_off)
+{
+ switch (id) {
+ case MIXDL1:
+ if (on_off)
+ abe->MultiFrame[TASK_DL1Mixer_SLT][TASK_DL1Mixer_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_DL1Mixer_dual_mono);
+ else
+ abe->MultiFrame[TASK_DL1Mixer_SLT][TASK_DL1Mixer_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_DL1Mixer);
+ break;
+ case MIXDL2:
+ if (on_off)
+ abe->MultiFrame[TASK_DL2Mixer_SLT][TASK_DL2Mixer_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_DL2Mixer_dual_mono);
+ else
+ abe->MultiFrame[TASK_DL2Mixer_SLT][TASK_DL2Mixer_IDX] =
+ ABE_TASK_ID(C_ABE_FW_TASK_DL2Mixer);
+ break;
+ case MIXAUDUL:
+ if (on_off)
+ abe->MultiFrame[12][4] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ULMixer_dual_mono);
+ else
+ abe->MultiFrame[12][4] =
+ ABE_TASK_ID(C_ABE_FW_TASK_ULMixer);
+ break;
+ default:
+ break;
+ }
+
+ omap_abe_mem_write(abe, OMAP_ABE_DMEM, OMAP_ABE_D_MULTIFRAME_ADDR,
+ (u32 *) abe->MultiFrame, sizeof(abe->MultiFrame));
+
+ return 0;
+}
+EXPORT_SYMBOL(omap_abe_mono_mixer);
+/**
+ * abe_write_pdmdl_offset - write the desired offset on the DL1/DL2 paths
+ *
+ * Parameters:
+ * path: 1 for the DL1 ABE path, 2 for the DL2 ABE path
+ * offset_left: integer value that will be added on all PDM left samples
+ * offset_right: integer value that will be added on all PDM right samples
+ *
+ */
+void abe_write_pdmdl_offset(u32 path, u32 offset_left, u32 offset_right)
+{
+ switch (path) {
+ case 1:
+ omap_abe_mem_write(abe, OMAP_ABE_SMEM, OMAP_ABE_S_DC_HS_ADDR + 4,
+ &offset_left, sizeof(u32));
+ omap_abe_mem_write(abe, OMAP_ABE_SMEM, OMAP_ABE_S_DC_HS_ADDR,
+ &offset_right, sizeof(u32));
+ break;
+ case 2:
+ omap_abe_mem_write(abe, OMAP_ABE_SMEM, OMAP_ABE_S_DC_HF_ADDR + 4,
+ &offset_left, sizeof(u32));
+ omap_abe_mem_write(abe, OMAP_ABE_SMEM, OMAP_ABE_S_DC_HF_ADDR,
+ &offset_right, sizeof(u32));
+ break;
+ default:
+ break;
+ }
+}
+EXPORT_SYMBOL(abe_write_pdmdl_offset);
+
diff --git a/sound/soc/omap/abe/abe_sm_addr.h b/sound/soc/omap/abe/abe_sm_addr.h
index ad2295f..a9e28ac 100644
--- a/sound/soc/omap/abe/abe_sm_addr.h
+++ b/sound/soc/omap/abe/abe_sm_addr.h
@@ -1,537 +1,353 @@
/*
-
- This file is provided under a dual BSD/GPLv2 license. When using or
- redistributing this file, you may do so under either license.
-
- GPL LICENSE SUMMARY
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution
- in the file called LICENSE.GPL.
-
- BSD LICENSE
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Texas Instruments Incorporated nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#define OMAP_ABE_INIT_SM_ADDR 0x0
-#define OMAP_ABE_INIT_SM_SIZE 0x9B8
-
-#define OMAP_ABE_S_DATA0_ADDR 0x9B8
-#define OMAP_ABE_S_DATA0_SIZE 0x8
-
-#define OMAP_ABE_S_TEMP_ADDR 0x9C0
-#define OMAP_ABE_S_TEMP_SIZE 0x8
-
-#define OMAP_ABE_S_PHOENIXOFFSET_ADDR 0x9C8
-#define OMAP_ABE_S_PHOENIXOFFSET_SIZE 0x8
-
-#define OMAP_ABE_S_GTARGET1_ADDR 0x9D0
-#define OMAP_ABE_S_GTARGET1_SIZE 0x38
-
-#define OMAP_ABE_S_GTARGET_DL1_ADDR 0xA08
-#define OMAP_ABE_S_GTARGET_DL1_SIZE 0x10
-
-#define OMAP_ABE_S_GTARGET_DL2_ADDR 0xA18
-#define OMAP_ABE_S_GTARGET_DL2_SIZE 0x10
-
-#define OMAP_ABE_S_GTARGET_ECHO_ADDR 0xA28
-#define OMAP_ABE_S_GTARGET_ECHO_SIZE 0x8
-
-#define OMAP_ABE_S_GTARGET_SDT_ADDR 0xA30
-#define OMAP_ABE_S_GTARGET_SDT_SIZE 0x8
-
-#define OMAP_ABE_S_GTARGET_VXREC_ADDR 0xA38
-#define OMAP_ABE_S_GTARGET_VXREC_SIZE 0x10
-
-#define OMAP_ABE_S_GTARGET_UL_ADDR 0xA48
-#define OMAP_ABE_S_GTARGET_UL_SIZE 0x10
-
-#define OMAP_ABE_S_GTARGET_BTUL_ADDR 0xA58
-#define OMAP_ABE_S_GTARGET_BTUL_SIZE 0x8
-
-#define OMAP_ABE_S_GCURRENT_ADDR 0xA60
-#define OMAP_ABE_S_GCURRENT_SIZE 0x90
-
-#define OMAP_ABE_S_GAIN_ONE_ADDR 0xAF0
-#define OMAP_ABE_S_GAIN_ONE_SIZE 0x8
-
-#define OMAP_ABE_S_TONES_ADDR 0xAF8
-#define OMAP_ABE_S_TONES_SIZE 0x60
-
-#define OMAP_ABE_S_VX_DL_ADDR 0xB58
-#define OMAP_ABE_S_VX_DL_SIZE 0x60
-
-#define OMAP_ABE_S_MM_UL2_ADDR 0xBB8
-#define OMAP_ABE_S_MM_UL2_SIZE 0x60
-
-#define OMAP_ABE_S_MM_DL_ADDR 0xC18
-#define OMAP_ABE_S_MM_DL_SIZE 0x60
-
-#define OMAP_ABE_S_DL1_M_OUT_ADDR 0xC78
-#define OMAP_ABE_S_DL1_M_OUT_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_M_OUT_ADDR 0xCD8
-#define OMAP_ABE_S_DL2_M_OUT_SIZE 0x60
-
-#define OMAP_ABE_S_ECHO_M_OUT_ADDR 0xD38
-#define OMAP_ABE_S_ECHO_M_OUT_SIZE 0x60
-
-#define OMAP_ABE_S_SDT_M_OUT_ADDR 0xD98
-#define OMAP_ABE_S_SDT_M_OUT_SIZE 0x60
-
-#define OMAP_ABE_S_VX_UL_ADDR 0xDF8
-#define OMAP_ABE_S_VX_UL_SIZE 0x60
-
-#define OMAP_ABE_S_VX_UL_M_ADDR 0xE58
-#define OMAP_ABE_S_VX_UL_M_SIZE 0x60
-
-#define OMAP_ABE_S_BT_DL_ADDR 0xEB8
-#define OMAP_ABE_S_BT_DL_SIZE 0x60
-
-#define OMAP_ABE_S_BT_UL_ADDR 0xF18
-#define OMAP_ABE_S_BT_UL_SIZE 0x60
-
-#define OMAP_ABE_S_BT_DL_8K_ADDR 0xF78
-#define OMAP_ABE_S_BT_DL_8K_SIZE 0x18
-
-#define OMAP_ABE_S_BT_DL_16K_ADDR 0xF90
-#define OMAP_ABE_S_BT_DL_16K_SIZE 0x28
-
-#define OMAP_ABE_S_BT_UL_8K_ADDR 0xFB8
-#define OMAP_ABE_S_BT_UL_8K_SIZE 0x10
-
-#define OMAP_ABE_S_BT_UL_16K_ADDR 0xFC8
-#define OMAP_ABE_S_BT_UL_16K_SIZE 0x20
-
-#define OMAP_ABE_S_SDT_F_ADDR 0xFE8
-#define OMAP_ABE_S_SDT_F_SIZE 0x60
-
-#define OMAP_ABE_S_SDT_F_DATA_ADDR 0x1048
-#define OMAP_ABE_S_SDT_F_DATA_SIZE 0x48
-
-#define OMAP_ABE_S_MM_DL_OSR_ADDR 0x1090
-#define OMAP_ABE_S_MM_DL_OSR_SIZE 0xC0
-
-#define OMAP_ABE_S_24_ZEROS_ADDR 0x1150
-#define OMAP_ABE_S_24_ZEROS_SIZE 0xC0
-
-#define OMAP_ABE_S_DMIC1_ADDR 0x1210
-#define OMAP_ABE_S_DMIC1_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC2_ADDR 0x1270
-#define OMAP_ABE_S_DMIC2_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC3_ADDR 0x12D0
-#define OMAP_ABE_S_DMIC3_SIZE 0x60
-
-#define OMAP_ABE_S_AMIC_ADDR 0x1330
-#define OMAP_ABE_S_AMIC_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC1_L_ADDR 0x1390
-#define OMAP_ABE_S_DMIC1_L_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC1_R_ADDR 0x13F0
-#define OMAP_ABE_S_DMIC1_R_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC2_L_ADDR 0x1450
-#define OMAP_ABE_S_DMIC2_L_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC2_R_ADDR 0x14B0
-#define OMAP_ABE_S_DMIC2_R_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC3_L_ADDR 0x1510
-#define OMAP_ABE_S_DMIC3_L_SIZE 0x60
-
-#define OMAP_ABE_S_DMIC3_R_ADDR 0x1570
-#define OMAP_ABE_S_DMIC3_R_SIZE 0x60
-
-#define OMAP_ABE_S_BT_UL_L_ADDR 0x15D0
-#define OMAP_ABE_S_BT_UL_L_SIZE 0x60
-
-#define OMAP_ABE_S_BT_UL_R_ADDR 0x1630
-#define OMAP_ABE_S_BT_UL_R_SIZE 0x60
-
-#define OMAP_ABE_S_AMIC_L_ADDR 0x1690
-#define OMAP_ABE_S_AMIC_L_SIZE 0x60
-
-#define OMAP_ABE_S_AMIC_R_ADDR 0x16F0
-#define OMAP_ABE_S_AMIC_R_SIZE 0x60
-
-#define OMAP_ABE_S_ECHOREF_L_ADDR 0x1750
-#define OMAP_ABE_S_ECHOREF_L_SIZE 0x60
-
-#define OMAP_ABE_S_ECHOREF_R_ADDR 0x17B0
-#define OMAP_ABE_S_ECHOREF_R_SIZE 0x60
-
-#define OMAP_ABE_S_MM_DL_L_ADDR 0x1810
-#define OMAP_ABE_S_MM_DL_L_SIZE 0x60
-
-#define OMAP_ABE_S_MM_DL_R_ADDR 0x1870
-#define OMAP_ABE_S_MM_DL_R_SIZE 0x60
-
-#define OMAP_ABE_S_MM_UL_ADDR 0x18D0
-#define OMAP_ABE_S_MM_UL_SIZE 0x3C0
-
-#define OMAP_ABE_S_AMIC_96K_ADDR 0x1C90
-#define OMAP_ABE_S_AMIC_96K_SIZE 0xC0
-
-#define OMAP_ABE_S_DMIC0_96K_ADDR 0x1D50
-#define OMAP_ABE_S_DMIC0_96K_SIZE 0xC0
-
-#define OMAP_ABE_S_DMIC1_96K_ADDR 0x1E10
-#define OMAP_ABE_S_DMIC1_96K_SIZE 0xC0
-
-#define OMAP_ABE_S_DMIC2_96K_ADDR 0x1ED0
-#define OMAP_ABE_S_DMIC2_96K_SIZE 0xC0
-
-#define OMAP_ABE_S_UL_VX_UL_48_8K_ADDR 0x1F90
-#define OMAP_ABE_S_UL_VX_UL_48_8K_SIZE 0x60
-
-#define OMAP_ABE_S_UL_VX_UL_48_16K_ADDR 0x1FF0
-#define OMAP_ABE_S_UL_VX_UL_48_16K_SIZE 0x60
-
-#define OMAP_ABE_S_UL_MIC_48K_ADDR 0x2050
-#define OMAP_ABE_S_UL_MIC_48K_SIZE 0x60
-
-#define OMAP_ABE_S_VOICE_8K_UL_ADDR 0x20B0
-#define OMAP_ABE_S_VOICE_8K_UL_SIZE 0x18
-
-#define OMAP_ABE_S_VOICE_8K_DL_ADDR 0x20C8
-#define OMAP_ABE_S_VOICE_8K_DL_SIZE 0x10
-
-#define OMAP_ABE_S_MCPDM_OUT1_ADDR 0x20D8
-#define OMAP_ABE_S_MCPDM_OUT1_SIZE 0xC0
-
-#define OMAP_ABE_S_MCPDM_OUT2_ADDR 0x2198
-#define OMAP_ABE_S_MCPDM_OUT2_SIZE 0xC0
-
-#define OMAP_ABE_S_MCPDM_OUT3_ADDR 0x2258
-#define OMAP_ABE_S_MCPDM_OUT3_SIZE 0xC0
-
-#define OMAP_ABE_S_VOICE_16K_UL_ADDR 0x2318
-#define OMAP_ABE_S_VOICE_16K_UL_SIZE 0x28
-
-#define OMAP_ABE_S_VOICE_16K_DL_ADDR 0x2340
-#define OMAP_ABE_S_VOICE_16K_DL_SIZE 0x20
-
-#define OMAP_ABE_S_XINASRC_DL_VX_ADDR 0x2360
-#define OMAP_ABE_S_XINASRC_DL_VX_SIZE 0x140
-
-#define OMAP_ABE_S_XINASRC_UL_VX_ADDR 0x24A0
-#define OMAP_ABE_S_XINASRC_UL_VX_SIZE 0x140
-
-#define OMAP_ABE_S_XINASRC_MM_EXT_IN_ADDR 0x25E0
-#define OMAP_ABE_S_XINASRC_MM_EXT_IN_SIZE 0x140
-
-#define OMAP_ABE_S_VX_REC_ADDR 0x2720
-#define OMAP_ABE_S_VX_REC_SIZE 0x60
-
-#define OMAP_ABE_S_VX_REC_L_ADDR 0x2780
-#define OMAP_ABE_S_VX_REC_L_SIZE 0x60
-
-#define OMAP_ABE_S_VX_REC_R_ADDR 0x27E0
-#define OMAP_ABE_S_VX_REC_R_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_M_L_ADDR 0x2840
-#define OMAP_ABE_S_DL2_M_L_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_M_R_ADDR 0x28A0
-#define OMAP_ABE_S_DL2_M_R_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_M_LR_EQ_DATA_ADDR 0x2900
-#define OMAP_ABE_S_DL2_M_LR_EQ_DATA_SIZE 0xC8
-
-#define OMAP_ABE_S_DL1_M_EQ_DATA_ADDR 0x29C8
-#define OMAP_ABE_S_DL1_M_EQ_DATA_SIZE 0xC8
-
-#define OMAP_ABE_S_EARP_48_96_LP_DATA_ADDR 0x2A90
-#define OMAP_ABE_S_EARP_48_96_LP_DATA_SIZE 0x78
-
-#define OMAP_ABE_S_IHF_48_96_LP_DATA_ADDR 0x2B08
-#define OMAP_ABE_S_IHF_48_96_LP_DATA_SIZE 0x78
-
-#define OMAP_ABE_S_VX_UL_8_TEMP_ADDR 0x2B80
-#define OMAP_ABE_S_VX_UL_8_TEMP_SIZE 0x10
-
-#define OMAP_ABE_S_VX_UL_16_TEMP_ADDR 0x2B90
-#define OMAP_ABE_S_VX_UL_16_TEMP_SIZE 0x20
-
-#define OMAP_ABE_S_VX_DL_8_48_LP_DATA_ADDR 0x2BB0
-#define OMAP_ABE_S_VX_DL_8_48_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_VX_DL_8_48_HP_DATA_ADDR 0x2C08
-#define OMAP_ABE_S_VX_DL_8_48_HP_DATA_SIZE 0x38
-
-#define OMAP_ABE_S_VX_DL_16_48_LP_DATA_ADDR 0x2C40
-#define OMAP_ABE_S_VX_DL_16_48_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_VX_DL_16_48_HP_DATA_ADDR 0x2C98
-#define OMAP_ABE_S_VX_DL_16_48_HP_DATA_SIZE 0x28
-
-#define OMAP_ABE_S_VX_UL_48_8_LP_DATA_ADDR 0x2CC0
-#define OMAP_ABE_S_VX_UL_48_8_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_VX_UL_48_8_HP_DATA_ADDR 0x2D18
-#define OMAP_ABE_S_VX_UL_48_8_HP_DATA_SIZE 0x38
-
-#define OMAP_ABE_S_VX_UL_48_16_LP_DATA_ADDR 0x2D50
-#define OMAP_ABE_S_VX_UL_48_16_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_VX_UL_48_16_HP_DATA_ADDR 0x2DA8
-#define OMAP_ABE_S_VX_UL_48_16_HP_DATA_SIZE 0x38
-
-#define OMAP_ABE_S_BT_UL_8_48_LP_DATA_ADDR 0x2DE0
-#define OMAP_ABE_S_BT_UL_8_48_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_BT_UL_8_48_HP_DATA_ADDR 0x2E38
-#define OMAP_ABE_S_BT_UL_8_48_HP_DATA_SIZE 0x38
-
-#define OMAP_ABE_S_BT_UL_16_48_LP_DATA_ADDR 0x2E70
-#define OMAP_ABE_S_BT_UL_16_48_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_BT_UL_16_48_HP_DATA_ADDR 0x2EC8
-#define OMAP_ABE_S_BT_UL_16_48_HP_DATA_SIZE 0x28
-
-#define OMAP_ABE_S_BT_DL_48_8_LP_DATA_ADDR 0x2EF0
-#define OMAP_ABE_S_BT_DL_48_8_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_BT_DL_48_8_HP_DATA_ADDR 0x2F48
-#define OMAP_ABE_S_BT_DL_48_8_HP_DATA_SIZE 0x38
-
-#define OMAP_ABE_S_BT_DL_48_16_LP_DATA_ADDR 0x2F80
-#define OMAP_ABE_S_BT_DL_48_16_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_BT_DL_48_16_HP_DATA_ADDR 0x2FD8
-#define OMAP_ABE_S_BT_DL_48_16_HP_DATA_SIZE 0x28
-
-#define OMAP_ABE_S_ECHO_REF_48_8_LP_DATA_ADDR 0x3000
-#define OMAP_ABE_S_ECHO_REF_48_8_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_ECHO_REF_48_8_HP_DATA_ADDR 0x3058
-#define OMAP_ABE_S_ECHO_REF_48_8_HP_DATA_SIZE 0x38
-
-#define OMAP_ABE_S_ECHO_REF_48_16_LP_DATA_ADDR 0x3090
-#define OMAP_ABE_S_ECHO_REF_48_16_LP_DATA_SIZE 0x58
-
-#define OMAP_ABE_S_ECHO_REF_48_16_HP_DATA_ADDR 0x30E8
-#define OMAP_ABE_S_ECHO_REF_48_16_HP_DATA_SIZE 0x28
-
-#define OMAP_ABE_S_APS_IIRMEM1_ADDR 0x3110
-#define OMAP_ABE_S_APS_IIRMEM1_SIZE 0x48
-
-#define OMAP_ABE_S_APS_M_IIRMEM2_ADDR 0x3158
-#define OMAP_ABE_S_APS_M_IIRMEM2_SIZE 0x18
-
-#define OMAP_ABE_S_APS_C_IIRMEM2_ADDR 0x3170
-#define OMAP_ABE_S_APS_C_IIRMEM2_SIZE 0x18
-
-#define OMAP_ABE_S_APS_DL1_OUTSAMPLES_ADDR 0x3188
-#define OMAP_ABE_S_APS_DL1_OUTSAMPLES_SIZE 0x10
-
-#define OMAP_ABE_S_APS_DL1_COIL_OUTSAMPLES_ADDR 0x3198
-#define OMAP_ABE_S_APS_DL1_COIL_OUTSAMPLES_SIZE 0x10
-
-#define OMAP_ABE_S_APS_DL2_L_OUTSAMPLES_ADDR 0x31A8
-#define OMAP_ABE_S_APS_DL2_L_OUTSAMPLES_SIZE 0x10
-
-#define OMAP_ABE_S_APS_DL2_L_COIL_OUTSAMPLES_ADDR 0x31B8
-#define OMAP_ABE_S_APS_DL2_L_COIL_OUTSAMPLES_SIZE 0x10
-
-#define OMAP_ABE_S_APS_DL2_R_OUTSAMPLES_ADDR 0x31C8
-#define OMAP_ABE_S_APS_DL2_R_OUTSAMPLES_SIZE 0x10
-
-#define OMAP_ABE_S_APS_DL2_R_COIL_OUTSAMPLES_ADDR 0x31D8
-#define OMAP_ABE_S_APS_DL2_R_COIL_OUTSAMPLES_SIZE 0x10
-
-#define OMAP_ABE_S_XINASRC_ECHO_REF_ADDR 0x31E8
-#define OMAP_ABE_S_XINASRC_ECHO_REF_SIZE 0x140
-
-#define OMAP_ABE_S_ECHO_REF_16K_ADDR 0x3328
-#define OMAP_ABE_S_ECHO_REF_16K_SIZE 0x28
-
-#define OMAP_ABE_S_ECHO_REF_8K_ADDR 0x3350
-#define OMAP_ABE_S_ECHO_REF_8K_SIZE 0x18
-
-#define OMAP_ABE_S_DL1_EQ_ADDR 0x3368
-#define OMAP_ABE_S_DL1_EQ_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_EQ_ADDR 0x33C8
-#define OMAP_ABE_S_DL2_EQ_SIZE 0x60
-
-#define OMAP_ABE_S_DL1_GAIN_OUT_ADDR 0x3428
-#define OMAP_ABE_S_DL1_GAIN_OUT_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_GAIN_OUT_ADDR 0x3488
-#define OMAP_ABE_S_DL2_GAIN_OUT_SIZE 0x60
-
-#define OMAP_ABE_S_APS_DL2_L_IIRMEM1_ADDR 0x34E8
-#define OMAP_ABE_S_APS_DL2_L_IIRMEM1_SIZE 0x48
-
-#define OMAP_ABE_S_APS_DL2_R_IIRMEM1_ADDR 0x3530
-#define OMAP_ABE_S_APS_DL2_R_IIRMEM1_SIZE 0x48
-
-#define OMAP_ABE_S_APS_DL2_L_M_IIRMEM2_ADDR 0x3578
-#define OMAP_ABE_S_APS_DL2_L_M_IIRMEM2_SIZE 0x18
-
-#define OMAP_ABE_S_APS_DL2_R_M_IIRMEM2_ADDR 0x3590
-#define OMAP_ABE_S_APS_DL2_R_M_IIRMEM2_SIZE 0x18
-
-#define OMAP_ABE_S_APS_DL2_L_C_IIRMEM2_ADDR 0x35A8
-#define OMAP_ABE_S_APS_DL2_L_C_IIRMEM2_SIZE 0x18
-
-#define OMAP_ABE_S_APS_DL2_R_C_IIRMEM2_ADDR 0x35C0
-#define OMAP_ABE_S_APS_DL2_R_C_IIRMEM2_SIZE 0x18
-
-#define OMAP_ABE_S_DL1_APS_ADDR 0x35D8
-#define OMAP_ABE_S_DL1_APS_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_L_APS_ADDR 0x3638
-#define OMAP_ABE_S_DL2_L_APS_SIZE 0x60
-
-#define OMAP_ABE_S_DL2_R_APS_ADDR 0x3698
-#define OMAP_ABE_S_DL2_R_APS_SIZE 0x60
-
-#define OMAP_ABE_S_APS_DL1_EQ_DATA_ADDR 0x36F8
-#define OMAP_ABE_S_APS_DL1_EQ_DATA_SIZE 0x48
-
-#define OMAP_ABE_S_APS_DL2_EQ_DATA_ADDR 0x3740
-#define OMAP_ABE_S_APS_DL2_EQ_DATA_SIZE 0x48
-
-#define OMAP_ABE_S_DC_DCVALUE_ADDR 0x3788
-#define OMAP_ABE_S_DC_DCVALUE_SIZE 0x8
-
-#define OMAP_ABE_S_VIBRA_ADDR 0x3790
-#define OMAP_ABE_S_VIBRA_SIZE 0x30
-
-#define OMAP_ABE_S_VIBRA2_IN_ADDR 0x37C0
-#define OMAP_ABE_S_VIBRA2_IN_SIZE 0x30
-
-#define OMAP_ABE_S_VIBRA2_ADDR_ADDR 0x37F0
-#define OMAP_ABE_S_VIBRA2_ADDR_SIZE 0x8
-
-#define OMAP_ABE_S_VIBRACTRL_FORRIGHTSM_ADDR 0x37F8
-#define OMAP_ABE_S_VIBRACTRL_FORRIGHTSM_SIZE 0xC0
-
-#define OMAP_ABE_S_RNOISE_MEM_ADDR 0x38B8
-#define OMAP_ABE_S_RNOISE_MEM_SIZE 0x8
-
-#define OMAP_ABE_S_CTRL_ADDR 0x38C0
-#define OMAP_ABE_S_CTRL_SIZE 0x90
-
-#define OMAP_ABE_S_VIBRA1_IN_ADDR 0x3950
-#define OMAP_ABE_S_VIBRA1_IN_SIZE 0x30
-
-#define OMAP_ABE_S_VIBRA1_TEMP_ADDR 0x3980
-#define OMAP_ABE_S_VIBRA1_TEMP_SIZE 0xC0
-
-#define OMAP_ABE_S_VIBRACTRL_FORLEFTSM_ADDR 0x3A40
-#define OMAP_ABE_S_VIBRACTRL_FORLEFTSM_SIZE 0xC0
-
-#define OMAP_ABE_S_VIBRA1_MEM_ADDR 0x3B00
-#define OMAP_ABE_S_VIBRA1_MEM_SIZE 0x58
-
-#define OMAP_ABE_S_VIBRACTRL_STEREO_ADDR 0x3B58
-#define OMAP_ABE_S_VIBRACTRL_STEREO_SIZE 0xC0
-
-#define OMAP_ABE_S_AMIC_96_48_DATA_ADDR 0x3C18
-#define OMAP_ABE_S_AMIC_96_48_DATA_SIZE 0x98
-
-#define OMAP_ABE_S_DMIC0_96_48_DATA_ADDR 0x3CB0
-#define OMAP_ABE_S_DMIC0_96_48_DATA_SIZE 0x98
-
-#define OMAP_ABE_S_DMIC1_96_48_DATA_ADDR 0x3D48
-#define OMAP_ABE_S_DMIC1_96_48_DATA_SIZE 0x98
-
-#define OMAP_ABE_S_DMIC2_96_48_DATA_ADDR 0x3DE0
-#define OMAP_ABE_S_DMIC2_96_48_DATA_SIZE 0x98
-
-#define OMAP_ABE_S_DBG_8K_PATTERN_ADDR 0x3E78
-#define OMAP_ABE_S_DBG_8K_PATTERN_SIZE 0x10
-
-#define OMAP_ABE_S_DBG_16K_PATTERN_ADDR 0x3E88
-#define OMAP_ABE_S_DBG_16K_PATTERN_SIZE 0x20
-
-#define OMAP_ABE_S_DBG_24K_PATTERN_ADDR 0x3EA8
-#define OMAP_ABE_S_DBG_24K_PATTERN_SIZE 0x30
-
-#define OMAP_ABE_S_DBG_48K_PATTERN_ADDR 0x3ED8
-#define OMAP_ABE_S_DBG_48K_PATTERN_SIZE 0x60
-
-#define OMAP_ABE_S_DBG_96K_PATTERN_ADDR 0x3F38
-#define OMAP_ABE_S_DBG_96K_PATTERN_SIZE 0xC0
-
-#define OMAP_ABE_S_MM_EXT_IN_ADDR 0x3FF8
-#define OMAP_ABE_S_MM_EXT_IN_SIZE 0x60
-
-#define OMAP_ABE_S_MM_EXT_IN_L_ADDR 0x4058
-#define OMAP_ABE_S_MM_EXT_IN_L_SIZE 0x60
-
-#define OMAP_ABE_S_MM_EXT_IN_R_ADDR 0x40B8
-#define OMAP_ABE_S_MM_EXT_IN_R_SIZE 0x60
-
-#define OMAP_ABE_S_MIC4_ADDR 0x4118
-#define OMAP_ABE_S_MIC4_SIZE 0x60
-
-#define OMAP_ABE_S_MIC4_L_ADDR 0x4178
-#define OMAP_ABE_S_MIC4_L_SIZE 0x60
-
-#define OMAP_ABE_S_MIC4_R_ADDR 0x41D8
-#define OMAP_ABE_S_MIC4_R_SIZE 0x60
-
-#define OMAP_ABE_S_HW_TEST_ADDR 0x4238
-#define OMAP_ABE_S_HW_TEST_SIZE 0x8
-
-#define OMAP_ABE_S_XINASRC_BT_UL_ADDR 0x4240
-#define OMAP_ABE_S_XINASRC_BT_UL_SIZE 0x140
-
-#define OMAP_ABE_S_XINASRC_BT_DL_ADDR 0x4380
-#define OMAP_ABE_S_XINASRC_BT_DL_SIZE 0x140
-
-#define OMAP_ABE_S_BT_DL_8K_TEMP_ADDR 0x44C0
-#define OMAP_ABE_S_BT_DL_8K_TEMP_SIZE 0x10
-
-#define OMAP_ABE_S_BT_DL_16K_TEMP_ADDR 0x44D0
-#define OMAP_ABE_S_BT_DL_16K_TEMP_SIZE 0x20
+ *
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#define OMAP_ABE_INIT_SM_ADDR 0x0
+#define OMAP_ABE_INIT_SM_SIZE 0xC80
+#define OMAP_ABE_S_DATA0_ADDR 0xC80
+#define OMAP_ABE_S_DATA0_SIZE 0x8
+#define OMAP_ABE_S_TEMP_ADDR 0xC88
+#define OMAP_ABE_S_TEMP_SIZE 0x8
+#define OMAP_ABE_S_PHOENIXOFFSET_ADDR 0xC90
+#define OMAP_ABE_S_PHOENIXOFFSET_SIZE 0x8
+#define OMAP_ABE_S_GTARGET1_ADDR 0xC98
+#define OMAP_ABE_S_GTARGET1_SIZE 0x38
+#define OMAP_ABE_S_GTARGET_DL1_ADDR 0xCD0
+#define OMAP_ABE_S_GTARGET_DL1_SIZE 0x10
+#define OMAP_ABE_S_GTARGET_DL2_ADDR 0xCE0
+#define OMAP_ABE_S_GTARGET_DL2_SIZE 0x10
+#define OMAP_ABE_S_GTARGET_ECHO_ADDR 0xCF0
+#define OMAP_ABE_S_GTARGET_ECHO_SIZE 0x8
+#define OMAP_ABE_S_GTARGET_SDT_ADDR 0xCF8
+#define OMAP_ABE_S_GTARGET_SDT_SIZE 0x8
+#define OMAP_ABE_S_GTARGET_VXREC_ADDR 0xD00
+#define OMAP_ABE_S_GTARGET_VXREC_SIZE 0x10
+#define OMAP_ABE_S_GTARGET_UL_ADDR 0xD10
+#define OMAP_ABE_S_GTARGET_UL_SIZE 0x10
+#define OMAP_ABE_S_GTARGET_BTUL_ADDR 0xD20
+#define OMAP_ABE_S_GTARGET_BTUL_SIZE 0x8
+#define OMAP_ABE_S_GCURRENT_ADDR 0xD28
+#define OMAP_ABE_S_GCURRENT_SIZE 0x90
+#define OMAP_ABE_S_GAIN_ONE_ADDR 0xDB8
+#define OMAP_ABE_S_GAIN_ONE_SIZE 0x8
+#define OMAP_ABE_S_TONES_ADDR 0xDC0
+#define OMAP_ABE_S_TONES_SIZE 0x60
+#define OMAP_ABE_S_VX_DL_ADDR 0xE20
+#define OMAP_ABE_S_VX_DL_SIZE 0x60
+#define OMAP_ABE_S_MM_UL2_ADDR 0xE80
+#define OMAP_ABE_S_MM_UL2_SIZE 0x60
+#define OMAP_ABE_S_MM_DL_ADDR 0xEE0
+#define OMAP_ABE_S_MM_DL_SIZE 0x60
+#define OMAP_ABE_S_DL1_M_OUT_ADDR 0xF40
+#define OMAP_ABE_S_DL1_M_OUT_SIZE 0x60
+#define OMAP_ABE_S_DL2_M_OUT_ADDR 0xFA0
+#define OMAP_ABE_S_DL2_M_OUT_SIZE 0x60
+#define OMAP_ABE_S_ECHO_M_OUT_ADDR 0x1000
+#define OMAP_ABE_S_ECHO_M_OUT_SIZE 0x60
+#define OMAP_ABE_S_SDT_M_OUT_ADDR 0x1060
+#define OMAP_ABE_S_SDT_M_OUT_SIZE 0x60
+#define OMAP_ABE_S_VX_UL_ADDR 0x10C0
+#define OMAP_ABE_S_VX_UL_SIZE 0x60
+#define OMAP_ABE_S_VX_UL_M_ADDR 0x1120
+#define OMAP_ABE_S_VX_UL_M_SIZE 0x60
+#define OMAP_ABE_S_BT_DL_ADDR 0x1180
+#define OMAP_ABE_S_BT_DL_SIZE 0x60
+#define OMAP_ABE_S_BT_UL_ADDR 0x11E0
+#define OMAP_ABE_S_BT_UL_SIZE 0x60
+#define OMAP_ABE_S_BT_DL_8K_ADDR 0x1240
+#define OMAP_ABE_S_BT_DL_8K_SIZE 0x18
+#define OMAP_ABE_S_BT_DL_16K_ADDR 0x1258
+#define OMAP_ABE_S_BT_DL_16K_SIZE 0x28
+#define OMAP_ABE_S_BT_UL_8K_ADDR 0x1280
+#define OMAP_ABE_S_BT_UL_8K_SIZE 0x10
+#define OMAP_ABE_S_BT_UL_16K_ADDR 0x1290
+#define OMAP_ABE_S_BT_UL_16K_SIZE 0x20
+#define OMAP_ABE_S_SDT_F_ADDR 0x12B0
+#define OMAP_ABE_S_SDT_F_SIZE 0x60
+#define OMAP_ABE_S_SDT_F_DATA_ADDR 0x1310
+#define OMAP_ABE_S_SDT_F_DATA_SIZE 0x48
+#define OMAP_ABE_S_MM_DL_OSR_ADDR 0x1358
+#define OMAP_ABE_S_MM_DL_OSR_SIZE 0xC0
+#define OMAP_ABE_S_24_ZEROS_ADDR 0x1418
+#define OMAP_ABE_S_24_ZEROS_SIZE 0xC0
+#define OMAP_ABE_S_DMIC1_ADDR 0x14D8
+#define OMAP_ABE_S_DMIC1_SIZE 0x60
+#define OMAP_ABE_S_DMIC2_ADDR 0x1538
+#define OMAP_ABE_S_DMIC2_SIZE 0x60
+#define OMAP_ABE_S_DMIC3_ADDR 0x1598
+#define OMAP_ABE_S_DMIC3_SIZE 0x60
+#define OMAP_ABE_S_AMIC_ADDR 0x15F8
+#define OMAP_ABE_S_AMIC_SIZE 0x60
+#define OMAP_ABE_S_DMIC1_L_ADDR 0x1658
+#define OMAP_ABE_S_DMIC1_L_SIZE 0x60
+#define OMAP_ABE_S_DMIC1_R_ADDR 0x16B8
+#define OMAP_ABE_S_DMIC1_R_SIZE 0x60
+#define OMAP_ABE_S_DMIC2_L_ADDR 0x1718
+#define OMAP_ABE_S_DMIC2_L_SIZE 0x60
+#define OMAP_ABE_S_DMIC2_R_ADDR 0x1778
+#define OMAP_ABE_S_DMIC2_R_SIZE 0x60
+#define OMAP_ABE_S_DMIC3_L_ADDR 0x17D8
+#define OMAP_ABE_S_DMIC3_L_SIZE 0x60
+#define OMAP_ABE_S_DMIC3_R_ADDR 0x1838
+#define OMAP_ABE_S_DMIC3_R_SIZE 0x60
+#define OMAP_ABE_S_BT_UL_L_ADDR 0x1898
+#define OMAP_ABE_S_BT_UL_L_SIZE 0x60
+#define OMAP_ABE_S_BT_UL_R_ADDR 0x18F8
+#define OMAP_ABE_S_BT_UL_R_SIZE 0x60
+#define OMAP_ABE_S_AMIC_L_ADDR 0x1958
+#define OMAP_ABE_S_AMIC_L_SIZE 0x60
+#define OMAP_ABE_S_AMIC_R_ADDR 0x19B8
+#define OMAP_ABE_S_AMIC_R_SIZE 0x60
+#define OMAP_ABE_S_ECHOREF_L_ADDR 0x1A18
+#define OMAP_ABE_S_ECHOREF_L_SIZE 0x60
+#define OMAP_ABE_S_ECHOREF_R_ADDR 0x1A78
+#define OMAP_ABE_S_ECHOREF_R_SIZE 0x60
+#define OMAP_ABE_S_MM_DL_L_ADDR 0x1AD8
+#define OMAP_ABE_S_MM_DL_L_SIZE 0x60
+#define OMAP_ABE_S_MM_DL_R_ADDR 0x1B38
+#define OMAP_ABE_S_MM_DL_R_SIZE 0x60
+#define OMAP_ABE_S_MM_UL_ADDR 0x1B98
+#define OMAP_ABE_S_MM_UL_SIZE 0x3C0
+#define OMAP_ABE_S_AMIC_96K_ADDR 0x1F58
+#define OMAP_ABE_S_AMIC_96K_SIZE 0xC0
+#define OMAP_ABE_S_DMIC0_96K_ADDR 0x2018
+#define OMAP_ABE_S_DMIC0_96K_SIZE 0xC0
+#define OMAP_ABE_S_DMIC1_96K_ADDR 0x20D8
+#define OMAP_ABE_S_DMIC1_96K_SIZE 0xC0
+#define OMAP_ABE_S_DMIC2_96K_ADDR 0x2198
+#define OMAP_ABE_S_DMIC2_96K_SIZE 0xC0
+#define OMAP_ABE_S_UL_VX_UL_48_8K_ADDR 0x2258
+#define OMAP_ABE_S_UL_VX_UL_48_8K_SIZE 0x60
+#define OMAP_ABE_S_UL_VX_UL_48_16K_ADDR 0x22B8
+#define OMAP_ABE_S_UL_VX_UL_48_16K_SIZE 0x60
+#define OMAP_ABE_S_UL_MIC_48K_ADDR 0x2318
+#define OMAP_ABE_S_UL_MIC_48K_SIZE 0x60
+#define OMAP_ABE_S_VOICE_8K_UL_ADDR 0x2378
+#define OMAP_ABE_S_VOICE_8K_UL_SIZE 0x18
+#define OMAP_ABE_S_VOICE_8K_DL_ADDR 0x2390
+#define OMAP_ABE_S_VOICE_8K_DL_SIZE 0x10
+#define OMAP_ABE_S_MCPDM_OUT1_ADDR 0x23A0
+#define OMAP_ABE_S_MCPDM_OUT1_SIZE 0xC0
+#define OMAP_ABE_S_MCPDM_OUT2_ADDR 0x2460
+#define OMAP_ABE_S_MCPDM_OUT2_SIZE 0xC0
+#define OMAP_ABE_S_MCPDM_OUT3_ADDR 0x2520
+#define OMAP_ABE_S_MCPDM_OUT3_SIZE 0xC0
+#define OMAP_ABE_S_VOICE_16K_UL_ADDR 0x25E0
+#define OMAP_ABE_S_VOICE_16K_UL_SIZE 0x28
+#define OMAP_ABE_S_VOICE_16K_DL_ADDR 0x2608
+#define OMAP_ABE_S_VOICE_16K_DL_SIZE 0x20
+#define OMAP_ABE_S_XINASRC_DL_VX_ADDR 0x2628
+#define OMAP_ABE_S_XINASRC_DL_VX_SIZE 0x140
+#define OMAP_ABE_S_XINASRC_UL_VX_ADDR 0x2768
+#define OMAP_ABE_S_XINASRC_UL_VX_SIZE 0x140
+#define OMAP_ABE_S_XINASRC_MM_EXT_IN_ADDR 0x28A8
+#define OMAP_ABE_S_XINASRC_MM_EXT_IN_SIZE 0x140
+#define OMAP_ABE_S_VX_REC_ADDR 0x29E8
+#define OMAP_ABE_S_VX_REC_SIZE 0x60
+#define OMAP_ABE_S_VX_REC_L_ADDR 0x2A48
+#define OMAP_ABE_S_VX_REC_L_SIZE 0x60
+#define OMAP_ABE_S_VX_REC_R_ADDR 0x2AA8
+#define OMAP_ABE_S_VX_REC_R_SIZE 0x60
+#define OMAP_ABE_S_DL2_M_L_ADDR 0x2B08
+#define OMAP_ABE_S_DL2_M_L_SIZE 0x60
+#define OMAP_ABE_S_DL2_M_R_ADDR 0x2B68
+#define OMAP_ABE_S_DL2_M_R_SIZE 0x60
+#define OMAP_ABE_S_DL2_M_LR_EQ_DATA_ADDR 0x2BC8
+#define OMAP_ABE_S_DL2_M_LR_EQ_DATA_SIZE 0xC8
+#define OMAP_ABE_S_DL1_M_EQ_DATA_ADDR 0x2C90
+#define OMAP_ABE_S_DL1_M_EQ_DATA_SIZE 0xC8
+#define OMAP_ABE_S_EARP_48_96_LP_DATA_ADDR 0x2D58
+#define OMAP_ABE_S_EARP_48_96_LP_DATA_SIZE 0x78
+#define OMAP_ABE_S_IHF_48_96_LP_DATA_ADDR 0x2DD0
+#define OMAP_ABE_S_IHF_48_96_LP_DATA_SIZE 0x78
+#define OMAP_ABE_S_VX_UL_8_TEMP_ADDR 0x2E48
+#define OMAP_ABE_S_VX_UL_8_TEMP_SIZE 0x10
+#define OMAP_ABE_S_VX_UL_16_TEMP_ADDR 0x2E58
+#define OMAP_ABE_S_VX_UL_16_TEMP_SIZE 0x20
+#define OMAP_ABE_S_VX_DL_8_48_LP_DATA_ADDR 0x2E78
+#define OMAP_ABE_S_VX_DL_8_48_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_VX_DL_8_48_HP_DATA_ADDR 0x2EE0
+#define OMAP_ABE_S_VX_DL_8_48_HP_DATA_SIZE 0x38
+#define OMAP_ABE_S_VX_DL_16_48_LP_DATA_ADDR 0x2F18
+#define OMAP_ABE_S_VX_DL_16_48_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_VX_DL_16_48_HP_DATA_ADDR 0x2F80
+#define OMAP_ABE_S_VX_DL_16_48_HP_DATA_SIZE 0x28
+#define OMAP_ABE_S_VX_UL_48_8_LP_DATA_ADDR 0x2FA8
+#define OMAP_ABE_S_VX_UL_48_8_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_VX_UL_48_8_HP_DATA_ADDR 0x3010
+#define OMAP_ABE_S_VX_UL_48_8_HP_DATA_SIZE 0x38
+#define OMAP_ABE_S_VX_UL_48_16_LP_DATA_ADDR 0x3048
+#define OMAP_ABE_S_VX_UL_48_16_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_VX_UL_48_16_HP_DATA_ADDR 0x30B0
+#define OMAP_ABE_S_VX_UL_48_16_HP_DATA_SIZE 0x28
+#define OMAP_ABE_S_BT_UL_8_48_LP_DATA_ADDR 0x30D8
+#define OMAP_ABE_S_BT_UL_8_48_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_BT_UL_8_48_HP_DATA_ADDR 0x3140
+#define OMAP_ABE_S_BT_UL_8_48_HP_DATA_SIZE 0x38
+#define OMAP_ABE_S_BT_UL_16_48_LP_DATA_ADDR 0x3178
+#define OMAP_ABE_S_BT_UL_16_48_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_BT_UL_16_48_HP_DATA_ADDR 0x31E0
+#define OMAP_ABE_S_BT_UL_16_48_HP_DATA_SIZE 0x28
+#define OMAP_ABE_S_BT_DL_48_8_LP_DATA_ADDR 0x3208
+#define OMAP_ABE_S_BT_DL_48_8_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_BT_DL_48_8_HP_DATA_ADDR 0x3270
+#define OMAP_ABE_S_BT_DL_48_8_HP_DATA_SIZE 0x38
+#define OMAP_ABE_S_BT_DL_48_16_LP_DATA_ADDR 0x32A8
+#define OMAP_ABE_S_BT_DL_48_16_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_BT_DL_48_16_HP_DATA_ADDR 0x3310
+#define OMAP_ABE_S_BT_DL_48_16_HP_DATA_SIZE 0x28
+#define OMAP_ABE_S_ECHO_REF_48_8_LP_DATA_ADDR 0x3338
+#define OMAP_ABE_S_ECHO_REF_48_8_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_ECHO_REF_48_8_HP_DATA_ADDR 0x33A0
+#define OMAP_ABE_S_ECHO_REF_48_8_HP_DATA_SIZE 0x38
+#define OMAP_ABE_S_ECHO_REF_48_16_LP_DATA_ADDR 0x33D8
+#define OMAP_ABE_S_ECHO_REF_48_16_LP_DATA_SIZE 0x68
+#define OMAP_ABE_S_ECHO_REF_48_16_HP_DATA_ADDR 0x3440
+#define OMAP_ABE_S_ECHO_REF_48_16_HP_DATA_SIZE 0x28
+#define OMAP_ABE_S_XINASRC_ECHO_REF_ADDR 0x3468
+#define OMAP_ABE_S_XINASRC_ECHO_REF_SIZE 0x140
+#define OMAP_ABE_S_ECHO_REF_16K_ADDR 0x35A8
+#define OMAP_ABE_S_ECHO_REF_16K_SIZE 0x28
+#define OMAP_ABE_S_ECHO_REF_8K_ADDR 0x35D0
+#define OMAP_ABE_S_ECHO_REF_8K_SIZE 0x18
+#define OMAP_ABE_S_DL1_EQ_ADDR 0x35E8
+#define OMAP_ABE_S_DL1_EQ_SIZE 0x60
+#define OMAP_ABE_S_DL2_EQ_ADDR 0x3648
+#define OMAP_ABE_S_DL2_EQ_SIZE 0x60
+#define OMAP_ABE_S_DL1_GAIN_OUT_ADDR 0x36A8
+#define OMAP_ABE_S_DL1_GAIN_OUT_SIZE 0x60
+#define OMAP_ABE_S_DL2_GAIN_OUT_ADDR 0x3708
+#define OMAP_ABE_S_DL2_GAIN_OUT_SIZE 0x60
+#define OMAP_ABE_S_DC_HS_ADDR 0x3768
+#define OMAP_ABE_S_DC_HS_SIZE 0x8
+#define OMAP_ABE_S_DC_HF_ADDR 0x3770
+#define OMAP_ABE_S_DC_HF_SIZE 0x8
+#define OMAP_ABE_S_VIBRA_ADDR 0x3778
+#define OMAP_ABE_S_VIBRA_SIZE 0x30
+#define OMAP_ABE_S_VIBRA2_IN_ADDR 0x37A8
+#define OMAP_ABE_S_VIBRA2_IN_SIZE 0x30
+#define OMAP_ABE_S_VIBRA2_ADDR_ADDR 0x37D8
+#define OMAP_ABE_S_VIBRA2_ADDR_SIZE 0x8
+#define OMAP_ABE_S_VIBRACTRL_FORRIGHTSM_ADDR 0x37E0
+#define OMAP_ABE_S_VIBRACTRL_FORRIGHTSM_SIZE 0xC0
+#define OMAP_ABE_S_RNOISE_MEM_ADDR 0x38A0
+#define OMAP_ABE_S_RNOISE_MEM_SIZE 0x8
+#define OMAP_ABE_S_CTRL_ADDR 0x38A8
+#define OMAP_ABE_S_CTRL_SIZE 0x90
+#define OMAP_ABE_S_VIBRA1_IN_ADDR 0x3938
+#define OMAP_ABE_S_VIBRA1_IN_SIZE 0x30
+#define OMAP_ABE_S_VIBRA1_TEMP_ADDR 0x3968
+#define OMAP_ABE_S_VIBRA1_TEMP_SIZE 0xC0
+#define OMAP_ABE_S_VIBRACTRL_FORLEFTSM_ADDR 0x3A28
+#define OMAP_ABE_S_VIBRACTRL_FORLEFTSM_SIZE 0xC0
+#define OMAP_ABE_S_VIBRA1_MEM_ADDR 0x3AE8
+#define OMAP_ABE_S_VIBRA1_MEM_SIZE 0x58
+#define OMAP_ABE_S_VIBRACTRL_STEREO_ADDR 0x3B40
+#define OMAP_ABE_S_VIBRACTRL_STEREO_SIZE 0xC0
+#define OMAP_ABE_S_AMIC_96_48_DATA_ADDR 0x3C00
+#define OMAP_ABE_S_AMIC_96_48_DATA_SIZE 0x98
+#define OMAP_ABE_S_DMIC0_96_48_DATA_ADDR 0x3C98
+#define OMAP_ABE_S_DMIC0_96_48_DATA_SIZE 0x98
+#define OMAP_ABE_S_DMIC1_96_48_DATA_ADDR 0x3D30
+#define OMAP_ABE_S_DMIC1_96_48_DATA_SIZE 0x98
+#define OMAP_ABE_S_DMIC2_96_48_DATA_ADDR 0x3DC8
+#define OMAP_ABE_S_DMIC2_96_48_DATA_SIZE 0x98
+#define OMAP_ABE_S_DBG_8K_PATTERN_ADDR 0x3E60
+#define OMAP_ABE_S_DBG_8K_PATTERN_SIZE 0x10
+#define OMAP_ABE_S_DBG_16K_PATTERN_ADDR 0x3E70
+#define OMAP_ABE_S_DBG_16K_PATTERN_SIZE 0x20
+#define OMAP_ABE_S_DBG_24K_PATTERN_ADDR 0x3E90
+#define OMAP_ABE_S_DBG_24K_PATTERN_SIZE 0x30
+#define OMAP_ABE_S_DBG_48K_PATTERN_ADDR 0x3EC0
+#define OMAP_ABE_S_DBG_48K_PATTERN_SIZE 0x60
+#define OMAP_ABE_S_DBG_96K_PATTERN_ADDR 0x3F20
+#define OMAP_ABE_S_DBG_96K_PATTERN_SIZE 0xC0
+#define OMAP_ABE_S_MM_EXT_IN_ADDR 0x3FE0
+#define OMAP_ABE_S_MM_EXT_IN_SIZE 0x60
+#define OMAP_ABE_S_MM_EXT_IN_L_ADDR 0x4040
+#define OMAP_ABE_S_MM_EXT_IN_L_SIZE 0x60
+#define OMAP_ABE_S_MM_EXT_IN_R_ADDR 0x40A0
+#define OMAP_ABE_S_MM_EXT_IN_R_SIZE 0x60
+#define OMAP_ABE_S_MIC4_ADDR 0x4100
+#define OMAP_ABE_S_MIC4_SIZE 0x60
+#define OMAP_ABE_S_MIC4_L_ADDR 0x4160
+#define OMAP_ABE_S_MIC4_L_SIZE 0x60
+#define OMAP_ABE_S_SATURATION_7FFF_ADDR 0x41C0
+#define OMAP_ABE_S_SATURATION_7FFF_SIZE 0x8
+#define OMAP_ABE_S_SATURATION_ADDR 0x41C8
+#define OMAP_ABE_S_SATURATION_SIZE 0x8
+#define OMAP_ABE_S_XINASRC_BT_UL_ADDR 0x41D0
+#define OMAP_ABE_S_XINASRC_BT_UL_SIZE 0x140
+#define OMAP_ABE_S_XINASRC_BT_DL_ADDR 0x4310
+#define OMAP_ABE_S_XINASRC_BT_DL_SIZE 0x140
+#define OMAP_ABE_S_BT_DL_8K_TEMP_ADDR 0x4450
+#define OMAP_ABE_S_BT_DL_8K_TEMP_SIZE 0x10
+#define OMAP_ABE_S_BT_DL_16K_TEMP_ADDR 0x4460
+#define OMAP_ABE_S_BT_DL_16K_TEMP_SIZE 0x20
+#define OMAP_ABE_S_VX_DL_8_48_OSR_LP_DATA_ADDR 0x4480
+#define OMAP_ABE_S_VX_DL_8_48_OSR_LP_DATA_SIZE 0xE0
+#define OMAP_ABE_S_BT_UL_8_48_OSR_LP_DATA_ADDR 0x4560
+#define OMAP_ABE_S_BT_UL_8_48_OSR_LP_DATA_SIZE 0xE0
+#define OMAP_ABE_S_MM_DL_44P1_ADDR 0x4640
+#define OMAP_ABE_S_MM_DL_44P1_SIZE 0x300
+#define OMAP_ABE_S_TONES_44P1_ADDR 0x4940
+#define OMAP_ABE_S_TONES_44P1_SIZE 0x300
+#define OMAP_ABE_S_MM_DL_44P1_XK_ADDR 0x4C40
+#define OMAP_ABE_S_MM_DL_44P1_XK_SIZE 0x10
+#define OMAP_ABE_S_TONES_44P1_XK_ADDR 0x4C50
+#define OMAP_ABE_S_TONES_44P1_XK_SIZE 0x10
+#define OMAP_ABE_S_SRC_44P1_MULFAC1_ADDR 0x4C60
+#define OMAP_ABE_S_SRC_44P1_MULFAC1_SIZE 0x8
diff --git a/sound/soc/omap/abe/abe_taskid.h b/sound/soc/omap/abe/abe_taskid.h
index f55caba..b72c3a5 100644
--- a/sound/soc/omap/abe/abe_taskid.h
+++ b/sound/soc/omap/abe/abe_taskid.h
@@ -1,188 +1,187 @@
/*
-
- This file is provided under a dual BSD/GPLv2 license. When using or
- redistributing this file, you may do so under either license.
-
- GPL LICENSE SUMMARY
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution
- in the file called LICENSE.GPL.
-
- BSD LICENSE
-
- Copyright(c) 2010-2011 Texas Instruments Incorporated,
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
- * Neither the name of Texas Instruments Incorporated nor the names of
- its contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
+ *
+ * This file is provided under a dual BSD/GPLv2 license. When using or
+ * redistributing this file, you may do so under either license.
+ *
+ * GPL LICENSE SUMMARY
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2010-2011 Texas Instruments Incorporated,
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
#ifndef _ABE_TASKID_H_
#define _ABE_TASKID_H_
-
-#define C_ABE_FW_TASK_DL1_APS_CORE 0
-#define C_ABE_FW_TASK_DL1_APS_COIL_CORE 1
-#define C_ABE_FW_TASK_DL2_L_APS_CORE 2
-#define C_ABE_FW_TASK_DL2_L_APS_COIL_CORE 3
-#define C_ABE_FW_TASK_DL2_R_APS_CORE 4
-#define C_ABE_FW_TASK_DL2_R_APS_COIL_CORE 5
-#define C_ABE_FW_TASK_ASRC_VX_DL_8 6
-#define C_ABE_FW_TASK_ASRC_VX_DL_16 7
-#define C_ABE_FW_TASK_ASRC_MM_EXT_IN 8
-#define C_ABE_FW_TASK_ASRC_VX_UL_8 9
-#define C_ABE_FW_TASK_ASRC_VX_UL_16 10
-#define C_ABE_FW_TASK_VX_UL_48_8_DEC 11
-#define C_ABE_FW_TASK_VX_UL_48_16_DEC 12
-#define C_ABE_FW_TASK_BT_DL_48_8_DEC 13
-#define C_ABE_FW_TASK_BT_DL_48_16_DEC 14
-#define C_ABE_FW_TASK_ECHO_REF_48_8_DEC 15
-#define C_ABE_FW_TASK_ECHO_REF_48_16_DEC 16
-#define C_ABE_FW_TASK_DL2_EQ 17
-#define C_ABE_FW_TASK_DL2_L_APS_IIR 18
-#define C_ABE_FW_TASK_DL2_R_APS_IIR 19
-#define C_ABE_FW_TASK_DL2_APS_EQ 20
-#define C_ABE_FW_TASK_ECHO_REF_48_16 21
-#define C_ABE_FW_TASK_ECHO_REF_48_8 22
-#define C_ABE_FW_TASK_GAIN_UPDATE 23
-#define C_ABE_FW_TASK_SideTone 24
-#define C_ABE_FW_TASK_VX_DL_8_48_LP 25
-#define C_ABE_FW_TASK_VX_DL_8_48_HP 26
-#define C_ABE_FW_TASK_VX_DL_16_48_LP 27
-#define C_ABE_FW_TASK_VX_DL_16_48_HP 28
-#define C_ABE_FW_TASK_VX_UL_48_8_LP 29
-#define C_ABE_FW_TASK_VX_UL_48_8_HP 30
-#define C_ABE_FW_TASK_VX_UL_48_16_LP 31
-#define C_ABE_FW_TASK_VX_UL_48_16_HP 32
-#define C_ABE_FW_TASK_BT_UL_8_48_LP 33
-#define C_ABE_FW_TASK_BT_UL_8_48_HP 34
-#define C_ABE_FW_TASK_BT_UL_16_48_LP 35
-#define C_ABE_FW_TASK_BT_UL_16_48_HP 36
-#define C_ABE_FW_TASK_BT_DL_48_8_LP 37
-#define C_ABE_FW_TASK_BT_DL_48_8_HP 38
-#define C_ABE_FW_TASK_BT_DL_48_16_LP 39
-#define C_ABE_FW_TASK_BT_DL_48_16_HP 40
-#define C_ABE_FW_TASK_ECHO_REF_48_8_LP 41
-#define C_ABE_FW_TASK_ECHO_REF_48_8_HP 42
-#define C_ABE_FW_TASK_ECHO_REF_48_16_LP 43
-#define C_ABE_FW_TASK_ECHO_REF_48_16_HP 44
-#define C_ABE_FW_TASK_DL1_EQ 45
-#define C_ABE_FW_TASK_DL1_APS_IIR 46
-#define C_ABE_FW_TASK_DL1_APS_EQ 47
-#define C_ABE_FW_TASK_IHF_48_96_LP 48
-#define C_ABE_FW_TASK_EARP_48_96_LP 49
-#define C_ABE_FW_TASK_DL1_GAIN 50
-#define C_ABE_FW_TASK_DL2_GAIN 51
-#define C_ABE_FW_TASK_IO_PING_PONG 52
-#define C_ABE_FW_TASK_IO_DMIC 53
-#define C_ABE_FW_TASK_IO_PDM_UL 54
-#define C_ABE_FW_TASK_IO_BT_VX_UL 55
-#define C_ABE_FW_TASK_IO_MM_UL 56
-#define C_ABE_FW_TASK_IO_MM_UL2 57
-#define C_ABE_FW_TASK_IO_VX_UL 58
-#define C_ABE_FW_TASK_IO_MM_DL 59
-#define C_ABE_FW_TASK_IO_VX_DL 60
-#define C_ABE_FW_TASK_IO_TONES_DL 61
-#define C_ABE_FW_TASK_IO_VIB_DL 62
-#define C_ABE_FW_TASK_IO_BT_VX_DL 63
-#define C_ABE_FW_TASK_IO_PDM_DL 64
-#define C_ABE_FW_TASK_IO_MM_EXT_OUT 65
-#define C_ABE_FW_TASK_IO_MM_EXT_IN 66
-#define C_ABE_FW_TASK_IO_TDM_OUT 67
-#define C_ABE_FW_TASK_IO_TDM_IN 68
-#define C_ABE_FW_TASK_DEBUG_IRQFIFO 69
-#define C_ABE_FW_TASK_EchoMixer 70
-#define C_ABE_FW_TASK_SDTMixer 71
-#define C_ABE_FW_TASK_DL1Mixer 72
-#define C_ABE_FW_TASK_DL2Mixer 73
-#define C_ABE_FW_TASK_VXRECMixer 74
-#define C_ABE_FW_TASK_ULMixer 75
-#define C_ABE_FW_TASK_VIBRA_PACK 76
-#define C_ABE_FW_TASK_VX_DL_8_48_0SR 77
-#define C_ABE_FW_TASK_VX_DL_16_48_0SR 78
-#define C_ABE_FW_TASK_BT_UL_8_48_0SR 79
-#define C_ABE_FW_TASK_BT_UL_16_48_0SR 80
-#define C_ABE_FW_TASK_IHF_48_96_0SR 81
-#define C_ABE_FW_TASK_EARP_48_96_0SR 82
-#define C_ABE_FW_TASK_AMIC_SPLIT 83
-#define C_ABE_FW_TASK_DMIC1_SPLIT 84
-#define C_ABE_FW_TASK_DMIC2_SPLIT 85
-#define C_ABE_FW_TASK_DMIC3_SPLIT 86
-#define C_ABE_FW_TASK_VXREC_SPLIT 87
-#define C_ABE_FW_TASK_BT_UL_SPLIT 88
-#define C_ABE_FW_TASK_MM_SPLIT 89
-#define C_ABE_FW_TASK_DL2_APS_SPLIT 90
-#define C_ABE_FW_TASK_VIBRA_SPLIT 91
-#define C_ABE_FW_TASK_MM_EXT_IN_SPLIT 92
-#define C_ABE_FW_TASK_ECHO_REF_SPLIT 93
-#define C_ABE_FW_TASK_MIC4_SPLIT 94
-#define C_ABE_FW_TASK_VX_UL_ROUTING 95
-#define C_ABE_FW_TASK_MM_UL2_ROUTING 96
-#define C_ABE_FW_TASK_VIBRA1 97
-#define C_ABE_FW_TASK_VIBRA2 98
-#define C_ABE_FW_TASK_BT_UL_16_48 99
-#define C_ABE_FW_TASK_BT_UL_8_48 100
-#define C_ABE_FW_TASK_BT_DL_48_16 101
-#define C_ABE_FW_TASK_BT_DL_48_8 102
-#define C_ABE_FW_TASK_VX_DL_16_48 103
-#define C_ABE_FW_TASK_VX_DL_8_48 104
-#define C_ABE_FW_TASK_VX_UL_48_16 105
-#define C_ABE_FW_TASK_VX_UL_48_8 106
-#define C_ABE_FW_TASK_DBG_SYNC 107
-#define C_ABE_FW_TASK_APS_DL1_IRQs 108
-#define C_ABE_FW_TASK_APS_DL2_L_IRQs 109
-#define C_ABE_FW_TASK_APS_DL2_R_IRQs 110
-#define C_ABE_FW_TASK_AMIC_96_48_LP 111
-#define C_ABE_FW_TASK_DMIC1_96_48_LP 112
-#define C_ABE_FW_TASK_DMIC2_96_48_LP 113
-#define C_ABE_FW_TASK_DMIC3_96_48_LP 114
-#define C_ABE_FW_TASK_INIT_FW_MEMORY 115
-#define C_ABE_FW_TASK_DEBUGTRACE_VX_ASRCs 116
-#define C_ABE_FW_TASK_ASRC_BT_UL_8 117
-#define C_ABE_FW_TASK_ASRC_BT_UL_16 118
-#define C_ABE_FW_TASK_ASRC_BT_DL_8 119
-#define C_ABE_FW_TASK_ASRC_BT_DL_16 120
-#define C_ABE_FW_TASK_BT_DL_48_8_HP_OPP100 121
-#define C_ABE_FW_TASK_BT_DL_48_16_HP_OPP100 122
-#define C_ABE_FW_TASK_BT_DL_48_8_OPP100 123
-#define C_ABE_FW_TASK_BT_DL_48_16_OPP100 124
-
+#define C_ABE_FW_TASK_ASRC_VX_DL_8 0
+#define C_ABE_FW_TASK_ASRC_VX_DL_16 1
+#define C_ABE_FW_TASK_ASRC_VX_DL_8_SIB 2
+#define C_ABE_FW_TASK_ASRC_VX_DL_16_SIB 3
+#define C_ABE_FW_TASK_ASRC_MM_EXT_IN 4
+#define C_ABE_FW_TASK_ASRC_VX_UL_8 5
+#define C_ABE_FW_TASK_ASRC_VX_UL_16 6
+#define C_ABE_FW_TASK_ASRC_VX_UL_8_SIB 7
+#define C_ABE_FW_TASK_ASRC_VX_UL_16_SIB 8
+#define C_ABE_FW_TASK_VX_UL_48_8_DEC 9
+#define C_ABE_FW_TASK_VX_UL_48_16_DEC 10
+#define C_ABE_FW_TASK_BT_DL_48_8_DEC 11
+#define C_ABE_FW_TASK_BT_DL_48_16_DEC 12
+#define C_ABE_FW_TASK_ECHO_REF_48_8_DEC 13
+#define C_ABE_FW_TASK_ECHO_REF_48_16_DEC 14
+#define C_ABE_FW_TASK_DL2_EQ 15
+#define C_ABE_FW_TASK_ECHO_REF_48_16 16
+#define C_ABE_FW_TASK_ECHO_REF_48_8 17
+#define C_ABE_FW_TASK_GAIN_UPDATE 18
+#define C_ABE_FW_TASK_SideTone 19
+#define C_ABE_FW_TASK_VX_DL_8_48_LP 20
+#define C_ABE_FW_TASK_VX_DL_8_48_HP 21
+#define C_ABE_FW_TASK_VX_DL_16_48_LP 22
+#define C_ABE_FW_TASK_VX_DL_16_48_HP 23
+#define C_ABE_FW_TASK_VX_UL_48_8_LP 24
+#define C_ABE_FW_TASK_VX_UL_48_8_HP 25
+#define C_ABE_FW_TASK_VX_UL_48_16_LP 26
+#define C_ABE_FW_TASK_VX_UL_48_16_HP 27
+#define C_ABE_FW_TASK_BT_UL_8_48_LP 28
+#define C_ABE_FW_TASK_BT_UL_8_48_HP 29
+#define C_ABE_FW_TASK_BT_UL_16_48_LP 30
+#define C_ABE_FW_TASK_BT_UL_16_48_HP 31
+#define C_ABE_FW_TASK_BT_DL_48_8_LP 32
+#define C_ABE_FW_TASK_BT_DL_48_8_HP 33
+#define C_ABE_FW_TASK_BT_DL_48_16_LP 34
+#define C_ABE_FW_TASK_BT_DL_48_16_HP 35
+#define C_ABE_FW_TASK_ECHO_REF_48_8_LP 36
+#define C_ABE_FW_TASK_ECHO_REF_48_8_HP 37
+#define C_ABE_FW_TASK_ECHO_REF_48_16_LP 38
+#define C_ABE_FW_TASK_ECHO_REF_48_16_HP 39
+#define C_ABE_FW_TASK_DL1_EQ 40
+#define C_ABE_FW_TASK_IHF_48_96_LP 41
+#define C_ABE_FW_TASK_EARP_48_96_LP 42
+#define C_ABE_FW_TASK_DL1_GAIN 43
+#define C_ABE_FW_TASK_DL2_GAIN 44
+#define C_ABE_FW_TASK_IO_PING_PONG 45
+#define C_ABE_FW_TASK_IO_DMIC 46
+#define C_ABE_FW_TASK_IO_PDM_UL 47
+#define C_ABE_FW_TASK_IO_BT_VX_UL 48
+#define C_ABE_FW_TASK_IO_MM_UL 49
+#define C_ABE_FW_TASK_IO_MM_UL2 50
+#define C_ABE_FW_TASK_IO_VX_UL 51
+#define C_ABE_FW_TASK_IO_MM_DL 52
+#define C_ABE_FW_TASK_IO_VX_DL 53
+#define C_ABE_FW_TASK_IO_TONES_DL 54
+#define C_ABE_FW_TASK_IO_VIB_DL 55
+#define C_ABE_FW_TASK_IO_BT_VX_DL 56
+#define C_ABE_FW_TASK_IO_PDM_DL 57
+#define C_ABE_FW_TASK_IO_MM_EXT_OUT 58
+#define C_ABE_FW_TASK_IO_MM_EXT_IN 59
+#define C_ABE_FW_TASK_DEBUG_IRQFIFO 60
+#define C_ABE_FW_TASK_EchoMixer 61
+#define C_ABE_FW_TASK_SDTMixer 62
+#define C_ABE_FW_TASK_DL1Mixer 63
+#define C_ABE_FW_TASK_DL2Mixer 64
+#define C_ABE_FW_TASK_DL1Mixer_dual_mono 65
+#define C_ABE_FW_TASK_DL2Mixer_dual_mono 66
+#define C_ABE_FW_TASK_VXRECMixer 67
+#define C_ABE_FW_TASK_ULMixer 68
+#define C_ABE_FW_TASK_ULMixer_dual_mono 69
+#define C_ABE_FW_TASK_VIBRA_PACK 70
+#define C_ABE_FW_TASK_VX_DL_8_48_0SR 71
+#define C_ABE_FW_TASK_VX_DL_16_48_0SR 72
+#define C_ABE_FW_TASK_BT_UL_8_48_0SR 73
+#define C_ABE_FW_TASK_BT_UL_16_48_0SR 74
+#define C_ABE_FW_TASK_IHF_48_96_0SR 75
+#define C_ABE_FW_TASK_EARP_48_96_0SR 76
+#define C_ABE_FW_TASK_AMIC_SPLIT 77
+#define C_ABE_FW_TASK_DMIC1_SPLIT 78
+#define C_ABE_FW_TASK_DMIC2_SPLIT 79
+#define C_ABE_FW_TASK_DMIC3_SPLIT 80
+#define C_ABE_FW_TASK_VXREC_SPLIT 81
+#define C_ABE_FW_TASK_BT_UL_SPLIT 82
+#define C_ABE_FW_TASK_MM_SPLIT 83
+#define C_ABE_FW_TASK_VIBRA_SPLIT 84
+#define C_ABE_FW_TASK_MM_EXT_IN_SPLIT 85
+#define C_ABE_FW_TASK_ECHO_REF_SPLIT 86
+#define C_ABE_FW_TASK_UNUSED_1 87
+#define C_ABE_FW_TASK_VX_UL_ROUTING 88
+#define C_ABE_FW_TASK_MM_UL2_ROUTING 89
+#define C_ABE_FW_TASK_VIBRA1 90
+#define C_ABE_FW_TASK_VIBRA2 91
+#define C_ABE_FW_TASK_BT_UL_16_48 92
+#define C_ABE_FW_TASK_BT_UL_8_48 93
+#define C_ABE_FW_TASK_BT_DL_48_16 94
+#define C_ABE_FW_TASK_BT_DL_48_8 95
+#define C_ABE_FW_TASK_VX_DL_16_48 96
+#define C_ABE_FW_TASK_VX_DL_8_48 97
+#define C_ABE_FW_TASK_VX_UL_48_16 98
+#define C_ABE_FW_TASK_VX_UL_48_8 99
+#define C_ABE_FW_TASK_DBG_SYNC 100
+#define C_ABE_FW_TASK_AMIC_96_48_LP 101
+#define C_ABE_FW_TASK_DMIC1_96_48_LP 102
+#define C_ABE_FW_TASK_DMIC2_96_48_LP 103
+#define C_ABE_FW_TASK_DMIC3_96_48_LP 104
+#define C_ABE_FW_TASK_INIT_FW_MEMORY 105
+#define C_ABE_FW_TASK_DEBUGTRACE_VX_ASRCs 106
+#define C_ABE_FW_TASK_ASRC_BT_UL_8 107
+#define C_ABE_FW_TASK_ASRC_BT_UL_16 108
+#define C_ABE_FW_TASK_ASRC_BT_UL_8_SIB 109
+#define C_ABE_FW_TASK_ASRC_BT_UL_16_SIB 110
+#define C_ABE_FW_TASK_ASRC_BT_DL_8 111
+#define C_ABE_FW_TASK_ASRC_BT_DL_16 112
+#define C_ABE_FW_TASK_ASRC_BT_DL_8_SIB 113
+#define C_ABE_FW_TASK_ASRC_BT_DL_16_SIB 114
+#define C_ABE_FW_TASK_BT_DL_48_8_HP_OPP100 115
+#define C_ABE_FW_TASK_BT_DL_48_16_HP_OPP100 116
+#define C_ABE_FW_TASK_BT_DL_48_8_OPP100 117
+#define C_ABE_FW_TASK_BT_DL_48_16_OPP100 118
+#define C_ABE_FW_TASK_VX_DL_8_48_OSR_LP 119
+#define C_ABE_FW_TASK_VX_DL_8_48_FIR 120
+#define C_ABE_FW_TASK_BT_UL_8_48_OSR_LP 121
+#define C_ABE_FW_TASK_BT_UL_8_48_FIR 122
+#define C_ABE_FW_TASK_SRC44P1_MMDL 123
+#define C_ABE_FW_TASK_SRC44P1_TONES 124
+#define C_ABE_FW_TASK_SRC44P1_MMDL_1211 125
+#define C_ABE_FW_TASK_SRC44P1_TONES_1211 126
#endif /* _ABE_TASKID_H_ */
diff --git a/sound/soc/omap/omap-abe-dsp.c b/sound/soc/omap/omap-abe-dsp.c
index a4c7fc0..0992b3f 100644
--- a/sound/soc/omap/omap-abe-dsp.c
+++ b/sound/soc/omap/omap-abe-dsp.c
@@ -41,6 +41,7 @@
#include <linux/wait.h>
#include <linux/firmware.h>
#include <linux/debugfs.h>
+#include <linux/opp.h>
#include <plat/omap_hwmod.h>
#include <plat/omap_device.h>
@@ -60,9 +61,6 @@
#include "abe/abe_main.h"
#include "abe/port_mgr.h"
-#warning need omap_device_set_rate
-#define omap_device_set_rate(x, y, z)
-
static const char *abe_memory_bank[5] = {
"dmem",
"cmem",
@@ -114,16 +112,20 @@ struct abe_data {
void __iomem *io_base[5];
int irq;
int opp;
+ unsigned long opp_freqs[OMAP_ABE_OPP_COUNT];
int active;
/* coefficients */
struct fw_header hdr;
+ u32 *firmware;
s32 *equ[ABE_MAX_EQU];
int equ_profile[ABE_MAX_EQU];
struct soc_enum equalizer_enum[ABE_MAX_EQU];
struct snd_kcontrol_new equalizer_control[ABE_MAX_EQU];
struct coeff_config *equ_texts;
+ int mono_mix[ABE_NUM_MONO_MIXERS];
+
/* DAPM mixer config - TODO: some of this can be replaced with HAL update */
u32 widget_opp[ABE_NUM_DAPM_REG + 1];
@@ -233,12 +235,21 @@ EXPORT_SYMBOL_GPL(abe_dsp_pm_put);
void abe_dsp_shutdown(void)
{
+ struct omap4_abe_dsp_pdata *pdata = the_abe->abe_pdata;
+ int ret;
+
if (!the_abe->active && !abe_check_activity()) {
abe_set_opp_processing(ABE_OPP25);
the_abe->opp = 25;
abe_stop_event_generator();
udelay(250);
- omap_device_set_rate(the_abe->dev, the_abe->dev, 0);
+ if (pdata && pdata->device_scale) {
+ ret = pdata->device_scale(the_abe->dev, the_abe->dev,
+ the_abe->opp_freqs[0]);
+ if (ret)
+ dev_err(the_abe->dev,
+ "failed to scale to lowest OPP\n");
+ }
}
}
EXPORT_SYMBOL_GPL(abe_dsp_shutdown);
@@ -442,6 +453,55 @@ static int abe_get_mixer(struct snd_kcontrol *kcontrol,
return 0;
}
+static int abe_dsp_set_mono_mixer(int id, int enable)
+{
+ int mixer;
+
+ switch (id) {
+ case MIX_DL1_MONO:
+ mixer = MIXDL1;
+ break;
+ case MIX_DL2_MONO:
+ mixer = MIXDL2;
+ break;
+ case MIX_AUDUL_MONO:
+ mixer = MIXAUDUL;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ pm_runtime_get_sync(the_abe->dev);
+ abe_mono_mixer(mixer, enable);
+ pm_runtime_put_sync(the_abe->dev);
+
+ return 0;
+}
+
+static int abe_put_mono_mixer(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ int id = mc->shift - MIX_DL1_MONO;
+
+ the_abe->mono_mix[id] = ucontrol->value.integer.value[0];
+ abe_dsp_set_mono_mixer(mc->shift, the_abe->mono_mix[id]);
+
+ return 1;
+}
+
+static int abe_get_mono_mixer(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ int id = mc->shift - MIX_DL1_MONO;
+
+ ucontrol->value.integer.value[0] = the_abe->mono_mix[id];
+ return 0;
+}
+
/* router IDs that match our mixer strings */
static const abe_router_t router[] = {
ZERO_labelID, /* strangely this is not 0 */
@@ -724,38 +784,50 @@ static int volume_get_gain(struct snd_kcontrol *kcontrol,
return 0;
}
+static int abe_dsp_set_equalizer(unsigned int id, unsigned int profile)
+{
+ abe_equ_t equ_params;
+ int len;
+
+ if (id >= the_abe->hdr.num_equ)
+ return -EINVAL;
+
+ if (profile >= the_abe->equ_texts[id].count)
+ return -EINVAL;
+
+ len = the_abe->equ_texts[id].coeff;
+ equ_params.equ_length = len;
+ memcpy(equ_params.coef.type1, the_abe->equ[id] + profile * len,
+ len * sizeof(u32));
+ the_abe->equ_profile[id] = profile;
+
+ pm_runtime_get_sync(the_abe->dev);
+ abe_write_equalizer(id + 1, &equ_params);
+ pm_runtime_put_sync(the_abe->dev);
+
+ return 0;
+}
+
static int abe_get_equalizer(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
-#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
struct soc_enum *eqc = (struct soc_enum *)kcontrol->private_value;
ucontrol->value.integer.value[0] = the_abe->equ_profile[eqc->reg];
-#endif
return 0;
}
static int abe_put_equalizer(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
-#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
struct soc_enum *eqc = (struct soc_enum *)kcontrol->private_value;
u16 val = ucontrol->value.enumerated.item[0];
- abe_equ_t equ_params;
- int size;
+ int ret;
- if (val >= the_abe->hdr.num_equ)
- return -EINVAL;
-
- equ_params.equ_length = the_abe->equ_texts[eqc->reg].coeff;
- size = the_abe->equ_texts[eqc->reg].coeff * sizeof(s32);
- memcpy(equ_params.coef.type1, the_abe->equ[eqc->reg] + val * size, size);
- the_abe->equ_profile[eqc->reg] = val;
+ ret = abe_dsp_set_equalizer(eqc->reg, val);
+ if (ret < 0)
+ return ret;
- pm_runtime_get_sync(the_abe->dev);
- abe_write_equalizer(eqc->reg, &equ_params);
- pm_runtime_put_sync(the_abe->dev);
-#endif
return 1;
}
@@ -1000,6 +1072,13 @@ static const struct snd_kcontrol_new abe_controls[] = {
SOC_DOUBLE_EXT_TLV("BT UL Volume",
GAINS_BTUL, GAIN_LEFT_OFFSET, GAIN_RIGHT_OFFSET, 149, 0,
volume_get_gain, volume_put_gain, btul_tlv),
+
+ SOC_SINGLE_EXT("DL1 Mono Mixer", MIXDL1, MIX_DL1_MONO, 1, 0,
+ abe_get_mono_mixer, abe_put_mono_mixer),
+ SOC_SINGLE_EXT("DL2 Mono Mixer", MIXDL2, MIX_DL2_MONO, 1, 0,
+ abe_get_mono_mixer, abe_put_mono_mixer),
+ SOC_SINGLE_EXT("AUDUL Mono Mixer", MIXAUDUL, MIX_AUDUL_MONO, 1, 0,
+ abe_get_mono_mixer, abe_put_mono_mixer),
};
static const struct snd_soc_dapm_widget abe_dapm_widgets[] = {
@@ -1730,7 +1809,8 @@ static const struct snd_pcm_hardware omap_abe_hardware = {
static int abe_set_opp_mode(struct abe_data *abe)
{
- int i, opp = 0;
+ struct omap4_abe_dsp_pdata *pdata = abe->abe_pdata;
+ int i, opp = 0, ret = 0;
/* now calculate OPP level based upon DAPM widget status */
for (i = 0; i < ABE_NUM_WIDGETS; i++) {
@@ -1748,29 +1828,54 @@ static int abe_set_opp_mode(struct abe_data *abe)
case 25:
abe_set_opp_processing(ABE_OPP25);
udelay(250);
- omap_device_set_rate(abe->dev, abe->dev, 49150000);
+ if (pdata && pdata->device_scale) {
+ ret = pdata->device_scale(abe->dev, abe->dev,
+ abe->opp_freqs[OMAP_ABE_OPP25]);
+ if (ret)
+ goto err_scale;
+ }
break;
case 50:
default:
abe_set_opp_processing(ABE_OPP50);
udelay(250);
- omap_device_set_rate(abe->dev, abe->dev, 98300000);
+ if (pdata && pdata->device_scale) {
+ ret = pdata->device_scale(abe->dev, abe->dev,
+ abe->opp_freqs[OMAP_ABE_OPP50]);
+ if (ret)
+ goto err_scale;
+ }
break;
}
} else if (abe->opp < opp) {
/* Increase OPP mode */
switch (opp) {
case 25:
- omap_device_set_rate(abe->dev, abe->dev, 49000000);
+ if (pdata && pdata->device_scale) {
+ pdata->device_scale(abe->dev, abe->dev,
+ abe->opp_freqs[OMAP_ABE_OPP25]);
+ if (ret)
+ goto err_scale;
+ }
abe_set_opp_processing(ABE_OPP25);
break;
case 50:
- omap_device_set_rate(abe->dev, abe->dev, 98300000);
+ if (pdata && pdata->device_scale) {
+ ret = pdata->device_scale(abe->dev, abe->dev,
+ abe->opp_freqs[OMAP_ABE_OPP50]);
+ if (ret)
+ goto err_scale;
+ }
abe_set_opp_processing(ABE_OPP50);
break;
case 100:
default:
- omap_device_set_rate(abe->dev, abe->dev, 196600000);
+ if (pdata && pdata->device_scale) {
+ ret = pdata->device_scale(abe->dev, abe->dev,
+ abe->opp_freqs[OMAP_ABE_OPP100]);
+ if (ret)
+ goto err_scale;
+ }
abe_set_opp_processing(ABE_OPP100);
break;
}
@@ -1779,6 +1884,10 @@ static int abe_set_opp_mode(struct abe_data *abe)
dev_dbg(abe->dev, "new OPP level is %d\n", opp);
return 0;
+
+err_scale:
+ dev_err(abe->dev, "failed to scale to OPP%d\n", opp);
+ return ret;
}
static int aess_set_runtime_opp_level(struct abe_data *abe)
@@ -1838,15 +1947,22 @@ static int aess_save_context(struct abe_data *abe)
static int aess_restore_context(struct abe_data *abe)
{
struct omap4_abe_dsp_pdata *pdata = abe->abe_pdata;
- int loss_count = 0;
-
- omap_device_set_rate(&abe->dev, &abe->dev, 98000000);
+ int i, loss_count = 0, ret;
+
+ if (pdata && pdata->device_scale) {
+ ret = pdata->device_scale(the_abe->dev, the_abe->dev,
+ abe->opp_freqs[OMAP_ABE_OPP50]);
+ if (ret) {
+ dev_err(abe->dev, "failed to scale to OPP50\n");
+ return ret;
+ }
+ }
if (pdata->get_context_loss_count)
loss_count = pdata->get_context_loss_count(abe->dev);
if (loss_count != the_abe->loss_count)
- abe_reload_fw();
+ abe_reload_fw(abe->firmware);
/* TODO: Find a better way to save/retore gains after dor OFF mode */
abe_unmute_gain(MIXSDT, MIX_SDT_INPUT_UP_MIXER);
@@ -1880,6 +1996,12 @@ static int aess_restore_context(struct abe_data *abe)
abe_set_router_configuration(UPROUTE, 0, (u32 *)abe->router);
+ for (i = 0; i < abe->hdr.num_equ; i++)
+ abe_dsp_set_equalizer(i, abe->equ_profile[i]);
+
+ for (i = 0; i < ABE_NUM_MONO_MIXERS; i++)
+ abe_dsp_set_mono_mixer(MIX_DL1_MONO + i, abe->mono_mix[i]);
+
return 0;
}
@@ -2079,7 +2201,6 @@ static int abe_add_widgets(struct snd_soc_platform *platform)
struct fw_header *hdr = &abe->hdr;
int i, j;
-#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
/* create equalizer controls */
for (i = 0; i < hdr->num_equ; i++) {
struct soc_enum *equalizer_enum = &abe->equalizer_enum[i];
@@ -2107,7 +2228,6 @@ static int abe_add_widgets(struct snd_soc_platform *platform)
snd_soc_add_platform_controls(platform, abe->equalizer_control,
hdr->num_equ);
-#endif
snd_soc_add_platform_controls(platform, abe_controls,
ARRAY_SIZE(abe_controls));
@@ -2180,7 +2300,7 @@ static int abe_resume(struct snd_soc_dai *dai)
{
struct abe_data *abe = the_abe;
struct omap4_abe_dsp_pdata *pdata = abe->abe_pdata;
- int loss_count = 0, ret = 0;
+ int i, loss_count = 0, ret = 0;
dev_dbg(dai->dev, "%s: %s active %d\n",
__func__, dai->name, dai->active);
@@ -2192,10 +2312,18 @@ static int abe_resume(struct snd_soc_dai *dai)
loss_count = pdata->get_context_loss_count(abe->dev);
pm_runtime_get_sync(abe->dev);
- omap_device_set_rate(&abe->dev, &abe->dev, 98000000);
+
+ if (pdata && pdata->device_scale) {
+ ret = pdata->device_scale(abe->dev, abe->dev,
+ abe->opp_freqs[OMAP_ABE_OPP50]);
+ if (ret) {
+ dev_err(abe->dev, "failed to scale to OPP50\n");
+ goto out;
+ }
+ }
if (loss_count != abe->loss_count)
- abe_reload_fw();
+ abe_reload_fw(abe->firmware);
switch (dai->id) {
case OMAP_ABE_DAI_PDM_UL:
@@ -2230,6 +2358,9 @@ static int abe_resume(struct snd_soc_dai *dai)
abe_set_router_configuration(UPROUTE, 0, (u32 *)abe->router);
+ for (i = 0; i < abe->hdr.num_equ; i++)
+ abe_dsp_set_equalizer(i, abe->equ_profile[i]);
+
out:
pm_runtime_put_sync(abe->dev);
return ret;
@@ -2242,11 +2373,13 @@ out:
static int abe_probe(struct snd_soc_platform *platform)
{
struct abe_data *abe = snd_soc_platform_get_drvdata(platform);
+ struct opp *opp;
+ const u8 *fw_data;
+ unsigned long freq = ULONG_MAX;
+ int ret = 0, i, opp_count, offset = 0;
+#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
const struct firmware *fw;
-#ifndef CONFIG_PM_RUNTIME
- struct omap4_abe_dsp_pdata *pdata = priv->abe_pdata;
#endif
- int ret = 0, i, offset = 0;
abe->platform = platform;
@@ -2260,14 +2393,18 @@ static int abe_probe(struct snd_soc_platform *platform)
dev_err(abe->dev, "Failed to load firmware: %d\n", ret);
return ret;
}
+ fw_data = fw->data;
+#else
+ fw_data = (u8 *)abe_get_default_fw();
+#endif
/* get firmware and coefficients header info */
- memcpy(&abe->hdr, fw->data, sizeof(struct fw_header));
+ memcpy(&abe->hdr, fw_data, sizeof(struct fw_header));
if (abe->hdr.firmware_size > ABE_MAX_FW_SIZE) {
- dev_err(abe->dev, "Firmware too large at %d bytes: %d\n",
+ dev_err(abe->dev, "Firmware too large at %d bytes: %d\n",
abe->hdr.firmware_size, ret);
- ret = -EINVAL;
- goto err_fw;
+ ret = -EINVAL;
+ goto err_fw;
}
dev_dbg(abe->dev, "ABE firmware size %d bytes\n", abe->hdr.firmware_size);
@@ -2292,7 +2429,7 @@ static int abe_probe(struct snd_soc_platform *platform)
goto err_fw;
}
offset = sizeof(struct fw_header);
- memcpy(abe->equ_texts, fw->data + offset,
+ memcpy(abe->equ_texts, fw_data + offset,
abe->hdr.num_equ * sizeof(struct coeff_config));
/* get coefficients from firmware */
@@ -2302,7 +2439,7 @@ static int abe_probe(struct snd_soc_platform *platform)
goto err_equ;
}
offset += abe->hdr.num_equ * sizeof(struct coeff_config);
- memcpy(abe->equ[0], fw->data + offset, abe->hdr.coeff_size);
+ memcpy(abe->equ[0], fw_data + offset, abe->hdr.coeff_size);
/* allocate coefficient mixer texts */
dev_dbg(abe->dev, "loaded %d equalizers\n", abe->hdr.num_equ);
@@ -2326,16 +2463,55 @@ static int abe_probe(struct snd_soc_platform *platform)
/* initialise coefficient equalizers */
for (i = 1; i < abe->hdr.num_equ; i++) {
abe->equ[i] = abe->equ[i - 1] +
- abe->equ_texts[i - 1].count * abe->equ_texts[i - 1].coeff * sizeof(s32);
+ abe->equ_texts[i - 1].count * abe->equ_texts[i - 1].coeff;
}
-#endif
+
+ /* store ABE firmware for later context restore */
+ abe->firmware = kzalloc(abe->hdr.firmware_size, GFP_KERNEL);
+ if (abe->firmware == NULL) {
+ ret = -ENOMEM;
+ goto err_texts;
+ }
+
+ memcpy(abe->firmware,
+ fw_data + sizeof(struct fw_header) + abe->hdr.coeff_size,
+ abe->hdr.firmware_size);
+
ret = request_irq(abe->irq, abe_irq_handler, 0, "ABE", (void *)abe);
if (ret) {
dev_err(platform->dev, "request for ABE IRQ %d failed %d\n",
abe->irq, ret);
- goto err_texts;
+ goto err_irq;
+ }
+
+ /* query supported opps */
+ rcu_read_lock();
+ opp_count = opp_get_opp_count(abe->dev);
+ if (opp_count <= 0) {
+ dev_err(abe->dev, "invalid OPP data\n");
+ ret = opp_count;
+ goto err_opp;
+ } else if (opp_count > OMAP_ABE_OPP_COUNT) {
+ dev_err(abe->dev, "unsupported OPP count %d (max:%d)\n",
+ opp_count, OMAP_ABE_OPP_COUNT);
+ ret = -EINVAL;
+ goto err_opp;
}
+ /* assume provided opps are always higher */
+ for (i = OMAP_ABE_OPP_COUNT - 1; i >= 0; i--) {
+ opp = opp_find_freq_floor(abe->dev, &freq);
+ if (IS_ERR_OR_NULL(opp))
+ break;
+ abe->opp_freqs[i] = freq;
+ /* prepare to obtain next available opp */
+ freq--;
+ }
+ /* use lowest available opp for non-populated items */
+ for (freq++; i >= 0; i--)
+ abe->opp_freqs[i] = freq;
+ rcu_read_unlock();
+
/* aess_clk has to be enabled to access hal register.
* Disable the clk after it has been used.
*/
@@ -2345,14 +2521,7 @@ static int abe_probe(struct snd_soc_platform *platform)
abe_reset_hal();
-#if 0
-#warning fixup load fw args
- //abe_load_fw(fw->data + sizeof(struct fw_header) + abe->hdr.coeff_size);
-#else
- abe_load_fw();
-#endif
- /* Config OPP 100 for now */
- abe_set_opp_processing(ABE_OPP100);
+ abe_load_fw(abe->firmware);
/* "tick" of the audio engine */
abe_write_event_generator(EVENT_TIMER);
@@ -2368,14 +2537,19 @@ static int abe_probe(struct snd_soc_platform *platform)
#endif
return ret;
+err_opp:
+ rcu_read_unlock();
+ free_irq(abe->irq, (void *)abe);
+err_irq:
+ kfree(abe->firmware);
err_texts:
-#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
for (i = 0; i < abe->hdr.num_equ; i++)
kfree(abe->equalizer_enum[i].texts);
kfree(abe->equ[0]);
err_equ:
kfree(abe->equ_texts);
err_fw:
+#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
release_firmware(fw);
#endif
return ret;
@@ -2388,13 +2562,13 @@ static int abe_remove(struct snd_soc_platform *platform)
free_irq(abe->irq, (void *)abe);
-#if defined(CONFIG_SND_OMAP_SOC_ABE_DSP_MODULE)
for (i = 0; i < abe->hdr.num_equ; i++)
kfree(abe->equalizer_enum[i].texts);
kfree(abe->equ[0]);
kfree(abe->equ_texts);
-#endif
+ kfree(abe->firmware);
+
pm_runtime_disable(abe->dev);
return 0;
diff --git a/sound/soc/omap/omap-abe-dsp.h b/sound/soc/omap/omap-abe-dsp.h
index 5d7016e..2e8ac53 100644
--- a/sound/soc/omap/omap-abe-dsp.h
+++ b/sound/soc/omap/omap-abe-dsp.h
@@ -46,8 +46,12 @@
#define MIX_SWITCH_PDM_DL ABE_MIXER(17)
#define MIX_SWITCH_BT_VX_DL ABE_MIXER(18)
#define MIX_SWITCH_MM_EXT_DL ABE_MIXER(19)
+#define MIX_DL1_MONO ABE_MIXER(20)
+#define MIX_DL2_MONO ABE_MIXER(21)
+#define MIX_AUDUL_MONO ABE_MIXER(22)
-#define ABE_NUM_MIXERS (MIX_SWITCH_MM_EXT_DL + 1)
+#define ABE_NUM_MONO_MIXERS (MIX_AUDUL_MONO - MIX_DL1_MONO + 1)
+#define ABE_NUM_MIXERS (MIX_AUDUL_MONO + 1)
#define ABE_MUX(x) (x + ABE_NUM_MIXERS)
@@ -156,6 +160,11 @@
#define ABE_MAX_EQU 10
#define ABE_MAX_PROFILES 30
+#define OMAP_ABE_OPP25 0
+#define OMAP_ABE_OPP50 1
+#define OMAP_ABE_OPP100 2
+#define OMAP_ABE_OPP_COUNT 3
+
void abe_dsp_shutdown(void);
void abe_dsp_pm_get(void);
void abe_dsp_pm_put(void);