aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorIan Armstrong <ian@iarmst.demon.co.uk>2007-02-03 04:37:25 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2007-02-21 10:35:15 -0500
commit32ec5332f987435d42371c1c47e310c9cc211cf7 (patch)
tree8bf8bfe0031590df0ce68c4c5c69f5c00b9d50ab /Documentation
parentfaeb4ab38f6fec62d50a023e1778d13e73a0b088 (diff)
V4L/DVB (5184): Add cx23415 decoder register documentation
Many thanks to Ian Armstrong for figuring out what all these registers do. Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/video4linux/cx2341x/fw-decoder-regs.txt815
1 files changed, 815 insertions, 0 deletions
diff --git a/Documentation/video4linux/cx2341x/fw-decoder-regs.txt b/Documentation/video4linux/cx2341x/fw-decoder-regs.txt
new file mode 100644
index 000000000000..db2366c634e8
--- /dev/null
+++ b/Documentation/video4linux/cx2341x/fw-decoder-regs.txt
@@ -0,0 +1,815 @@
1PVR350 Video decoder registers 0x02002800 -> 0x02002B00
2=======================================================
3
4This list has been worked out through trial and error. There will be mistakes
5and omissions. Some registers have no obvious effect so it's hard to say what
6they do, while others interact with each other, or require a certain load
7sequence. Horizontal filter setup is one example, with six registers working
8in unison and requiring a certain load sequence to correctly configure. The
9indexed colour palette is much easier to set at just two registers, but again
10it requires a certain load sequence.
11
12Some registers are fussy about what they are set to. Load in a bad value & the
13decoder will fail. A firmware reload will often recover, but sometimes a reset
14is required. For registers containing size information, setting them to 0 is
15generally a bad idea. For other control registers i.e. 2878, you'll only find
16out what values are bad when it hangs.
17
18--------------------------------------------------------------------------------
192800
20 bit 0
21 Decoder enable
22 0 = disable
23 1 = enable
24--------------------------------------------------------------------------------
252804
26 bits 0:31
27 Decoder horizontal Y alias register 1
28---------------
292808
30 bits 0:31
31 Decoder horizontal Y alias register 2
32---------------
33280C
34 bits 0:31
35 Decoder horizontal Y alias register 3
36---------------
372810
38 bits 0:31
39 Decoder horizontal Y alias register 4
40---------------
412814
42 bits 0:31
43 Decoder horizontal Y alias register 5
44---------------
452818
46 bits 0:31
47 Decoder horizontal Y alias trigger
48
49 These six registers control the horizontal aliasing filter for the Y plane.
50 The first five registers must all be loaded before accessing the trigger
51 (2818), as this register actually clocks the data through for the first
52 five.
53
54 To correctly program set the filter, this whole procedure must be done 16
55 times. The actual register contents are copied from a lookup-table in the
56 firmware which contains 4 different filter settings.
57
58--------------------------------------------------------------------------------
59281C
60 bits 0:31
61 Decoder horizontal UV alias register 1
62---------------
632820
64 bits 0:31
65 Decoder horizontal UV alias register 2
66---------------
672824
68 bits 0:31
69 Decoder horizontal UV alias register 3
70---------------
712828
72 bits 0:31
73 Decoder horizontal UV alias register 4
74---------------
75282C
76 bits 0:31
77 Decoder horizontal UV alias register 5
78---------------
792830
80 bits 0:31
81 Decoder horizontal UV alias trigger
82
83 These six registers control the horizontal aliasing for the UV plane.
84 Operation is the same as the Y filter, with 2830 being the trigger
85 register.
86
87--------------------------------------------------------------------------------
882834
89 bits 0:15
90 Decoder Y source width in pixels
91
92 bits 16:31
93 Decoder Y destination width in pixels
94---------------
952838
96 bits 0:15
97 Decoder UV source width in pixels
98
99 bits 16:31
100 Decoder UV destination width in pixels
101
102 NOTE: For both registers, the resulting image must be fully visible on
103 screen. If the image exceeds the right edge both the source and destination
104 size must be adjusted to reflect the visible portion. For the source width,
105 you must take into account the scaling when calculating the new value.
106--------------------------------------------------------------------------------
107
108283C
109 bits 0:31
110 Decoder Y horizontal scaling
111 Normally = Reg 2854 >> 2
112---------------
1132840
114 bits 0:31
115 Decoder ?? unknown - horizontal scaling
116 Usually 0x00080514
117---------------
1182844
119 bits 0:31
120 Decoder UV horizontal scaling
121 Normally = Reg 2854 >> 2
122---------------
1232848
124 bits 0:31
125 Decoder ?? unknown - horizontal scaling
126 Usually 0x00100514
127---------------
128284C
129 bits 0:31
130 Decoder ?? unknown - Y plane
131 Usually 0x00200020
132---------------
1332850
134 bits 0:31
135 Decoder ?? unknown - UV plane
136 Usually 0x00200020
137---------------
1382854
139 bits 0:31
140 Decoder 'master' value for horizontal scaling
141---------------
1422858
143 bits 0:31
144 Decoder ?? unknown
145 Usually 0
146---------------
147285C
148 bits 0:31
149 Decoder ?? unknown
150 Normally = Reg 2854 >> 1
151---------------
1522860
153 bits 0:31
154 Decoder ?? unknown
155 Usually 0
156---------------
1572864
158 bits 0:31
159 Decoder ?? unknown
160 Normally = Reg 2854 >> 1
161---------------
1622868
163 bits 0:31
164 Decoder ?? unknown
165 Usually 0
166
167 Most of these registers either control horizontal scaling, or appear linked
168 to it in some way. Register 2854 contains the 'master' value & the other
169 registers can be calculated from that one. You must also remember to
170 correctly set the divider in Reg 2874.
171
172 To enlarge:
173 Reg 2854 = (source_width * 0x00200000) / destination_width
174 Reg 2874 = No divide
175
176 To reduce from full size down to half size:
177 Reg 2854 = (source_width/2 * 0x00200000) / destination width
178 Reg 2874 = Divide by 2
179
180 To reduce from half size down to quarter size:
181 Reg 2854 = (source_width/4 * 0x00200000) / destination width
182 Reg 2874 = Divide by 4
183
184 The result is always rounded up.
185
186--------------------------------------------------------------------------------
187286C
188 bits 0:15
189 Decoder horizontal Y buffer offset
190
191 bits 15:31
192 Decoder horizontal UV buffer offset
193
194 Offset into the video image buffer. If the offset is gradually incremented,
195 the on screen image will move left & wrap around higher up on the right.
196
197--------------------------------------------------------------------------------
1982870
199 bits 0:15
200 Decoder horizontal Y output offset
201
202 bits 16:31
203 Decoder horizontal UV output offset
204
205 Offsets the actual video output. Controls output alignment of the Y & UV
206 planes. The higher the value, the greater the shift to the left. Use
207 reg 2890 to move the image right.
208
209--------------------------------------------------------------------------------
2102874
211 bits 0:1
212 Decoder horizontal Y output size divider
213 00 = No divide
214 01 = Divide by 2
215 10 = Divide by 3
216
217 bits 4:5
218 Decoder horizontal UV output size divider
219 00 = No divide
220 01 = Divide by 2
221 10 = Divide by 3
222
223 bit 8
224 Decoder ?? unknown
225 0 = Normal
226 1 = Affects video output levels
227
228 bit 16
229 Decoder ?? unknown
230 0 = Normal
231 1 = Disable horizontal filter
232
233--------------------------------------------------------------------------------
2342878
235 bit 0
236 ?? unknown
237
238 bit 1
239 osd on/off
240 0 = osd off
241 1 = osd on
242
243 bit 2
244 Decoder + osd video timing
245 0 = NTSC
246 1 = PAL
247
248 bits 3:4
249 ?? unknown
250
251 bit 5
252 Decoder + osd
253 Swaps upper & lower fields
254
255--------------------------------------------------------------------------------
256287C
257 bits 0:10
258 Decoder & osd ?? unknown
259 Moves entire screen horizontally. Starts at 0x005 with the screen
260 shifted heavily to the right. Incrementing in steps of 0x004 will
261 gradually shift the screen to the left.
262
263 bits 11:31
264 ?? unknown
265
266 Normally contents are 0x00101111 (NTSC) or 0x1010111d (PAL)
267
268--------------------------------------------------------------------------------
2692880 -------- ?? unknown
2702884 -------- ?? unknown
271--------------------------------------------------------------------------------
2722888
273 bit 0
274 Decoder + osd ?? unknown
275 0 = Normal
276 1 = Misaligned fields (Correctable through 289C & 28A4)
277
278 bit 4
279 ?? unknown
280
281 bit 8
282 ?? unknown
283
284 Warning: Bad values will require a firmware reload to recover.
285 Known to be bad are 0x000,0x011,0x100,0x111
286--------------------------------------------------------------------------------
287288C
288 bits 0:15
289 osd ?? unknown
290 Appears to affect the osd position stability. The higher the value the
291 more unstable it becomes. Decoder output remains stable.
292
293 bits 16:31
294 osd ?? unknown
295 Same as bits 0:15
296
297--------------------------------------------------------------------------------
2982890
299 bits 0:11
300 Decoder output horizontal offset.
301
302 Horizontal offset moves the video image right. A small left shift is
303 possible, but it's better to use reg 2870 for that due to its greater
304 range.
305
306 NOTE: Video corruption will occur if video window is shifted off the right
307 edge. To avoid this read the notes for 2834 & 2838.
308--------------------------------------------------------------------------------
3092894
310 bits 0:23
311 Decoder output video surround colour.
312
313 Contains the colour (in yuv) used to fill the screen when the video is
314 running in a window.
315--------------------------------------------------------------------------------
3162898
317 bits 0:23
318 Decoder video window colour
319 Contains the colour (in yuv) used to fill the video window when the
320 video is turned off.
321
322 bit 24
323 Decoder video output
324 0 = Video on
325 1 = Video off
326
327 bit 28
328 Decoder plane order
329 0 = Y,UV
330 1 = UV,Y
331
332 bit 29
333 Decoder second plane byte order
334 0 = Normal (UV)
335 1 = Swapped (VU)
336
337 In normal usage, the first plane is Y & the second plane is UV. Though the
338 order of the planes can be swapped, only the byte order of the second plane
339 can be swapped. This isn't much use for the Y plane, but can be useful for
340 the UV plane.
341
342--------------------------------------------------------------------------------
343289C
344 bits 0:15
345 Decoder vertical field offset 1
346
347 bits 16:31
348 Decoder vertical field offset 2
349
350 Controls field output vertical alignment. The higher the number, the lower
351 the image on screen. Known starting values are 0x011E0017 (NTSC) &
352 0x01500017 (PAL)
353--------------------------------------------------------------------------------
35428A0
355 bits 0:15
356 Decoder & osd width in pixels
357
358 bits 16:31
359 Decoder & osd height in pixels
360
361 All output from the decoder & osd are disabled beyond this area. Decoder
362 output will simply go black outside of this region. If the osd tries to
363 exceed this area it will become corrupt.
364--------------------------------------------------------------------------------
36528A4
366 bits 0:11
367 osd left shift.
368
369 Has a range of 0x770->0x7FF. With the exception of 0, any value outside of
370 this range corrupts the osd.
371--------------------------------------------------------------------------------
37228A8
373 bits 0:15
374 osd vertical field offset 1
375
376 bits 16:31
377 osd vertical field offset 2
378
379 Controls field output vertical alignment. The higher the number, the lower
380 the image on screen. Known starting values are 0x011E0017 (NTSC) &
381 0x01500017 (PAL)
382--------------------------------------------------------------------------------
38328AC -------- ?? unknown
384 |
385 V
38628BC -------- ?? unknown
387--------------------------------------------------------------------------------
38828C0
389 bit 0
390 Current output field
391 0 = first field
392 1 = second field
393
394 bits 16:31
395 Current scanline
396 The scanline counts from the top line of the first field
397 through to the last line of the second field.
398--------------------------------------------------------------------------------
39928C4 -------- ?? unknown
400 |
401 V
40228F8 -------- ?? unknown
403--------------------------------------------------------------------------------
40428FC
405 bit 0
406 ?? unknown
407 0 = Normal
408 1 = Breaks decoder & osd output
409--------------------------------------------------------------------------------
4102900
411 bits 0:31
412 Decoder vertical Y alias register 1
413---------------
4142904
415 bits 0:31
416 Decoder vertical Y alias register 2
417---------------
4182908
419 bits 0:31
420 Decoder vertical Y alias trigger
421
422 These three registers control the vertical aliasing filter for the Y plane.
423 Operation is similar to the horizontal Y filter (2804). The only real
424 difference is that there are only two registers to set before accessing
425 the trigger register (2908). As for the horizontal filter, the values are
426 taken from a lookup table in the firmware, and the procedure must be
427 repeated 16 times to fully program the filter.
428--------------------------------------------------------------------------------
429290C
430 bits 0:31
431 Decoder vertical UV alias register 1
432---------------
4332910
434 bits 0:31
435 Decoder vertical UV alias register 2
436---------------
4372914
438 bits 0:31
439 Decoder vertical UV alias trigger
440
441 These three registers control the vertical aliasing filter for the UV
442 plane. Operation is the same as the Y filter, with 2914 being the trigger.
443--------------------------------------------------------------------------------
4442918
445 bits 0:15
446 Decoder Y source height in pixels
447
448 bits 16:31
449 Decoder Y destination height in pixels
450---------------
451291C
452 bits 0:15
453 Decoder UV source height in pixels divided by 2
454
455 bits 16:31
456 Decoder UV destination height in pixels
457
458 NOTE: For both registers, the resulting image must be fully visible on
459 screen. If the image exceeds the bottom edge both the source and
460 destination size must be adjusted to reflect the visible portion. For the
461 source height, you must take into account the scaling when calculating the
462 new value.
463--------------------------------------------------------------------------------
4642920
465 bits 0:31
466 Decoder Y vertical scaling
467 Normally = Reg 2930 >> 2
468---------------
4692924
470 bits 0:31
471 Decoder Y vertical scaling
472 Normally = Reg 2920 + 0x514
473---------------
4742928
475 bits 0:31
476 Decoder UV vertical scaling
477 When enlarging = Reg 2930 >> 2
478 When reducing = Reg 2930 >> 3
479---------------
480292C
481 bits 0:31
482 Decoder UV vertical scaling
483 Normally = Reg 2928 + 0x514
484---------------
4852930
486 bits 0:31
487 Decoder 'master' value for vertical scaling
488---------------
4892934
490 bits 0:31
491 Decoder ?? unknown - Y vertical scaling
492---------------
4932938
494 bits 0:31
495 Decoder Y vertical scaling
496 Normally = Reg 2930
497---------------
498293C
499 bits 0:31
500 Decoder ?? unknown - Y vertical scaling
501---------------
5022940
503 bits 0:31
504 Decoder UV vertical scaling
505 When enlarging = Reg 2930 >> 1
506 When reducing = Reg 2930
507---------------
5082944
509 bits 0:31
510 Decoder ?? unknown - UV vertical scaling
511---------------
5122948
513 bits 0:31
514 Decoder UV vertical scaling
515 Normally = Reg 2940
516---------------
517294C
518 bits 0:31
519 Decoder ?? unknown - UV vertical scaling
520
521 Most of these registers either control vertical scaling, or appear linked
522 to it in some way. Register 2930 contains the 'master' value & all other
523 registers can be calculated from that one. You must also remember to
524 correctly set the divider in Reg 296C
525
526 To enlarge:
527 Reg 2930 = (source_height * 0x00200000) / destination_height
528 Reg 296C = No divide
529
530 To reduce from full size down to half size:
531 Reg 2930 = (source_height/2 * 0x00200000) / destination height
532 Reg 296C = Divide by 2
533
534 To reduce from half down to quarter.
535 Reg 2930 = (source_height/4 * 0x00200000) / destination height
536 Reg 296C = Divide by 4
537
538--------------------------------------------------------------------------------
5392950
540 bits 0:15
541 Decoder Y line index into display buffer, first field
542
543 bits 16:31
544 Decoder Y vertical line skip, first field
545--------------------------------------------------------------------------------
5462954
547 bits 0:15
548 Decoder Y line index into display buffer, second field
549
550 bits 16:31
551 Decoder Y vertical line skip, second field
552--------------------------------------------------------------------------------
5532958
554 bits 0:15
555 Decoder UV line index into display buffer, first field
556
557 bits 16:31
558 Decoder UV vertical line skip, first field
559--------------------------------------------------------------------------------
560295C
561 bits 0:15
562 Decoder UV line index into display buffer, second field
563
564 bits 16:31
565 Decoder UV vertical line skip, second field
566--------------------------------------------------------------------------------
5672960
568 bits 0:15
569 Decoder destination height minus 1
570
571 bits 16:31
572 Decoder destination height divided by 2
573--------------------------------------------------------------------------------
5742964
575 bits 0:15
576 Decoder Y vertical offset, second field
577
578 bits 16:31
579 Decoder Y vertical offset, first field
580
581 These two registers shift the Y plane up. The higher the number, the
582 greater the shift.
583--------------------------------------------------------------------------------
5842968
585 bits 0:15
586 Decoder UV vertical offset, second field
587
588 bits 16:31
589 Decoder UV vertical offset, first field
590
591 These two registers shift the UV plane up. The higher the number, the
592 greater the shift.
593--------------------------------------------------------------------------------
594296C
595 bits 0:1
596 Decoder vertical Y output size divider
597 00 = No divide
598 01 = Divide by 2
599 10 = Divide by 4
600
601 bits 8:9
602 Decoder vertical UV output size divider
603 00 = No divide
604 01 = Divide by 2
605 10 = Divide by 4
606--------------------------------------------------------------------------------
6072970
608 bit 0
609 Decoder ?? unknown
610 0 = Normal
611 1 = Affect video output levels
612
613 bit 16
614 Decoder ?? unknown
615 0 = Normal
616 1 = Disable vertical filter
617
618--------------------------------------------------------------------------------
6192974 -------- ?? unknown
620 |
621 V
62229EF -------- ?? unknown
623--------------------------------------------------------------------------------
6242A00
625 bits 0:2
626 osd colour mode
627 001 = 16 bit (565)
628 010 = 15 bit (555)
629 011 = 12 bit (444)
630 100 = 32 bit (8888)
631 101 = 8 bit indexed
632
633 bits 4:5
634 osd display bpp
635 01 = 8 bit
636 10 = 16 bit
637 11 = 32 bit
638
639 bit 8
640 osd global alpha
641 0 = Off
642 1 = On
643
644 bit 9
645 osd local alpha
646 0 = Off
647 1 = On
648
649 bit 10
650 osd colour key
651 0 = Off
652 1 = On
653
654 bit 11
655 osd ?? unknown
656 Must be 1
657
658 bit 13
659 osd colour space
660 0 = ARGB
661 1 = AYVU
662
663 bits 16:31
664 osd ?? unknown
665 Must be 0x001B (some kind of buffer pointer ?)
666
667 When the bits-per-pixel is set to 8, the colour mode is ignored and
668 assumed to be 8 bit indexed. For 16 & 32 bits-per-pixel the colour depth
669 is honoured, and when using a colour depth that requires fewer bytes than
670 allocated the extra bytes are used as padding. So for a 32 bpp with 8 bit
671 index colour, there are 3 padding bytes per pixel. It's also possible to
672 select 16bpp with a 32 bit colour mode. This results in the pixel width
673 being doubled, but the color key will not work as expected in this mode.
674
675 Colour key is as it suggests. You designate a colour which will become
676 completely transparent. When using 565, 555 or 444 colour modes, the
677 colour key is always 16 bits wide. The colour to key on is set in Reg 2A18.
678
679 Local alpha is a per-pixel 256 step transparency, with 0 being transparent
680 and 255 being solid. This is only available in 32 bit & 8 bit indexed
681 colour modes.
682
683 Global alpha is a 256 step transparency that applies to the entire osd,
684 with 0 being transparent & 255 being solid.
685
686 It's possible to combine colour key, local alpha & global alpha.
687--------------------------------------------------------------------------------
6882A04
689 bits 0:15
690 osd x coord for left edge
691
692 bits 16:31
693 osd y coord for top edge
694---------------
6952A08
696 bits 0:15
697 osd x coord for right edge
698
699 bits 16:31
700 osd y coord for bottom edge
701
702 For both registers, (0,0) = top left corner of the display area. These
703 registers do not control the osd size, only where it's positioned & how
704 much is visible. The visible osd area cannot exceed the right edge of the
705 display, otherwise the osd will become corrupt. See reg 2A10 for
706 setting osd width.
707--------------------------------------------------------------------------------
7082A0C
709 bits 0:31
710 osd buffer index
711
712 An index into the osd buffer. Slowly incrementing this moves the osd left,
713 wrapping around onto the right edge
714--------------------------------------------------------------------------------
7152A10
716 bits 0:11
717 osd buffer 32 bit word width
718
719 Contains the width of the osd measured in 32 bit words. This means that all
720 colour modes are restricted to a byte width which is divisible by 4.
721--------------------------------------------------------------------------------
7222A14
723 bits 0:15
724 osd height in pixels
725
726 bits 16:32
727 osd line index into buffer
728 osd will start displaying from this line.
729--------------------------------------------------------------------------------
7302A18
731 bits 0:31
732 osd colour key
733
734 Contains the colour value which will be transparent.
735--------------------------------------------------------------------------------
7362A1C
737 bits 0:7
738 osd global alpha
739
740 Contains the global alpha value (equiv ivtvfbctl --alpha XX)
741--------------------------------------------------------------------------------
7422A20 -------- ?? unknown
743 |
744 V
7452A2C -------- ?? unknown
746--------------------------------------------------------------------------------
7472A30
748 bits 0:7
749 osd colour to change in indexed palette
750---------------
7512A34
752 bits 0:31
753 osd colour for indexed palette
754
755 To set the new palette, first load the index of the colour to change into
756 2A30, then load the new colour into 2A34. The full palette is 256 colours,
757 so the index range is 0x00-0xFF
758--------------------------------------------------------------------------------
7592A38 -------- ?? unknown
7602A3C -------- ?? unknown
761--------------------------------------------------------------------------------
7622A40
763 bits 0:31
764 osd ?? unknown
765
766 Affects overall brightness, wrapping around to black
767--------------------------------------------------------------------------------
7682A44
769 bits 0:31
770 osd ?? unknown
771
772 Green tint
773--------------------------------------------------------------------------------
7742A48
775 bits 0:31
776 osd ?? unknown
777
778 Red tint
779--------------------------------------------------------------------------------
7802A4C
781 bits 0:31
782 osd ?? unknown
783
784 Affects overall brightness, wrapping around to black
785--------------------------------------------------------------------------------
7862A50
787 bits 0:31
788 osd ?? unknown
789
790 Colour shift
791--------------------------------------------------------------------------------
7922A54
793 bits 0:31
794 osd ?? unknown
795
796 Colour shift
797--------------------------------------------------------------------------------
7982A58 -------- ?? unknown
799 |
800 V
8012AFC -------- ?? unknown
802--------------------------------------------------------------------------------
8032B00
804 bit 0
805 osd filter control
806 0 = filter off
807 1 = filter on
808
809 bits 1:4
810 osd ?? unknown
811
812--------------------------------------------------------------------------------
813
814v0.3 - 2 February 2007 - Ian Armstrong (ian@iarmst.demon.co.uk)
815