diff options
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); |