1*298b95f1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2e8c4a7acSFelipe Balbi /*
3e8c4a7acSFelipe Balbi  * usb-omap.h - Platform data for the various OMAP USB IPs
4e8c4a7acSFelipe Balbi  *
57f317d34SAlexander A. Klimov  * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com
6e8c4a7acSFelipe Balbi  */
7e8c4a7acSFelipe Balbi 
8e8c4a7acSFelipe Balbi #define OMAP3_HS_USB_PORTS	3
9e8c4a7acSFelipe Balbi 
10e8c4a7acSFelipe Balbi enum usbhs_omap_port_mode {
11e8c4a7acSFelipe Balbi 	OMAP_USBHS_PORT_MODE_UNUSED,
12e8c4a7acSFelipe Balbi 	OMAP_EHCI_PORT_MODE_PHY,
13e8c4a7acSFelipe Balbi 	OMAP_EHCI_PORT_MODE_TLL,
14e8c4a7acSFelipe Balbi 	OMAP_EHCI_PORT_MODE_HSIC,
15e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0,
16e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_PHY_6PIN_DPDM,
17e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_PHY_3PIN_DATSE0,
18e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_PHY_4PIN_DPDM,
19e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_TLL_6PIN_DATSE0,
20e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_TLL_6PIN_DPDM,
21e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_TLL_3PIN_DATSE0,
22e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_TLL_4PIN_DPDM,
23e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_TLL_2PIN_DATSE0,
24e8c4a7acSFelipe Balbi 	OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM
25e8c4a7acSFelipe Balbi };
26e8c4a7acSFelipe Balbi 
27e8c4a7acSFelipe Balbi struct usbtll_omap_platform_data {
28e8c4a7acSFelipe Balbi 	enum usbhs_omap_port_mode		port_mode[OMAP3_HS_USB_PORTS];
29e8c4a7acSFelipe Balbi };
30e8c4a7acSFelipe Balbi 
31e8c4a7acSFelipe Balbi struct ehci_hcd_omap_platform_data {
32e8c4a7acSFelipe Balbi 	enum usbhs_omap_port_mode	port_mode[OMAP3_HS_USB_PORTS];
33e8c4a7acSFelipe Balbi 	int				reset_gpio_port[OMAP3_HS_USB_PORTS];
34e8c4a7acSFelipe Balbi 	struct regulator		*regulator[OMAP3_HS_USB_PORTS];
35e8c4a7acSFelipe Balbi 	unsigned			phy_reset:1;
36e8c4a7acSFelipe Balbi };
37e8c4a7acSFelipe Balbi 
38e8c4a7acSFelipe Balbi struct ohci_hcd_omap_platform_data {
39e8c4a7acSFelipe Balbi 	enum usbhs_omap_port_mode	port_mode[OMAP3_HS_USB_PORTS];
40e8c4a7acSFelipe Balbi 	unsigned			es2_compatibility:1;
41e8c4a7acSFelipe Balbi };
42e8c4a7acSFelipe Balbi 
43e8c4a7acSFelipe Balbi struct usbhs_omap_platform_data {
44ccac71a7SRoger Quadros 	int				nports;
45e8c4a7acSFelipe Balbi 	enum usbhs_omap_port_mode	port_mode[OMAP3_HS_USB_PORTS];
467f07863eSRoger Quadros 	int				reset_gpio_port[OMAP3_HS_USB_PORTS];
477f07863eSRoger Quadros 	struct regulator		*regulator[OMAP3_HS_USB_PORTS];
48e8c4a7acSFelipe Balbi 
49e8c4a7acSFelipe Balbi 	struct ehci_hcd_omap_platform_data	*ehci_data;
50e8c4a7acSFelipe Balbi 	struct ohci_hcd_omap_platform_data	*ohci_data;
5163b68901SRoger Quadros 
5263b68901SRoger Quadros 	/* OMAP3 <= ES2.1 have a single ulpi bypass control bit */
5363b68901SRoger Quadros 	unsigned single_ulpi_bypass:1;
547f07863eSRoger Quadros 	unsigned es2_compatibility:1;
557f07863eSRoger Quadros 	unsigned phy_reset:1;
56e8c4a7acSFelipe Balbi };
57e8c4a7acSFelipe Balbi 
58e8c4a7acSFelipe Balbi /*-------------------------------------------------------------------------*/
59e8c4a7acSFelipe Balbi 
60e8c4a7acSFelipe Balbi struct omap_musb_board_data {
61e8c4a7acSFelipe Balbi 	u8	interface_type;
62e8c4a7acSFelipe Balbi 	u8	mode;
63e8c4a7acSFelipe Balbi 	u16	power;
64e8c4a7acSFelipe Balbi 	unsigned extvbus:1;
65e8c4a7acSFelipe Balbi 	void	(*set_phy_power)(u8 on);
66e8c4a7acSFelipe Balbi 	void	(*clear_irq)(void);
67e8c4a7acSFelipe Balbi 	void	(*set_mode)(u8 mode);
68e8c4a7acSFelipe Balbi 	void	(*reset)(void);
69e8c4a7acSFelipe Balbi };
70e8c4a7acSFelipe Balbi 
71e8c4a7acSFelipe Balbi enum musb_interface {
72e8c4a7acSFelipe Balbi 	MUSB_INTERFACE_ULPI,
73e8c4a7acSFelipe Balbi 	MUSB_INTERFACE_UTMI
74e8c4a7acSFelipe Balbi };
75