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 25struct usb_dpll_params { 26 u16 m; 27 u8 n; 28 u8 freq:3; 29 u8 sd; 30 u32 mf; 31}; 32 33enum 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 39struct 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 57struct 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) 81extern int omap_usb2_set_comparator(struct phy_companion *comparator); 82#else 83static inline int omap_usb2_set_comparator(struct phy_companion *comparator) 84{ 85 return -ENODEV; 86} 87#endif 88 89static inline u32 omap_usb_readl(void __iomem *addr, unsigned offset) 90{ 91 return __raw_readl(addr + offset); 92} 93 94static 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