root/include/linux/usb/renesas_usbhs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 // SPDX-License-Identifier: GPL-1.0+
   2 /*
   3  * Renesas USB
   4  *
   5  * Copyright (C) 2011 Renesas Solutions Corp.
   6  * Copyright (C) 2019 Renesas Electronics Corporation
   7  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
   8  *
   9  * This program is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details.
  13  *
  14  * You should have received a copy of the GNU General Public License
  15  * along with this program; if not, write to the Free Software
  16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  17  *
  18  */
  19 #ifndef RENESAS_USB_H
  20 #define RENESAS_USB_H
  21 #include <linux/notifier.h>
  22 #include <linux/platform_device.h>
  23 #include <linux/usb/ch9.h>
  24 
  25 /*
  26  * module type
  27  *
  28  * it will be return value from get_id
  29  */
  30 enum {
  31         USBHS_HOST = 0,
  32         USBHS_GADGET,
  33         USBHS_MAX,
  34 };
  35 
  36 /*
  37  * callback functions for platform
  38  *
  39  * These functions are called from driver for platform
  40  */
  41 struct renesas_usbhs_platform_callback {
  42 
  43         /*
  44          * option:
  45          *
  46          * Hardware init function for platform.
  47          * it is called when driver was probed.
  48          */
  49         int (*hardware_init)(struct platform_device *pdev);
  50 
  51         /*
  52          * option:
  53          *
  54          * Hardware exit function for platform.
  55          * it is called when driver was removed
  56          */
  57         int (*hardware_exit)(struct platform_device *pdev);
  58 
  59         /*
  60          * option:
  61          *
  62          * for board specific clock control
  63          */
  64         int (*power_ctrl)(struct platform_device *pdev,
  65                            void __iomem *base, int enable);
  66 
  67         /*
  68          * option:
  69          *
  70          * Phy reset for platform
  71          */
  72         int (*phy_reset)(struct platform_device *pdev);
  73 
  74         /*
  75          * get USB ID function
  76          *  - USBHS_HOST
  77          *  - USBHS_GADGET
  78          */
  79         int (*get_id)(struct platform_device *pdev);
  80 
  81         /*
  82          * get VBUS status function.
  83          */
  84         int (*get_vbus)(struct platform_device *pdev);
  85 
  86         /*
  87          * option:
  88          *
  89          * VBUS control is needed for Host
  90          */
  91         int (*set_vbus)(struct platform_device *pdev, int enable);
  92 
  93         /*
  94          * option:
  95          * extcon notifier to set host/peripheral mode.
  96          */
  97         int (*notifier)(struct notifier_block *nb, unsigned long event,
  98                         void *data);
  99 };
 100 
 101 /*
 102  * parameters for renesas usbhs
 103  *
 104  * some register needs USB chip specific parameters.
 105  * This struct show it to driver
 106  */
 107 
 108 struct renesas_usbhs_driver_pipe_config {
 109         u8 type;        /* USB_ENDPOINT_XFER_xxx */
 110         u16 bufsize;
 111         u8 bufnum;
 112         bool double_buf;
 113 };
 114 #define RENESAS_USBHS_PIPE(_type, _size, _num, _double_buf)     {       \
 115                         .type = (_type),                \
 116                         .bufsize = (_size),             \
 117                         .bufnum = (_num),               \
 118                         .double_buf = (_double_buf),    \
 119         }
 120 
 121 struct renesas_usbhs_driver_param {
 122         /*
 123          * pipe settings
 124          */
 125         struct renesas_usbhs_driver_pipe_config *pipe_configs;
 126         int pipe_size; /* pipe_configs array size */
 127 
 128         /*
 129          * option:
 130          *
 131          * for BUSWAIT :: BWAIT
 132          * see
 133          *      renesas_usbhs/common.c :: usbhsc_set_buswait()
 134          * */
 135         int buswait_bwait;
 136 
 137         /*
 138          * option:
 139          *
 140          * delay time from notify_hotplug callback
 141          */
 142         int detection_delay; /* msec */
 143 
 144         /*
 145          * option:
 146          *
 147          * dma id for dmaengine
 148          * The data transfer direction on D0FIFO/D1FIFO should be
 149          * fixed for keeping consistency.
 150          * So, the platform id settings will be..
 151          *      .d0_tx_id = xx_TX,
 152          *      .d1_rx_id = xx_RX,
 153          * or
 154          *      .d1_tx_id = xx_TX,
 155          *      .d0_rx_id = xx_RX,
 156          */
 157         int d0_tx_id;
 158         int d0_rx_id;
 159         int d1_tx_id;
 160         int d1_rx_id;
 161         int d2_tx_id;
 162         int d2_rx_id;
 163         int d3_tx_id;
 164         int d3_rx_id;
 165 
 166         /*
 167          * option:
 168          *
 169          * pio <--> dma border.
 170          */
 171         int pio_dma_border; /* default is 64byte */
 172 
 173         u32 enable_gpio;
 174 
 175         /*
 176          * option:
 177          */
 178         u32 has_usb_dmac:1; /* for USB-DMAC */
 179         u32 runtime_pwctrl:1;
 180         u32 has_cnen:1;
 181         u32 cfifo_byte_addr:1; /* CFIFO is byte addressable */
 182 #define USBHS_USB_DMAC_XFER_SIZE        32      /* hardcode the xfer size */
 183         u32 multi_clks:1;
 184         u32 has_new_pipe_configs:1;
 185 };
 186 
 187 /*
 188  * option:
 189  *
 190  * platform information for renesas_usbhs driver.
 191  */
 192 struct renesas_usbhs_platform_info {
 193         /*
 194          * option:
 195          *
 196          * platform set these functions before
 197          * call platform_add_devices if needed
 198          */
 199         struct renesas_usbhs_platform_callback  platform_callback;
 200 
 201         /*
 202          * option:
 203          *
 204          * driver use these param for some register
 205          */
 206         struct renesas_usbhs_driver_param       driver_param;
 207 };
 208 
 209 /*
 210  * macro for platform
 211  */
 212 #define renesas_usbhs_get_info(pdev)\
 213         ((struct renesas_usbhs_platform_info *)(pdev)->dev.platform_data)
 214 #endif /* RENESAS_USB_H */

/* [<][>][^][v][top][bottom][index][help] */