2019-06-04 11:11:33 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2014-03-06 15:16:48 +04:00
/*
* Samsung SoC USB 1.1 / 2.0 PHY driver
*
* Copyright ( C ) 2013 Samsung Electronics Co . , Ltd .
* Author : Kamil Debski < k . debski @ samsung . com >
*/
# 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>
2015-08-21 15:38:37 +03:00
# include <linux/regulator/consumer.h>
2014-03-06 15:16:48 +04:00
# 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 19:15:54 +04:00
int int_cnt ;
int ext_cnt ;
2014-03-06 15:16:48 +04:00
} ;
struct samsung_usb2_phy_driver {
const struct samsung_usb2_phy_config * cfg ;
struct clk * clk ;
struct clk * ref_clk ;
2015-08-21 15:38:37 +03:00
struct regulator * vbus ;
2014-03-06 15:16:48 +04:00
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 13:39:26 +04:00
bool has_refclk_sel ;
2014-03-06 15:16:48 +04:00
} ;
2014-07-07 13:39:26 +04:00
extern const struct samsung_usb2_phy_config exynos3250_usb2_phy_config ;
2014-03-06 15:16:48 +04: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 15:16:49 +04:00
extern const struct samsung_usb2_phy_config exynos5250_usb2_phy_config ;
2014-08-08 22:14:29 +04:00
extern const struct samsung_usb2_phy_config s5pv210_usb2_phy_config ;
2014-03-06 15:16:48 +04:00
# endif