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