ARM: AM43xx: Add functions to enable and disable USB clocks
Added functions to enable and disable USB clocks which can be invoked during USB init and USB exit respectively. Cc: Roger Quadros <rogerq@ti.com> Cc: Tero Kristo <t-kristo@ti.com> Cc: Nishanth Menon <nm@ti.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
		
							parent
							
								
									ca5a0f172e
								
							
						
					
					
						commit
						09cc14f4bc
					
				| 
						 | 
				
			
			@ -171,3 +171,73 @@ void disable_edma3_clocks(void)
 | 
			
		|||
			  1);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_USB_DWC3
 | 
			
		||||
void enable_usb_clocks(int index)
 | 
			
		||||
{
 | 
			
		||||
	u32 *usbclkctrl = 0;
 | 
			
		||||
	u32 *usbphyocp2scpclkctrl = 0;
 | 
			
		||||
 | 
			
		||||
	if (index == 0) {
 | 
			
		||||
		usbclkctrl = &cmper->usb0clkctrl;
 | 
			
		||||
		usbphyocp2scpclkctrl = &cmper->usbphyocp2scp0clkctrl;
 | 
			
		||||
		setbits_le32(&cmper->usb0clkctrl,
 | 
			
		||||
			     USBOTGSSX_CLKCTRL_OPTFCLKEN_REFCLK960);
 | 
			
		||||
		setbits_le32(&cmwkup->usbphy0clkctrl,
 | 
			
		||||
			     USBPHY0_CLKCTRL_OPTFCLKEN_CLK32K);
 | 
			
		||||
	} else if (index == 1) {
 | 
			
		||||
		usbclkctrl = &cmper->usb1clkctrl;
 | 
			
		||||
		usbphyocp2scpclkctrl = &cmper->usbphyocp2scp1clkctrl;
 | 
			
		||||
		setbits_le32(&cmper->usb1clkctrl,
 | 
			
		||||
			     USBOTGSSX_CLKCTRL_OPTFCLKEN_REFCLK960);
 | 
			
		||||
		setbits_le32(&cmwkup->usbphy1clkctrl,
 | 
			
		||||
			     USBPHY0_CLKCTRL_OPTFCLKEN_CLK32K);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	u32 *const clk_domains_usb[] = {
 | 
			
		||||
		0
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	u32 *const clk_modules_explicit_en_usb[] = {
 | 
			
		||||
		usbclkctrl,
 | 
			
		||||
		usbphyocp2scpclkctrl,
 | 
			
		||||
		0
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	do_enable_clocks(clk_domains_usb, clk_modules_explicit_en_usb, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void disable_usb_clocks(int index)
 | 
			
		||||
{
 | 
			
		||||
	u32 *usbclkctrl = 0;
 | 
			
		||||
	u32 *usbphyocp2scpclkctrl = 0;
 | 
			
		||||
 | 
			
		||||
	if (index == 0) {
 | 
			
		||||
		usbclkctrl = &cmper->usb0clkctrl;
 | 
			
		||||
		usbphyocp2scpclkctrl = &cmper->usbphyocp2scp0clkctrl;
 | 
			
		||||
		clrbits_le32(&cmper->usb0clkctrl,
 | 
			
		||||
			     USBOTGSSX_CLKCTRL_OPTFCLKEN_REFCLK960);
 | 
			
		||||
		clrbits_le32(&cmwkup->usbphy0clkctrl,
 | 
			
		||||
			     USBPHY0_CLKCTRL_OPTFCLKEN_CLK32K);
 | 
			
		||||
	} else if (index == 1) {
 | 
			
		||||
		usbclkctrl = &cmper->usb1clkctrl;
 | 
			
		||||
		usbphyocp2scpclkctrl = &cmper->usbphyocp2scp1clkctrl;
 | 
			
		||||
		clrbits_le32(&cmper->usb1clkctrl,
 | 
			
		||||
			     USBOTGSSX_CLKCTRL_OPTFCLKEN_REFCLK960);
 | 
			
		||||
		clrbits_le32(&cmwkup->usbphy1clkctrl,
 | 
			
		||||
			     USBPHY0_CLKCTRL_OPTFCLKEN_CLK32K);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	u32 *const clk_domains_usb[] = {
 | 
			
		||||
		0
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	u32 *const clk_modules_disable_usb[] = {
 | 
			
		||||
		usbclkctrl,
 | 
			
		||||
		usbphyocp2scpclkctrl,
 | 
			
		||||
		0
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	do_disable_clocks(clk_domains_usb, clk_modules_disable_usb, 1);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,3 +42,6 @@ void am33xx_spl_board_init(void);
 | 
			
		|||
int am335x_get_efuse_mpu_max_freq(struct ctrl_dev *cdev);
 | 
			
		||||
int am335x_get_tps65910_mpu_vdd(int sil_rev, int frequency);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void enable_usb_clocks(int index);
 | 
			
		||||
void disable_usb_clocks(int index);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue