mirror of https://gitee.com/openkylin/linux.git
ARM: OMAP2+: UART: cleanup + remove uart pm specific API
In preparation to UART runtime conversion remove uart specific calls from pm24xx/34xx files and their definition from serial.c These func calls will no more be used with upcoming uart runtime design. 1.) omap_uart_prepare_suspend :- can be taken care with driver suspend hooks. 2.) omap_uart_enable_irqs :- Used to enable/disable uart irq's in suspend path from PM code, this is removed as same is handled by uart_suspend_port/uart_resume_port in omap-serial driver which will do an port_shutdown on suspend freeing irq and port_startup on resume enabling back irq. 3.) Remove prepare_idle/resume_idle calls used to gate uart clocks. UART clocks can be gated within driver using runtime funcs and be woken up using irq_chaining from omap_prm driver. 4.) Remove console_locking from idle path as clock gating is done withing driver itself with runtime API. Remove is_suspending check used to acquire console_lock. Signed-off-by: Govindraj.R <govindraj.raja@ti.com> Signed-off-by: Kevin Hilman <khilman@ti.com>
This commit is contained in:
parent
4390f5b2cb
commit
8384c9749f
|
@ -30,7 +30,6 @@
|
|||
#include <linux/irq.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/console.h>
|
||||
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
@ -127,27 +126,11 @@ static void omap2_enter_full_retention(void)
|
|||
if (omap_irq_pending())
|
||||
goto no_sleep;
|
||||
|
||||
/* Block console output in case it is on one of the OMAP UARTs */
|
||||
if (!is_suspending())
|
||||
if (!console_trylock())
|
||||
goto no_sleep;
|
||||
|
||||
omap_uart_prepare_idle(0);
|
||||
omap_uart_prepare_idle(1);
|
||||
omap_uart_prepare_idle(2);
|
||||
|
||||
/* Jump to SRAM suspend code */
|
||||
omap2_sram_suspend(sdrc_read_reg(SDRC_DLLA_CTRL),
|
||||
OMAP_SDRC_REGADDR(SDRC_DLLA_CTRL),
|
||||
OMAP_SDRC_REGADDR(SDRC_POWER));
|
||||
|
||||
omap_uart_resume_idle(2);
|
||||
omap_uart_resume_idle(1);
|
||||
omap_uart_resume_idle(0);
|
||||
|
||||
if (!is_suspending())
|
||||
console_unlock();
|
||||
|
||||
no_sleep:
|
||||
omap2_gpio_resume_after_idle();
|
||||
|
||||
|
@ -291,7 +274,6 @@ static int omap2_pm_suspend(void)
|
|||
mir1 = omap_readl(0x480fe0a4);
|
||||
omap_writel(1 << 5, 0x480fe0ac);
|
||||
|
||||
omap_uart_prepare_suspend();
|
||||
omap2_enter_full_retention();
|
||||
|
||||
omap_writel(mir1, 0x480fe0a4);
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/console.h>
|
||||
#include <trace/events/power.h>
|
||||
|
||||
#include <asm/suspend.h>
|
||||
|
@ -54,15 +53,6 @@
|
|||
|
||||
#ifdef CONFIG_SUSPEND
|
||||
static suspend_state_t suspend_state = PM_SUSPEND_ON;
|
||||
static inline bool is_suspending(void)
|
||||
{
|
||||
return (suspend_state != PM_SUSPEND_ON) && console_suspend_enabled;
|
||||
}
|
||||
#else
|
||||
static inline bool is_suspending(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* pm34xx errata defined in pm.h */
|
||||
|
@ -376,20 +366,11 @@ void omap_sram_idle(void)
|
|||
omap3_enable_io_chain();
|
||||
}
|
||||
|
||||
/* Block console output in case it is on one of the OMAP UARTs */
|
||||
if (!is_suspending())
|
||||
if (per_next_state < PWRDM_POWER_ON ||
|
||||
core_next_state < PWRDM_POWER_ON)
|
||||
if (!console_trylock())
|
||||
goto console_still_active;
|
||||
|
||||
pwrdm_pre_transition();
|
||||
|
||||
/* PER */
|
||||
if (per_next_state < PWRDM_POWER_ON) {
|
||||
per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;
|
||||
omap_uart_prepare_idle(2);
|
||||
omap_uart_prepare_idle(3);
|
||||
omap2_gpio_prepare_for_idle(per_going_off);
|
||||
if (per_next_state == PWRDM_POWER_OFF)
|
||||
omap3_per_save_context();
|
||||
|
@ -397,8 +378,6 @@ void omap_sram_idle(void)
|
|||
|
||||
/* CORE */
|
||||
if (core_next_state < PWRDM_POWER_ON) {
|
||||
omap_uart_prepare_idle(0);
|
||||
omap_uart_prepare_idle(1);
|
||||
if (core_next_state == PWRDM_POWER_OFF) {
|
||||
omap3_core_save_context();
|
||||
omap3_cm_save_context();
|
||||
|
@ -447,8 +426,6 @@ void omap_sram_idle(void)
|
|||
omap3_sram_restore_context();
|
||||
omap2_sms_restore_context();
|
||||
}
|
||||
omap_uart_resume_idle(0);
|
||||
omap_uart_resume_idle(1);
|
||||
if (core_next_state == PWRDM_POWER_OFF)
|
||||
omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK,
|
||||
OMAP3430_GR_MOD,
|
||||
|
@ -464,14 +441,8 @@ void omap_sram_idle(void)
|
|||
omap2_gpio_resume_after_idle();
|
||||
if (per_prev_state == PWRDM_POWER_OFF)
|
||||
omap3_per_restore_context();
|
||||
omap_uart_resume_idle(2);
|
||||
omap_uart_resume_idle(3);
|
||||
}
|
||||
|
||||
if (!is_suspending())
|
||||
console_unlock();
|
||||
|
||||
console_still_active:
|
||||
/* Disable IO-PAD and IO-CHAIN wakeup */
|
||||
if (omap3_has_io_wakeup() &&
|
||||
(per_next_state < PWRDM_POWER_ON ||
|
||||
|
@ -533,7 +504,6 @@ static int omap3_pm_suspend(void)
|
|||
goto restore;
|
||||
}
|
||||
|
||||
omap_uart_prepare_suspend();
|
||||
omap3_intc_suspend();
|
||||
|
||||
omap_sram_idle();
|
||||
|
@ -580,14 +550,12 @@ static int omap3_pm_begin(suspend_state_t state)
|
|||
{
|
||||
disable_hlt();
|
||||
suspend_state = state;
|
||||
omap_uart_enable_irqs(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void omap3_pm_end(void)
|
||||
{
|
||||
suspend_state = PM_SUSPEND_ON;
|
||||
omap_uart_enable_irqs(1);
|
||||
enable_hlt();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -367,51 +367,6 @@ static void omap_uart_idle_timer(unsigned long data)
|
|||
omap_uart_allow_sleep(uart);
|
||||
}
|
||||
|
||||
void omap_uart_prepare_idle(int num)
|
||||
{
|
||||
struct omap_uart_state *uart;
|
||||
|
||||
list_for_each_entry(uart, &uart_list, node) {
|
||||
if (num == uart->num && uart->can_sleep) {
|
||||
omap_uart_disable_clocks(uart);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void omap_uart_resume_idle(int num)
|
||||
{
|
||||
struct omap_uart_state *uart;
|
||||
|
||||
list_for_each_entry(uart, &uart_list, node) {
|
||||
if (num == uart->num && uart->can_sleep) {
|
||||
omap_uart_enable_clocks(uart);
|
||||
|
||||
/* Check for IO pad wakeup */
|
||||
if (cpu_is_omap34xx() && uart->padconf) {
|
||||
u16 p = omap_ctrl_readw(uart->padconf);
|
||||
|
||||
if (p & OMAP3_PADCONF_WAKEUPEVENT0)
|
||||
omap_uart_block_sleep(uart);
|
||||
}
|
||||
|
||||
/* Check for normal UART wakeup */
|
||||
if (__raw_readl(uart->wk_st) & uart->wk_mask)
|
||||
omap_uart_block_sleep(uart);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void omap_uart_prepare_suspend(void)
|
||||
{
|
||||
struct omap_uart_state *uart;
|
||||
|
||||
list_for_each_entry(uart, &uart_list, node) {
|
||||
omap_uart_allow_sleep(uart);
|
||||
}
|
||||
}
|
||||
|
||||
int omap_uart_can_sleep(void)
|
||||
{
|
||||
struct omap_uart_state *uart;
|
||||
|
@ -530,26 +485,6 @@ static void omap_uart_idle_init(struct omap_uart_state *uart)
|
|||
WARN_ON(ret);
|
||||
}
|
||||
|
||||
void omap_uart_enable_irqs(int enable)
|
||||
{
|
||||
int ret;
|
||||
struct omap_uart_state *uart;
|
||||
|
||||
list_for_each_entry(uart, &uart_list, node) {
|
||||
if (enable) {
|
||||
pm_runtime_put_sync(&uart->pdev->dev);
|
||||
ret = request_threaded_irq(uart->irq, NULL,
|
||||
omap_uart_interrupt,
|
||||
IRQF_SHARED,
|
||||
"serial idle",
|
||||
(void *)uart);
|
||||
} else {
|
||||
pm_runtime_get_noresume(&uart->pdev->dev);
|
||||
free_irq(uart->irq, (void *)uart);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t sleep_timeout_show(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
|
|
|
@ -111,10 +111,6 @@ extern void omap_serial_init(void);
|
|||
extern void omap_serial_init_port(struct omap_board_data *bdata);
|
||||
extern int omap_uart_can_sleep(void);
|
||||
extern void omap_uart_check_wakeup(void);
|
||||
extern void omap_uart_prepare_suspend(void);
|
||||
extern void omap_uart_prepare_idle(int num);
|
||||
extern void omap_uart_resume_idle(int num);
|
||||
extern void omap_uart_enable_irqs(int enable);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue