linux/include/linux/phy/omap_usb.h
<<
>>
Prefs
   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