mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-25 20:07:17 +00:00
USB: MX5: add helper functions to enable USB clocks
Signed-off-by: Wolfgang Grandegger <wg@denx.de> Cc: Stefano Babic <sbabic@denx.de> Cc: Remy Bohmer <linux@bohmer.net> Cc: Wolfgang Grandegger <wg@denx.de> Cc: Jason Liu <r64343@freescale.com> V2: Fix spacing in crm_regs.h
This commit is contained in:
parent
a954da2902
commit
5d2947a3fc
3 changed files with 80 additions and 0 deletions
|
@ -50,6 +50,78 @@ struct mxc_pll_reg *mxc_plls[PLL_CLOCKS] = {
|
|||
|
||||
struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
|
||||
|
||||
void set_usboh3_clk(void)
|
||||
{
|
||||
unsigned int reg;
|
||||
|
||||
reg = readl(&mxc_ccm->cscmr1) &
|
||||
~MXC_CCM_CSCMR1_USBOH3_CLK_SEL_MASK;
|
||||
reg |= 1 << MXC_CCM_CSCMR1_USBOH3_CLK_SEL_OFFSET;
|
||||
writel(reg, &mxc_ccm->cscmr1);
|
||||
|
||||
reg = readl(&mxc_ccm->cscdr1);
|
||||
reg &= ~MXC_CCM_CSCDR1_USBOH3_CLK_PODF_MASK;
|
||||
reg &= ~MXC_CCM_CSCDR1_USBOH3_CLK_PRED_MASK;
|
||||
reg |= 4 << MXC_CCM_CSCDR1_USBOH3_CLK_PRED_OFFSET;
|
||||
reg |= 1 << MXC_CCM_CSCDR1_USBOH3_CLK_PODF_OFFSET;
|
||||
|
||||
writel(reg, &mxc_ccm->cscdr1);
|
||||
}
|
||||
|
||||
void enable_usboh3_clk(unsigned char enable)
|
||||
{
|
||||
unsigned int reg;
|
||||
|
||||
reg = readl(&mxc_ccm->CCGR2);
|
||||
if (enable)
|
||||
reg |= 1 << MXC_CCM_CCGR2_CG14_OFFSET;
|
||||
else
|
||||
reg &= ~(1 << MXC_CCM_CCGR2_CG14_OFFSET);
|
||||
writel(reg, &mxc_ccm->CCGR2);
|
||||
}
|
||||
|
||||
void set_usb_phy1_clk(void)
|
||||
{
|
||||
unsigned int reg;
|
||||
|
||||
reg = readl(&mxc_ccm->cscmr1);
|
||||
reg &= ~MXC_CCM_CSCMR1_USB_PHY_CLK_SEL;
|
||||
writel(reg, &mxc_ccm->cscmr1);
|
||||
}
|
||||
|
||||
void enable_usb_phy1_clk(unsigned char enable)
|
||||
{
|
||||
unsigned int reg;
|
||||
|
||||
reg = readl(&mxc_ccm->CCGR4);
|
||||
if (enable)
|
||||
reg |= 1 << MXC_CCM_CCGR4_CG5_OFFSET;
|
||||
else
|
||||
reg &= ~(1 << MXC_CCM_CCGR4_CG5_OFFSET);
|
||||
writel(reg, &mxc_ccm->CCGR4);
|
||||
}
|
||||
|
||||
void set_usb_phy2_clk(void)
|
||||
{
|
||||
unsigned int reg;
|
||||
|
||||
reg = readl(&mxc_ccm->cscmr1);
|
||||
reg &= ~MXC_CCM_CSCMR1_USB_PHY_CLK_SEL;
|
||||
writel(reg, &mxc_ccm->cscmr1);
|
||||
}
|
||||
|
||||
void enable_usb_phy2_clk(unsigned char enable)
|
||||
{
|
||||
unsigned int reg;
|
||||
|
||||
reg = readl(&mxc_ccm->CCGR4);
|
||||
if (enable)
|
||||
reg |= 1 << MXC_CCM_CCGR4_CG6_OFFSET;
|
||||
else
|
||||
reg &= ~(1 << MXC_CCM_CCGR4_CG6_OFFSET);
|
||||
writel(reg, &mxc_ccm->CCGR4);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the frequency of PLLn.
|
||||
*/
|
||||
|
|
|
@ -40,4 +40,9 @@ u32 imx_get_uartclk(void);
|
|||
u32 imx_get_fecclk(void);
|
||||
unsigned int mxc_get_clock(enum mxc_clock clk);
|
||||
|
||||
void set_usb_phy2_clk(void);
|
||||
void enable_usb_phy2_clk(unsigned char enable);
|
||||
void set_usboh3_clk(void);
|
||||
void enable_usboh3_clk(unsigned char enable);
|
||||
|
||||
#endif /* __ASM_ARCH_CLOCK_H */
|
||||
|
|
|
@ -195,7 +195,10 @@ struct mxc_ccm_reg {
|
|||
/* Define the bits in register CCGRx */
|
||||
#define MXC_CCM_CCGR_CG_MASK 0x3
|
||||
|
||||
#define MXC_CCM_CCGR4_CG5_OFFSET 10
|
||||
#define MXC_CCM_CCGR4_CG6_OFFSET 12
|
||||
#define MXC_CCM_CCGR5_CG5_OFFSET 10
|
||||
#define MXC_CCM_CCGR2_CG14_OFFSET 28
|
||||
|
||||
/* Define the bits in register CLPCR */
|
||||
#define MXC_CCM_CLPCR_BYPASS_IPU_LPM_HS (0x1 << 18)
|
||||
|
|
Loading…
Add table
Reference in a new issue