|
80 | 80 | ASIZE_MAX) |
81 | 81 |
|
82 | 82 | /** |
83 | | - * struct aemif_cs_data: structure to hold cs parameters |
84 | | - * @cs: chip-select number |
| 83 | + * struct aemif_cs_timings: structure to hold CS timings |
85 | 84 | * @wstrobe: write strobe width, number of cycles - 1 |
86 | 85 | * @rstrobe: read strobe width, number of cycles - 1 |
87 | 86 | * @wsetup: write setup width, number of cycles - 1 |
88 | 87 | * @whold: write hold width, number of cycles - 1 |
89 | 88 | * @rsetup: read setup width, number of cycles - 1 |
90 | 89 | * @rhold: read hold width, number of cycles - 1 |
91 | 90 | * @ta: minimum turn around time, number of cycles - 1 |
92 | | - * @enable_ss: enable/disable select strobe mode |
93 | | - * @enable_ew: enable/disable extended wait mode |
94 | | - * @asize: width of the asynchronous device's data bus |
95 | 91 | */ |
96 | | -struct aemif_cs_data { |
97 | | - u8 cs; |
| 92 | +struct aemif_cs_timings { |
98 | 93 | u32 wstrobe; |
99 | 94 | u32 rstrobe; |
100 | 95 | u32 wsetup; |
101 | 96 | u32 whold; |
102 | 97 | u32 rsetup; |
103 | 98 | u32 rhold; |
104 | 99 | u32 ta; |
| 100 | +}; |
| 101 | + |
| 102 | +/** |
| 103 | + * struct aemif_cs_data: structure to hold CS parameters |
| 104 | + * @timings: timings configuration |
| 105 | + * @cs: chip-select number |
| 106 | + * @enable_ss: enable/disable select strobe mode |
| 107 | + * @enable_ew: enable/disable extended wait mode |
| 108 | + * @asize: width of the asynchronous device's data bus |
| 109 | + */ |
| 110 | +struct aemif_cs_data { |
| 111 | + struct aemif_cs_timings timings; |
| 112 | + u8 cs; |
105 | 113 | u8 enable_ss; |
106 | 114 | u8 enable_ew; |
107 | 115 | u8 asize; |
@@ -179,9 +187,10 @@ static int aemif_config_abus(struct platform_device *pdev, int csnum) |
179 | 187 |
|
180 | 188 | offset = A1CR_OFFSET + (data->cs - aemif->cs_offset) * 4; |
181 | 189 |
|
182 | | - set = TA(data->ta) | |
183 | | - RHOLD(data->rhold) | RSTROBE(data->rstrobe) | RSETUP(data->rsetup) | |
184 | | - WHOLD(data->whold) | WSTROBE(data->wstrobe) | WSETUP(data->wsetup); |
| 190 | + set = TA(data->timings.ta) | |
| 191 | + RHOLD(data->timings.rhold) | RSTROBE(data->timings.rstrobe) | |
| 192 | + RSETUP(data->timings.rsetup) | WHOLD(data->timings.whold) | |
| 193 | + WSTROBE(data->timings.wstrobe) | WSETUP(data->timings.wsetup); |
185 | 194 |
|
186 | 195 | set |= (data->asize & ACR_ASIZE_MASK); |
187 | 196 | if (data->enable_ew) |
@@ -215,13 +224,13 @@ static void aemif_get_hw_params(struct platform_device *pdev, int csnum) |
215 | 224 | offset = A1CR_OFFSET + (data->cs - aemif->cs_offset) * 4; |
216 | 225 | val = readl(aemif->base + offset); |
217 | 226 |
|
218 | | - data->ta = TA_VAL(val); |
219 | | - data->rhold = RHOLD_VAL(val); |
220 | | - data->rstrobe = RSTROBE_VAL(val); |
221 | | - data->rsetup = RSETUP_VAL(val); |
222 | | - data->whold = WHOLD_VAL(val); |
223 | | - data->wstrobe = WSTROBE_VAL(val); |
224 | | - data->wsetup = WSETUP_VAL(val); |
| 227 | + data->timings.ta = TA_VAL(val); |
| 228 | + data->timings.rhold = RHOLD_VAL(val); |
| 229 | + data->timings.rstrobe = RSTROBE_VAL(val); |
| 230 | + data->timings.rsetup = RSETUP_VAL(val); |
| 231 | + data->timings.whold = WHOLD_VAL(val); |
| 232 | + data->timings.wstrobe = WSTROBE_VAL(val); |
| 233 | + data->timings.wsetup = WSETUP_VAL(val); |
225 | 234 | data->enable_ew = EW_VAL(val); |
226 | 235 | data->enable_ss = SSTROBE_VAL(val); |
227 | 236 | data->asize = val & ASIZE_MAX; |
@@ -272,55 +281,55 @@ static int of_aemif_parse_abus_config(struct platform_device *pdev, |
272 | 281 | if (ret < 0) |
273 | 282 | return ret; |
274 | 283 |
|
275 | | - data->ta = ret; |
| 284 | + data->timings.ta = ret; |
276 | 285 | } |
277 | 286 |
|
278 | 287 | if (!of_property_read_u32(np, "ti,cs-read-hold-ns", &val)) { |
279 | 288 | ret = aemif_calc_rate(pdev, val, clk_rate, RHOLD_MAX); |
280 | 289 | if (ret < 0) |
281 | 290 | return ret; |
282 | 291 |
|
283 | | - data->rhold = ret; |
| 292 | + data->timings.rhold = ret; |
284 | 293 | } |
285 | 294 |
|
286 | 295 | if (!of_property_read_u32(np, "ti,cs-read-strobe-ns", &val)) { |
287 | 296 | ret = aemif_calc_rate(pdev, val, clk_rate, RSTROBE_MAX); |
288 | 297 | if (ret < 0) |
289 | 298 | return ret; |
290 | 299 |
|
291 | | - data->rstrobe = ret; |
| 300 | + data->timings.rstrobe = ret; |
292 | 301 | } |
293 | 302 |
|
294 | 303 | if (!of_property_read_u32(np, "ti,cs-read-setup-ns", &val)) { |
295 | 304 | ret = aemif_calc_rate(pdev, val, clk_rate, RSETUP_MAX); |
296 | 305 | if (ret < 0) |
297 | 306 | return ret; |
298 | 307 |
|
299 | | - data->rsetup = ret; |
| 308 | + data->timings.rsetup = ret; |
300 | 309 | } |
301 | 310 |
|
302 | 311 | if (!of_property_read_u32(np, "ti,cs-write-hold-ns", &val)) { |
303 | 312 | ret = aemif_calc_rate(pdev, val, clk_rate, WHOLD_MAX); |
304 | 313 | if (ret < 0) |
305 | 314 | return ret; |
306 | 315 |
|
307 | | - data->whold = ret; |
| 316 | + data->timings.whold = ret; |
308 | 317 | } |
309 | 318 |
|
310 | 319 | if (!of_property_read_u32(np, "ti,cs-write-strobe-ns", &val)) { |
311 | 320 | ret = aemif_calc_rate(pdev, val, clk_rate, WSTROBE_MAX); |
312 | 321 | if (ret < 0) |
313 | 322 | return ret; |
314 | 323 |
|
315 | | - data->wstrobe = ret; |
| 324 | + data->timings.wstrobe = ret; |
316 | 325 | } |
317 | 326 |
|
318 | 327 | if (!of_property_read_u32(np, "ti,cs-write-setup-ns", &val)) { |
319 | 328 | ret = aemif_calc_rate(pdev, val, clk_rate, WSETUP_MAX); |
320 | 329 | if (ret < 0) |
321 | 330 | return ret; |
322 | 331 |
|
323 | | - data->wsetup = ret; |
| 332 | + data->timings.wsetup = ret; |
324 | 333 | } |
325 | 334 |
|
326 | 335 | if (!of_property_read_u32(np, "ti,cs-bus-width", &val)) |
|
0 commit comments