linux/drivers/tty/serial
Fabio Estevam 80c48497f2 serial: imx: Fix serial clock unbalance
Since commit 0c375501 (serial: imx: enable the clocks for console), the
imx_startup() function calls clk_prepare_enable conditionally, so we
need to call clk_disable_unprepare inside imx_shutdown() under the same
condition to avoid unbalanced clock calls.

This avoids the following warning:

------------[ cut here ]------------
WARNING: CPU: 0 PID: 70 at drivers/clk/clk.c:780 __clk_disable+0x68/0x84()
Modules linked in:
CPU: 0 PID: 70 Comm: mountall Not tainted 3.10.0-rc4-next-20130607+ #435
Backtrace:
[<800116a4>] (dump_backtrace+0x0/0x10c) from [<80011844>] (show_stack+0x18/0x1c)
 r6:8069f4e8 r5:0000030c r4:00000000 r3:00000000
[<8001182c>] (show_stack+0x0/0x1c) from [<8053bce0>] (dump_stack+0x78/0x94)
[<8053bc68>] (dump_stack+0x0/0x94) from [<80023df8>] (warn_slowpath_common+0x6c/0x8c)
 r4:00000000 r3:00000000
[<80023d8c>] (warn_slowpath_common+0x0/0x8c) from [<80023e3c>] (warn_slowpath_null+0x24/0x2c)
 r8:bf2ed008 r7:bfaa9810 r6:000f0013 r5:bf824b80 r4:bf824b80
[<80023e18>] (warn_slowpath_null+0x0/0x2c) from [<8041af84>] (__clk_disable+0x68/0x84)
[<8041af1c>] (__clk_disable+0x0/0x84) from [<8041b098>] (clk_disable+0x20/0x2c)
 r4:600f0013 r3:00000001
[<8041b078>] (clk_disable+0x0/0x2c) from [<802c93e8>] (imx_shutdown+0xbc/0xec)
 r5:bf824b80 r4:bfaa9810
[<802c932c>] (imx_shutdown+0x0/0xec) from [<802c63a0>] (uart_port_shutdown+0x34/0x40)
 r5:bf86f860 r4:bfaa9810
[<802c636c>] (uart_port_shutdown+0x0/0x40) from [<802c68c0>] (uart_shutdown+0x98/0xc4)
 r4:bf86f800 r3:00000000
[<802c6828>] (uart_shutdown+0x0/0xc4) from [<802c7514>] (uart_close+0x5c/0x198)
 r7:bfaa9810 r6:bf274400 r5:bf86f86c r4:bf86f800
[<802c74b8>] (uart_close+0x0/0x198) from [<802ac648>] (tty_release+0xf8/0x500)
[<802ac550>] (tty_release+0x0/0x500) from [<800c5a30>] (__fput+0x9c/0x208)
[<800c5994>] (__fput+0x0/0x208) from [<800c5bac>] (____fput+0x10/0x14)
[<800c5b9c>] (____fput+0x0/0x14) from [<80040234>] (task_work_run+0xb4/0xec)
[<80040180>] (task_work_run+0x0/0xec) from [<80029238>] (do_exit+0x2b0/0x920)
 r8:8000e144 r7:000000f8 r6:bf306300 r5:00000000 r4:bfac1180
[<80028f88>] (do_exit+0x0/0x920) from [<80029a4c>] (do_group_exit+0x50/0xd4)
 r7:000000f8
[<800299fc>] (do_group_exit+0x0/0xd4) from [<80029ae8>] (__wake_up_parent+0x0/0x28)
 r7:000000f8 r6:00000001 r5:0006f7ae r4:0006f79a
[<80029ad0>] (SyS_exit_group+0x0/0x18) from [<8000dfc0>] (ret_fast_syscall+0x0/0x30)
---[ end trace 16d080eb7efea4e9 ]---

Reported-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Tested-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-06-17 12:49:43 -07:00
..
8250 Merge 3.10-rc5 into tty-next 2013-06-08 21:23:33 -07:00
cpm_uart serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
jsm TTY: jsm, remove superfluous check 2013-03-18 16:17:20 -07:00
21285.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
68328serial.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu 2013-05-10 07:22:35 -07:00
altera_jtaguart.c tty: serial: altera_jtaguart: Simplify altera_jtaguart_init() 2013-02-05 11:13:51 -08:00
altera_uart.c serial: altera: remove unnecessary platform_set_drvdata() 2013-05-20 11:53:46 -07:00
amba-pl010.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
amba-pl011.c Merge 3.10-rc3 into tty-next 2013-05-27 10:57:53 +09:00
apbuart.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
apbuart.h
ar933x_uart.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
arc_uart.c TTY: cleanup tty->hw_stopped uses 2013-03-18 16:24:30 -07:00
atmel_serial.c tty: atmel_serial_probe(): index of atmel_ports[] fix 2013-03-15 13:23:29 -07:00
bcm63xx_uart.c MIPS: BCM63XX: merge bcm63xx_clk.h into bcm63xx/clk.c 2013-05-08 01:19:04 +02:00
bfin_sport_uart.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
bfin_sport_uart.h
bfin_uart.c TTY: serial/bfin_uart, unbreak build with KGDB enabled 2013-03-18 16:24:30 -07:00
clps711x.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
crisv10.c crisv10: use counts from tty_port 2013-03-18 16:26:33 -07:00
crisv10.h crisv10: use counts from tty_port 2013-03-18 16:26:33 -07:00
dz.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
dz.h
efm32-uart.c serial/efm32: parse location property 2013-01-21 13:56:46 -08:00
fsl_lpuart.c tty: serial: add Freescale lpuart driver support 2013-06-08 22:30:44 -07:00
icom.c driver: tty: serial: remove cast for kzalloc return value 2013-03-18 17:09:37 -07:00
icom.h
ifx6x60.c tty: ifx6x60: Remove unused suspend/resume callbacks 2013-03-18 16:29:29 -07:00
ifx6x60.h
imx.c serial: imx: Fix serial clock unbalance 2013-06-17 12:49:43 -07:00
ioc3_serial.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
ioc4_serial.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
ip22zilog.c TTY: ip22zilog, fix tty_flip_buffer_push call 2013-01-16 07:36:47 -08:00
ip22zilog.h
Kconfig tty: serial: add Freescale lpuart driver support 2013-06-08 22:30:44 -07:00
kgdb_nmi.c kgdb: remove #include <linux/serial_8250.h> from kgdb.h 2013-02-04 15:35:26 -08:00
kgdboc.c
lantiq.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
lpc32xx_hs.c serial: lpc32xx: Fix fallout from tty_port conversion 2013-01-18 16:05:15 -08:00
m32r_sio.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
m32r_sio.h
m32r_sio_reg.h
Makefile tty: serial: add Freescale lpuart driver support 2013-06-08 22:30:44 -07:00
max310x.c tty: max310x: Use dev_pm_ops 2013-03-18 16:29:29 -07:00
max3100.c serial: max3100: use spi_get_drvdata() and spi_set_drvdata() 2013-04-05 15:49:39 -07:00
mcf.c serial: mcf: missing uart_unregister_driver() on error in mcf_init() 2013-05-20 11:54:56 -07:00
mfd.c serial: mfd: Add sysrq support 2013-06-17 12:49:43 -07:00
mpc52xx_uart.c serial/mpc52xx_uart: fix kernel panic when system reboot 2013-06-17 12:49:43 -07:00
mpsc.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
mrst_max3110.c tty: mrst_max3110: Use dev_pm_ops 2013-03-18 16:29:29 -07:00
mrst_max3110.h
msm_serial.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
msm_serial.h
msm_serial_hs.c TTY: serial/msm_serial_hs, remove unused tty 2013-03-18 16:24:30 -07:00
msm_smd_tty.c TTY: msm_smd_tty, clean up activate/shutdown 2013-03-18 16:19:44 -07:00
mux.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
mxs-auart.c ARM: arm-soc device tree changes, part 2 2013-05-07 11:06:17 -07:00
netx-serial.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
nwpserial.c tty: nwpserial: Pass correct pointer to free_irq() 2013-05-20 11:54:55 -07:00
of_serial.c serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
omap-serial.c serial: omap: fix potential NULL pointer dereference in serial_omap_runtime_suspend() 2013-06-06 13:07:05 -07:00
pch_uart.c serial: pch_uart: add console poll support 2013-03-15 13:55:23 -07:00
pmac_zilog.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
pmac_zilog.h
pnx8xxx_uart.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
pxa.c serial: pxa: fine-tune clk useage 2013-01-25 08:52:23 -08:00
rp2.c serial: rp2: New driver for Comtrol RocketPort 2 cards 2013-01-17 17:28:39 -08:00
sa1100.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
samsung.c Merge 3.10-rc5 into tty-next 2013-06-08 21:23:33 -07:00
samsung.h tty: serial/samsung: fix modular build 2013-04-11 13:14:37 -07:00
sb1250-duart.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
sc26xx.c serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
sccnxp.c serial: sccnxp: Replace pdata.init/exit with regulator API 2013-04-15 11:04:07 -07:00
serial-tegra.c serial: tegra: Convert to devm_ioremap_resource() 2013-03-15 13:55:22 -07:00
serial_core.c serial: Move "uart_console" def to core header file. 2013-05-20 11:47:21 -07:00
serial_ks8695.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
serial_txx9.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
sh-sci.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
sh-sci.h serial: sh-sci: remove obsolete Kconfig macros 2013-03-25 14:06:45 -07:00
sirfsoc_uart.c tty/serial/sirf: fix error propagation in sirfsoc_uart_probe() 2013-06-06 13:07:05 -07:00
sirfsoc_uart.h serial: sirf: only use lookup table to set baudrate when ioclk=150MHz 2013-01-17 17:18:55 -08:00
sn_console.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
suncore.c
sunhv.c serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
sunsab.c serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
sunsab.h
sunsu.c serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
sunzilog.c serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
sunzilog.h
timbuart.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
timbuart.h
uartlite.c tty: serial: uartlite: Support uartlite on big and little endian systems 2013-02-13 08:38:45 -08:00
ucc_uart.c driver: tty: add missing unregister in err case 2013-06-03 10:30:43 -07:00
vr41xx_siu.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
vt8500_serial.c serial: vt8500: Remove redundant use of of_match_ptr macro 2013-06-03 10:21:33 -07:00
xilinx_uartps.c serial: use platform_{get,set}_drvdata() 2013-06-03 10:21:33 -07:00
zs.c TTY: switch tty_flip_buffer_push 2013-01-15 22:30:15 -08:00
zs.h