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 */ 27 enum { 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 */ 40 struct 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 */ 49 struct 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 * Phy reset for platform 71 */ 72 void (*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 /* 95 * parameters for renesas usbhs 96 * 97 * some register needs USB chip specific parameters. 98 * This struct show it to driver 99 */ 100 struct renesas_usbhs_driver_param { 101 /* 102 * pipe settings 103 */ 104 u32 *pipe_type; /* array of USB_ENDPOINT_XFER_xxx (from ep0) */ 105 int pipe_size; /* pipe_type array size */ 106 107 /* 108 * option: 109 * 110 * for BUSWAIT :: BWAIT 111 * see 112 * renesas_usbhs/common.c :: usbhsc_set_buswait() 113 * */ 114 int buswait_bwait; 115 116 /* 117 * option: 118 * 119 * delay time from notify_hotplug callback 120 */ 121 int detection_delay; 122 123 /* 124 * option: 125 * 126 * dma id for dmaengine 127 */ 128 int d0_tx_id; 129 int d0_rx_id; 130 int d1_tx_id; 131 int d1_rx_id; 132 133 /* 134 * option: 135 * 136 * pio <--> dma border. 137 */ 138 int pio_dma_border; /* default is 64byte */ 139 140 /* 141 * option: 142 */ 143 u32 has_otg:1; /* for controlling PWEN/EXTLP */ 144 }; 145 146 /* 147 * option: 148 * 149 * platform information for renesas_usbhs driver. 150 */ 151 struct renesas_usbhs_platform_info { 152 /* 153 * option: 154 * 155 * platform set these functions before 156 * call platform_add_devices if needed 157 */ 158 struct renesas_usbhs_platform_callback platform_callback; 159 160 /* 161 * driver set these callback functions pointer. 162 * platform can use it on callback functions 163 */ 164 struct renesas_usbhs_driver_callback driver_callback; 165 166 /* 167 * option: 168 * 169 * driver use these param for some register 170 */ 171 struct renesas_usbhs_driver_param driver_param; 172 }; 173 174 /* 175 * macro for platform 176 */ 177 #define renesas_usbhs_get_info(pdev)\ 178 ((struct renesas_usbhs_platform_info *)(pdev)->dev.platform_data) 179 180 #define renesas_usbhs_call_notify_hotplug(pdev) \ 181 ({ \ 182 struct renesas_usbhs_driver_callback *dc; \ 183 dc = &(renesas_usbhs_get_info(pdev)->driver_callback); \ 184 if (dc && dc->notify_hotplug) \ 185 dc->notify_hotplug(pdev); \ 186 }) 187 #endif /* RENESAS_USB_H */ 188