mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
4.2 KiB
212 lines
4.2 KiB
// SPDX-License-Identifier: GPL-1.0+ |
|
/* |
|
* Renesas USB |
|
* |
|
* Copyright (C) 2011 Renesas Solutions Corp. |
|
* Copyright (C) 2019 Renesas Electronics Corporation |
|
* Kuninori Morimoto <[email protected]> |
|
* |
|
* This program is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with this program; if not, write to the Free Software |
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
|
* |
|
*/ |
|
#ifndef RENESAS_USB_H |
|
#define RENESAS_USB_H |
|
#include <linux/notifier.h> |
|
#include <linux/platform_device.h> |
|
#include <linux/usb/ch9.h> |
|
|
|
/* |
|
* module type |
|
* |
|
* it will be return value from get_id |
|
*/ |
|
enum { |
|
USBHS_HOST = 0, |
|
USBHS_GADGET, |
|
USBHS_MAX, |
|
}; |
|
|
|
/* |
|
* callback functions for platform |
|
* |
|
* These functions are called from driver for platform |
|
*/ |
|
struct renesas_usbhs_platform_callback { |
|
|
|
/* |
|
* option: |
|
* |
|
* Hardware init function for platform. |
|
* it is called when driver was probed. |
|
*/ |
|
int (*hardware_init)(struct platform_device *pdev); |
|
|
|
/* |
|
* option: |
|
* |
|
* Hardware exit function for platform. |
|
* it is called when driver was removed |
|
*/ |
|
int (*hardware_exit)(struct platform_device *pdev); |
|
|
|
/* |
|
* option: |
|
* |
|
* for board specific clock control |
|
*/ |
|
int (*power_ctrl)(struct platform_device *pdev, |
|
void __iomem *base, int enable); |
|
|
|
/* |
|
* option: |
|
* |
|
* Phy reset for platform |
|
*/ |
|
int (*phy_reset)(struct platform_device *pdev); |
|
|
|
/* |
|
* get USB ID function |
|
* - USBHS_HOST |
|
* - USBHS_GADGET |
|
*/ |
|
int (*get_id)(struct platform_device *pdev); |
|
|
|
/* |
|
* get VBUS status function. |
|
*/ |
|
int (*get_vbus)(struct platform_device *pdev); |
|
|
|
/* |
|
* option: |
|
* |
|
* VBUS control is needed for Host |
|
*/ |
|
int (*set_vbus)(struct platform_device *pdev, int enable); |
|
|
|
/* |
|
* option: |
|
* extcon notifier to set host/peripheral mode. |
|
*/ |
|
int (*notifier)(struct notifier_block *nb, unsigned long event, |
|
void *data); |
|
}; |
|
|
|
/* |
|
* parameters for renesas usbhs |
|
* |
|
* some register needs USB chip specific parameters. |
|
* This struct show it to driver |
|
*/ |
|
|
|
struct renesas_usbhs_driver_pipe_config { |
|
u8 type; /* USB_ENDPOINT_XFER_xxx */ |
|
u16 bufsize; |
|
u8 bufnum; |
|
bool double_buf; |
|
}; |
|
#define RENESAS_USBHS_PIPE(_type, _size, _num, _double_buf) { \ |
|
.type = (_type), \ |
|
.bufsize = (_size), \ |
|
.bufnum = (_num), \ |
|
.double_buf = (_double_buf), \ |
|
} |
|
|
|
struct renesas_usbhs_driver_param { |
|
/* |
|
* pipe settings |
|
*/ |
|
struct renesas_usbhs_driver_pipe_config *pipe_configs; |
|
int pipe_size; /* pipe_configs array size */ |
|
|
|
/* |
|
* option: |
|
* |
|
* for BUSWAIT :: BWAIT |
|
* see |
|
* renesas_usbhs/common.c :: usbhsc_set_buswait() |
|
* */ |
|
int buswait_bwait; |
|
|
|
/* |
|
* option: |
|
* |
|
* delay time from notify_hotplug callback |
|
*/ |
|
int detection_delay; /* msec */ |
|
|
|
/* |
|
* option: |
|
* |
|
* dma id for dmaengine |
|
* The data transfer direction on D0FIFO/D1FIFO should be |
|
* fixed for keeping consistency. |
|
* So, the platform id settings will be.. |
|
* .d0_tx_id = xx_TX, |
|
* .d1_rx_id = xx_RX, |
|
* or |
|
* .d1_tx_id = xx_TX, |
|
* .d0_rx_id = xx_RX, |
|
*/ |
|
int d0_tx_id; |
|
int d0_rx_id; |
|
int d1_tx_id; |
|
int d1_rx_id; |
|
int d2_tx_id; |
|
int d2_rx_id; |
|
int d3_tx_id; |
|
int d3_rx_id; |
|
|
|
/* |
|
* option: |
|
* |
|
* pio <--> dma border. |
|
*/ |
|
int pio_dma_border; /* default is 64byte */ |
|
|
|
/* |
|
* option: |
|
*/ |
|
u32 has_usb_dmac:1; /* for USB-DMAC */ |
|
u32 runtime_pwctrl:1; |
|
u32 has_cnen:1; |
|
u32 cfifo_byte_addr:1; /* CFIFO is byte addressable */ |
|
#define USBHS_USB_DMAC_XFER_SIZE 32 /* hardcode the xfer size */ |
|
u32 multi_clks:1; |
|
u32 has_new_pipe_configs:1; |
|
}; |
|
|
|
/* |
|
* option: |
|
* |
|
* platform information for renesas_usbhs driver. |
|
*/ |
|
struct renesas_usbhs_platform_info { |
|
/* |
|
* option: |
|
* |
|
* platform set these functions before |
|
* call platform_add_devices if needed |
|
*/ |
|
struct renesas_usbhs_platform_callback platform_callback; |
|
|
|
/* |
|
* option: |
|
* |
|
* driver use these param for some register |
|
*/ |
|
struct renesas_usbhs_driver_param driver_param; |
|
}; |
|
|
|
/* |
|
* macro for platform |
|
*/ |
|
#define renesas_usbhs_get_info(pdev)\ |
|
((struct renesas_usbhs_platform_info *)(pdev)->dev.platform_data) |
|
#endif /* RENESAS_USB_H */
|
|
|