1 /* 2 * omap_usb.h -- omap usb2 phy header file 3 * 4 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * Author: Kishon Vijay Abraham I <kishon@ti.com> 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 */ 18 19 #ifndef __DRIVERS_OMAP_USB2_H 20 #define __DRIVERS_OMAP_USB2_H 21 22 #include <linux/io.h> 23 #include <linux/usb/otg.h> 24 25 struct usb_dpll_params { 26 u16 m; 27 u8 n; 28 u8 freq:3; 29 u8 sd; 30 u32 mf; 31 }; 32 33 enum omap_usb_phy_type { 34 TYPE_USB2, /* USB2_PHY, power down in CONTROL_DEV_CONF */ 35 TYPE_DRA7USB2, /* USB2 PHY, power and power_aux e.g. DRA7 */ 36 TYPE_AM437USB2, /* USB2 PHY, power e.g. AM437x */ 37 }; 38 39 struct omap_usb { 40 struct usb_phy phy; 41 struct phy_companion *comparator; 42 void __iomem *pll_ctrl_base; 43 void __iomem *phy_base; 44 struct device *dev; 45 struct device *control_dev; 46 struct clk *wkupclk; 47 struct clk *optclk; 48 u8 flags; 49 enum omap_usb_phy_type type; 50 struct regmap *syscon_phy_power; /* ctrl. reg. acces */ 51 unsigned int power_reg; /* power reg. index within syscon */ 52 u32 mask; 53 u32 power_on; 54 u32 power_off; 55 }; 56 57 struct usb_phy_data { 58 const char *label; 59 u8 flags; 60 u32 mask; 61 u32 power_on; 62 u32 power_off; 63 }; 64 65 /* Driver Flags */ 66 #define OMAP_USB2_HAS_START_SRP (1 << 0) 67 #define OMAP_USB2_HAS_SET_VBUS (1 << 1) 68 #define OMAP_USB2_CALIBRATE_FALSE_DISCONNECT (1 << 2) 69 70 #define OMAP_DEV_PHY_PD BIT(0) 71 #define OMAP_USB2_PHY_PD BIT(28) 72 73 #define AM437X_USB2_PHY_PD BIT(0) 74 #define AM437X_USB2_OTG_PD BIT(1) 75 #define AM437X_USB2_OTGVDET_EN BIT(19) 76 #define AM437X_USB2_OTGSESSEND_EN BIT(20) 77 78 #define phy_to_omapusb(x) container_of((x), struct omap_usb, phy) 79 80 #if defined(CONFIG_OMAP_USB2) || defined(CONFIG_OMAP_USB2_MODULE) 81 extern int omap_usb2_set_comparator(struct phy_companion *comparator); 82 #else 83 static inline int omap_usb2_set_comparator(struct phy_companion *comparator) 84 { 85 return -ENODEV; 86 } 87 #endif 88 89 static inline u32 omap_usb_readl(void __iomem *addr, unsigned offset) 90 { 91 return __raw_readl(addr + offset); 92 } 93 94 static inline void omap_usb_writel(void __iomem *addr, unsigned offset, 95 u32 data) 96 { 97 __raw_writel(data, addr + offset); 98 } 99 100 #endif /* __DRIVERS_OMAP_USB_H */ 101