Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
e1482a17
Commit
e1482a17
authored
Jan 03, 2012
by
Arnd Bergmann
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'mxs/clk-prepare' of
git://git.linaro.org/people/shawnguo/linux-2.6
into imx/clk
parents
5f0a6e2d
6abda3e1
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
97 additions
and
58 deletions
+97
-58
arch/arm/Kconfig
arch/arm/Kconfig
+1
-0
arch/arm/mach-mxs/clock-mx23.c
arch/arm/mach-mxs/clock-mx23.c
+5
-5
arch/arm/mach-mxs/clock-mx28.c
arch/arm/mach-mxs/clock-mx28.c
+5
-5
arch/arm/mach-mxs/clock.c
arch/arm/mach-mxs/clock.c
+23
-10
arch/arm/mach-mxs/mach-mx28evk.c
arch/arm/mach-mxs/mach-mx28evk.c
+1
-1
arch/arm/mach-mxs/system.c
arch/arm/mach-mxs/system.c
+1
-1
arch/arm/mach-mxs/timer.c
arch/arm/mach-mxs/timer.c
+1
-1
drivers/clk/Kconfig
drivers/clk/Kconfig
+3
-0
drivers/dma/mxs-dma.c
drivers/dma/mxs-dma.c
+4
-4
drivers/mmc/host/mxs-mmc.c
drivers/mmc/host/mxs-mmc.c
+5
-5
drivers/mtd/nand/gpmi-nand/gpmi-lib.c
drivers/mtd/nand/gpmi-nand/gpmi-lib.c
+6
-6
drivers/net/can/flexcan.c
drivers/net/can/flexcan.c
+5
-5
drivers/net/ethernet/freescale/fec.c
drivers/net/ethernet/freescale/fec.c
+5
-5
drivers/tty/serial/mxs-auart.c
drivers/tty/serial/mxs-auart.c
+4
-4
drivers/video/mxsfb.c
drivers/video/mxsfb.c
+4
-4
include/linux/clk.h
include/linux/clk.h
+22
-0
sound/soc/mxs/mxs-saif.c
sound/soc/mxs/mxs-saif.c
+2
-2
No files found.
arch/arm/Kconfig
View file @
e1482a17
...
...
@@ -442,6 +442,7 @@ config ARCH_MXS
select ARCH_REQUIRE_GPIOLIB
select CLKDEV_LOOKUP
select CLKSRC_MMIO
select HAVE_CLK_PREPARE
help
Support for Freescale MXS-based family of processors
...
...
arch/arm/mach-mxs/clock-mx23.c
View file @
e1482a17
...
...
@@ -545,11 +545,11 @@ int __init mx23_clocks_init(void)
*/
clk_set_parent
(
&
ssp_clk
,
&
ref_io_clk
);
clk_enable
(
&
cpu_clk
);
clk_enable
(
&
hbus_clk
);
clk_enable
(
&
xbus_clk
);
clk_enable
(
&
emi_clk
);
clk_enable
(
&
uart_clk
);
clk_
prepare_
enable
(
&
cpu_clk
);
clk_
prepare_
enable
(
&
hbus_clk
);
clk_
prepare_
enable
(
&
xbus_clk
);
clk_
prepare_
enable
(
&
emi_clk
);
clk_
prepare_
enable
(
&
uart_clk
);
clkdev_add_table
(
lookups
,
ARRAY_SIZE
(
lookups
));
...
...
arch/arm/mach-mxs/clock-mx28.c
View file @
e1482a17
...
...
@@ -775,11 +775,11 @@ int __init mx28_clocks_init(void)
clk_set_parent
(
&
ssp0_clk
,
&
ref_io0_clk
);
clk_set_parent
(
&
ssp1_clk
,
&
ref_io0_clk
);
clk_enable
(
&
cpu_clk
);
clk_enable
(
&
hbus_clk
);
clk_enable
(
&
xbus_clk
);
clk_enable
(
&
emi_clk
);
clk_enable
(
&
uart_clk
);
clk_
prepare_
enable
(
&
cpu_clk
);
clk_
prepare_
enable
(
&
hbus_clk
);
clk_
prepare_
enable
(
&
xbus_clk
);
clk_
prepare_
enable
(
&
emi_clk
);
clk_
prepare_
enable
(
&
uart_clk
);
clk_set_parent
(
&
lcdif_clk
,
&
ref_pix_clk
);
clk_set_parent
(
&
saif0_clk
,
&
pll0_clk
);
...
...
arch/arm/mach-mxs/clock.c
View file @
e1482a17
...
...
@@ -74,10 +74,15 @@ static int __clk_enable(struct clk *clk)
return
0
;
}
/* This function increments the reference count on the clock and enables the
* clock if not already enabled. The parent clock tree is recursively enabled
/*
* The clk_enable/clk_disable could be called by drivers in atomic context,
* so they should not really hold mutex. Instead, clk_prepare/clk_unprepare
* can hold a mutex, as the pair will only be called in non-atomic context.
* Before migrating to common clk framework, we can have __clk_enable and
* __clk_disable called in clk_prepare/clk_unprepare with mutex held and
* leave clk_enable/clk_disable as the dummy functions.
*/
int
clk_
enabl
e
(
struct
clk
*
clk
)
int
clk_
prepar
e
(
struct
clk
*
clk
)
{
int
ret
=
0
;
...
...
@@ -90,13 +95,9 @@ int clk_enable(struct clk *clk)
return
ret
;
}
EXPORT_SYMBOL
(
clk_
enabl
e
);
EXPORT_SYMBOL
(
clk_
prepar
e
);
/* This function decrements the reference count on the clock and disables
* the clock when reference count is 0. The parent clock tree is
* recursively disabled
*/
void
clk_disable
(
struct
clk
*
clk
)
void
clk_unprepare
(
struct
clk
*
clk
)
{
if
(
clk
==
NULL
||
IS_ERR
(
clk
))
return
;
...
...
@@ -105,6 +106,18 @@ void clk_disable(struct clk *clk)
__clk_disable
(
clk
);
mutex_unlock
(
&
clocks_mutex
);
}
EXPORT_SYMBOL
(
clk_unprepare
);
int
clk_enable
(
struct
clk
*
clk
)
{
return
0
;
}
EXPORT_SYMBOL
(
clk_enable
);
void
clk_disable
(
struct
clk
*
clk
)
{
/* nothing to do */
}
EXPORT_SYMBOL
(
clk_disable
);
/* Retrieve the *current* clock rate. If the clock itself
...
...
@@ -166,7 +179,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
return
ret
;
if
(
clk
->
usecount
)
clk_enable
(
parent
);
clk_
prepare_
enable
(
parent
);
mutex_lock
(
&
clocks_mutex
);
ret
=
clk
->
set_parent
(
clk
,
parent
);
...
...
arch/arm/mach-mxs/mach-mx28evk.c
View file @
e1482a17
...
...
@@ -228,7 +228,7 @@ static void __init mx28evk_fec_reset(void)
/* Enable fec phy clock */
clk
=
clk_get_sys
(
"pll2"
,
NULL
);
if
(
!
IS_ERR
(
clk
))
clk_enable
(
clk
);
clk_
prepare_
enable
(
clk
);
/* Power up fec phy */
ret
=
gpio_request
(
MX28EVK_FEC_PHY_POWER
,
"fec-phy-power"
);
...
...
arch/arm/mach-mxs/system.c
View file @
e1482a17
...
...
@@ -66,7 +66,7 @@ static int __init mxs_arch_reset_init(void)
clk
=
clk_get_sys
(
"rtc"
,
NULL
);
if
(
!
IS_ERR
(
clk
))
clk_enable
(
clk
);
clk_
prepare_
enable
(
clk
);
return
0
;
}
...
...
arch/arm/mach-mxs/timer.c
View file @
e1482a17
...
...
@@ -245,7 +245,7 @@ static int __init mxs_clocksource_init(struct clk *timer_clk)
void
__init
mxs_timer_init
(
struct
clk
*
timer_clk
,
int
irq
)
{
clk_enable
(
timer_clk
);
clk_
prepare_
enable
(
timer_clk
);
/*
* Initialize timers to a known state
...
...
drivers/clk/Kconfig
View file @
e1482a17
...
...
@@ -3,5 +3,8 @@ config CLKDEV_LOOKUP
bool
select HAVE_CLK
config HAVE_CLK_PREPARE
bool
config HAVE_MACH_CLKDEV
bool
drivers/dma/mxs-dma.c
View file @
e1482a17
...
...
@@ -334,7 +334,7 @@ static int mxs_dma_alloc_chan_resources(struct dma_chan *chan)
goto
err_irq
;
}
ret
=
clk_enable
(
mxs_dma
->
clk
);
ret
=
clk_
prepare_
enable
(
mxs_dma
->
clk
);
if
(
ret
)
goto
err_clk
;
...
...
@@ -372,7 +372,7 @@ static void mxs_dma_free_chan_resources(struct dma_chan *chan)
dma_free_coherent
(
mxs_dma
->
dma_device
.
dev
,
PAGE_SIZE
,
mxs_chan
->
ccw
,
mxs_chan
->
ccw_phys
);
clk_disable
(
mxs_dma
->
clk
);
clk_disable
_unprepare
(
mxs_dma
->
clk
);
}
static
struct
dma_async_tx_descriptor
*
mxs_dma_prep_slave_sg
(
...
...
@@ -578,7 +578,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine *mxs_dma)
{
int
ret
;
ret
=
clk_enable
(
mxs_dma
->
clk
);
ret
=
clk_
prepare_
enable
(
mxs_dma
->
clk
);
if
(
ret
)
goto
err_out
;
...
...
@@ -604,7 +604,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine *mxs_dma)
writel
(
MXS_DMA_CHANNELS_MASK
<<
MXS_DMA_CHANNELS
,
mxs_dma
->
base
+
HW_APBHX_CTRL1
+
MXS_SET_ADDR
);
clk_disable
(
mxs_dma
->
clk
);
clk_disable
_unprepare
(
mxs_dma
->
clk
);
return
0
;
...
...
drivers/mmc/host/mxs-mmc.c
View file @
e1482a17
...
...
@@ -713,7 +713,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)
ret
=
PTR_ERR
(
host
->
clk
);
goto
out_iounmap
;
}
clk_enable
(
host
->
clk
);
clk_
prepare_
enable
(
host
->
clk
);
mxs_mmc_reset
(
host
);
...
...
@@ -772,7 +772,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)
if
(
host
->
dmach
)
dma_release_channel
(
host
->
dmach
);
out_clk_put:
clk_disable
(
host
->
clk
);
clk_disable
_unprepare
(
host
->
clk
);
clk_put
(
host
->
clk
);
out_iounmap:
iounmap
(
host
->
base
);
...
...
@@ -798,7 +798,7 @@ static int mxs_mmc_remove(struct platform_device *pdev)
if
(
host
->
dmach
)
dma_release_channel
(
host
->
dmach
);
clk_disable
(
host
->
clk
);
clk_disable
_unprepare
(
host
->
clk
);
clk_put
(
host
->
clk
);
iounmap
(
host
->
base
);
...
...
@@ -819,7 +819,7 @@ static int mxs_mmc_suspend(struct device *dev)
ret
=
mmc_suspend_host
(
mmc
);
clk_disable
(
host
->
clk
);
clk_disable
_unprepare
(
host
->
clk
);
return
ret
;
}
...
...
@@ -830,7 +830,7 @@ static int mxs_mmc_resume(struct device *dev)
struct
mxs_mmc_host
*
host
=
mmc_priv
(
mmc
);
int
ret
=
0
;
clk_enable
(
host
->
clk
);
clk_
prepare_
enable
(
host
->
clk
);
ret
=
mmc_resume_host
(
mmc
);
...
...
drivers/mtd/nand/gpmi-nand/gpmi-lib.c
View file @
e1482a17
...
...
@@ -126,7 +126,7 @@ int gpmi_init(struct gpmi_nand_data *this)
struct
resources
*
r
=
&
this
->
resources
;
int
ret
;
ret
=
clk_enable
(
r
->
clock
);
ret
=
clk_
prepare_
enable
(
r
->
clock
);
if
(
ret
)
goto
err_out
;
ret
=
gpmi_reset_block
(
r
->
gpmi_regs
,
false
);
...
...
@@ -146,7 +146,7 @@ int gpmi_init(struct gpmi_nand_data *this)
/* Select BCH ECC. */
writel
(
BM_GPMI_CTRL1_BCH_MODE
,
r
->
gpmi_regs
+
HW_GPMI_CTRL1_SET
);
clk_disable
(
r
->
clock
);
clk_disable
_unprepare
(
r
->
clock
);
return
0
;
err_out:
return
ret
;
...
...
@@ -202,7 +202,7 @@ int bch_set_geometry(struct gpmi_nand_data *this)
ecc_strength
=
bch_geo
->
ecc_strength
>>
1
;
page_size
=
bch_geo
->
page_size
;
ret
=
clk_enable
(
r
->
clock
);
ret
=
clk_
prepare_
enable
(
r
->
clock
);
if
(
ret
)
goto
err_out
;
...
...
@@ -229,7 +229,7 @@ int bch_set_geometry(struct gpmi_nand_data *this)
writel
(
BM_BCH_CTRL_COMPLETE_IRQ_EN
,
r
->
bch_regs
+
HW_BCH_CTRL_SET
);
clk_disable
(
r
->
clock
);
clk_disable
_unprepare
(
r
->
clock
);
return
0
;
err_out:
return
ret
;
...
...
@@ -704,7 +704,7 @@ void gpmi_begin(struct gpmi_nand_data *this)
int
ret
;
/* Enable the clock. */
ret
=
clk_enable
(
r
->
clock
);
ret
=
clk_
prepare_
enable
(
r
->
clock
);
if
(
ret
)
{
pr_err
(
"We failed in enable the clk
\n
"
);
goto
err_out
;
...
...
@@ -773,7 +773,7 @@ void gpmi_begin(struct gpmi_nand_data *this)
void
gpmi_end
(
struct
gpmi_nand_data
*
this
)
{
struct
resources
*
r
=
&
this
->
resources
;
clk_disable
(
r
->
clock
);
clk_disable
_unprepare
(
r
->
clock
);
}
/* Clears a BCH interrupt. */
...
...
drivers/net/can/flexcan.c
View file @
e1482a17
...
...
@@ -802,7 +802,7 @@ static int flexcan_open(struct net_device *dev)
struct
flexcan_priv
*
priv
=
netdev_priv
(
dev
);
int
err
;
clk_enable
(
priv
->
clk
);
clk_
prepare_
enable
(
priv
->
clk
);
err
=
open_candev
(
dev
);
if
(
err
)
...
...
@@ -824,7 +824,7 @@ static int flexcan_open(struct net_device *dev)
out_close:
close_candev
(
dev
);
out:
clk_disable
(
priv
->
clk
);
clk_disable
_unprepare
(
priv
->
clk
);
return
err
;
}
...
...
@@ -838,7 +838,7 @@ static int flexcan_close(struct net_device *dev)
flexcan_chip_stop
(
dev
);
free_irq
(
dev
->
irq
,
dev
);
clk_disable
(
priv
->
clk
);
clk_disable
_unprepare
(
priv
->
clk
);
close_candev
(
dev
);
...
...
@@ -877,7 +877,7 @@ static int __devinit register_flexcandev(struct net_device *dev)
struct
flexcan_regs
__iomem
*
regs
=
priv
->
base
;
u32
reg
,
err
;
clk_enable
(
priv
->
clk
);
clk_
prepare_
enable
(
priv
->
clk
);
/* select "bus clock", chip must be disabled */
flexcan_chip_disable
(
priv
);
...
...
@@ -911,7 +911,7 @@ static int __devinit register_flexcandev(struct net_device *dev)
out:
/* disable core and turn off clocks */
flexcan_chip_disable
(
priv
);
clk_disable
(
priv
->
clk
);
clk_disable
_unprepare
(
priv
->
clk
);
return
err
;
}
...
...
drivers/net/ethernet/freescale/fec.c
View file @
e1482a17
...
...
@@ -1591,7 +1591,7 @@ fec_probe(struct platform_device *pdev)
ret
=
PTR_ERR
(
fep
->
clk
);
goto
failed_clk
;
}
clk_enable
(
fep
->
clk
);
clk_
prepare_
enable
(
fep
->
clk
);
ret
=
fec_enet_init
(
ndev
);
if
(
ret
)
...
...
@@ -1614,7 +1614,7 @@ fec_probe(struct platform_device *pdev)
fec_enet_mii_remove
(
fep
);
failed_mii_init:
failed_init:
clk_disable
(
fep
->
clk
);
clk_disable
_unprepare
(
fep
->
clk
);
clk_put
(
fep
->
clk
);
failed_clk:
for
(
i
=
0
;
i
<
FEC_IRQ_NUM
;
i
++
)
{
...
...
@@ -1641,7 +1641,7 @@ fec_drv_remove(struct platform_device *pdev)
fec_stop
(
ndev
);
fec_enet_mii_remove
(
fep
);
clk_disable
(
fep
->
clk
);
clk_disable
_unprepare
(
fep
->
clk
);
clk_put
(
fep
->
clk
);
iounmap
(
fep
->
hwp
);
unregister_netdev
(
ndev
);
...
...
@@ -1667,7 +1667,7 @@ fec_suspend(struct device *dev)
fec_stop
(
ndev
);
netif_device_detach
(
ndev
);
}
clk_disable
(
fep
->
clk
);
clk_disable
_unprepare
(
fep
->
clk
);
return
0
;
}
...
...
@@ -1678,7 +1678,7 @@ fec_resume(struct device *dev)
struct
net_device
*
ndev
=
dev_get_drvdata
(
dev
);
struct
fec_enet_private
*
fep
=
netdev_priv
(
ndev
);
clk_enable
(
fep
->
clk
);
clk_
prepare_
enable
(
fep
->
clk
);
if
(
netif_running
(
ndev
))
{
fec_restart
(
ndev
,
fep
->
full_duplex
);
netif_device_attach
(
ndev
);
...
...
drivers/tty/serial/mxs-auart.c
View file @
e1482a17
...
...
@@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
{
struct
mxs_auart_port
*
s
=
to_auart_port
(
u
);
clk_enable
(
s
->
clk
);
clk_
prepare_
enable
(
s
->
clk
);
writel
(
AUART_CTRL0_CLKGATE
,
u
->
membase
+
AUART_CTRL0_CLR
);
...
...
@@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port *u)
writel
(
AUART_INTR_RXIEN
|
AUART_INTR_RTIEN
|
AUART_INTR_CTSMIEN
,
u
->
membase
+
AUART_INTR_CLR
);
clk_disable
(
s
->
clk
);
clk_disable
_unprepare
(
s
->
clk
);
}
static
unsigned
int
mxs_auart_tx_empty
(
struct
uart_port
*
u
)
...
...
@@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char *options)
if
(
!
s
)
return
-
ENODEV
;
clk_enable
(
s
->
clk
);
clk_
prepare_
enable
(
s
->
clk
);
if
(
options
)
uart_parse_options
(
options
,
&
baud
,
&
parity
,
&
bits
,
&
flow
);
...
...
@@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char *options)
ret
=
uart_set_options
(
&
s
->
port
,
co
,
baud
,
parity
,
bits
,
flow
);
clk_disable
(
s
->
clk
);
clk_disable
_unprepare
(
s
->
clk
);
return
ret
;
}
...
...
drivers/video/mxsfb.c
View file @
e1482a17
...
...
@@ -328,7 +328,7 @@ static void mxsfb_enable_controller(struct fb_info *fb_info)
dev_dbg
(
&
host
->
pdev
->
dev
,
"%s
\n
"
,
__func__
);
clk_enable
(
host
->
clk
);
clk_
prepare_
enable
(
host
->
clk
);
clk_set_rate
(
host
->
clk
,
PICOS2KHZ
(
fb_info
->
var
.
pixclock
)
*
1000U
);
/* if it was disabled, re-enable the mode again */
...
...
@@ -368,7 +368,7 @@ static void mxsfb_disable_controller(struct fb_info *fb_info)
writel
(
VDCTRL4_SYNC_SIGNALS_ON
,
host
->
base
+
LCDC_VDCTRL4
+
REG_CLR
);
clk_disable
(
host
->
clk
);
clk_disable
_unprepare
(
host
->
clk
);
host
->
enabled
=
0
;
}
...
...
@@ -668,7 +668,7 @@ static int __devinit mxsfb_restore_mode(struct mxsfb_info *host)
line_count
=
fb_info
->
fix
.
smem_len
/
fb_info
->
fix
.
line_length
;
fb_info
->
fix
.
ypanstep
=
1
;
clk_enable
(
host
->
clk
);
clk_
prepare_
enable
(
host
->
clk
);
host
->
enabled
=
1
;
return
0
;
...
...
@@ -841,7 +841,7 @@ static int __devinit mxsfb_probe(struct platform_device *pdev)
error_register:
if
(
host
->
enabled
)
clk_disable
(
host
->
clk
);
clk_disable
_unprepare
(
host
->
clk
);
fb_destroy_modelist
(
&
fb_info
->
modelist
);
error_init_fb:
kfree
(
fb_info
->
pseudo_palette
);
...
...
include/linux/clk.h
View file @
e1482a17
...
...
@@ -107,6 +107,28 @@ static inline void clk_unprepare(struct clk *clk)
}
#endif
/* clk_prepare_enable helps cases using clk_enable in non-atomic context. */
static
inline
int
clk_prepare_enable
(
struct
clk
*
clk
)
{
int
ret
;
ret
=
clk_prepare
(
clk
);
if
(
ret
)
return
ret
;
ret
=
clk_enable
(
clk
);
if
(
ret
)
clk_unprepare
(
clk
);
return
ret
;
}
/* clk_disable_unprepare helps cases using clk_disable in non-atomic context. */
static
inline
void
clk_disable_unprepare
(
struct
clk
*
clk
)
{
clk_disable
(
clk
);
clk_unprepare
(
clk
);
}
/**
* clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
* This is only valid once the clock source has been enabled.
...
...
sound/soc/mxs/mxs-saif.c
View file @
e1482a17
...
...
@@ -210,7 +210,7 @@ int mxs_saif_put_mclk(unsigned int saif_id)
return
-
EBUSY
;
}
clk_disable
(
saif
->
clk
);
clk_disable
_unprepare
(
saif
->
clk
);
/* disable MCLK output */
__raw_writel
(
BM_SAIF_CTRL_CLKGATE
,
...
...
@@ -264,7 +264,7 @@ int mxs_saif_get_mclk(unsigned int saif_id, unsigned int mclk,
if
(
ret
)
return
ret
;
ret
=
clk_enable
(
saif
->
clk
);
ret
=
clk_
prepare_
enable
(
saif
->
clk
);
if
(
ret
)
return
ret
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment