diff options
author | Xinyu Chen <xinyu.chen@freescale.com> | 2012-08-01 10:03:09 +0800 |
---|---|---|
committer | Xinyu Chen <xinyu.chen@freescale.com> | 2012-08-01 10:03:09 +0800 |
commit | d81dac54ea06a1f8a74acf91499d5946d94d9e6a (patch) | |
tree | a137a6698343f3dfb880456cc4d89872f2a9b877 /arch/arm/plat-mxc | |
parent | c72eec4afb9215391f06c1a1ce14a63e17ed64e2 (diff) | |
parent | 091604c85f017199cae9d437545a96157ab063e0 (diff) |
Merge remote branch 'fsl-linux-sdk/imx_3.0.35' into imx_3.0.35_android
Conflicts:
drivers/mxc/vpu/mxc_vpu.c
Diffstat (limited to 'arch/arm/plat-mxc')
-rwxr-xr-x | arch/arm/plat-mxc/cpufreq.c | 6 | ||||
-rw-r--r-- | arch/arm/plat-mxc/devices/platform-fsl-usb2-wakeup.c | 1 | ||||
-rw-r--r-- | arch/arm/plat-mxc/devices/platform-mxc-ehci.c | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/dma.h | 2 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/sdma.h | 1 | ||||
-rwxr-xr-x | arch/arm/plat-mxc/usb_common.c | 24 | ||||
-rwxr-xr-x | arch/arm/plat-mxc/usb_wakeup.c | 11 |
7 files changed, 42 insertions, 5 deletions
diff --git a/arch/arm/plat-mxc/cpufreq.c b/arch/arm/plat-mxc/cpufreq.c index b31970c667d2..765f05e23712 100755 --- a/arch/arm/plat-mxc/cpufreq.c +++ b/arch/arm/plat-mxc/cpufreq.c @@ -56,6 +56,7 @@ extern struct regulator *cpu_regulator; extern int dvfs_core_is_active; extern struct cpu_op *(*get_cpu_op)(int *op); extern int low_bus_freq_mode; +extern int audio_bus_freq_mode; extern int high_bus_freq_mode; extern int set_low_bus_freq(void); extern int set_high_bus_freq(int high_bus_speed); @@ -85,7 +86,7 @@ int set_cpu_freq(int freq) #endif /*Set the voltage for the GP domain. */ if (freq > org_cpu_rate) { - if (low_bus_freq_mode) + if (low_bus_freq_mode || audio_bus_freq_mode) set_high_bus_freq(0); ret = regulator_set_voltage(cpu_regulator, gp_volt, gp_volt); @@ -108,7 +109,8 @@ int set_cpu_freq(int freq) printk(KERN_DEBUG "COULD NOT SET GP VOLTAGE!!!!\n"); return ret; } - if (low_freq_bus_used() && !low_bus_freq_mode) + if (low_freq_bus_used() && + !(low_bus_freq_mode || audio_bus_freq_mode)) set_low_bus_freq(); } diff --git a/arch/arm/plat-mxc/devices/platform-fsl-usb2-wakeup.c b/arch/arm/plat-mxc/devices/platform-fsl-usb2-wakeup.c index 986b766fabde..3dacd287c6b8 100644 --- a/arch/arm/plat-mxc/devices/platform-fsl-usb2-wakeup.c +++ b/arch/arm/plat-mxc/devices/platform-fsl-usb2-wakeup.c @@ -52,3 +52,4 @@ struct platform_device *__init imx_add_fsl_usb2_wakeup( res, ARRAY_SIZE(res), pdata, sizeof(*pdata), DMA_BIT_MASK(32)); } +EXPORT_SYMBOL(imx_add_fsl_usb2_wakeup); diff --git a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c b/arch/arm/plat-mxc/devices/platform-mxc-ehci.c index c39f6d7561c6..2b9cdff2ff97 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c +++ b/arch/arm/plat-mxc/devices/platform-mxc-ehci.c @@ -83,6 +83,7 @@ struct platform_device *__init imx_add_mxc_ehci( res, ARRAY_SIZE(res), pdata, sizeof(*pdata), DMA_BIT_MASK(32)); } +EXPORT_SYMBOL(imx_add_mxc_ehci); /* FSL internal non-upstream code */ struct platform_device *__init imx_add_fsl_ehci( @@ -104,3 +105,4 @@ struct platform_device *__init imx_add_fsl_ehci( res, ARRAY_SIZE(res), pdata, sizeof(*pdata), DMA_BIT_MASK(32)); } +EXPORT_SYMBOL(imx_add_fsl_ehci); diff --git a/arch/arm/plat-mxc/include/mach/dma.h b/arch/arm/plat-mxc/include/mach/dma.h index ba00959c19fa..3fccb3be9e15 100644 --- a/arch/arm/plat-mxc/include/mach/dma.h +++ b/arch/arm/plat-mxc/include/mach/dma.h @@ -45,6 +45,7 @@ enum sdma_peripheral_type { IMX_DMATYPE_IPU_MEMORY, /* IPU Memory */ IMX_DMATYPE_ASRC, /* ASRC */ IMX_DMATYPE_ESAI, /* ESAI */ + IMX_DMATYPE_HDMI, }; enum imx_dma_prio { @@ -58,6 +59,7 @@ struct imx_dma_data { int dma_request_p2p; enum sdma_peripheral_type peripheral_type; int priority; + void *private; }; struct imx_pcm_dma_params { diff --git a/arch/arm/plat-mxc/include/mach/sdma.h b/arch/arm/plat-mxc/include/mach/sdma.h index a145c56b649d..cee7fe490188 100644 --- a/arch/arm/plat-mxc/include/mach/sdma.h +++ b/arch/arm/plat-mxc/include/mach/sdma.h @@ -45,6 +45,7 @@ struct sdma_script_start_addrs { s32 ram_code_start_addr; s32 mcu_2_ssish_addr; s32 ssish_2_mcu_addr; + s32 hdmi_dma_addr; }; /** diff --git a/arch/arm/plat-mxc/usb_common.c b/arch/arm/plat-mxc/usb_common.c index b18f5239c8b9..97d963a54a54 100755 --- a/arch/arm/plat-mxc/usb_common.c +++ b/arch/arm/plat-mxc/usb_common.c @@ -49,8 +49,12 @@ #include <mach/arc_otg.h> #include <mach/hardware.h> #include <mach/mxc.h> +typedef void (*driver_vbus_func)(bool); void __iomem *imx_otg_base; +static driver_vbus_func s_driver_vbus; + +EXPORT_SYMBOL(imx_otg_base); #define MXC_NUMBER_USB_TRANSCEIVER 6 struct fsl_xcvr_ops *g_xc_ops[MXC_NUMBER_USB_TRANSCEIVER] = { NULL }; @@ -59,10 +63,26 @@ bool usb_icbug_swfix_need(void) { if (cpu_is_mx6sl()) return false; - else - return true; + else if ((mx6q_revision() > IMX_CHIP_REVISION_1_1)) + return false; + else if ((mx6dl_revision() > IMX_CHIP_REVISION_1_0)) + return false; + return true; +} +EXPORT_SYMBOL(usb_icbug_swfix_need); + +void mx6_set_host1_vbus_func(driver_vbus_func driver_vbus) +{ + s_driver_vbus = driver_vbus; } +void mx6_set_usb_host1_vbus_func(driver_vbus_func *driver_vbus) +{ + *driver_vbus = s_driver_vbus; +} +EXPORT_SYMBOL(mx6_set_usb_host1_vbus_func); + + enum fsl_usb2_modes get_usb_mode(struct fsl_usb2_platform_data *pdata) { enum fsl_usb2_modes mode; diff --git a/arch/arm/plat-mxc/usb_wakeup.c b/arch/arm/plat-mxc/usb_wakeup.c index 4704eae91a51..e67c2219e52d 100755 --- a/arch/arm/plat-mxc/usb_wakeup.c +++ b/arch/arm/plat-mxc/usb_wakeup.c @@ -32,6 +32,7 @@ struct wakeup_ctrl { int wakeup_irq; int usb_irq; + bool thread_close; struct fsl_usb2_wakeup_platform_data *pdata; struct task_struct *thread; struct completion event; @@ -145,12 +146,18 @@ static int wakeup_event_thread(void *param) { struct wakeup_ctrl *ctrl = (struct wakeup_ctrl *)param; struct sched_param sch_param = {.sched_priority = 1}; + u32 timeout = 0; sched_setscheduler(current, SCHED_RR, &sch_param); while (1) { wait_for_completion_interruptible(&ctrl->event); - if (kthread_should_stop()) + if (ctrl->thread_close) { + while (!kthread_should_stop() && (timeout < 1000)) { + timeout++; + msleep(1); + } break; + } wakeup_event_handler(ctrl); enable_irq(ctrl->wakeup_irq); if ((ctrl->usb_irq > 0) && (ctrl->wakeup_irq != ctrl->usb_irq)) @@ -184,6 +191,7 @@ static int wakeup_dev_probe(struct platform_device *pdev) */ ctrl->wakeup_irq = platform_get_irq(pdev, 1); ctrl->usb_irq = platform_get_irq(pdev, 1); + ctrl->thread_close = false; if (ctrl->wakeup_irq != ctrl->usb_irq) interrupt_flag = IRQF_DISABLED; else @@ -210,6 +218,7 @@ error1: static int wakeup_dev_exit(struct platform_device *pdev) { if (g_ctrl->thread) { + g_ctrl->thread_close = true; complete(&g_ctrl->event); kthread_stop(g_ctrl->thread); } |