1 /******************************************************************************\r
2 * Copyright (c) 2019 Texas Instruments Incorporated - http://www.ti.com\r
3 *\r
4 * Redistribution and use in source and binary forms, with or without\r
5 * modification, are permitted provided that the following conditions\r
6 * are met:\r
7 *\r
8 * Redistributions of source code must retain the above copyright\r
9 * notice, this list of conditions and the following disclaimer.\r
10 *\r
11 * Redistributions in binary form must reproduce the above copyright\r
12 * notice, this list of conditions and the following disclaimer in the\r
13 * documentation and/or other materials provided with the\r
14 * distribution.\r
15 *\r
16 * Neither the name of Texas Instruments Incorporated nor the names of\r
17 * its contributors may be used to endorse or promote products derived\r
18 * from this software without specific prior written permission.\r
19 *\r
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
23 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
24 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
31 *\r
32 *****************************************************************************/\r
33 \r
34 /**\r
35 * \file ds90ub941.c\r
36 *\r
37 * This file contains the default API's for initializing the\r
38 * FPD module for the communicating with the remote slave device.\r
39 *\r
40 */\r
41 \r
42 #include "ds90ub941.h"\r
43 \r
44 /**\r
45 * \brief DSI Reset mode control\r
46 *\r
47 * This function is used for configuring the analog (or)\r
48 * digital DSI reset mode.\r
49 *\r
50 * \param handle [IN] Low level driver handle\r
51 * \param fpdModParams [IN] FPD module params\r
52 * \param cfgMode [IN] Config mode - Normal operation (or) Reset\r
53 *\r
54 * \return Board_STATUS in case of success or appropriate error code.\r
55 *\r
56 */\r
57 Board_STATUS Board_fpdUb941SetResetModeCtrl(void *handle,\r
58 Board_FpdModuleObj *fpdModParams,\r
59 uint8_t cfgMode)\r
60 {\r
61 Board_STATUS ret = BOARD_SOK;\r
62 uint8_t regData = 0;\r
63 \r
64 if(handle == NULL)\r
65 {\r
66 return BOARD_INVALID_PARAM;\r
67 }\r
68 \r
69 ret = Board_i2c8BitRegRd(handle,\r
70 fpdModParams->serSlvAddr,\r
71 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
72 ®Data,\r
73 1U,\r
74 BOARD_I2C_TRANSACTION_TIMEOUT);\r
75 if(ret != 0)\r
76 {\r
77 return BOARD_I2C_TRANSFER_FAIL;\r
78 }\r
79 \r
80 regData &= ~(BOARD_FPD_UB941_DISABLE_DSI_BIT_MASK);\r
81 regData |= (cfgMode << BOARD_FPD_UB941_DISABLE_DSI_SHIFT_CNT);\r
82 \r
83 ret = Board_i2c8BitRegWr(handle,\r
84 fpdModParams->serSlvAddr,\r
85 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
86 ®Data,\r
87 1U,\r
88 BOARD_I2C_TRANSACTION_TIMEOUT);\r
89 if(ret != 0)\r
90 {\r
91 return BOARD_I2C_TRANSFER_FAIL;\r
92 }\r
93 \r
94 return BOARD_SOK;\r
95 \r
96 }\r
97 \r
98 /**\r
99 * \brief Digital reset1 mode control\r
100 *\r
101 * This function is used for configuring the operational\r
102 * mode of Digital RESET1.\r
103 *\r
104 * \param handle [IN] Low level driver handle\r
105 * \param fpdModParams [IN] FPD module params\r
106 * \param cfgMode [IN] Config mode - Normal operation (or) Reset\r
107 *\r
108 * \return Board_STATUS in case of success or appropriate error code.\r
109 *\r
110 */\r
111 Board_STATUS Board_fpdUb941SetDigtialRst1ModeCtrl(void *handle,\r
112 Board_FpdModuleObj *fpdModParams,\r
113 uint8_t cfgMode)\r
114 {\r
115 Board_STATUS ret = BOARD_SOK;\r
116 uint8_t regData = 0;\r
117 \r
118 if(handle == NULL)\r
119 {\r
120 return BOARD_INVALID_PARAM;\r
121 }\r
122 \r
123 ret = Board_i2c8BitRegRd(handle,\r
124 fpdModParams->serSlvAddr,\r
125 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
126 ®Data,\r
127 1U,\r
128 BOARD_I2C_TRANSACTION_TIMEOUT);\r
129 if(ret != 0)\r
130 {\r
131 return BOARD_I2C_TRANSFER_FAIL;\r
132 }\r
133 \r
134 regData &= ~(BOARD_FPD_UB941_DIGITAL_RESET1_BIT_MASK);\r
135 regData |= (cfgMode << BOARD_FPD_UB941_DIGITAL_RESET1_SHIFT_CNT);\r
136 \r
137 ret = Board_i2c8BitRegWr(handle,\r
138 fpdModParams->serSlvAddr,\r
139 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
140 ®Data,\r
141 1U,\r
142 BOARD_I2C_TRANSACTION_TIMEOUT);\r
143 if(ret != 0)\r
144 {\r
145 return BOARD_I2C_TRANSFER_FAIL;\r
146 }\r
147 \r
148 return BOARD_SOK;\r
149 \r
150 }\r
151 \r
152 /**\r
153 * \brief Digital reset0 mode control\r
154 *\r
155 * This function is used for configuring the operational\r
156 * mode of Digital RESET0.\r
157 *\r
158 * \param handle [IN] Low level driver handle\r
159 * \param fpdModParams [IN] FPD module params\r
160 * \param cfgMode [IN] Config mode - Normal operation (or) Reset\r
161 *\r
162 * \return Board_STATUS in case of success or appropriate error code.\r
163 *\r
164 */\r
165 Board_STATUS Board_fpdUb941SetDigtialRst0ModeCtrl(void *handle,\r
166 Board_FpdModuleObj *fpdModParams,\r
167 uint8_t cfgMode)\r
168 {\r
169 Board_STATUS ret = BOARD_SOK;\r
170 uint8_t regData = 0;\r
171 \r
172 if(handle == NULL)\r
173 {\r
174 return BOARD_INVALID_PARAM;\r
175 }\r
176 \r
177 ret = Board_i2c8BitRegRd(handle,\r
178 fpdModParams->serSlvAddr,\r
179 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
180 ®Data,\r
181 1U,\r
182 BOARD_I2C_TRANSACTION_TIMEOUT);\r
183 if(ret != 0)\r
184 {\r
185 return BOARD_I2C_TRANSFER_FAIL;\r
186 }\r
187 \r
188 regData &= ~(BOARD_FPD_UB941_DIGITAL_RESET0_BIT_MASK);\r
189 regData |= (cfgMode << BOARD_FPD_UB941_DIGITAL_RESET0_SHIFT_CNT);\r
190 \r
191 ret = Board_i2c8BitRegWr(handle,\r
192 fpdModParams->serSlvAddr,\r
193 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
194 ®Data,\r
195 1U,\r
196 BOARD_I2C_TRANSACTION_TIMEOUT);\r
197 if(ret != 0)\r
198 {\r
199 return BOARD_I2C_TRANSFER_FAIL;\r
200 }\r
201 \r
202 return BOARD_SOK;\r
203 \r
204 }\r
205 \r
206 /**\r
207 * \brief DSI1 clock lane pin order select\r
208 *\r
209 * This function is used to select the DSI1 clock lane pin order.\r
210 *\r
211 * \param handle [IN] Low level driver handle\r
212 * \param fpdModParams [IN] FPD module params\r
213 * \param operMode [IN] Operational mode to be configured\r
214 * BOARD_FPD_UB941_CLK_LANE_PN_MAINTIAN - DSI Port1\r
215 * Clock Lane P inputs mapped to P, N inputs\r
216 * mapped to N\r
217 * BOARD_FPD_UB941_CLK_LANE_PN_SWAP - DSI Port1\r
218 * Clock Lane P inputs mapped to P, N inputs\r
219 * mapped to P\r
220 *\r
221 * \return Board_STATUS in case of success or appropriate error code.\r
222 *\r
223 */\r
224 Board_STATUS Board_fpdUb941SetDsi1ClkPinOrd(void *handle,\r
225 Board_FpdModuleObj *fpdModParams,\r
226 uint8_t operMode)\r
227 {\r
228 Board_STATUS ret = BOARD_SOK;\r
229 uint8_t regData = 0;\r
230 \r
231 if(handle == NULL)\r
232 {\r
233 return BOARD_INVALID_PARAM;\r
234 }\r
235 \r
236 ret = Board_i2c8BitRegRd(handle,\r
237 fpdModParams->serSlvAddr,\r
238 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
239 ®Data,\r
240 1U,\r
241 BOARD_I2C_TRANSACTION_TIMEOUT);\r
242 if(ret != 0)\r
243 {\r
244 return BOARD_I2C_TRANSFER_FAIL;\r
245 }\r
246 \r
247 regData &= ~(BOARD_FPD_UB941_DSI1_CLK_PN_SWAP_BIT_MASK);\r
248 regData |= (operMode << BOARD_FPD_UB941_DSI1_CLK_PN_SWAP_SHIFT_CNT);\r
249 \r
250 ret = Board_i2c8BitRegWr(handle,\r
251 fpdModParams->serSlvAddr,\r
252 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
253 ®Data,\r
254 1U,\r
255 BOARD_I2C_TRANSACTION_TIMEOUT);\r
256 if(ret != 0)\r
257 {\r
258 return BOARD_I2C_TRANSFER_FAIL;\r
259 }\r
260 \r
261 return BOARD_SOK;\r
262 \r
263 }\r
264 \r
265 /**\r
266 * \brief DSI1 data lane pin order select\r
267 *\r
268 * This function is used to select the DSI1 data lane pin order.\r
269 *\r
270 * \param handle [IN] Low level driver handle\r
271 * \param fpdModParams [IN] FPD module params\r
272 * \param operMode [IN] Operational mode to be configured\r
273 * BOARD_FPD_UB941_DATA_LANE_PN_MAINTIAN - DSI Port1\r
274 * Data Lane P inputs mapped to P, N\r
275 * input smapped to N\r
276 * BOARD_FPD_UB941_DATA_LANE_PN_SWAP - DSI Port1\r
277 * Data Lane P inputs mapped to P, N\r
278 * inputs mapped to P\r
279 *\r
280 * \return Board_STATUS in case of success or appropriate error code.\r
281 *\r
282 */\r
283 Board_STATUS Board_fpdUb941SelDsi1DataPinOrd(void *handle,\r
284 Board_FpdModuleObj *fpdModParams,\r
285 uint8_t operMode)\r
286 {\r
287 Board_STATUS ret = BOARD_SOK;\r
288 uint8_t regData = 0;\r
289 \r
290 if(handle == NULL)\r
291 {\r
292 return BOARD_INVALID_PARAM;\r
293 }\r
294 \r
295 ret = Board_i2c8BitRegRd(handle,\r
296 fpdModParams->serSlvAddr,\r
297 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
298 ®Data,\r
299 1U,\r
300 BOARD_I2C_TRANSACTION_TIMEOUT);\r
301 if(ret != 0)\r
302 {\r
303 return BOARD_I2C_TRANSFER_FAIL;\r
304 }\r
305 \r
306 regData &= ~(BOARD_FPD_UB941_DSI1_DATA_PN_SWAP_BIT_MASK);\r
307 regData |= (operMode << BOARD_FPD_UB941_DSI1_DATA_PN_SWAP_SHIFT_CNT);\r
308 \r
309 ret = Board_i2c8BitRegWr(handle,\r
310 fpdModParams->serSlvAddr,\r
311 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
312 ®Data,\r
313 1U,\r
314 BOARD_I2C_TRANSACTION_TIMEOUT);\r
315 if(ret != 0)\r
316 {\r
317 return BOARD_I2C_TRANSFER_FAIL;\r
318 }\r
319 \r
320 return BOARD_SOK;\r
321 \r
322 }\r
323 \r
324 /**\r
325 * \brief DSI0 clock lane pin order select\r
326 *\r
327 * This function is used to select the DSI0 clock lane pin order.\r
328 *\r
329 * \param handle [IN] Low level driver handle\r
330 * \param fpdModParams [IN] FPD module params\r
331 * \param operMode [IN] Operational mode to be configured\r
332 * BOARD_FPD_UB941_CLK_LANE_PN_MAINTIAN - DSI Port0\r
333 * Clock Lane P inputs mapped to P, N inputs\r
334 * mapped to N\r
335 * BOARD_FPD_UB941_CLK_LANE_PN_SWAP - DSI Port0\r
336 * Clock Lane P inputs mapped to P, N inputs\r
337 * mapped to P\r
338 *\r
339 * \return Board_STATUS in case of success or appropriate error code.\r
340 *\r
341 */\r
342 Board_STATUS Board_fpdUb941SelDsi0ClkPinOrd(void *handle,\r
343 Board_FpdModuleObj *fpdModParams,\r
344 uint8_t operMode)\r
345 {\r
346 Board_STATUS ret = BOARD_SOK;\r
347 uint8_t regData = 0;\r
348 \r
349 if(handle == NULL)\r
350 {\r
351 return BOARD_INVALID_PARAM;\r
352 }\r
353 \r
354 ret = Board_i2c8BitRegRd(handle,\r
355 fpdModParams->serSlvAddr,\r
356 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
357 ®Data,\r
358 1U,\r
359 BOARD_I2C_TRANSACTION_TIMEOUT);\r
360 if(ret != 0)\r
361 {\r
362 return BOARD_I2C_TRANSFER_FAIL;\r
363 }\r
364 \r
365 regData &= ~(BOARD_FPD_UB941_DSI0_CLK_PN_SWAP_BIT_MASK);\r
366 regData |= (operMode << BOARD_FPD_UB941_DSI0_CLK_PN_SWAP_SHIFT_CNT);\r
367 \r
368 ret = Board_i2c8BitRegWr(handle,\r
369 fpdModParams->serSlvAddr,\r
370 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
371 ®Data,\r
372 1U,\r
373 BOARD_I2C_TRANSACTION_TIMEOUT);\r
374 if(ret != 0)\r
375 {\r
376 return BOARD_I2C_TRANSFER_FAIL;\r
377 }\r
378 \r
379 return BOARD_SOK;\r
380 \r
381 }\r
382 \r
383 /**\r
384 * \brief DSI0 data lane pin order select\r
385 *\r
386 * This function is used to select the DSI0 data lane pin order.\r
387 *\r
388 * \param handle [IN] Low level driver handle\r
389 * \param fpdModParams [IN] FPD module params\r
390 * \param operMode [IN] Operational mode to be configured\r
391 * BOARD_FPD_UB941_DATA_LANE_PN_MAINTIAN - DSI Port0\r
392 * Data Lane P inputs mapped to P, N\r
393 * input smapped to N\r
394 * BOARD_FPD_UB941_DATA_LANE_PN_SWAP - DSI Port0\r
395 * Data Lane P inputs mapped to P, N\r
396 * inputs mapped to P\r
397 *\r
398 * \return Board_STATUS in case of success or appropriate error code.\r
399 *\r
400 */\r
401 Board_STATUS Board_fpdUb941SelDsi0DataPinOrd(void *handle,\r
402 Board_FpdModuleObj *fpdModParams,\r
403 uint8_t operMode)\r
404 {\r
405 Board_STATUS ret = BOARD_SOK;\r
406 uint8_t regData = 0;\r
407 \r
408 if(handle == NULL)\r
409 {\r
410 return BOARD_INVALID_PARAM;\r
411 }\r
412 \r
413 ret = Board_i2c8BitRegRd(handle,\r
414 fpdModParams->serSlvAddr,\r
415 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
416 ®Data,\r
417 1U,\r
418 BOARD_I2C_TRANSACTION_TIMEOUT);\r
419 if(ret != 0)\r
420 {\r
421 return BOARD_I2C_TRANSFER_FAIL;\r
422 }\r
423 \r
424 regData &= ~(BOARD_FPD_UB941_DSI0_DATA_PN_SWAP_BIT_MASK);\r
425 regData |= (operMode << BOARD_FPD_UB941_DSI0_DATA_PN_SWAP_SHIFT_CNT);\r
426 \r
427 ret = Board_i2c8BitRegWr(handle,\r
428 fpdModParams->serSlvAddr,\r
429 BOARD_FPD_UB941_DEVICE_CFG_REG_ADDR,\r
430 ®Data,\r
431 1U,\r
432 BOARD_I2C_TRANSACTION_TIMEOUT);\r
433 if(ret != 0)\r
434 {\r
435 return BOARD_I2C_TRANSFER_FAIL;\r
436 }\r
437 \r
438 return BOARD_SOK;\r
439 \r
440 }\r
441 \r
442 /**\r
443 * \brief Set deserializer device Id\r
444 *\r
445 * This function is used for setting the user configurable\r
446 * device ID for remote deserializer connected to serializer.\r
447 *\r
448 * \param handle [IN] Low level driver handle\r
449 * \param fpdModParams [IN] FPD module params\r
450 * \param serSlvAddr [IN] Deserailizer device ID.\r
451 *\r
452 *\r
453 * \return Board_STATUS in case of success or appropriate error code.\r
454 *\r
455 */\r
456 Board_STATUS Board_fpdUb941DevIdCfg(void *handle,\r
457 Board_FpdModuleObj *fpdModParams,\r
458 uint8_t serSlvAddr)\r
459 {\r
460 Board_STATUS ret = BOARD_SOK;\r
461 \r
462 if(handle == NULL)\r
463 {\r
464 return BOARD_INVALID_PARAM;\r
465 }\r
466 \r
467 \r
468 serSlvAddr = ((serSlvAddr << 1) | BOARD_FPD_UB941_FREEZE_DEV_ID_BIT_MASK);\r
469 \r
470 ret = Board_i2c8BitRegWr(handle,\r
471 fpdModParams->serSlvAddr,\r
472 BOARD_FPD_UB941_DES_ID_REG_ADDR,\r
473 &serSlvAddr,\r
474 1U,\r
475 BOARD_I2C_TRANSACTION_TIMEOUT);\r
476 if(ret != 0)\r
477 {\r
478 return BOARD_I2C_TRANSFER_FAIL;\r
479 }\r
480 \r
481 return BOARD_SOK;\r
482 \r
483 }\r
484 \r
485 /**\r
486 * \brief Get DSI general error status\r
487 *\r
488 * This function is used to read the general status of different err fileds.\r
489 *\r
490 * \param handle [IN] Low level driver handle\r
491 * \param fpdModParams [IN] FPD module params\r
492 * \param errStatus [IN/OUT] Buffer to hold the error status\r
493 *\r
494 * \return Board_STATUS in case of success or appropriate error code.\r
495 *\r
496 */\r
497 Board_STATUS Board_fpdUb941GetDsiGenSts(void *handle,\r
498 Board_FpdModuleObj *fpdModParams,\r
499 uint8_t *errStatus)\r
500 {\r
501 Board_STATUS ret = BOARD_SOK;\r
502 uint8_t rdData = 0;\r
503 \r
504 if(handle == NULL)\r
505 {\r
506 return BOARD_INVALID_PARAM;\r
507 }\r
508 \r
509 ret = Board_i2c8BitRegRd(handle,\r
510 fpdModParams->serSlvAddr,\r
511 BOARD_FPD_UB941_GENERAL_STS_REG_ADDR,\r
512 &rdData,\r
513 1U,\r
514 BOARD_I2C_TRANSACTION_TIMEOUT);\r
515 if(ret != 0)\r
516 {\r
517 return BOARD_I2C_TRANSFER_FAIL;\r
518 }\r
519 \r
520 *errStatus = rdData;\r
521 BOARD_DEBUG_LOG("errStatus = %d\n\r",errStatus);\r
522 \r
523 return BOARD_SOK;\r
524 \r
525 }\r
526 \r
527 /**\r
528 * \brief I2C pass all mode control\r
529 *\r
530 * This function is used to Enable/Disable the I2C Pass All mode.\r
531 *\r
532 * \param handle [IN] Low level driver handle\r
533 * \param fpdModParams [IN] FPD module params\r
534 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
535 *\r
536 * \return Board_STATUS in case of success or appropriate error code.\r
537 *\r
538 */\r
539 Board_STATUS Board_fpdUb941SetI2CPassAllModeCtrl(void *handle,\r
540 Board_FpdModuleObj *fpdModParams,\r
541 uint8_t cfgMode)\r
542 {\r
543 Board_STATUS ret = BOARD_SOK;\r
544 uint8_t regData = 0;\r
545 \r
546 if(handle == NULL)\r
547 {\r
548 return BOARD_INVALID_PARAM;\r
549 }\r
550 \r
551 ret = Board_i2c8BitRegRd(handle,\r
552 fpdModParams->serSlvAddr,\r
553 BOARD_FPD_UB941_I2C_CONTROL_REG_ADDR,\r
554 ®Data,\r
555 1U,\r
556 BOARD_I2C_TRANSACTION_TIMEOUT);\r
557 if(ret != 0)\r
558 {\r
559 return BOARD_I2C_TRANSFER_FAIL;\r
560 }\r
561 \r
562 regData &= ~(BOARD_FPD_UB941_I2C_PASS_ALL_BIT_MASK);\r
563 regData |= (cfgMode << BOARD_FPD_UB941_I2C_PASS_ALL_SHIFT_CNT);\r
564 \r
565 ret = Board_i2c8BitRegWr(handle,\r
566 fpdModParams->serSlvAddr,\r
567 BOARD_FPD_UB941_I2C_CONTROL_REG_ADDR,\r
568 ®Data,\r
569 1U,\r
570 BOARD_I2C_TRANSACTION_TIMEOUT);\r
571 if(ret != 0)\r
572 {\r
573 return BOARD_I2C_TRANSFER_FAIL;\r
574 }\r
575 \r
576 return BOARD_SOK;\r
577 \r
578 }\r
579 \r
580 /**\r
581 * \brief Select I2C Access port\r
582 *\r
583 * This function is used to selects Port for register access from\r
584 * primary I2C address\r
585 *\r
586 * \param handle [IN] Low level driver handle\r
587 * \param fpdModParams [IN] FPD module params\r
588 * \param portSel [IN] Port to be selected\r
589 * BOARD_FPD_UB941_PORT0_SEL - Port0 selected\r
590 * BOARD_FPD_UB941_PORT1_SEL - Port1 selected\r
591 * BOARD_FPD_UB941_PORT1_I2C_EN - Enables the secondary\r
592 * I2C address\r
593 *\r
594 * \return Board_STATUS in case of success or appropriate error code.\r
595 *\r
596 */\r
597 Board_STATUS Board_fpdUb941SelI2CAccessPort(void *handle,\r
598 Board_FpdModuleObj *fpdModParams,\r
599 uint8_t portSel)\r
600 {\r
601 Board_STATUS ret = BOARD_SOK;\r
602 uint8_t regData = 0;\r
603 \r
604 if(handle == NULL)\r
605 {\r
606 return BOARD_INVALID_PARAM;\r
607 }\r
608 \r
609 ret = Board_i2c8BitRegRd(handle,\r
610 fpdModParams->serSlvAddr,\r
611 BOARD_FPD_UB941_TX_PORT_SEL_REG_ADDR,\r
612 ®Data,\r
613 1U,\r
614 BOARD_I2C_TRANSACTION_TIMEOUT);\r
615 if(ret != 0)\r
616 {\r
617 return BOARD_I2C_TRANSFER_FAIL;\r
618 }\r
619 \r
620 regData &= ~(BOARD_FPD_UB941_I2C_ACCESS_PORT_MASK);\r
621 regData |= portSel;\r
622 \r
623 \r
624 ret = Board_i2c8BitRegWr(handle,\r
625 fpdModParams->serSlvAddr,\r
626 BOARD_FPD_UB941_TX_PORT_SEL_REG_ADDR,\r
627 ®Data,\r
628 1U,\r
629 BOARD_I2C_TRANSACTION_TIMEOUT);\r
630 if(ret != 0)\r
631 {\r
632 return BOARD_I2C_TRANSFER_FAIL;\r
633 }\r
634 \r
635 return BOARD_SOK;\r
636 \r
637 }\r
638 \r
639 /**\r
640 * \brief Indirect register acces block select\r
641 *\r
642 * This function is used to select indirect register access block.\r
643 *\r
644 * \param handle [IN] Low level driver handle\r
645 * \param fpdModParams [IN] FPD module params\r
646 * \param regBlk [IN] Register block to be selected\r
647 * BOARD_FPD_UB941_DSI_PORT0_REG\r
648 * - DSI/D-PHY Port 0 Digital Registers\r
649 *\r
650 * BOARD_FPD_UB941_DSI_PORT1_REG\r
651 * - DSI/D-PHY Port 1 Digital Registers\r
652 *\r
653 * BOARD_FPD_UB941_DSI_ANALOG_PLL_CNTRL_REG \r
654 * - DSI Analog and PLL Control Registers\r
655 *\r
656 * BOARD_FPD_UB941_FPD_LINK_III_PORT0_REG \r
657 * - FPD-Link III TX Port 0 Registers\r
658 *\r
659 * BOARD_FPD_UB941_FPD_LINK_III_PORT1_REG \r
660 * - FPD-Link III TX Port 1 Registers\r
661 *\r
662 * BOARD_FPD_UB941_FPD_LINK_III_PORT0_PORT1_REG \r
663 * - Simultaneous access to FPD-Link III\r
664 * TX Port 0/1 Registers\r
665 *\r
666 * \return Board_STATUS in case of success or appropriate error code.\r
667 *\r
668 */\r
669 Board_STATUS Board_fpdUb941IndirRegAccBlkSel(void *handle,\r
670 Board_FpdModuleObj *fpdModParams,\r
671 uint8_t regBlk)\r
672 {\r
673 Board_STATUS ret = BOARD_SOK;\r
674 uint8_t regData = 0;\r
675 \r
676 if(handle == NULL)\r
677 {\r
678 return BOARD_INVALID_PARAM;\r
679 }\r
680 \r
681 ret = Board_i2c8BitRegRd(handle,\r
682 fpdModParams->serSlvAddr,\r
683 BOARD_FPD_UB941_IND_ACC_CTL_REG_ADDR,\r
684 ®Data,\r
685 1U,\r
686 BOARD_I2C_TRANSACTION_TIMEOUT);\r
687 if(ret != 0)\r
688 {\r
689 return BOARD_I2C_TRANSFER_FAIL;\r
690 }\r
691 \r
692 regData &= ~(BOARD_FPD_UB941_IND_ACC_SEL_BIT_MASK);\r
693 regData |= (regBlk << BOARD_FPD_UB941_IND_ACC_SEL_SHIFT_CNT);\r
694 \r
695 ret = Board_i2c8BitRegWr(handle,\r
696 fpdModParams->serSlvAddr,\r
697 BOARD_FPD_UB941_IND_ACC_CTL_REG_ADDR,\r
698 ®Data,\r
699 1U,\r
700 BOARD_I2C_TRANSACTION_TIMEOUT);\r
701 if(ret != 0)\r
702 {\r
703 return BOARD_I2C_TRANSFER_FAIL;\r
704 }\r
705 \r
706 return BOARD_SOK;\r
707 \r
708 }\r
709 \r
710 /**\r
711 * \brief Indirect register access mode select\r
712 *\r
713 * This function is used to select indirect register access mode.\r
714 *\r
715 * \param handle [IN] Low level driver handle\r
716 * \param fpdModParams [IN] FPD module params\r
717 * \param accessMode [IN] Indirect access mode to be selected.\r
718 * READ_ACCESS - Read Access selected\r
719 * WRITE_ACCESS - Write Access selected.\r
720 *\r
721 * \return Board_STATUS in case of success or appropriate error code.\r
722 *\r
723 */\r
724 Board_STATUS Board_fpdUb941InDirRegAccModeSel(void *handle,\r
725 Board_FpdModuleObj *fpdModParams,\r
726 uint8_t accessMode)\r
727 {\r
728 Board_STATUS ret = BOARD_SOK;\r
729 uint8_t regData = 0;\r
730 \r
731 if(handle == NULL)\r
732 {\r
733 return BOARD_INVALID_PARAM;\r
734 }\r
735 \r
736 ret = Board_i2c8BitRegRd(handle,\r
737 fpdModParams->serSlvAddr,\r
738 BOARD_FPD_UB941_IND_ACC_CTL_REG_ADDR,\r
739 ®Data,\r
740 1U,\r
741 BOARD_I2C_TRANSACTION_TIMEOUT);\r
742 if(ret != 0)\r
743 {\r
744 return BOARD_I2C_TRANSFER_FAIL;\r
745 }\r
746 \r
747 regData &= ~(BOARD_FPD_UB941_IND_ACC_READ_BIT_MASK);\r
748 regData |= (accessMode << BOARD_FPD_UB941_IND_ACC_READ_SHIFT_CNT);\r
749 \r
750 ret = Board_i2c8BitRegWr(handle,\r
751 fpdModParams->serSlvAddr,\r
752 BOARD_FPD_UB941_IND_ACC_CTL_REG_ADDR,\r
753 ®Data,\r
754 1U,\r
755 BOARD_I2C_TRANSACTION_TIMEOUT);\r
756 if(ret != 0)\r
757 {\r
758 return BOARD_I2C_TRANSFER_FAIL;\r
759 }\r
760 \r
761 return BOARD_SOK;\r
762 \r
763 }\r
764 \r
765 /**\r
766 * \brief Receive CRC checker enable\r
767 *\r
768 * This function is used to enable/disable CRC Checker.\r
769 *\r
770 * \param handle [IN] Low level driver handle\r
771 * \param fpdModParams [IN] FPD module params\r
772 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
773 *\r
774 * \return Board_STATUS in case of success or appropriate error code.\r
775 *\r
776 */\r
777 Board_STATUS Board_fpdUb941SetRxCRCCheckerEn(void *handle,\r
778 Board_FpdModuleObj *fpdModParams,\r
779 uint8_t cfgMode)\r
780 {\r
781 Board_STATUS ret = BOARD_SOK;\r
782 uint8_t regData = 0;\r
783 \r
784 if(handle == NULL)\r
785 {\r
786 return BOARD_INVALID_PARAM;\r
787 }\r
788 \r
789 ret = Board_i2c8BitRegRd(handle,\r
790 fpdModParams->serSlvAddr,\r
791 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
792 ®Data,\r
793 1U,\r
794 BOARD_I2C_TRANSACTION_TIMEOUT);\r
795 if(ret != 0)\r
796 {\r
797 return BOARD_I2C_TRANSFER_FAIL;\r
798 }\r
799 \r
800 regData &= ~(BOARD_FPD_UB941_RX_CRC_CHECKER_ENABLE_BIT_MASK);\r
801 regData |= (cfgMode << BOARD_FPD_UB941_RX_CRC_CHECKER_ENABLE_SHIFT_CNT);\r
802 \r
803 ret = Board_i2c8BitRegWr(handle,\r
804 fpdModParams->serSlvAddr,\r
805 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
806 ®Data,\r
807 1U,\r
808 BOARD_I2C_TRANSACTION_TIMEOUT);\r
809 if(ret != 0)\r
810 {\r
811 return BOARD_I2C_TRANSFER_FAIL;\r
812 }\r
813 \r
814 return BOARD_SOK;\r
815 \r
816 }\r
817 \r
818 /**\r
819 * \brief Set filter enable\r
820 *\r
821 * This function is used to enable/disable filter.\r
822 *\r
823 * \param handle [IN] Low level driver handle\r
824 * \param fpdModParams [IN] FPD module params\r
825 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
826 *\r
827 * \return Board_STATUS in case of success or appropriate error code.\r
828 *\r
829 */\r
830 Board_STATUS Board_fpdUb941SetFilterEn(void *handle,\r
831 Board_FpdModuleObj *fpdModParams,\r
832 uint8_t cfgMode)\r
833 {\r
834 Board_STATUS ret = BOARD_SOK;\r
835 uint8_t regData = 0;\r
836 \r
837 if(handle == NULL)\r
838 {\r
839 return BOARD_INVALID_PARAM;\r
840 }\r
841 \r
842 ret = Board_i2c8BitRegRd(handle,\r
843 fpdModParams->serSlvAddr,\r
844 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
845 ®Data,\r
846 1U,\r
847 BOARD_I2C_TRANSACTION_TIMEOUT);\r
848 if(ret != 0)\r
849 {\r
850 return BOARD_I2C_TRANSFER_FAIL;\r
851 }\r
852 \r
853 regData &= ~(BOARD_FPD_UB941_FILTER_ENABLE_BIT_MASK);\r
854 regData |= (cfgMode << BOARD_FPD_UB941_FILTER_ENABLE_SHIFT_CNT);\r
855 \r
856 ret = Board_i2c8BitRegWr(handle,\r
857 fpdModParams->serSlvAddr,\r
858 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
859 ®Data,\r
860 1U,\r
861 BOARD_I2C_TRANSACTION_TIMEOUT);\r
862 if(ret != 0)\r
863 {\r
864 return BOARD_I2C_TRANSFER_FAIL;\r
865 }\r
866 \r
867 return BOARD_SOK;\r
868 \r
869 }\r
870 \r
871 /**\r
872 * \brief configure I2C pass through mode\r
873 *\r
874 * This function is used to enable/disable pass through mode\r
875 *\r
876 * \param handle [IN] Low level driver handle\r
877 * \param fpdModParams [IN] FPD module params\r
878 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
879 *\r
880 * \return Board_STATUS in case of success or appropriate error code.\r
881 *\r
882 */\r
883 Board_STATUS Board_fpdUb941SetI2CPassThrModeCfg(void *handle,\r
884 Board_FpdModuleObj *fpdModParams,\r
885 uint8_t cfgMode)\r
886 {\r
887 Board_STATUS ret = BOARD_SOK;\r
888 uint8_t regData = 0;\r
889 \r
890 if(handle == NULL)\r
891 {\r
892 return BOARD_INVALID_PARAM;\r
893 }\r
894 \r
895 ret = Board_i2c8BitRegRd(handle,\r
896 fpdModParams->serSlvAddr,\r
897 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
898 ®Data,\r
899 1U,\r
900 BOARD_I2C_TRANSACTION_TIMEOUT);\r
901 if(ret != 0)\r
902 {\r
903 return BOARD_I2C_TRANSFER_FAIL;\r
904 }\r
905 \r
906 regData &= ~(BOARD_FPD_UB941_I2C_PASS_THROUGH_BIT_MASK);\r
907 regData |= (cfgMode << BOARD_FPD_UB941_I2C_PASS_THROUGH_SHIFT_CNT);\r
908 \r
909 ret = Board_i2c8BitRegWr(handle,\r
910 fpdModParams->serSlvAddr,\r
911 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
912 ®Data,\r
913 1U,\r
914 BOARD_I2C_TRANSACTION_TIMEOUT);\r
915 if(ret != 0)\r
916 {\r
917 return BOARD_I2C_TRANSFER_FAIL;\r
918 }\r
919 \r
920 return BOARD_SOK;\r
921 \r
922 }\r
923 \r
924 /**\r
925 * \brief configure PCLK auto enable mode\r
926 *\r
927 * This function is used to enable/disable PCLK AUTO mode\r
928 *\r
929 * \param handle [IN] Low level driver handle\r
930 * \param fpdModParams [IN] FPD module params\r
931 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
932 *\r
933 * \return Board_STATUS in case of success or appropriate error code.\r
934 *\r
935 */\r
936 Board_STATUS Board_fpdUb941SetPCLKAutoEnModeCfg(void *handle,\r
937 Board_FpdModuleObj *fpdModParams,\r
938 uint8_t cfgMode)\r
939 {\r
940 Board_STATUS ret = BOARD_SOK;\r
941 uint8_t regData = 0;\r
942 \r
943 if(handle == NULL)\r
944 {\r
945 return BOARD_INVALID_PARAM;\r
946 }\r
947 \r
948 ret = Board_i2c8BitRegRd(handle,\r
949 fpdModParams->serSlvAddr,\r
950 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
951 ®Data,\r
952 1U,\r
953 BOARD_I2C_TRANSACTION_TIMEOUT);\r
954 if(ret != 0)\r
955 {\r
956 return BOARD_I2C_TRANSFER_FAIL;\r
957 }\r
958 \r
959 regData &= ~(BOARD_FPD_UB941_PCLK_AUTO_BIT_MASK);\r
960 regData |= (cfgMode << BOARD_FPD_UB941_PCLK_AUTO_SHIFT_CNT);\r
961 \r
962 ret = Board_i2c8BitRegWr(handle,\r
963 fpdModParams->serSlvAddr,\r
964 BOARD_FPD_UB941_GENERAL_CFG_REG_ADDR,\r
965 ®Data,\r
966 1U,\r
967 BOARD_I2C_TRANSACTION_TIMEOUT);\r
968 if(ret != 0)\r
969 {\r
970 return BOARD_I2C_TRANSFER_FAIL;\r
971 }\r
972 \r
973 return BOARD_SOK;\r
974 \r
975 }\r
976 \r
977 /**\r
978 * \brief DSI indirect register write\r
979 *\r
980 * This function is used to write to the DSI indirect registers\r
981 *\r
982 * \param handle [IN] Low level driver handle\r
983 * \param fpdModParams [IN] FPD module params\r
984 * \param regBlkType [IN] Indirect register block type\r
985 * BOARD_FPD_UB941_DSI_PORT_INDIRECT_ACCESS\r
986 * - To enable DSI port register access\r
987 * PATTERN_GEN_INDIRECT_ACESS\r
988 * - To enable Pattern Gen register access\r
989 * \param cfgRegAddr [IN] Register address to be accessed \r
990 * \param cfgRegData [IN] Register data to be programmed\r
991 *\r
992 * \return Board_STATUS in case of success or appropriate error code.\r
993 *\r
994 */\r
995 Board_STATUS Board_fpdUb941DsiIndirRegWr(void *handle,\r
996 Board_FpdModuleObj *fpdModParams,\r
997 uint8_t regBlkType,\r
998 uint8_t cfgRegAddr,\r
999 uint8_t cfgRegData)\r
1000 {\r
1001 Board_STATUS ret = BOARD_SOK;\r
1002 uint8_t addrReg;\r
1003 uint8_t dataReg;\r
1004 \r
1005 if(handle == NULL)\r
1006 {\r
1007 return BOARD_INVALID_PARAM;\r
1008 }\r
1009 \r
1010 \r
1011 if(regBlkType == BOARD_FPD_UB941_DSI_PORT_INDIRECT_ACCESS)\r
1012 {\r
1013 addrReg = BOARD_FPD_UB941_IND_ACC_ADDR_REG_ADDR;\r
1014 dataReg = BOARD_FPD_UB941_IND_ADD_DATA_REG_ADDR;\r
1015 }\r
1016 else if(regBlkType == BOARD_FPD_UB941_PATTERN_GEN_INDIRECT_ACESS)\r
1017 {\r
1018 addrReg = BOARD_FPD_UB941_PGIA_PGIA_P1_REG_ADDR;\r
1019 dataReg = BOARD_FPD_UB941_PGID_PGID_P1_REG_ADDR;\r
1020 }\r
1021 else\r
1022 {\r
1023 return BOARD_INVALID_PARAM;\r
1024 }\r
1025 \r
1026 ret = Board_i2c8BitRegWr(handle,\r
1027 fpdModParams->serSlvAddr,\r
1028 addrReg,\r
1029 &cfgRegAddr,\r
1030 1U,\r
1031 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1032 if(ret != 0)\r
1033 {\r
1034 return BOARD_I2C_TRANSFER_FAIL;\r
1035 }\r
1036 \r
1037 ret = Board_i2c8BitRegWr(handle,\r
1038 fpdModParams->serSlvAddr,\r
1039 dataReg,\r
1040 &cfgRegData,\r
1041 1U,\r
1042 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1043 if(ret != 0)\r
1044 {\r
1045 return BOARD_I2C_TRANSFER_FAIL;\r
1046 }\r
1047 \r
1048 return BOARD_SOK;\r
1049 \r
1050 }\r
1051 \r
1052 /**\r
1053 * \brief Set DSI bytes per pixel\r
1054 *\r
1055 * This function is used to configure the DSI bytes per pixel\r
1056 *\r
1057 * \param handle [IN] Low level driver handle\r
1058 * \param fpdModParams [IN] FPD module params\r
1059 * \param bytesPerPixel [IN] Number of DSI Bytes Per Pixel\r
1060 *\r
1061 * \return Board_STATUS in case of success or appropriate error code.\r
1062 *\r
1063 */\r
1064 Board_STATUS Board_fpdUb941SetPixelBytes(void *handle,\r
1065 Board_FpdModuleObj *fpdModParams,\r
1066 uint8_t bytesPerPixel)\r
1067 {\r
1068 Board_STATUS ret = BOARD_SOK;\r
1069 uint8_t regData = 0;\r
1070 \r
1071 if(handle == NULL)\r
1072 {\r
1073 return BOARD_INVALID_PARAM;\r
1074 }\r
1075 \r
1076 ret = Board_i2c8BitRegRd(handle,\r
1077 fpdModParams->serSlvAddr,\r
1078 BOARD_FPD_UB941_BRIDGE_CFG_REG_ADDR,\r
1079 ®Data,\r
1080 1U,\r
1081 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1082 if(ret != 0)\r
1083 {\r
1084 return BOARD_I2C_TRANSFER_FAIL;\r
1085 }\r
1086 \r
1087 regData &= ~(BOARD_FPD_UB941_DSI_BYTES_PER_PIXEL_BIT_MASK);\r
1088 regData |= (bytesPerPixel << BOARD_FPD_UB941_DSI_BYTES_PER_PIXEL_SHIFT_CNT);\r
1089 \r
1090 ret = Board_i2c8BitRegWr(handle,\r
1091 fpdModParams->serSlvAddr,\r
1092 BOARD_FPD_UB941_BRIDGE_CFG_REG_ADDR,\r
1093 ®Data,\r
1094 1U,\r
1095 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1096 if(ret != 0)\r
1097 {\r
1098 return BOARD_I2C_TRANSFER_FAIL;\r
1099 }\r
1100 \r
1101 return BOARD_SOK;\r
1102 \r
1103 } \r
1104 \r
1105 \r
1106 /**\r
1107 * \brief Set frequency stability threshold\r
1108 *\r
1109 * This function is used to configure the frequency stability threshold\r
1110 *\r
1111 * \param handle [IN] Low level driver handle\r
1112 * \param fpdModParams [IN] FPD module params\r
1113 * \param freqStblThr [IN] Frequency Stability Threshold\r
1114 * BOARD_FPD_UB941_FREQ_STBL_40 - 40 micro sec\r
1115 * BOARD_FPD_UB941_FREQ_STBL_80 - 80 micro sec\r
1116 * BOARD_FPD_UB941_FREQ_STBL_320 - 320 micro sec\r
1117 * BOARD_FPD_UB941_FREQ_STBL_1280 - 1280 micro sec\r
1118 *\r
1119 * \return Board_STATUS in case of success or appropriate error code.\r
1120 *\r
1121 */\r
1122 Board_STATUS Board_fpdUb941SetFreqStblThr(void *handle,\r
1123 Board_FpdModuleObj *fpdModParams,\r
1124 uint8_t freqStblThr)\r
1125 {\r
1126 Board_STATUS ret = BOARD_SOK;\r
1127 uint8_t regData = 0;\r
1128 \r
1129 if(handle == NULL)\r
1130 {\r
1131 return BOARD_INVALID_PARAM;\r
1132 }\r
1133 \r
1134 ret = Board_i2c8BitRegRd(handle,\r
1135 fpdModParams->serSlvAddr,\r
1136 BOARD_FPD_UB941_DUAL_CTL2_REG_ADDR,\r
1137 ®Data,\r
1138 1U,\r
1139 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1140 if(ret != 0)\r
1141 {\r
1142 return BOARD_I2C_TRANSFER_FAIL;\r
1143 }\r
1144 \r
1145 regData &= ~(BOARD_FPD_UB941_FREQ_STBL_THR_BIT_MASK);\r
1146 regData |= (freqStblThr << BOARD_FPD_UB941_FREQ_STBL_THR_SHIFT_CNT);\r
1147 \r
1148 ret = Board_i2c8BitRegWr(handle,\r
1149 fpdModParams->serSlvAddr,\r
1150 BOARD_FPD_UB941_DUAL_CTL2_REG_ADDR,\r
1151 ®Data,\r
1152 1U,\r
1153 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1154 if(ret != 0)\r
1155 {\r
1156 return BOARD_I2C_TRANSFER_FAIL;\r
1157 }\r
1158 \r
1159 return BOARD_SOK;\r
1160 \r
1161 }\r
1162 \r
1163 /**\r
1164 * \brief Get FPD Link-III link ready status\r
1165 *\r
1166 * This function is used to get the FPD Link-III ready status\r
1167 *\r
1168 * \param handle [IN] Low level driver handle\r
1169 * \param fpdModParams [IN] FPD module params\r
1170 * \param stsFlag [IN/OUT] FPD LinkIII ready status\r
1171 * False - FPD Link III module ready\r
1172 * True - FPD Link III module not ready\r
1173 *\r
1174 * \return Board_STATUS in case of success or appropriate error code.\r
1175 *\r
1176 */\r
1177 Board_STATUS Board_fpdUb941GetFpd3LinkRdySts(void *handle,\r
1178 Board_FpdModuleObj *fpdModParams,\r
1179 bool *stsFlag)\r
1180 {\r
1181 Board_STATUS ret = BOARD_SOK;\r
1182 uint8_t regData = 0;\r
1183 \r
1184 if(handle == NULL)\r
1185 {\r
1186 return BOARD_INVALID_PARAM;\r
1187 }\r
1188 \r
1189 ret = Board_i2c8BitRegRd(handle,\r
1190 fpdModParams->serSlvAddr,\r
1191 BOARD_FPD_UB941_DUAL_STS_DUAL_STS_P1_REG_ADDR,\r
1192 ®Data,\r
1193 1U,\r
1194 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1195 if(ret != 0)\r
1196 {\r
1197 return BOARD_I2C_TRANSFER_FAIL;\r
1198 }\r
1199 \r
1200 *stsFlag = (((regData & BOARD_FPD_UB941_FPD3_LINK_RDY_BIT_MASK) >> BOARD_FPD_UB941_FPD3_LINK_RDY_SHIFT_CNT) == 1) ? true : false;\r
1201 BOARD_DEBUG_LOG("stsFlag = %d\n\r",stsFlag);\r
1202 \r
1203 return BOARD_SOK;\r
1204 \r
1205 }\r
1206 \r
1207 /**\r
1208 * \brief Get FPD Link-III transmit status\r
1209 *\r
1210 * This function is used to get the FPD LinkIII transmit status.\r
1211 *\r
1212 * \param handle [IN] Low level driver handle\r
1213 * \param fpdModParams [IN] FPD module params\r
1214 * \param stsFlag [IN/OUT] FPD LinkIII transmit status\r
1215 * False - FPD Link III transmit unsuccessful\r
1216 * True - FPD Link III transmit successful\r
1217 *\r
1218 * \return Board_STATUS in case of success or appropriate error code.\r
1219 *\r
1220 */\r
1221 Board_STATUS Board_fpdUb941GetFpd3LinkTxSts(void *handle,\r
1222 Board_FpdModuleObj *fpdModParams,\r
1223 bool *stsFlag)\r
1224 {\r
1225 Board_STATUS ret = BOARD_SOK;\r
1226 uint8_t regData = 0;\r
1227 \r
1228 if(handle == NULL)\r
1229 {\r
1230 return BOARD_INVALID_PARAM;\r
1231 }\r
1232 \r
1233 ret = Board_i2c8BitRegRd(handle,\r
1234 fpdModParams->serSlvAddr,\r
1235 BOARD_FPD_UB941_DUAL_STS_DUAL_STS_P1_REG_ADDR,\r
1236 ®Data,\r
1237 1U,\r
1238 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1239 if(ret != 0)\r
1240 {\r
1241 return BOARD_I2C_TRANSFER_FAIL;\r
1242 }\r
1243 \r
1244 *stsFlag = (((regData & BOARD_FPD_UB941_FPD3_TX_STS_BIT_MASK) >> BOARD_FPD_UB941_FPD3_TX_STS_SHIFT_CNT) == 1) ? true : false;\r
1245 BOARD_DEBUG_LOG("stsFlag = %d\n\r",stsFlag);\r
1246 \r
1247 return BOARD_SOK;\r
1248 \r
1249 }\r
1250 \r
1251 /**\r
1252 * \brief Get DSI clock detect status\r
1253 *\r
1254 * This function is used to get DSI clock detect status.\r
1255 *\r
1256 * \param handle [IN] Low level driver handle\r
1257 * \param fpdModParams [IN] FPD module params\r
1258 * \param stsFlag [IN/OUT] DSI clock detection status\r
1259 * False - DSI clock detection failed\r
1260 * True - DSI clock detection successful\r
1261 *\r
1262 * \return Board_STATUS in case of success or appropriate error code.\r
1263 *\r
1264 */\r
1265 Board_STATUS Board_fpdUb941GetDsiClkDetSts(void *handle,\r
1266 Board_FpdModuleObj *fpdModParams,\r
1267 bool *stsFlag)\r
1268 {\r
1269 Board_STATUS ret = BOARD_SOK;\r
1270 uint8_t regData = 0;\r
1271 \r
1272 if(handle == NULL)\r
1273 {\r
1274 return BOARD_INVALID_PARAM;\r
1275 }\r
1276 \r
1277 ret = Board_i2c8BitRegRd(handle,\r
1278 fpdModParams->serSlvAddr,\r
1279 BOARD_FPD_UB941_DUAL_STS_DUAL_STS_P1_REG_ADDR,\r
1280 ®Data,\r
1281 1U,\r
1282 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1283 if(ret != 0)\r
1284 {\r
1285 return BOARD_I2C_TRANSFER_FAIL;\r
1286 }\r
1287 \r
1288 *stsFlag = (((regData & BOARD_FPD_UB941_DSI_CLK_DET_BIT_MASK) >> BOARD_FPD_UB941_DSI_CLK_DET_SHIFT_CNT) == 1) ? true : false;\r
1289 BOARD_DEBUG_LOG("stsFlag = %d\n\r",stsFlag);\r
1290 \r
1291 return BOARD_SOK;\r
1292 \r
1293 }\r
1294 \r
1295 /**\r
1296 * \brief Get selected port DSI clock detect status\r
1297 *\r
1298 * This function is used to get DSI clock detect status \r
1299 * of selected port.\r
1300 *\r
1301 * \param handle [IN] Low level driver handle\r
1302 * \param fpdModParams [IN] FPD module params\r
1303 * \param stsFlag [IN/OUT] DSI clock detection status of selected port\r
1304 * False - DSI clock detection failed\r
1305 * True - DSI clock detection successful\r
1306 *\r
1307 * \return Board_STATUS in case of success or appropriate error code.\r
1308 *\r
1309 */\r
1310 Board_STATUS Board_fpdUb941GetSelPortDsiClkDetSts(void *handle,\r
1311 Board_FpdModuleObj *fpdModParams,\r
1312 bool *stsFlag)\r
1313 {\r
1314 Board_STATUS ret = BOARD_SOK;\r
1315 uint8_t regData = 0;\r
1316 \r
1317 if(handle == NULL)\r
1318 {\r
1319 return BOARD_INVALID_PARAM;\r
1320 }\r
1321 \r
1322 ret = Board_i2c8BitRegRd(handle,\r
1323 fpdModParams->serSlvAddr,\r
1324 BOARD_FPD_UB941_DUAL_STS_DUAL_STS_P1_REG_ADDR,\r
1325 ®Data,\r
1326 1U,\r
1327 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1328 if(ret != 0)\r
1329 {\r
1330 return BOARD_I2C_TRANSFER_FAIL;\r
1331 }\r
1332 \r
1333 *stsFlag = (((regData & BOARD_FPD_UB941_NO_DSI_CLK_BIT_MASK) >> BOARD_FPD_UB941_NO_DSI_CLK_SHIFT_CNT) == 1) ? true : false;\r
1334 BOARD_DEBUG_LOG("stsFlag = %d\n\r",stsFlag);\r
1335 \r
1336 return BOARD_SOK;\r
1337 \r
1338 }\r
1339 \r
1340 /**\r
1341 * \brief Get frequency stability status\r
1342 *\r
1343 * This function is used to get DSI frequency stability status\r
1344 *\r
1345 * \param handle [IN] Low level driver handle\r
1346 * \param fpdModParams [IN] FPD module params\r
1347 * \param stsFlag [IN/OUT] Ferquency stability status\r
1348 * False - Frequency status failed\r
1349 * True - Frequency status successful\r
1350 *\r
1351 * \return Board_STATUS in case of success or appropriate error code.\r
1352 *\r
1353 */\r
1354 Board_STATUS Board_fpdUb941GetFreqStabilitySts(void *handle,\r
1355 Board_FpdModuleObj *fpdModParams,\r
1356 bool *stsFlag)\r
1357 {\r
1358 Board_STATUS ret = BOARD_SOK;\r
1359 uint8_t regData = 0;\r
1360 \r
1361 if(handle == NULL)\r
1362 {\r
1363 return BOARD_INVALID_PARAM;\r
1364 }\r
1365 \r
1366 ret = Board_i2c8BitRegRd(handle,\r
1367 fpdModParams->serSlvAddr,\r
1368 BOARD_FPD_UB941_DUAL_STS_DUAL_STS_P1_REG_ADDR,\r
1369 ®Data,\r
1370 1U,\r
1371 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1372 if(ret != 0)\r
1373 {\r
1374 return BOARD_I2C_TRANSFER_FAIL;\r
1375 }\r
1376 \r
1377 *stsFlag = (((regData & BOARD_FPD_UB941_FREQ_STABLE_BIT_MASK) >> BOARD_FPD_UB941_FREQ_STABLE_SHIFT_CNT) == 1) ? true : false;\r
1378 BOARD_DEBUG_LOG("stsFlag = %d\n\r",stsFlag);\r
1379 \r
1380 return BOARD_SOK;\r
1381 \r
1382 }\r
1383 \r
1384 /**\r
1385 * \brief configure indirect register read enable mode\r
1386 *\r
1387 * This function is used to enable/disable PCLK AUTO mode\r
1388 *\r
1389 * \param handle [IN] Low level driver handle\r
1390 * \param fpdModParams [IN] FPD module params\r
1391 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
1392 *\r
1393 * \return Board_STATUS in case of success or appropriate error code.\r
1394 *\r
1395 */\r
1396 Board_STATUS Board_fpdUb941SetIndirRegRdEn(void *handle,\r
1397 Board_FpdModuleObj *fpdModParams,\r
1398 uint8_t cfgMode)\r
1399 {\r
1400 Board_STATUS ret = BOARD_SOK;\r
1401 uint8_t regData = 0;\r
1402 \r
1403 if(handle == NULL)\r
1404 {\r
1405 return BOARD_INVALID_PARAM;\r
1406 }\r
1407 \r
1408 ret = Board_i2c8BitRegRd(handle,\r
1409 fpdModParams->serSlvAddr,\r
1410 BOARD_FPD_UB941_IND_ACC_CTL_REG_ADDR,\r
1411 ®Data,\r
1412 1U,\r
1413 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1414 if(ret != 0)\r
1415 {\r
1416 return BOARD_I2C_TRANSFER_FAIL;\r
1417 }\r
1418 \r
1419 regData &= ~(BOARD_FPD_UB941_IND_ACC_CTL_READ_WRITE_BIT_MASK);\r
1420 regData |= cfgMode;\r
1421 \r
1422 ret = Board_i2c8BitRegWr(handle,\r
1423 fpdModParams->serSlvAddr,\r
1424 BOARD_FPD_UB941_IND_ACC_CTL_REG_ADDR,\r
1425 ®Data,\r
1426 1U,\r
1427 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1428 if(ret != 0)\r
1429 {\r
1430 return BOARD_I2C_TRANSFER_FAIL;\r
1431 }\r
1432 \r
1433 return BOARD_SOK;\r
1434 }\r
1435 \r
1436 /**\r
1437 * \brief configure transmit mode\r
1438 *\r
1439 * This function is used to confiure the transmit mode\r
1440 *\r
1441 * \param handle [IN] Low level driver handle\r
1442 * \param fpdModParams [IN] FPD module params\r
1443 * \param operMode [IN] operMode - BOARD_FPD_UB941_AUTO_DETECT_FPD3_MODE \r
1444 * BOARD_FPD_UB941_FORCED_SINGLE_FPD3_TRANSMITTER_MODE\r
1445 * BOARD_FPD_UB941_FORCED_DUAL_FPD3_TRANSMITTER_MODE\r
1446 * BOARD_FPD_UB941_AUTO_DETECT_FPD3_SINGLE_MODE\r
1447 * BOARD_FPD_UB941_FORCED_INDEPENDENT_2_2_MODE\r
1448 * BOARD_FPD_UB941_FORCED_SPLITTER_MODE\r
1449 *\r
1450 * \return Board_STATUS in case of success or appropriate error code.\r
1451 *\r
1452 */\r
1453 Board_STATUS Board_fpdUb941Tx_Mode(void *handle,\r
1454 Board_FpdModuleObj *fpdModParams,\r
1455 uint8_t operMode)\r
1456 {\r
1457 Board_STATUS ret = BOARD_SOK;\r
1458 uint8_t regData = 0;\r
1459 \r
1460 if(handle == NULL)\r
1461 {\r
1462 return BOARD_INVALID_PARAM;\r
1463 }\r
1464 \r
1465 ret = Board_i2c8BitRegRd(handle,\r
1466 fpdModParams->serSlvAddr,\r
1467 BOARD_FPD_UB941_DUAL_CTL1_REG_ADDR,\r
1468 ®Data,\r
1469 1U,\r
1470 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1471 if(ret != 0)\r
1472 {\r
1473 return BOARD_I2C_TRANSFER_FAIL;\r
1474 }\r
1475 \r
1476 regData &= ~(BOARD_FPD_UB941_FPD3_TX_MODE_BIT_MASK);\r
1477 regData |= operMode;\r
1478 \r
1479 ret = Board_i2c8BitRegWr(handle,\r
1480 fpdModParams->serSlvAddr,\r
1481 BOARD_FPD_UB941_DUAL_CTL1_REG_ADDR,\r
1482 ®Data,\r
1483 1U,\r
1484 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1485 if(ret != 0)\r
1486 {\r
1487 return BOARD_I2C_TRANSFER_FAIL;\r
1488 }\r
1489 \r
1490 return BOARD_SOK;\r
1491 \r
1492 }\r
1493 \r
1494 /**\r
1495 * \brief configure serializer clock mode control mode\r
1496 *\r
1497 * This function is used to enable/disable PCLK AUTO mode\r
1498 *\r
1499 * \param handle [IN] Low level driver handle\r
1500 * \param fpdModParams [IN] FPD module params\r
1501 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
1502 *\r
1503 * \return Board_STATUS in case of success or appropriate error code.\r
1504 *\r
1505 */\r
1506 Board_STATUS Board_fpdUb941SetSerClkModeCtrl(void *handle,\r
1507 Board_FpdModuleObj *fpdModParams,\r
1508 uint8_t cfgMode)\r
1509 {\r
1510 Board_STATUS ret = BOARD_SOK;\r
1511 uint8_t regData = 0;\r
1512 \r
1513 if(handle == NULL)\r
1514 {\r
1515 return BOARD_INVALID_PARAM;\r
1516 }\r
1517 \r
1518 ret = Board_i2c8BitRegRd(handle,\r
1519 fpdModParams->serSlvAddr,\r
1520 BOARD_FPD_UB941_BRIDGE_CTL_REG_ADDR,\r
1521 ®Data,\r
1522 1U,\r
1523 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1524 if(ret != 0)\r
1525 {\r
1526 return BOARD_I2C_TRANSFER_FAIL;\r
1527 }\r
1528 \r
1529 regData &= ~(BOARD_FPD_UB941_DSI_CONTINUOUS_CLK_BIT_MASK);\r
1530 regData |= (cfgMode << BOARD_FPD_UB941_DSI_CONTINUOUS_CLK_SHIFT_CNT);\r
1531 \r
1532 ret = Board_i2c8BitRegWr(handle,\r
1533 fpdModParams->serSlvAddr,\r
1534 BOARD_FPD_UB941_BRIDGE_CTL_REG_ADDR,\r
1535 ®Data,\r
1536 1U,\r
1537 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1538 if(ret != 0)\r
1539 {\r
1540 return BOARD_I2C_TRANSFER_FAIL;\r
1541 }\r
1542 \r
1543 return BOARD_SOK;\r
1544 }\r
1545 \r
1546 /**\r
1547 * \brief configure clock lane mode control mode\r
1548 *\r
1549 * This function is used to enable/disable PCLK AUTO mode\r
1550 *\r
1551 * \param handle [IN] Low level driver handle\r
1552 * \param fpdModParams [IN] FPD module params\r
1553 * \param laneMode [IN] ----todo---------\r
1554 *\r
1555 * \return Board_STATUS in case of success or appropriate error code.\r
1556 *\r
1557 */\r
1558 Board_STATUS Board_fpdUb941SetDsiLaneModeCtrl(void *handle,\r
1559 Board_FpdModuleObj *fpdModParams,\r
1560 uint8_t laneMode)\r
1561 {\r
1562 Board_STATUS ret = BOARD_SOK;\r
1563 uint8_t regData = 0;\r
1564 \r
1565 if(handle == NULL)\r
1566 {\r
1567 return BOARD_INVALID_PARAM;\r
1568 }\r
1569 \r
1570 ret = Board_i2c8BitRegRd(handle,\r
1571 fpdModParams->serSlvAddr,\r
1572 BOARD_FPD_UB941_BRIDGE_CTL_REG_ADDR,\r
1573 ®Data,\r
1574 1U,\r
1575 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1576 if(ret != 0)\r
1577 {\r
1578 return BOARD_I2C_TRANSFER_FAIL;\r
1579 }\r
1580 \r
1581 regData &= ~(BOARD_FPD_UB941_BRIDGE_LANE_MODE_BIT_MASK);\r
1582 regData |= (laneMode << BOARD_FPD_UB941_BRIDGE_LANE_MODE_SHIFT_CNT);\r
1583 \r
1584 ret = Board_i2c8BitRegWr(handle,\r
1585 fpdModParams->serSlvAddr,\r
1586 BOARD_FPD_UB941_BRIDGE_CTL_REG_ADDR,\r
1587 ®Data,\r
1588 1U,\r
1589 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1590 if(ret != 0)\r
1591 {\r
1592 return BOARD_I2C_TRANSFER_FAIL;\r
1593 }\r
1594 \r
1595 return BOARD_SOK;\r
1596 }\r
1597 \r
1598 /**\r
1599 * \brief Digital Reset mode control\r
1600 *\r
1601 * Resets the entire digital block including registers\r
1602 *\r
1603 * \param handle [IN] Low level driver handle\r
1604 * \param fpdModParams [IN] FPD module params\r
1605 * \param cfgMode [IN] Config mode - Normal operation (or) Reset\r
1606 *\r
1607 * \return Board_STATUS in case of success or appropriate error code.\r
1608 *\r
1609 */\r
1610 Board_STATUS Board_fpdUb941SetDigitalRst1ModeCtrl(void *handle,\r
1611 Board_FpdModuleObj *fpdModParams,\r
1612 uint8_t cfgMode)\r
1613 {\r
1614 Board_STATUS ret = BOARD_SOK;\r
1615 uint8_t regData = 0;\r
1616 \r
1617 if(handle == NULL)\r
1618 {\r
1619 return BOARD_INVALID_PARAM;\r
1620 }\r
1621 \r
1622 ret = Board_i2c8BitRegRd(handle,\r
1623 fpdModParams->serSlvAddr,\r
1624 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
1625 ®Data,\r
1626 1U,\r
1627 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1628 if(ret != 0)\r
1629 {\r
1630 return BOARD_I2C_TRANSFER_FAIL;\r
1631 }\r
1632 \r
1633 regData &= ~(BOARD_FPD_UB941_DIGITAL_RESET1_BIT_MASK);\r
1634 regData |= (cfgMode << BOARD_FPD_UB941_DIGITAL_RESET1_SHIFT_CNT);\r
1635 \r
1636 ret = Board_i2c8BitRegWr(handle,\r
1637 fpdModParams->serSlvAddr,\r
1638 BOARD_FPD_UB941_RESET_CTL_REG_ADDR,\r
1639 ®Data,\r
1640 1U,\r
1641 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1642 if(ret != 0)\r
1643 {\r
1644 return BOARD_I2C_TRANSFER_FAIL;\r
1645 }\r
1646 \r
1647 return BOARD_SOK;\r
1648 \r
1649 }\r
1650 \r
1651 /**\r
1652 * \brief I2C bus frequency set\r
1653 *\r
1654 * This function is used for setting the deserializer I2C bus frequency\r
1655 *\r
1656 * \param handle [IN] Low level driver handle\r
1657 * \param fpdModParams [IN] FPD module params\r
1658 * \param cfgBitRate [IN] Indicates I2C serial clock frequency\r
1659 * config modes\r
1660 * BOARD_FPD_KBPS_100 - 100 KBPS\r
1661 * BOARD_FPD_KBPS_400 - 400 KBPS\r
1662 *\r
1663 * \return BOARD_SOK in case of success or appropriate error code.\r
1664 *\r
1665 */\r
1666 Board_STATUS Board_fpdUb941SetI2CBusFreq(void *handle,\r
1667 Board_FpdModuleObj *fpdModParams,\r
1668 uint8_t cfgBitRate)\r
1669 {\r
1670 Board_STATUS ret = BOARD_SOK;\r
1671 uint8_t regAddr;\r
1672 \r
1673 if(handle == NULL)\r
1674 {\r
1675 return BOARD_INVALID_PARAM;\r
1676 }\r
1677 \r
1678 regAddr = BOARD_FPD_UB941_SCL_HIGH_TIME_REG_ADDR;\r
1679 /* Configures the I2C Bit rate to 400kbit/sec */\r
1680 /* Configures the SCL High time */\r
1681 ret = Board_i2c8BitRegWr(handle,\r
1682 fpdModParams->desSlvAddr,\r
1683 regAddr,\r
1684 &cfgBitRate,\r
1685 1U,\r
1686 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1687 \r
1688 if(ret != 0)\r
1689 {\r
1690 return BOARD_I2C_TRANSFER_FAIL;\r
1691 }\r
1692 \r
1693 regAddr = BOARD_FPD_UB941_SCL_LOW_TIME_REG_ADDR;\r
1694 /* Configures the SCL High time */\r
1695 ret = Board_i2c8BitRegWr(handle,\r
1696 fpdModParams->desSlvAddr,\r
1697 regAddr,\r
1698 &cfgBitRate,\r
1699 1U,\r
1700 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1701 \r
1702 if(ret != 0)\r
1703 {\r
1704 return BOARD_I2C_TRANSFER_FAIL;\r
1705 }\r
1706 \r
1707 return BOARD_SOK;\r
1708 }\r
1709 \r
1710 /**\r
1711 * \brief Remote deserializer slave device id config\r
1712 *\r
1713 * This function is used for configuring the remote deserializer slave device ID\r
1714 *\r
1715 * \param handle [IN] Low level driver handle\r
1716 * \param fpdModParams [IN] FPD module params\r
1717 * \param fpdRmtParams [IN] Remote device module params\r
1718 *\r
1719 * \return BOARD_SOK in case of success or appropriate error code.\r
1720 *\r
1721 */\r
1722 Board_STATUS Board_fpdUb941RmtDesAliasCfg(void *handle,\r
1723 Board_FpdModuleObj *fpdModParams,\r
1724 Board_FpdRmtDevObj *fpdRmtParams)\r
1725 {\r
1726 Board_STATUS ret = BOARD_SOK;\r
1727 \r
1728 uint8_t i = 0,i2cDeviceData = 0, i2cAliasData= 0;\r
1729 uint8_t i2cDeviceAddr[8] = {BOARD_FPD_UB941_SLAVE_ID0_REG_ADDR,\r
1730 BOARD_FPD_UB941_SLAVE_ID1_REG_ADDR,\r
1731 BOARD_FPD_UB941_SLAVE_ID2_REG_ADDR,\r
1732 BOARD_FPD_UB941_SLAVE_ID3_REG_ADDR,\r
1733 BOARD_FPD_UB941_SLAVE_ID4_REG_ADDR,\r
1734 BOARD_FPD_UB941_SLAVE_ID5_REG_ADDR,\r
1735 BOARD_FPD_UB941_SLAVE_ID6_REG_ADDR,\r
1736 BOARD_FPD_UB941_SLAVE_ID7_REG_ADDR};\r
1737 \r
1738 uint8_t i2cAliasAddr[8] = {BOARD_FPD_UB941_SLAVE_ALIAS_0_REG_ADDR,\r
1739 BOARD_FPD_UB941_SLAVE_ALIAS_1_REG_ADDR,\r
1740 BOARD_FPD_UB941_SLAVE_ALIAS_2_REG_ADDR,\r
1741 BOARD_FPD_UB941_SLAVE_ALIAS_3_REG_ADDR,\r
1742 BOARD_FPD_UB941_SLAVE_ALIAS_4_REG_ADDR,\r
1743 BOARD_FPD_UB941_SLAVE_ALIAS_5_REG_ADDR,\r
1744 BOARD_FPD_UB941_SLAVE_ALIAS_6_REG_ADDR,\r
1745 BOARD_FPD_UB941_SLAVE_ALIAS_7_REG_ADDR};\r
1746 if(handle == NULL)\r
1747 {\r
1748 return BOARD_INVALID_PARAM;\r
1749 }\r
1750 while((fpdRmtParams[i].i2cDevAddr != 0x00) && (i<8))\r
1751 {\r
1752 i2cDeviceData = (fpdRmtParams[i].i2cDevAddr << 1);\r
1753 ret = Board_i2c8BitRegWr(handle,\r
1754 fpdModParams->serSlvAddr,\r
1755 i2cDeviceAddr[i],\r
1756 &i2cDeviceData,\r
1757 1U,\r
1758 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1759 \r
1760 if(ret != 0)\r
1761 {\r
1762 return BOARD_I2C_TRANSFER_FAIL;\r
1763 }\r
1764 \r
1765 i2cAliasData = (fpdRmtParams[i].i2cDevAliasAddr << 1);\r
1766 ret = Board_i2c8BitRegWr(handle,\r
1767 fpdModParams->serSlvAddr,\r
1768 i2cAliasAddr[i],\r
1769 &i2cAliasData,\r
1770 1U,\r
1771 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1772 \r
1773 if(ret != 0)\r
1774 {\r
1775 return BOARD_I2C_TRANSFER_FAIL;\r
1776 }\r
1777 i++;\r
1778 }\r
1779 return BOARD_SOK;\r
1780 }\r
1781 \r
1782 /**\r
1783 * \brief Inverted color pattern select\r
1784 *\r
1785 * This function is used to initialize the ub941 DSI module.\r
1786 *\r
1787 * \param handle [IN] Low level driver handle\r
1788 * \param fpdModParams [IN] FPD module params\r
1789 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
1790 *\r
1791 * \return Board_STATUS in case of success or appropriate error code.\r
1792 *\r
1793 */\r
1794 Board_STATUS Board_fpdUb941SetInvtdClrPattEn(void *handle,\r
1795 Board_FpdModuleObj *fpdModParams,\r
1796 uint8_t cfgMode)\r
1797 {\r
1798 Board_STATUS ret = BOARD_SOK;\r
1799 uint8_t regData = 0;\r
1800 \r
1801 if(handle == NULL)\r
1802 {\r
1803 return BOARD_INVALID_PARAM;\r
1804 }\r
1805 \r
1806 ret = Board_i2c8BitRegRd(handle,\r
1807 fpdModParams->serSlvAddr,\r
1808 BOARD_FPD_UB941_PGCFG_PGCFG_P1_REG_ADDR,\r
1809 ®Data,\r
1810 1U,\r
1811 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1812 if(ret != 0)\r
1813 {\r
1814 return BOARD_I2C_TRANSFER_FAIL;\r
1815 }\r
1816 \r
1817 regData &= ~(BOARD_FPD_UB941_INVERTED_COLOR_PATTERN_BIT_MASK);\r
1818 regData |= (cfgMode << BOARD_FPD_UB941_INVERTED_COLOR_PATTERN_SHIFT_CNT);\r
1819 \r
1820 ret = Board_i2c8BitRegWr(handle,\r
1821 fpdModParams->serSlvAddr,\r
1822 BOARD_FPD_UB941_PGCFG_PGCFG_P1_REG_ADDR,\r
1823 ®Data,\r
1824 1U,\r
1825 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1826 if(ret != 0)\r
1827 {\r
1828 return BOARD_I2C_TRANSFER_FAIL;\r
1829 }\r
1830 \r
1831 return BOARD_SOK;\r
1832 }\r
1833 \r
1834 /**\r
1835 * \brief configure auto scroll for pattern\r
1836 *\r
1837 * This function is used to enable/disable pass through mode\r
1838 *\r
1839 * \param handle [IN] Low level driver handle\r
1840 * \param fpdModParams [IN] FPD module params\r
1841 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
1842 *\r
1843 * \return Board_STATUS in case of success or appropriate error code.\r
1844 *\r
1845 */\r
1846 Board_STATUS Board_fpdUb941SetAutoScrollPattEn(void *handle,\r
1847 Board_FpdModuleObj *fpdModParams,\r
1848 uint8_t cfgMode)\r
1849 {\r
1850 Board_STATUS ret = BOARD_SOK;\r
1851 uint8_t regData = 0;\r
1852 \r
1853 if(handle == NULL)\r
1854 {\r
1855 return BOARD_INVALID_PARAM;\r
1856 }\r
1857 \r
1858 ret = Board_i2c8BitRegRd(handle,\r
1859 fpdModParams->serSlvAddr,\r
1860 BOARD_FPD_UB941_PGCFG_PGCFG_P1_REG_ADDR,\r
1861 ®Data,\r
1862 1U,\r
1863 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1864 if(ret != 0)\r
1865 {\r
1866 return BOARD_I2C_TRANSFER_FAIL;\r
1867 }\r
1868 \r
1869 regData &= ~(BOARD_FPD_UB941_AUTO_SCROLL_PATTERN_BIT_MASK);\r
1870 regData |= cfgMode;\r
1871 \r
1872 ret = Board_i2c8BitRegWr(handle,\r
1873 fpdModParams->serSlvAddr,\r
1874 BOARD_FPD_UB941_PGCFG_PGCFG_P1_REG_ADDR,\r
1875 ®Data,\r
1876 1U,\r
1877 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1878 if(ret != 0)\r
1879 {\r
1880 return BOARD_I2C_TRANSFER_FAIL;\r
1881 }\r
1882 \r
1883 return BOARD_SOK;\r
1884 }\r
1885 \r
1886 /**\r
1887 * \brief configure color bars\r
1888 *\r
1889 * This function is used to enable/disable pass through mode\r
1890 *\r
1891 * \param handle [IN] Low level driver handle\r
1892 * \param fpdModParams [IN] FPD module params\r
1893 * \param patternSel [IN] Indicates the pattern to be displayed:\r
1894 * BOARD_FPD_UB941_PATTERN_CHECKERBOARD\r
1895 * BOARD_FPD_UB941_PATTERN_WHITE_BLACK\r
1896 * BOARD_FPD_UB941_PATTERN_BLACK_WHITE\r
1897 * BOARD_FPD_UB941_PATTERN_RED_CYAN\r
1898 * BOARD_FPD_UB941_PATTERN_GREEN_MAGNETA\r
1899 * BOARD_FPD_UB941_PATTERN_BLUE_YELLOW\r
1900 * BOARD_FPD_UB941_PATTERN_HORIZONTALLY_SCALE_BLK2WHT_WHT2BLK\r
1901 * BOARD_FPD_UB941_PATTERN_HORIZONTALLY_SCALE_BLK2RED_WHT2CYN\r
1902 * BOARD_FPD_UB941_PATTERN_HORIZONTALLY_SCALE_BLK2GRN_WHT2MAG\r
1903 * BOARD_FPD_UB941_PATTERN_HORIZONTALLY_SCALE_BLK2BLU_WHT2YEL\r
1904 * BOARD_FPD_UB941_PATTERN_VERTICALLY_SCALE_BLK2WHT_WHT2BLK\r
1905 * BOARD_FPD_UB941_PATTERN_VERTICALLY_SCALE_BLK2RED_WHT2CYN\r
1906 * BOARD_FPD_UB941_PATTERN_VERTICALLY_SCALE_BLK2GRN_WHT2MAG\r
1907 * BOARD_FPD_UB941_PATTERN_VERTICALLY_SCALE_BLK2BLU_WHT2YEL\r
1908 * BOARD_FPD_UB941_PATTERN_CUSTOM_COLORS\r
1909 * BOARD_FPD_UB941_PATTERN_VCOM\r
1910 * \return Board_STATUS in case of success or appropriate error code.\r
1911 *\r
1912 */\r
1913 Board_STATUS Board_fpdUb941SelPatt(void *handle,\r
1914 Board_FpdModuleObj *fpdModParams,\r
1915 uint8_t patternSel)\r
1916 {\r
1917 Board_STATUS ret = BOARD_SOK;\r
1918 uint8_t regData = 0;\r
1919 \r
1920 if(handle == NULL)\r
1921 {\r
1922 return BOARD_INVALID_PARAM;\r
1923 }\r
1924 \r
1925 ret = Board_i2c8BitRegRd(handle,\r
1926 fpdModParams->serSlvAddr,\r
1927 BOARD_FPD_UB941_PGCTL_PGCTL_P1_REG_ADDR,\r
1928 ®Data,\r
1929 1U,\r
1930 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1931 if(ret != 0)\r
1932 {\r
1933 return BOARD_I2C_TRANSFER_FAIL;\r
1934 }\r
1935 \r
1936 regData &= ~(BOARD_FPD_UB941_PATTERN_SEL_BIT_MASK);\r
1937 regData |= (patternSel << BOARD_FPD_UB941_PATTERN_SEL_SHIFT_CNT);\r
1938 \r
1939 ret = Board_i2c8BitRegWr(handle,\r
1940 fpdModParams->serSlvAddr,\r
1941 BOARD_FPD_UB941_PGCTL_PGCTL_P1_REG_ADDR,\r
1942 ®Data,\r
1943 1U,\r
1944 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1945 if(ret != 0)\r
1946 {\r
1947 return BOARD_I2C_TRANSFER_FAIL;\r
1948 }\r
1949 \r
1950 /*enabling colors bars*/\r
1951 ret = Board_fpdUb941ColorBarEn(handle,\r
1952 fpdModParams,\r
1953 BOARD_FPD_MODE_ENABLE);\r
1954 if(ret != 0)\r
1955 {\r
1956 BOARD_DEBUG_LOG("Enabling Color Bars failed\n");\r
1957 return -1;\r
1958 } \r
1959 \r
1960 return BOARD_SOK;\r
1961 }\r
1962 \r
1963 /**\r
1964 * \brief configure pattern display\r
1965 *\r
1966 * This function is used to enable/disable pass through mode\r
1967 *\r
1968 * \param handle [IN] Low level driver handle\r
1969 * \param fpdModParams [IN] FPD module params\r
1970 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
1971 *\r
1972 * \return Board_STATUS in case of success or appropriate error code.\r
1973 *\r
1974 */\r
1975 Board_STATUS Board_fpdUb941PattGenEn(void *handle,\r
1976 Board_FpdModuleObj *fpdModParams,\r
1977 uint8_t cfgMode)\r
1978 {\r
1979 Board_STATUS ret = BOARD_SOK;\r
1980 uint8_t regData = 0;\r
1981 \r
1982 if(handle == NULL)\r
1983 {\r
1984 return BOARD_INVALID_PARAM;\r
1985 }\r
1986 \r
1987 ret = Board_i2c8BitRegRd(handle,\r
1988 fpdModParams->serSlvAddr,\r
1989 BOARD_FPD_UB941_PGCTL_PGCTL_P1_REG_ADDR,\r
1990 ®Data,\r
1991 1U,\r
1992 BOARD_I2C_TRANSACTION_TIMEOUT);\r
1993 if(ret != 0)\r
1994 {\r
1995 return BOARD_I2C_TRANSFER_FAIL;\r
1996 }\r
1997 \r
1998 regData &= ~(BOARD_FPD_UB941_PATTERN_GENERATOR_BIT_MASK);\r
1999 regData |= cfgMode;\r
2000 \r
2001 ret = Board_i2c8BitRegWr(handle,\r
2002 fpdModParams->serSlvAddr,\r
2003 BOARD_FPD_UB941_PGCTL_PGCTL_P1_REG_ADDR,\r
2004 ®Data,\r
2005 1U,\r
2006 BOARD_I2C_TRANSACTION_TIMEOUT);\r
2007 if(ret != 0)\r
2008 {\r
2009 return BOARD_I2C_TRANSFER_FAIL;\r
2010 }\r
2011 \r
2012 return BOARD_SOK;\r
2013 }\r
2014 /**\r
2015 * \brief configure color bars\r
2016 *\r
2017 * This function is used to enable/disable pass through mode\r
2018 *\r
2019 * \param handle [IN] Low level driver handle\r
2020 * \param fpdModParams [IN] FPD module params\r
2021 * \param cfgMode [IN] Config mode - Indicates Enable or Disable\r
2022 *\r
2023 * \return Board_STATUS in case of success or appropriate error code.\r
2024 *\r
2025 */\r
2026 Board_STATUS Board_fpdUb941ColorBarEn(void *handle,\r
2027 Board_FpdModuleObj *fpdModParams,\r
2028 uint8_t cfgMode)\r
2029 {\r
2030 Board_STATUS ret = BOARD_SOK;\r
2031 uint8_t regData = 0;\r
2032 \r
2033 if(handle == NULL)\r
2034 {\r
2035 return BOARD_INVALID_PARAM;\r
2036 }\r
2037 \r
2038 ret = Board_i2c8BitRegRd(handle,\r
2039 fpdModParams->serSlvAddr,\r
2040 BOARD_FPD_UB941_PGCTL_PGCTL_P1_REG_ADDR,\r
2041 ®Data,\r
2042 1U,\r
2043 BOARD_I2C_TRANSACTION_TIMEOUT);\r
2044 if(ret != 0)\r
2045 {\r
2046 return BOARD_I2C_TRANSFER_FAIL;\r
2047 }\r
2048 \r
2049 regData &= ~(BOARD_FPD_UB941_COLORS_BAR_PATTERN_SEL_BIT_MASK);\r
2050 regData |= (cfgMode << BOARD_FPD_UB941_COLORS_BAR_PATTERN_SEL_SHIFT_CNT);\r
2051 \r
2052 ret = Board_i2c8BitRegWr(handle,\r
2053 fpdModParams->serSlvAddr,\r
2054 BOARD_FPD_UB941_PGCTL_PGCTL_P1_REG_ADDR,\r
2055 ®Data,\r
2056 1U,\r
2057 BOARD_I2C_TRANSACTION_TIMEOUT);\r
2058 if(ret != 0)\r
2059 {\r
2060 return BOARD_I2C_TRANSFER_FAIL;\r
2061 }\r
2062 \r
2063 return BOARD_SOK;\r
2064 }\r
2065 \r
2066 /**\r
2067 * \brief Get ub941 i2c address.\r
2068 *\r
2069 * This function is used to get the I2C address and\r
2070 * channel details of UB960 module.\r
2071 *\r
2072 * \param domain [IN] I2C instance domain\r
2073 * \param chNum [IN] buffer to hold i2c channel number\r
2074 * \param i2cAddr [IN] buffer to hold i2c address\r
2075 *\r
2076 * \return BOARD_SOK in case of success or appropriate error code.\r
2077 */\r
2078 void Board_fpdUb941GetI2CAddr(uint8_t *domain,\r
2079 uint8_t *chNum,\r
2080 uint8_t *i2cAddr)\r
2081 {\r
2082 *domain = BOARD_SOC_DOMAIN_MAIN;\r
2083 *chNum = 1U;\r
2084 *i2cAddr = 0x16;\r
2085 }\r
2086 \r
2087 \r
2088 \r