2 #include "mipi_dsih_hal.h"
\r
4 void mipi_dsih_write_word(dsih_ctrl_t * instance, uint32_t reg_address, uint32_t data)
\r
7 instance->core_write_function(instance->address, reg_address, data);
\r
9 void mipi_dsih_write_part(dsih_ctrl_t * instance, uint32_t reg_address, uint32_t data, uint8_t shift, uint8_t width)
\r
11 uint32_t mask = (1 << width) - 1;
\r
12 uint32_t temp = mipi_dsih_read_word(instance, reg_address);
\r
14 temp &= ~(mask << shift);
\r
15 temp |= (data & mask) << shift;
\r
16 mipi_dsih_write_word(instance, reg_address, temp);
\r
18 uint32_t mipi_dsih_read_word(dsih_ctrl_t * instance, uint32_t reg_address)
\r
20 return instance->core_read_function(instance->address, reg_address);
\r
22 uint32_t mipi_dsih_read_part(dsih_ctrl_t * instance, uint32_t reg_address, uint8_t shift, uint8_t width)
\r
24 return (mipi_dsih_read_word(instance, reg_address) >> shift) & ((1 << width) - 1);
\r
26 uint32_t mipi_dsih_hal_get_version(dsih_ctrl_t * instance)
\r
28 return mipi_dsih_read_word(instance, R_DSI_HOST_VERSION);
\r
30 void mipi_dsih_hal_power(dsih_ctrl_t * instance, int on)
\r
32 mipi_dsih_write_part(instance, R_DSI_HOST_PWR_UP, on, 0, 1);
\r
34 int mipi_dsih_hal_get_power(dsih_ctrl_t * instance)
\r
36 return (int)(mipi_dsih_read_word(instance, R_DSI_HOST_PWR_UP));
\r
38 void mipi_dsih_hal_tx_escape_division(dsih_ctrl_t * instance, uint8_t tx_escape_division)
\r
40 mipi_dsih_write_part(instance, R_DSI_HOST_CLK_MGR, tx_escape_division, 0, 8);
\r
42 void mipi_dsih_hal_dpi_video_vc(dsih_ctrl_t * instance, uint8_t vc)
\r
44 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, (uint32_t)(vc), 0, 2);
\r
46 uint8_t mipi_dsih_hal_dpi_get_video_vc(dsih_ctrl_t * instance)
\r
48 return mipi_dsih_read_part(instance, R_DSI_HOST_DPI_CFG, 0, 2);
\r
50 dsih_error_t mipi_dsih_hal_dpi_color_coding(dsih_ctrl_t * instance, dsih_color_coding_t color_coding)
\r
52 dsih_error_t err = OK;
\r
53 if (color_coding > 7)
\r
55 if (instance->log_error != 0)
\r
57 instance->log_error("invalid colour configuration");
\r
59 err = ERR_DSI_COLOR_CODING;
\r
63 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, color_coding, 2, 3);
\r
67 dsih_color_coding_t mipi_dsih_hal_dpi_get_color_coding(dsih_ctrl_t * instance)
\r
69 return (dsih_color_coding_t)(mipi_dsih_read_part(instance, R_DSI_HOST_DPI_CFG, 2, 3));
\r
71 uint8_t mipi_dsih_hal_dpi_get_color_depth(dsih_ctrl_t * instance)
\r
73 uint8_t color_depth = 0;
\r
74 switch (mipi_dsih_read_part(instance, R_DSI_HOST_DPI_CFG, 2, 3))
\r
89 return color_depth;
\r
91 uint8_t mipi_dsih_hal_dpi_get_color_config(dsih_ctrl_t * instance)
\r
93 uint8_t color_config = 0;
\r
94 switch (mipi_dsih_read_part(instance, R_DSI_HOST_DPI_CFG, 2, 3))
\r
115 return color_config;
\r
117 void mipi_dsih_hal_dpi_18_loosely_packet_en(dsih_ctrl_t * instance, int enable)
\r
119 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, enable, 10, 1);
\r
121 void mipi_dsih_hal_dpi_color_mode_pol(dsih_ctrl_t * instance, int active_low)
\r
123 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, active_low, 9, 1);
\r
125 void mipi_dsih_hal_dpi_shut_down_pol(dsih_ctrl_t * instance, int active_low)
\r
127 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, active_low, 8, 1);
\r
129 void mipi_dsih_hal_dpi_hsync_pol(dsih_ctrl_t * instance, int active_low)
\r
131 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, active_low, 7, 1);
\r
133 void mipi_dsih_hal_dpi_vsync_pol(dsih_ctrl_t * instance, int active_low)
\r
135 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, active_low, 6, 1);
\r
137 void mipi_dsih_hal_dpi_dataen_pol(dsih_ctrl_t * instance, int active_low)
\r
139 mipi_dsih_write_part(instance, R_DSI_HOST_DPI_CFG, active_low, 5, 1);
\r
141 void mipi_dsih_hal_dpi_frame_ack_en(dsih_ctrl_t * instance, int enable)
\r
143 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 11, 1);
\r
145 void mipi_dsih_hal_dpi_null_packet_en(dsih_ctrl_t * instance, int enable)
\r
147 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 10, 1);
\r
149 void mipi_dsih_hal_dpi_multi_packet_en(dsih_ctrl_t * instance, int enable)
\r
151 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 9, 1);
\r
153 void mipi_dsih_hal_dpi_lp_during_hfp(dsih_ctrl_t * instance, int enable)
\r
155 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 8, 1);
\r
157 void mipi_dsih_hal_dpi_lp_during_hbp(dsih_ctrl_t * instance, int enable)
\r
159 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 7, 1);
\r
161 void mipi_dsih_hal_dpi_lp_during_vactive(dsih_ctrl_t * instance, int enable)
\r
163 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 6, 1);
\r
165 void mipi_dsih_hal_dpi_lp_during_vfp(dsih_ctrl_t * instance, int enable)
\r
167 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 5, 1);
\r
169 void mipi_dsih_hal_dpi_lp_during_vbp(dsih_ctrl_t * instance, int enable)
\r
171 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 4, 1);
\r
173 void mipi_dsih_hal_dpi_lp_during_vsync(dsih_ctrl_t * instance, int enable)
\r
175 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 3, 1);
\r
177 dsih_error_t mipi_dsih_hal_dpi_video_mode_type(dsih_ctrl_t * instance, dsih_video_mode_t type)
\r
181 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, type, 1, 2);
\r
186 if (instance->log_error != 0)
\r
188 instance->log_error("undefined type");
\r
190 return ERR_DSI_OUT_OF_BOUND;
\r
193 void mipi_dsih_hal_dpi_video_mode_en(dsih_ctrl_t * instance, int enable)
\r
195 mipi_dsih_write_part(instance, R_DSI_HOST_VID_MODE_CFG, enable, 0, 1);
\r
197 int mipi_dsih_hal_dpi_is_video_mode(dsih_ctrl_t * instance)
\r
199 return mipi_dsih_read_part(instance, R_DSI_HOST_VID_MODE_CFG, 0, 1);
\r
201 dsih_error_t mipi_dsih_hal_dpi_null_packet_size(dsih_ctrl_t * instance, uint16_t size)
\r
203 if (size < 0x3ff) /* 10-bit field */
\r
205 mipi_dsih_write_part(instance, R_DSI_HOST_VID_PKT_CFG, size, 21, 10);
\r
210 return ERR_DSI_OUT_OF_BOUND;
\r
213 dsih_error_t mipi_dsih_hal_dpi_chunks_no(dsih_ctrl_t * instance, uint16_t no)
\r
217 mipi_dsih_write_part(instance, R_DSI_HOST_VID_PKT_CFG, no, 11, 10);
\r
222 return ERR_DSI_OUT_OF_BOUND;
\r
225 dsih_error_t mipi_dsih_hal_dpi_video_packet_size(dsih_ctrl_t * instance, uint16_t size)
\r
227 if (size < 0x7ff) /* 11-bit field */
\r
229 mipi_dsih_write_part(instance, R_DSI_HOST_VID_PKT_CFG, size, 0, 11);
\r
234 return ERR_DSI_OUT_OF_BOUND;
\r
237 void mipi_dsih_hal_tear_effect_ack_en(dsih_ctrl_t * instance, int enable)
\r
239 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, enable, 14, 1);
\r
241 void mipi_dsih_hal_cmd_ack_en(dsih_ctrl_t * instance, int enable)
\r
243 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, enable, 13, 1);
\r
245 dsih_error_t mipi_dsih_hal_dcs_wr_tx_type(dsih_ctrl_t * instance, unsigned no_of_param, int lp)
\r
247 switch (no_of_param)
\r
250 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 7, 1);
\r
253 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 8, 1);
\r
256 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 12, 1);
\r
261 dsih_error_t mipi_dsih_hal_dcs_rd_tx_type(dsih_ctrl_t * instance, unsigned no_of_param, int lp)
\r
263 dsih_error_t err = OK;
\r
264 switch (no_of_param)
\r
267 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 9, 1);
\r
270 if (instance->log_error != 0)
\r
272 instance->log_error("undefined DCS Read packet type");
\r
274 err = ERR_DSI_OUT_OF_BOUND;
\r
280 /*Jessica add begin: to support max read packet size command */
\r
281 dsih_error_t mipi_dsih_hal_max_rd_packet_size_type(dsih_ctrl_t * instance, int lp)
\r
283 dsih_error_t err = OK;
\r
284 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 10, 1);
\r
287 /*Jessica add end*/
\r
289 dsih_error_t mipi_dsih_hal_gen_wr_tx_type(dsih_ctrl_t * instance, unsigned no_of_param, int lp)
\r
291 switch (no_of_param)
\r
294 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 1, 1);
\r
297 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 2, 1);
\r
300 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 3, 1);
\r
303 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 11, 1);
\r
308 dsih_error_t mipi_dsih_hal_gen_rd_tx_type(dsih_ctrl_t * instance, unsigned no_of_param, int lp)
\r
310 dsih_error_t err = OK;
\r
311 switch (no_of_param)
\r
314 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 4, 1);
\r
317 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 5, 1);
\r
320 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 6, 1);
\r
323 if (instance->log_error != 0)
\r
325 instance->log_error("undefined Generic Read packet type");
\r
327 err = ERR_DSI_OUT_OF_BOUND;
\r
332 void mipi_dsih_hal_max_rd_size_tx_type(dsih_ctrl_t * instance, int lp)
\r
334 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, lp, 10, 1);
\r
336 void mipi_dsih_hal_gen_cmd_mode_en(dsih_ctrl_t * instance, int enable)
\r
338 mipi_dsih_write_part(instance, R_DSI_HOST_CMD_MODE_CFG, enable, 0, 1);
\r
340 int mipi_dsih_hal_gen_is_cmd_mode(dsih_ctrl_t * instance)
\r
342 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_MODE_CFG, 0, 1);
\r
344 void mipi_dsih_hal_dpi_hline(dsih_ctrl_t * instance, uint16_t time)
\r
346 mipi_dsih_write_part(instance, R_DSI_HOST_TMR_LINE_CFG, time, 18, 14);
\r
348 void mipi_dsih_hal_dpi_hbp(dsih_ctrl_t * instance, uint16_t time)
\r
350 mipi_dsih_write_part(instance, R_DSI_HOST_TMR_LINE_CFG, time, 9, 9);
\r
352 void mipi_dsih_hal_dpi_hsa(dsih_ctrl_t * instance, uint16_t time)
\r
354 mipi_dsih_write_part(instance, R_DSI_HOST_TMR_LINE_CFG, time, 0, 9);
\r
356 void mipi_dsih_hal_dpi_vactive(dsih_ctrl_t * instance, uint16_t lines)
\r
358 mipi_dsih_write_part(instance, R_DSI_HOST_VTIMING_CFG, lines, 16, 11);
\r
360 void mipi_dsih_hal_dpi_vfp(dsih_ctrl_t * instance, uint16_t lines)
\r
362 mipi_dsih_write_part(instance, R_DSI_HOST_VTIMING_CFG, lines, 10, 6);
\r
364 void mipi_dsih_hal_dpi_vbp(dsih_ctrl_t * instance, uint16_t lines)
\r
366 mipi_dsih_write_part(instance, R_DSI_HOST_VTIMING_CFG, lines, 4, 6);
\r
368 void mipi_dsih_hal_dpi_vsync(dsih_ctrl_t * instance, uint16_t lines)
\r
370 mipi_dsih_write_part(instance, R_DSI_HOST_VTIMING_CFG, lines, 0, 4);
\r
372 void mipi_dsih_hal_timeout_clock_division(dsih_ctrl_t * instance, uint8_t byte_clk_division_factor)
\r
374 mipi_dsih_write_part(instance, R_DSI_HOST_CLK_MGR, byte_clk_division_factor, 8, 8);
\r
376 void mipi_dsih_hal_lp_rx_timeout(dsih_ctrl_t * instance, uint16_t count)
\r
378 mipi_dsih_write_part(instance, R_DSI_HOST_TO_CNT_CFG, count, 16, 16);
\r
380 void mipi_dsih_hal_hs_tx_timeout(dsih_ctrl_t * instance, uint16_t count)
\r
382 mipi_dsih_write_part(instance, R_DSI_HOST_TO_CNT_CFG, count, 0, 16);
\r
384 uint32_t mipi_dsih_hal_error_status_0(dsih_ctrl_t * instance, uint32_t mask)
\r
386 return (mipi_dsih_read_word(instance, R_DSI_HOST_ERROR_ST0) & mask);
\r
388 uint32_t mipi_dsih_hal_error_status_1(dsih_ctrl_t * instance, uint32_t mask)
\r
390 return (mipi_dsih_read_word(instance, R_DSI_HOST_ERROR_ST1) & mask);
\r
392 void mipi_dsih_hal_error_mask_0(dsih_ctrl_t * instance, uint32_t mask)
\r
394 mipi_dsih_write_word(instance, R_DSI_HOST_ERROR_MSK0, mask);
\r
396 uint32_t mipi_dsih_hal_get_error_mask_0(dsih_ctrl_t * instance, uint32_t mask)
\r
398 return (mipi_dsih_read_word(instance, R_DSI_HOST_ERROR_MSK0) & mask);
\r
400 void mipi_dsih_hal_error_mask_1(dsih_ctrl_t * instance, uint32_t mask)
\r
402 mipi_dsih_write_word(instance, R_DSI_HOST_ERROR_MSK1, mask);
\r
404 uint32_t mipi_dsih_hal_get_error_mask_1(dsih_ctrl_t * instance, uint32_t mask)
\r
406 return (mipi_dsih_read_word(instance, R_DSI_HOST_ERROR_MSK1) & mask);
\r
408 /* DBI NOT IMPLEMENTED */
\r
409 void mipi_dsih_hal_dbi_out_color_coding(dsih_ctrl_t * instance, uint8_t color_depth, uint8_t option);
\r
410 void mipi_dsih_hal_dbi_in_color_coding(dsih_ctrl_t * instance, uint8_t color_depth, uint8_t option);
\r
411 void mipi_dsih_hal_dbi_lut_size(dsih_ctrl_t * instance, uint8_t size);
\r
412 void mipi_dsih_hal_dbi_partitioning_en(dsih_ctrl_t * instance, int enable);
\r
413 void mipi_dsih_hal_dbi_dcs_vc(dsih_ctrl_t * instance, uint8_t vc);
\r
414 void mipi_dsih_hal_dbi_max_cmd_size(dsih_ctrl_t * instance, uint16_t size);
\r
415 void mipi_dsih_hal_dbi_cmd_size(dsih_ctrl_t * instance, uint16_t size);
\r
416 void mipi_dsih_hal_dbi_max_cmd_size(dsih_ctrl_t * instance, uint16_t size);
\r
417 int mipi_dsih_hal_dbi_rd_cmd_busy(dsih_ctrl_t * instance);
\r
418 int mipi_dsih_hal_dbi_read_fifo_full(dsih_ctrl_t * instance);
\r
419 int mipi_dsih_hal_dbi_read_fifo_empty(dsih_ctrl_t * instance);
\r
420 int mipi_dsih_hal_dbi_write_fifo_full(dsih_ctrl_t * instance);
\r
421 int mipi_dsih_hal_dbi_write_fifo_empty(dsih_ctrl_t * instance);
\r
422 int mipi_dsih_hal_dbi_cmd_fifo_full(dsih_ctrl_t * instance);
\r
423 int mipi_dsih_hal_dbi_cmd_fifo_empty(dsih_ctrl_t * instance);
\r
425 dsih_error_t mipi_dsih_hal_gen_packet_header(dsih_ctrl_t * instance, uint8_t vc, uint8_t packet_type, uint8_t ms_byte, uint8_t ls_byte)
\r
429 mipi_dsih_write_part(instance, R_DSI_HOST_GEN_HDR, (ms_byte << 16) | (ls_byte << 8 ) | ((vc << 6) | packet_type), 0, 24);
\r
432 return ERR_DSI_OVERFLOW;
\r
434 dsih_error_t mipi_dsih_hal_gen_packet_payload(dsih_ctrl_t * instance, uint32_t payload)
\r
436 if (mipi_dsih_hal_gen_write_fifo_full(instance))
\r
438 return ERR_DSI_OVERFLOW;
\r
440 mipi_dsih_write_word(instance, R_DSI_HOST_GEN_PLD_DATA, payload);
\r
444 dsih_error_t mipi_dsih_hal_gen_read_payload(dsih_ctrl_t * instance, uint32_t* payload)
\r
446 *payload = mipi_dsih_read_word(instance, R_DSI_HOST_GEN_PLD_DATA);
\r
450 void mipi_dsih_hal_gen_rd_vc(dsih_ctrl_t * instance, uint8_t vc)
\r
452 mipi_dsih_write_part(instance, R_DSI_HOST_PCKHDL_CFG, vc, 5, 2);
\r
454 void mipi_dsih_hal_gen_eotp_rx_en(dsih_ctrl_t * instance, int enable)
\r
456 mipi_dsih_write_part(instance, R_DSI_HOST_PCKHDL_CFG, enable, 1, 1);
\r
458 void mipi_dsih_hal_gen_eotp_tx_en(dsih_ctrl_t * instance, int enable)
\r
460 mipi_dsih_write_part(instance, R_DSI_HOST_PCKHDL_CFG, enable, 0, 1);
\r
462 void mipi_dsih_hal_bta_en(dsih_ctrl_t * instance, int enable)
\r
464 mipi_dsih_write_part(instance, R_DSI_HOST_PCKHDL_CFG, enable, 2, 1);
\r
466 void mipi_dsih_hal_gen_ecc_rx_en(dsih_ctrl_t * instance, int enable)
\r
468 mipi_dsih_write_part(instance, R_DSI_HOST_PCKHDL_CFG, enable, 3, 1);
\r
470 void mipi_dsih_hal_gen_crc_rx_en(dsih_ctrl_t * instance, int enable)
\r
472 mipi_dsih_write_part(instance, R_DSI_HOST_PCKHDL_CFG, enable, 4, 1);
\r
474 int mipi_dsih_hal_gen_rd_cmd_busy(dsih_ctrl_t * instance)
\r
476 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_PKT_STATUS, 6, 1);
\r
478 int mipi_dsih_hal_gen_read_fifo_full(dsih_ctrl_t * instance)
\r
480 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_PKT_STATUS, 5, 1);
\r
482 int mipi_dsih_hal_gen_read_fifo_empty(dsih_ctrl_t * instance)
\r
484 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_PKT_STATUS, 4, 1);
\r
486 int mipi_dsih_hal_gen_write_fifo_full(dsih_ctrl_t * instance)
\r
488 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_PKT_STATUS, 3, 1);
\r
490 int mipi_dsih_hal_gen_write_fifo_empty(dsih_ctrl_t * instance)
\r
492 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_PKT_STATUS, 2, 1);
\r
494 int mipi_dsih_hal_gen_cmd_fifo_full(dsih_ctrl_t * instance)
\r
496 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_PKT_STATUS, 1, 1);
\r
498 int mipi_dsih_hal_gen_cmd_fifo_empty(dsih_ctrl_t * instance)
\r
500 return mipi_dsih_read_part(instance, R_DSI_HOST_CMD_PKT_STATUS, 0, 1);
\r
503 dsih_error_t mipi_dsih_phy_hs2lp_config(dsih_ctrl_t * instance, uint8_t no_of_byte_cycles)
\r
505 //mipi_dsih_write_part(instance, R_DSI_HOST_PHY_TMR_CFG, no_of_byte_cycles, 20, 8);
\r
506 mipi_dsih_write_part(instance, R_DSI_HOST_PHY_TMR_CFG, no_of_byte_cycles, 24, 8);
\r
509 dsih_error_t mipi_dsih_phy_lp2hs_config(dsih_ctrl_t * instance, uint8_t no_of_byte_cycles)
\r
511 //mipi_dsih_write_part(instance, R_DSI_HOST_PHY_TMR_CFG, no_of_byte_cycles, 12, 8);
\r
512 mipi_dsih_write_part(instance, R_DSI_HOST_PHY_TMR_CFG, no_of_byte_cycles, 16, 8);
\r
515 dsih_error_t mipi_dsih_phy_bta_time(dsih_ctrl_t * instance, uint16_t no_of_byte_cycles)
\r
517 /*Jessica modified: From ASIC, the second table in spec is correct, this 15 bits are max rd time*/
\r
518 if (no_of_byte_cycles < 0x8000) /* 15-bit field */
\r
520 //mipi_dsih_write_part(instance, R_DSI_HOST_PHY_TMR_CFG, no_of_byte_cycles, 0, 12);
\r
521 mipi_dsih_write_part(instance, R_DSI_HOST_PHY_TMR_CFG, no_of_byte_cycles, 0, 15);
\r
525 return ERR_DSI_OVERFLOW;
\r