2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 Copyright (c) 2011 Synaptics, Inc.
5 Permission is hereby granted, free of charge, to any person obtaining a copy of
6 this software and associated documentation files (the "Software"), to deal in
7 the Software without restriction, including without limitation the rights to use,
8 copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
9 Software, and to permit persons to whom the Software is furnished to do so,
10 subject to the following conditions:
12 The above copyright notice and this permission notice shall be included in all
13 copies or substantial portions of the Software.
15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
27 #include "RefCode_PDTScan.h"
32 static unsigned char ImageBuffer
[CFG_F54_TXCOUNT
*CFG_F54_RXCOUNT
*2];
33 static short ImageArray
[CFG_F54_RXCOUNT
][CFG_F54_RXCOUNT
];
34 static char buf
[3000] = {0};
38 unsigned char F54_RxToRxReport(void)
42 unsigned char ImageBuffer
[CFG_F54_TXCOUNT
*CFG_F54_RXCOUNT
*2];
43 short ImageArray
[CFG_F54_RXCOUNT
][CFG_F54_RXCOUNT
];
45 //char Result[CFG_F54_RXCOUNT][CFG_F54_RXCOUNT];
48 short DiagonalLowerLimit
= 900;
49 short DiagonalUpperLimit
= 1100;
50 short OthersLowerLimit
= -100;
51 short OthersUpperLimit
= 100;
56 unsigned char command
;
59 memset(buf
, 0, sizeof(buf
));
60 ret
= sprintf(buf
, "\nBin #: 7 Name: Receiver To Receiver Short Test\n");
61 ret
+= sprintf(buf
+ret
, "\n\t");
63 printk("\nBin #: 7 Name: Receiver To Receiver Short Test\n");
66 for (j
= 0; j
< numberOfRx
; j
++)
68 ret
+= sprintf(buf
+ret
, "R%d\t", j
);
74 ret
+= sprintf(buf
+ret
, "\n");
79 length
= numberOfRx
* numberOfTx
*2;
81 // Set report mode to run Rx-to-Rx 1st data
83 writeRMI(F54_Data_Base
, &command
, 1);
87 writeRMI(F54_CBCSettings
, &command
, 1);
91 writeRMI(NoiseMitigation
, &command
, 1);
95 writeRMI(F54_Command_Base
, &command
, 1);
98 delayMS(1); //wait 1ms
99 readRMI(F54_Command_Base
, &command
, 1);
100 } while (command
!= 0x00);
103 writeRMI(F54_Command_Base
, &command
, 1);
106 delayMS(1); //wait 1ms
107 readRMI(F54_Command_Base
, &command
, 1);
108 } while (command
!= 0x00);
111 // writeRMI(0x0113, &command, 1);
114 writeRMI(F54_Data_LowIndex
, &command
, 1);
115 writeRMI(F54_Data_HighIndex
, &command
, 1);
117 // Set the GetReport bit to run Tx-to-Tx
119 writeRMI(F54_Command_Base
, &command
, 1);
121 // Wait until the command is completed
123 delayMS(1); //wait 1ms
124 readRMI(F54_Command_Base
, &command
, 1);
125 } while (command
!= 0x00);
127 //readRMI(F54_Data_Buffer, &ImageBuffer[0], length);
128 longReadRMI(F54_Data_Buffer
, &ImageBuffer
[0], length
);
131 for (i
= 0; i
< numberOfTx
; i
++)
133 for (j
= 0; j
< numberOfRx
; j
++)
135 ImageArray
[i
][j
] = (ImageBuffer
[k
] | (ImageBuffer
[k
+1] << 8));
140 // Set report mode to run Rx-to-Rx 2nd data
141 length
= numberOfRx
* (numberOfRx
-numberOfTx
) * 2;
143 writeRMI(F54_Data_Base
, &command
, 1);
146 writeRMI(F54_Data_LowIndex
, &command
, 1);
147 writeRMI(F54_Data_HighIndex
, &command
, 1);
149 // Set the GetReport bit to run Tx-to-Tx
151 writeRMI(F54_Command_Base
, &command
, 1);
153 // Wait until the command is completed
155 delayMS(1); //wait 1ms
156 readRMI(F54_Command_Base
, &command
, 1);
157 } while (command
!= 0x00);
159 //readRMI(F54_Data_Buffer, &ImageBuffer[0], length);
160 longReadRMI(F54_Data_Buffer
, &ImageBuffer
[0], length
);
163 for (i
= 0; i
< (numberOfRx
-numberOfTx
); i
++)
165 for (j
= 0; j
< numberOfRx
; j
++)
167 ImageArray
[numberOfTx
+i
][j
] = ImageBuffer
[k
] | (ImageBuffer
[k
+1] << 8);
173 // Check against test limits
174 printk("\nRxToRx Short Test Result :\n");
175 for (i = 0; i < numberOfRx; i++)
177 for (j = 0; j < numberOfRx; j++)
181 if((ImageArray[i][j] <= DiagonalUpperLimit) && (ImageArray[i][j] >= DiagonalUpperLimit))
182 Result[i][j] = 'P'; //Pass
184 Result[i][j] = 'F'; //Fail
185 //printk("%3d", ImageArray[i][j]);
189 if(ImageArray[i][j] <= OthersUpperLimit)
190 Result[i][j] = 'P'; //Fail
192 Result[i][j] = 'F'; //Fail
194 printk("%4d", ImageArray[i][j]);
201 for (i
= 0; i
< numberOfRx
; i
++)
204 ret
+= sprintf(buf
+ret
, "R%d\t", i
);
208 for (j
= 0; j
< numberOfRx
; j
++)
212 if((ImageArray
[i
][j
] <= DiagonalUpperLimit
) && (ImageArray
[i
][j
] >= DiagonalLowerLimit
))
216 ret
+= sprintf(buf
+ret
, "%d\t", ImageArray
[i
][j
]);
218 printk("%d\t", ImageArray
[i
][j
]);
224 ret
+= sprintf(buf
+ret
, "%d(*)\t", ImageArray
[i
][j
]);
226 printk("%d(*)\t", ImageArray
[i
][j
]);
232 if((ImageArray
[i
][j
] <= OthersUpperLimit
) && (ImageArray
[i
][j
] >= OthersLowerLimit
))
236 ret
+= sprintf(buf
+ret
, "%d\t", ImageArray
[i
][j
]);
238 printk("%d\t", ImageArray
[i
][j
]);
244 ret
+= sprintf(buf
+ret
, "%d(*)\t", ImageArray
[i
][j
]);
246 printk("%d(*)\t", ImageArray
[i
][j
]);
252 ret
+= sprintf(buf
+ret
, "\n");
260 writeRMI(F54_Command_Base
, &command
, 1);
263 delayMS(1); //wait 1ms
264 readRMI(F54_Command_Base
, &command
, 1);
265 } while (command
!= 0x00);
267 //enable all the interrupts
271 writeRMI(F01_Cmd_Base
, &command
, 1);
273 readRMI(F01_Data_Base
+1, &command
, 1); //Read Interrupt status register to Interrupt line goes to high
275 //printk("Result = %d, Rx*Rx= %d\n", Result, numberOfRx * numberOfRx);
276 if(Result
== numberOfRx
* numberOfRx
)
279 ret
+= sprintf(buf
+ret
, "Test Result: Pass\n");
282 printk("Test Result: Pass\n");
289 ret
+= sprintf(buf
+ret
, "Test Result: Fail\n");
292 printk("Test Result: Fail\n");
298 int F54_GetRxToRxReport(char *buf
)
303 short DiagonalLowerLimit
= 900;
304 short DiagonalUpperLimit
= 1100;
305 short OthersLowerLimit
= -100;
306 short OthersUpperLimit
= 100;
311 unsigned char command
;
314 ret
+= sprintf(buf
+ret
, "Info: Rx=%d\n", numberOfRx
);
316 length
= numberOfRx
* numberOfTx
*2;
318 // Set report mode to run Rx-to-Rx 1st data
320 writeRMI(F54_Data_Base
, &command
, 1);
324 writeRMI(F54_CBCSettings
, &command
, 1);
328 writeRMI(NoiseMitigation
, &command
, 1);
332 writeRMI(F54_Command_Base
, &command
, 1);
336 if(++waitcount
> 500)
338 pr_info("%s[%d], command = %d\n", __func__
, __LINE__
, command
);
341 delayMS(1); //wait 1ms
342 readRMI(F54_Command_Base
, &command
, 1);
343 } while (command
!= 0x00);
346 writeRMI(F54_Command_Base
, &command
, 1);
350 if(++waitcount
> 1000)
352 pr_info("%s[%d], command = %d\n", __func__
, __LINE__
, command
);
355 delayMS(1); //wait 1ms
356 readRMI(F54_Command_Base
, &command
, 1);
357 } while (command
!= 0x00);
360 // writeRMI(0x0113, &command, 1);
363 writeRMI(F54_Data_LowIndex
, &command
, 1);
364 writeRMI(F54_Data_HighIndex
, &command
, 1);
366 // Set the GetReport bit to run Tx-to-Tx
368 writeRMI(F54_Command_Base
, &command
, 1);
370 // Wait until the command is completed
373 if(++waitcount
> 500)
375 pr_info("%s[%d], command = %d\n", __func__
, __LINE__
, command
);
378 delayMS(1); //wait 1ms
379 readRMI(F54_Command_Base
, &command
, 1);
380 } while (command
!= 0x00);
382 //readRMI(F54_Data_Buffer, &ImageBuffer[0], length);
383 longReadRMI(F54_Data_Buffer
, &ImageBuffer
[0], length
);
386 for (i
= 0; i
< numberOfTx
; i
++)
388 for (j
= 0; j
< numberOfRx
; j
++)
390 ImageArray
[i
][j
] = (ImageBuffer
[k
] | (ImageBuffer
[k
+1] << 8));
395 // Set report mode to run Rx-to-Rx 2nd data
396 length
= numberOfRx
* (numberOfRx
-numberOfTx
) * 2;
398 writeRMI(F54_Data_Base
, &command
, 1);
401 writeRMI(F54_Data_LowIndex
, &command
, 1);
402 writeRMI(F54_Data_HighIndex
, &command
, 1);
404 // Set the GetReport bit to run Tx-to-Tx
406 writeRMI(F54_Command_Base
, &command
, 1);
408 // Wait until the command is completed
411 if(++waitcount
> 500)
413 pr_info("%s[%d], command = %d\n", __func__
, __LINE__
, command
);
416 delayMS(1); //wait 1ms
417 readRMI(F54_Command_Base
, &command
, 1);
418 } while (command
!= 0x00);
420 //readRMI(F54_Data_Buffer, &ImageBuffer[0], length);
421 longReadRMI(F54_Data_Buffer
, &ImageBuffer
[0], length
);
424 for (i
= 0; i
< (numberOfRx
-numberOfTx
); i
++)
426 for (j
= 0; j
< numberOfRx
; j
++)
428 ImageArray
[numberOfTx
+i
][j
] = ImageBuffer
[k
] | (ImageBuffer
[k
+1] << 8);
434 // Check against test limits
435 printk("\nRxToRx Short Test Result :\n");
436 for (i = 0; i < numberOfRx; i++)
438 for (j = 0; j < numberOfRx; j++)
442 if((ImageArray[i][j] <= DiagonalUpperLimit) && (ImageArray[i][j] >= DiagonalUpperLimit))
443 Result[i][j] = 'P'; //Pass
445 Result[i][j] = 'F'; //Fail
446 //printk("%3d", ImageArray[i][j]);
450 if(ImageArray[i][j] <= OthersUpperLimit)
451 Result[i][j] = 'P'; //Fail
453 Result[i][j] = 'F'; //Fail
455 printk("%4d", ImageArray[i][j]);
462 for (i
= 0; i
< numberOfRx
; i
++)
464 for (j
= 0; j
< numberOfRx
; j
++)
468 if((ImageArray
[i
][j
] <= DiagonalUpperLimit
) && (ImageArray
[i
][j
] >= DiagonalLowerLimit
))
471 ret
+= sprintf(buf
+ret
, "%d", ImageArray
[i
][j
]);
475 ret
+= sprintf(buf
+ret
, "%d(*)", ImageArray
[i
][j
]);
480 if((ImageArray
[i
][j
] <= OthersUpperLimit
) && (ImageArray
[i
][j
] >= OthersLowerLimit
))
483 ret
+= sprintf(buf
+ret
, "%d", ImageArray
[i
][j
]);
487 ret
+= sprintf(buf
+ret
, "%d(*)", ImageArray
[i
][j
]);
491 if(j
< (numberOfRx
-1))
492 ret
+= sprintf(buf
+ret
, " ");
494 ret
+= sprintf(buf
+ret
, "\n");
499 writeRMI(F54_Command_Base
, &command
, 1);
503 if(++waitcount
> 500)
505 pr_info("%s[%d], command = %d\n", __func__
, __LINE__
, command
);
508 delayMS(1); //wait 1ms
509 readRMI(F54_Command_Base
, &command
, 1);
510 } while (command
!= 0x00);
513 //printk("Result = %d, Rx*Rx= %d\n", Result, numberOfRx * numberOfRx);
514 if(Result
== numberOfRx
* numberOfRx
)
516 ret
+= sprintf(buf
+ret
, "RESULT: Pass\n");
520 ret
+= sprintf(buf
+ret
, "RESULT: Fail\n");
523 //enable all the interrupts
527 writeRMI(F01_Cmd_Base
, &command
, 1);
529 readRMI(F01_Data_Base
+1, &command
, 1); //Read Interrupt status register to Interrupt line goes to high