]>
Commit | Line | Data |
---|---|---|
e443b333 AS |
1 | /* |
2 | * Platform data for the chipidea USB dual role controller | |
3 | */ | |
4 | ||
5 | #ifndef __LINUX_USB_CHIPIDEA_H | |
6 | #define __LINUX_USB_CHIPIDEA_H | |
7 | ||
3ecb3e09 | 8 | #include <linux/extcon.h> |
a2c3d690 RZ |
9 | #include <linux/usb/otg.h> |
10 | ||
8e22978c | 11 | struct ci_hdrc; |
3ecb3e09 II |
12 | |
13 | /** | |
14 | * struct ci_hdrc_cable - structure for external connector cable state tracking | |
5cc49268 | 15 | * @connected: true if cable is connected, false otherwise |
3ecb3e09 | 16 | * @changed: set to true when extcon event happen |
a89b94b5 | 17 | * @enabled: set to true if we've enabled the vbus or id interrupt |
3ecb3e09 II |
18 | * @edev: device which generate events |
19 | * @ci: driver state of the chipidea device | |
20 | * @nb: hold event notification callback | |
21 | * @conn: used for notification registration | |
22 | */ | |
23 | struct ci_hdrc_cable { | |
5cc49268 | 24 | bool connected; |
3ecb3e09 | 25 | bool changed; |
a89b94b5 | 26 | bool enabled; |
3ecb3e09 II |
27 | struct extcon_dev *edev; |
28 | struct ci_hdrc *ci; | |
29 | struct notifier_block nb; | |
30 | }; | |
31 | ||
8e22978c | 32 | struct ci_hdrc_platform_data { |
e443b333 AS |
33 | const char *name; |
34 | /* offset of the capability registers */ | |
35 | uintptr_t capoffset; | |
bd841986 | 36 | unsigned power_budget; |
1e5e2d3d AT |
37 | struct phy *phy; |
38 | /* old usb_phy interface */ | |
ef44cb42 | 39 | struct usb_phy *usb_phy; |
40dcd0e8 | 40 | enum usb_phy_interface phy_mode; |
e443b333 | 41 | unsigned long flags; |
8e22978c | 42 | #define CI_HDRC_REGS_SHARED BIT(0) |
8022d3d5 | 43 | #define CI_HDRC_DISABLE_DEVICE_STREAMING BIT(1) |
1f874edc | 44 | #define CI_HDRC_SUPPORTS_RUNTIME_PM BIT(2) |
8022d3d5 PC |
45 | #define CI_HDRC_DISABLE_HOST_STREAMING BIT(3) |
46 | #define CI_HDRC_DISABLE_STREAMING (CI_HDRC_DISABLE_DEVICE_STREAMING | \ | |
47 | CI_HDRC_DISABLE_HOST_STREAMING) | |
577b232f PC |
48 | /* |
49 | * Only set it when DCCPARAMS.DC==1 and DCCPARAMS.HC==1, | |
50 | * but otg is not supported (no register otgsc). | |
51 | */ | |
52 | #define CI_HDRC_DUAL_ROLE_NOT_OTG BIT(4) | |
ed8f8318 | 53 | #define CI_HDRC_IMX28_WRITE_FIX BIT(5) |
4f6743d5 | 54 | #define CI_HDRC_FORCE_FULLSPEED BIT(6) |
6adb9b7b | 55 | #define CI_HDRC_TURN_VBUS_EARLY_ON BIT(7) |
28362673 | 56 | #define CI_HDRC_SET_NON_ZERO_TTHA BIT(8) |
65668718 | 57 | #define CI_HDRC_OVERRIDE_AHB_BURST BIT(9) |
96625ead PC |
58 | #define CI_HDRC_OVERRIDE_TX_BURST BIT(10) |
59 | #define CI_HDRC_OVERRIDE_RX_BURST BIT(11) | |
8feb3680 | 60 | #define CI_HDRC_OVERRIDE_PHY_CONTROL BIT(12) /* Glue layer manages phy */ |
691962d1 | 61 | enum usb_dr_mode dr_mode; |
8e22978c AS |
62 | #define CI_HDRC_CONTROLLER_RESET_EVENT 0 |
63 | #define CI_HDRC_CONTROLLER_STOPPED_EVENT 1 | |
11893dae | 64 | int (*notify_event) (struct ci_hdrc *ci, unsigned event); |
1542d9c3 | 65 | struct regulator *reg_vbus; |
79742351 | 66 | struct usb_otg_caps ci_otg_caps; |
f6a9ff07 | 67 | bool tpl_support; |
df96ed8d PC |
68 | /* interrupt threshold setting */ |
69 | u32 itc_setting; | |
65668718 | 70 | u32 ahb_burst_config; |
96625ead PC |
71 | u32 tx_burst_size; |
72 | u32 rx_burst_size; | |
3ecb3e09 II |
73 | |
74 | /* VBUS and ID signal state tracking, using extcon framework */ | |
75 | struct ci_hdrc_cable vbus_extcon; | |
76 | struct ci_hdrc_cable id_extcon; | |
1fbf4628 | 77 | u32 phy_clkgate_delay_us; |
e443b333 AS |
78 | }; |
79 | ||
80 | /* Default offset of capability registers */ | |
81 | #define DEF_CAPOFFSET 0x100 | |
82 | ||
8e22978c AS |
83 | /* Add ci hdrc device */ |
84 | struct platform_device *ci_hdrc_add_device(struct device *dev, | |
cbc6dc2a | 85 | struct resource *res, int nres, |
8e22978c AS |
86 | struct ci_hdrc_platform_data *platdata); |
87 | /* Remove ci hdrc device */ | |
88 | void ci_hdrc_remove_device(struct platform_device *pdev); | |
cbc6dc2a | 89 | |
e443b333 | 90 | #endif |