|
38 | 38 |
|
39 | 39 | #include "core.h" |
40 | 40 |
|
41 | | -static const struct dwc2_core_params params_hi6220 = { |
42 | | - .otg_cap = 2, /* No HNP/SRP capable */ |
43 | | - .dma_desc_enable = 0, |
44 | | - .dma_desc_fs_enable = 0, |
45 | | - .speed = 0, /* High Speed */ |
46 | | - .enable_dynamic_fifo = 1, |
47 | | - .en_multiple_tx_fifo = 1, |
48 | | - .host_rx_fifo_size = 512, |
49 | | - .host_nperio_tx_fifo_size = 512, |
50 | | - .host_perio_tx_fifo_size = 512, |
51 | | - .max_transfer_size = 65535, |
52 | | - .max_packet_count = 511, |
53 | | - .host_channels = 16, |
54 | | - .phy_type = 1, /* UTMI */ |
55 | | - .phy_utmi_width = 8, |
56 | | - .phy_ulpi_ddr = 0, /* Single */ |
57 | | - .phy_ulpi_ext_vbus = 0, |
58 | | - .i2c_enable = 0, |
59 | | - .ulpi_fs_ls = 0, |
60 | | - .host_support_fs_ls_low_power = 0, |
61 | | - .host_ls_low_power_phy_clk = 0, /* 48 MHz */ |
62 | | - .ts_dline = 0, |
63 | | - .reload_ctl = 0, |
64 | | - .ahbcfg = GAHBCFG_HBSTLEN_INCR16 << |
65 | | - GAHBCFG_HBSTLEN_SHIFT, |
66 | | - .uframe_sched = 0, |
67 | | - .external_id_pin_ctl = -1, |
68 | | - .hibernation = -1, |
69 | | -}; |
| 41 | +static void dwc2_set_bcm_params(struct dwc2_hsotg *hsotg) |
| 42 | +{ |
| 43 | + struct dwc2_core_params *p = &hsotg->params; |
70 | 44 |
|
71 | | -static const struct dwc2_core_params params_bcm2835 = { |
72 | | - .otg_cap = 0, /* HNP/SRP capable */ |
73 | | - .dma_desc_enable = 0, |
74 | | - .dma_desc_fs_enable = 0, |
75 | | - .speed = 0, /* High Speed */ |
76 | | - .enable_dynamic_fifo = 1, |
77 | | - .en_multiple_tx_fifo = 1, |
78 | | - .host_rx_fifo_size = 774, /* 774 DWORDs */ |
79 | | - .host_nperio_tx_fifo_size = 256, /* 256 DWORDs */ |
80 | | - .host_perio_tx_fifo_size = 512, /* 512 DWORDs */ |
81 | | - .max_transfer_size = 65535, |
82 | | - .max_packet_count = 511, |
83 | | - .host_channels = 8, |
84 | | - .phy_type = 1, /* UTMI */ |
85 | | - .phy_utmi_width = 8, /* 8 bits */ |
86 | | - .phy_ulpi_ddr = 0, /* Single */ |
87 | | - .phy_ulpi_ext_vbus = 0, |
88 | | - .i2c_enable = 0, |
89 | | - .ulpi_fs_ls = 0, |
90 | | - .host_support_fs_ls_low_power = 0, |
91 | | - .host_ls_low_power_phy_clk = 0, /* 48 MHz */ |
92 | | - .ts_dline = 0, |
93 | | - .reload_ctl = 0, |
94 | | - .ahbcfg = 0x10, |
95 | | - .uframe_sched = 0, |
96 | | - .external_id_pin_ctl = -1, |
97 | | - .hibernation = -1, |
98 | | -}; |
| 45 | + p->otg_cap = DWC2_CAP_PARAM_HNP_SRP_CAPABLE; |
| 46 | + p->speed = DWC2_SPEED_PARAM_HIGH; |
| 47 | + p->host_rx_fifo_size = 774; |
| 48 | + p->host_nperio_tx_fifo_size = 256; |
| 49 | + p->host_perio_tx_fifo_size = 512; |
| 50 | + p->max_transfer_size = 65535; |
| 51 | + p->max_packet_count = 511; |
| 52 | + p->host_channels = 8; |
| 53 | + p->phy_type = 1; |
| 54 | + p->phy_utmi_width = 8; |
| 55 | + p->i2c_enable = false; |
| 56 | + p->host_ls_low_power_phy_clk = 0; |
| 57 | + p->reload_ctl = false; |
| 58 | + p->ahbcfg = 0x10; |
| 59 | + p->uframe_sched = false; |
| 60 | +} |
99 | 61 |
|
100 | | -static const struct dwc2_core_params params_rk3066 = { |
101 | | - .otg_cap = 2, /* non-HNP/non-SRP */ |
102 | | - .dma_desc_enable = 0, |
103 | | - .dma_desc_fs_enable = 0, |
104 | | - .speed = -1, |
105 | | - .enable_dynamic_fifo = 1, |
106 | | - .en_multiple_tx_fifo = -1, |
107 | | - .host_rx_fifo_size = 525, /* 525 DWORDs */ |
108 | | - .host_nperio_tx_fifo_size = 128, /* 128 DWORDs */ |
109 | | - .host_perio_tx_fifo_size = 256, /* 256 DWORDs */ |
110 | | - .max_transfer_size = -1, |
111 | | - .max_packet_count = -1, |
112 | | - .host_channels = -1, |
113 | | - .phy_type = -1, |
114 | | - .phy_utmi_width = -1, |
115 | | - .phy_ulpi_ddr = -1, |
116 | | - .phy_ulpi_ext_vbus = -1, |
117 | | - .i2c_enable = -1, |
118 | | - .ulpi_fs_ls = -1, |
119 | | - .host_support_fs_ls_low_power = -1, |
120 | | - .host_ls_low_power_phy_clk = -1, |
121 | | - .ts_dline = -1, |
122 | | - .reload_ctl = -1, |
123 | | - .ahbcfg = GAHBCFG_HBSTLEN_INCR16 << |
124 | | - GAHBCFG_HBSTLEN_SHIFT, |
125 | | - .uframe_sched = -1, |
126 | | - .external_id_pin_ctl = -1, |
127 | | - .hibernation = -1, |
128 | | -}; |
| 62 | +static void dwc2_set_his_params(struct dwc2_hsotg *hsotg) |
| 63 | +{ |
| 64 | + struct dwc2_core_params *p = &hsotg->params; |
129 | 65 |
|
130 | | -static const struct dwc2_core_params params_ltq = { |
131 | | - .otg_cap = 2, /* non-HNP/non-SRP */ |
132 | | - .dma_desc_enable = -1, |
133 | | - .dma_desc_fs_enable = -1, |
134 | | - .speed = -1, |
135 | | - .enable_dynamic_fifo = -1, |
136 | | - .en_multiple_tx_fifo = -1, |
137 | | - .host_rx_fifo_size = 288, /* 288 DWORDs */ |
138 | | - .host_nperio_tx_fifo_size = 128, /* 128 DWORDs */ |
139 | | - .host_perio_tx_fifo_size = 96, /* 96 DWORDs */ |
140 | | - .max_transfer_size = 65535, |
141 | | - .max_packet_count = 511, |
142 | | - .host_channels = -1, |
143 | | - .phy_type = -1, |
144 | | - .phy_utmi_width = -1, |
145 | | - .phy_ulpi_ddr = -1, |
146 | | - .phy_ulpi_ext_vbus = -1, |
147 | | - .i2c_enable = -1, |
148 | | - .ulpi_fs_ls = -1, |
149 | | - .host_support_fs_ls_low_power = -1, |
150 | | - .host_ls_low_power_phy_clk = -1, |
151 | | - .ts_dline = -1, |
152 | | - .reload_ctl = -1, |
153 | | - .ahbcfg = GAHBCFG_HBSTLEN_INCR16 << |
154 | | - GAHBCFG_HBSTLEN_SHIFT, |
155 | | - .uframe_sched = -1, |
156 | | - .external_id_pin_ctl = -1, |
157 | | - .hibernation = -1, |
158 | | -}; |
| 66 | + p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; |
| 67 | + p->speed = DWC2_SPEED_PARAM_HIGH; |
| 68 | + p->host_rx_fifo_size = 512; |
| 69 | + p->host_nperio_tx_fifo_size = 512; |
| 70 | + p->host_perio_tx_fifo_size = 512; |
| 71 | + p->max_transfer_size = 65535; |
| 72 | + p->max_packet_count = 511; |
| 73 | + p->host_channels = 16; |
| 74 | + p->phy_type = DWC2_PHY_TYPE_PARAM_UTMI; |
| 75 | + p->phy_utmi_width = 8; |
| 76 | + p->i2c_enable = false; |
| 77 | + p->host_ls_low_power_phy_clk = 0; |
| 78 | + p->reload_ctl = false; |
| 79 | + p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << |
| 80 | + GAHBCFG_HBSTLEN_SHIFT; |
| 81 | + p->uframe_sched = false; |
| 82 | +} |
159 | 83 |
|
160 | | -static const struct dwc2_core_params params_amlogic = { |
161 | | - .otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE, |
162 | | - .dma_desc_enable = 0, |
163 | | - .dma_desc_fs_enable = 0, |
164 | | - .speed = DWC2_SPEED_PARAM_HIGH, |
165 | | - .enable_dynamic_fifo = 1, |
166 | | - .en_multiple_tx_fifo = -1, |
167 | | - .host_rx_fifo_size = 512, |
168 | | - .host_nperio_tx_fifo_size = 500, |
169 | | - .host_perio_tx_fifo_size = 500, |
170 | | - .max_transfer_size = -1, |
171 | | - .max_packet_count = -1, |
172 | | - .host_channels = 16, |
173 | | - .phy_type = DWC2_PHY_TYPE_PARAM_UTMI, |
174 | | - .phy_utmi_width = -1, |
175 | | - .phy_ulpi_ddr = -1, |
176 | | - .phy_ulpi_ext_vbus = -1, |
177 | | - .i2c_enable = -1, |
178 | | - .ulpi_fs_ls = -1, |
179 | | - .host_support_fs_ls_low_power = -1, |
180 | | - .host_ls_low_power_phy_clk = -1, |
181 | | - .ts_dline = -1, |
182 | | - .reload_ctl = 1, |
183 | | - .ahbcfg = GAHBCFG_HBSTLEN_INCR8 << |
184 | | - GAHBCFG_HBSTLEN_SHIFT, |
185 | | - .uframe_sched = 0, |
186 | | - .external_id_pin_ctl = -1, |
187 | | - .hibernation = -1, |
188 | | -}; |
| 84 | +static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg) |
| 85 | +{ |
| 86 | + struct dwc2_core_params *p = &hsotg->params; |
| 87 | + |
| 88 | + p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; |
| 89 | + p->host_rx_fifo_size = 525; |
| 90 | + p->host_nperio_tx_fifo_size = 128; |
| 91 | + p->host_perio_tx_fifo_size = 256; |
| 92 | + p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << |
| 93 | + GAHBCFG_HBSTLEN_SHIFT; |
| 94 | +} |
| 95 | + |
| 96 | +static void dwc2_set_ltq_params(struct dwc2_hsotg *hsotg) |
| 97 | +{ |
| 98 | + struct dwc2_core_params *p = &hsotg->params; |
| 99 | + |
| 100 | + p->otg_cap = 2; |
| 101 | + p->host_rx_fifo_size = 288; |
| 102 | + p->host_nperio_tx_fifo_size = 128; |
| 103 | + p->host_perio_tx_fifo_size = 96; |
| 104 | + p->max_transfer_size = 65535; |
| 105 | + p->max_packet_count = 511; |
| 106 | + p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << |
| 107 | + GAHBCFG_HBSTLEN_SHIFT; |
| 108 | +} |
| 109 | + |
| 110 | +static void dwc2_set_amlogic_params(struct dwc2_hsotg *hsotg) |
| 111 | +{ |
| 112 | + struct dwc2_core_params *p = &hsotg->params; |
| 113 | + |
| 114 | + p->otg_cap = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; |
| 115 | + p->speed = DWC2_SPEED_PARAM_HIGH; |
| 116 | + p->host_rx_fifo_size = 512; |
| 117 | + p->host_nperio_tx_fifo_size = 500; |
| 118 | + p->host_perio_tx_fifo_size = 500; |
| 119 | + p->host_channels = 16; |
| 120 | + p->phy_type = DWC2_PHY_TYPE_PARAM_UTMI; |
| 121 | + p->ahbcfg = GAHBCFG_HBSTLEN_INCR8 << |
| 122 | + GAHBCFG_HBSTLEN_SHIFT; |
| 123 | + p->uframe_sched = false; |
| 124 | +} |
| 125 | + |
| 126 | +static void dwc2_set_amcc_params(struct dwc2_hsotg *hsotg) |
| 127 | +{ |
| 128 | + struct dwc2_core_params *p = &hsotg->params; |
| 129 | + |
| 130 | + p->ahbcfg = GAHBCFG_HBSTLEN_INCR16 << GAHBCFG_HBSTLEN_SHIFT; |
| 131 | +} |
189 | 132 |
|
190 | 133 | const struct of_device_id dwc2_of_match_table[] = { |
191 | | - { .compatible = "brcm,bcm2835-usb", .data = ¶ms_bcm2835 }, |
192 | | - { .compatible = "hisilicon,hi6220-usb", .data = ¶ms_hi6220 }, |
193 | | - { .compatible = "rockchip,rk3066-usb", .data = ¶ms_rk3066 }, |
194 | | - { .compatible = "lantiq,arx100-usb", .data = ¶ms_ltq }, |
195 | | - { .compatible = "lantiq,xrx200-usb", .data = ¶ms_ltq }, |
196 | | - { .compatible = "snps,dwc2", .data = NULL }, |
197 | | - { .compatible = "samsung,s3c6400-hsotg", .data = NULL}, |
198 | | - { .compatible = "amlogic,meson8b-usb", .data = ¶ms_amlogic }, |
199 | | - { .compatible = "amlogic,meson-gxbb-usb", .data = ¶ms_amlogic }, |
200 | | - { .compatible = "amcc,dwc-otg", .data = NULL }, |
| 134 | + { .compatible = "brcm,bcm2835-usb", .data = dwc2_set_bcm_params }, |
| 135 | + { .compatible = "hisilicon,hi6220-usb", .data = dwc2_set_his_params }, |
| 136 | + { .compatible = "rockchip,rk3066-usb", .data = dwc2_set_rk_params }, |
| 137 | + { .compatible = "lantiq,arx100-usb", .data = dwc2_set_ltq_params }, |
| 138 | + { .compatible = "lantiq,xrx200-usb", .data = dwc2_set_ltq_params }, |
| 139 | + { .compatible = "snps,dwc2" }, |
| 140 | + { .compatible = "samsung,s3c6400-hsotg" }, |
| 141 | + { .compatible = "amlogic,meson8b-usb", |
| 142 | + .data = dwc2_set_amlogic_params }, |
| 143 | + { .compatible = "amlogic,meson-gxbb-usb", |
| 144 | + .data = dwc2_set_amlogic_params }, |
| 145 | + { .compatible = "amcc,dwc-otg", .data = dwc2_set_amcc_params }, |
201 | 146 | {}, |
202 | 147 | }; |
203 | 148 | MODULE_DEVICE_TABLE(of, dwc2_of_match_table); |
@@ -771,9 +716,18 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) |
771 | 716 |
|
772 | 717 | int dwc2_init_params(struct dwc2_hsotg *hsotg) |
773 | 718 | { |
| 719 | + const struct of_device_id *match; |
| 720 | + void (*set_params)(void *data); |
| 721 | + |
774 | 722 | dwc2_set_default_params(hsotg); |
775 | 723 | dwc2_get_device_properties(hsotg); |
776 | 724 |
|
| 725 | + match = of_match_device(dwc2_of_match_table, hsotg->dev); |
| 726 | + if (match && match->data) { |
| 727 | + set_params = match->data; |
| 728 | + set_params(hsotg); |
| 729 | + } |
| 730 | + |
777 | 731 | dwc2_check_params(hsotg); |
778 | 732 |
|
779 | 733 | return 0; |
|
0 commit comments