| 
									
										
										
										
											2014-03-06 11:16:48 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Samsung SoC USB 1.1/2.0 PHY driver | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2013 Samsung Electronics Co., Ltd. | 
					
						
							|  |  |  |  * Author: Kamil Debski <k.debski@samsung.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * 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 _PHY_EXYNOS_USB2_H
 | 
					
						
							|  |  |  | #define _PHY_EXYNOS_USB2_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/clk.h>
 | 
					
						
							|  |  |  | #include <linux/phy/phy.h>
 | 
					
						
							|  |  |  | #include <linux/device.h>
 | 
					
						
							|  |  |  | #include <linux/regmap.h>
 | 
					
						
							|  |  |  | #include <linux/spinlock.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define KHZ 1000
 | 
					
						
							|  |  |  | #define MHZ (KHZ * KHZ)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct samsung_usb2_phy_driver; | 
					
						
							|  |  |  | struct samsung_usb2_phy_instance; | 
					
						
							|  |  |  | struct samsung_usb2_phy_config; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct samsung_usb2_phy_instance { | 
					
						
							|  |  |  | 	const struct samsung_usb2_common_phy *cfg; | 
					
						
							|  |  |  | 	struct phy *phy; | 
					
						
							|  |  |  | 	struct samsung_usb2_phy_driver *drv; | 
					
						
							| 
									
										
										
										
											2014-07-01 15:15:54 +00:00
										 |  |  | 	int int_cnt; | 
					
						
							|  |  |  | 	int ext_cnt; | 
					
						
							| 
									
										
										
										
											2014-03-06 11:16:48 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct samsung_usb2_phy_driver { | 
					
						
							|  |  |  | 	const struct samsung_usb2_phy_config *cfg; | 
					
						
							|  |  |  | 	struct clk *clk; | 
					
						
							|  |  |  | 	struct clk *ref_clk; | 
					
						
							|  |  |  | 	unsigned long ref_rate; | 
					
						
							|  |  |  | 	u32 ref_reg_val; | 
					
						
							|  |  |  | 	struct device *dev; | 
					
						
							|  |  |  | 	void __iomem *reg_phy; | 
					
						
							|  |  |  | 	struct regmap *reg_pmu; | 
					
						
							|  |  |  | 	struct regmap *reg_sys; | 
					
						
							|  |  |  | 	spinlock_t lock; | 
					
						
							|  |  |  | 	struct samsung_usb2_phy_instance instances[0]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct samsung_usb2_common_phy { | 
					
						
							|  |  |  | 	int (*power_on)(struct samsung_usb2_phy_instance *); | 
					
						
							|  |  |  | 	int (*power_off)(struct samsung_usb2_phy_instance *); | 
					
						
							|  |  |  | 	unsigned int id; | 
					
						
							|  |  |  | 	char *label; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct samsung_usb2_phy_config { | 
					
						
							|  |  |  | 	const struct samsung_usb2_common_phy *phys; | 
					
						
							|  |  |  | 	int (*rate_to_clk)(unsigned long, u32 *); | 
					
						
							|  |  |  | 	unsigned int num_phys; | 
					
						
							|  |  |  | 	bool has_mode_switch; | 
					
						
							| 
									
										
										
										
											2014-07-07 09:39:26 +00:00
										 |  |  | 	bool has_refclk_sel; | 
					
						
							| 
									
										
										
										
											2014-03-06 11:16:48 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-07 09:39:26 +00:00
										 |  |  | extern const struct samsung_usb2_phy_config exynos3250_usb2_phy_config; | 
					
						
							| 
									
										
										
										
											2014-03-06 11:16:48 +00:00
										 |  |  | extern const struct samsung_usb2_phy_config exynos4210_usb2_phy_config; | 
					
						
							|  |  |  | extern const struct samsung_usb2_phy_config exynos4x12_usb2_phy_config; | 
					
						
							| 
									
										
										
										
											2014-03-06 11:16:49 +00:00
										 |  |  | extern const struct samsung_usb2_phy_config exynos5250_usb2_phy_config; | 
					
						
							| 
									
										
										
										
											2014-08-08 18:14:29 +00:00
										 |  |  | extern const struct samsung_usb2_phy_config s5pv210_usb2_phy_config; | 
					
						
							| 
									
										
										
										
											2014-03-06 11:16:48 +00:00
										 |  |  | #endif
 |