ARM: mxs: add saif clkmux functions
Signed-off-by: Dong Aisheng <b29396@freescale.com> Acked-by: Marek Vasut <marek.vasut@gmail.com> Cc: Sascha Hauer <s.hauer@pengutronix.de> Cc: Wolfram Sang <w.sang@pengutronix.de> Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Liam Girdwood <lrg@ti.com> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
This commit is contained in:
parent
778825801d
commit
4e1b4ecaa2
|
@ -22,6 +22,7 @@
|
|||
#include <linux/io.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <asm/clkdev.h>
|
||||
#include <asm/div64.h>
|
||||
|
@ -29,6 +30,7 @@
|
|||
#include <mach/mx28.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/clock.h>
|
||||
#include <mach/digctl.h>
|
||||
|
||||
#include "regs-clkctrl-mx28.h"
|
||||
|
||||
|
@ -43,6 +45,33 @@ static struct clk emi_clk;
|
|||
static struct clk saif0_clk;
|
||||
static struct clk saif1_clk;
|
||||
static struct clk clk32k_clk;
|
||||
static DEFINE_SPINLOCK(clkmux_lock);
|
||||
|
||||
/*
|
||||
* HW_SAIF_CLKMUX_SEL:
|
||||
* DIRECT(0x0): SAIF0 clock pins selected for SAIF0 input clocks, and SAIF1
|
||||
* clock pins selected for SAIF1 input clocks.
|
||||
* CROSSINPUT(0x1): SAIF1 clock inputs selected for SAIF0 input clocks, and
|
||||
* SAIF0 clock inputs selected for SAIF1 input clocks.
|
||||
* EXTMSTR0(0x2): SAIF0 clock pin selected for both SAIF0 and SAIF1 input
|
||||
* clocks.
|
||||
* EXTMSTR1(0x3): SAIF1 clock pin selected for both SAIF0 and SAIF1 input
|
||||
* clocks.
|
||||
*/
|
||||
int mxs_saif_clkmux_select(unsigned int clkmux)
|
||||
{
|
||||
if (clkmux > 0x3)
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock(&clkmux_lock);
|
||||
__raw_writel(BM_DIGCTL_CTRL_SAIF_CLKMUX,
|
||||
DIGCTRL_BASE_ADDR + HW_DIGCTL_CTRL + MXS_CLR_ADDR);
|
||||
__raw_writel(clkmux << BP_DIGCTL_CTRL_SAIF_CLKMUX,
|
||||
DIGCTRL_BASE_ADDR + HW_DIGCTL_CTRL + MXS_SET_ADDR);
|
||||
spin_unlock(&clkmux_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _raw_clk_enable(struct clk *clk)
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@ struct clk;
|
|||
extern const u32 *mxs_get_ocotp(void);
|
||||
extern int mxs_reset_block(void __iomem *);
|
||||
extern void mxs_timer_init(struct clk *, int);
|
||||
extern int mxs_saif_clkmux_select(unsigned int clkmux);
|
||||
|
||||
extern int mx23_register_gpios(void);
|
||||
extern int mx23_clocks_init(void);
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_DIGCTL_H__
|
||||
#define __MACH_DIGCTL_H__
|
||||
|
||||
/* MXS DIGCTL SAIF CLKMUX */
|
||||
#define MXS_DIGCTL_SAIF_CLKMUX_DIRECT 0x0
|
||||
#define MXS_DIGCTL_SAIF_CLKMUX_CROSSINPUT 0x1
|
||||
#define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0 0x2
|
||||
#define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR1 0x3
|
||||
|
||||
#define HW_DIGCTL_CTRL 0x0
|
||||
#define BP_DIGCTL_CTRL_SAIF_CLKMUX 10
|
||||
#define BM_DIGCTL_CTRL_SAIF_CLKMUX (0x3 << 10)
|
||||
#endif
|
Loading…
Reference in New Issue