[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freedesktop-xorg
Subject:    Re: [PATCH/RFC] Add Widescreen Signalling to intel driver
From:       elupus <elupus () ecce ! se>
Date:       2008-05-31 19:45:25
Message-ID: eik6yder6orp$.1pdqrwnckt1g3$.dlg () 40tude ! net
[Download RAW message or body]

On Sat, 31 May 2008 21:44:22 +0200, elupus wrote:

> Hi, 
> 
> I'm playing around with wss switching in the intel driver. According to
> docs it should be supported. This is what I have so far, I assume the
> signal sent should be based on resolution, and only sent when in SD modes.
> But i'd like to get it working first :).
> 
> This patch doesn't seem to work at the moment. I think it could be partly
> due to this comment that's in intel docs 
> 
> "IMPORTANT: Since WSS uses line 23 to transmit data, the active region has
> to be downsized by two lines and the vertical blanking has to be increased
> by two lines."
> 
> Any ideas on how to fix that?
> 
> Regards
> Joakim

sigh.. Maybe should supply patch.

Joakim
["wss.patch" (text/x-patch)]

diff --git a/src/i810_reg.h b/src/i810_reg.h
index d1fed22..90077ac 100644
--- a/src/i810_reg.h
+++ b/src/i810_reg.h
@@ -1957,6 +1957,55 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define TV_V_CHROMA_42		0x684a8
 /** @} */
 
+
+/** @defgroup TV_WSS_CONTROL
+ * @{
+ */
+#define TV_WSS_CONTROL		0x680B0
+# define TV_WSS_ENABLE			(1 << 31)
+/**
+ * Specifies which field to send the WSS data in.
+ *
+ * WSS data is usually sent in field 0.
+ */
+# define TV_WSS_FID_MASK		(1 << 30)
+# define TV_WSS_FID_SHIFT		30
+/** Sets the horizontal position of the WSS data.  Usually 148. */
+# define TV_WSS_HOFF_MASK		0x03ff0000
+# define TV_WSS_HOFF_SHIFT		16
+/** Sets the clock divider for WSS clock Usually 27 for 5MHz bit clock */
+# define TV_WSS_BIT_MASK		0x00007f00
+# define TV_WSS_BIT_SHIFT		8
+/** 
+ * Sets the line number to display the WSS data minus 1.
+ * Usually 25 to be displayed on line 23
+ */
+# define TV_WSS_LINE_MASK		0x0000001f
+# define TV_WSS_LINE_SHIFT		0
+
+/** @} */
+
+/** @defgroup TV_WSS_DATA
+ * @{
+ */
+#define TV_WSS_DATA			0x680B4
+
+# define TV_WSS_DATA_ASPECT_MASK	0x0000000f
+# define TV_WSS_DATA_ASPECT_SHIFT	0
+
+# define TV_WSS_DATA_SERV_MASK		0x000000f0
+# define TV_WSS_DATA_SERV_SHIFT		4
+
+# define TV_WSS_DATA_SUB_MASK		0x00000700
+# define TV_WSS_DATA_SUB_SHIFT		8
+
+# define TV_WSS_DATA_OTHER_MASK		0x00003800
+# define TV_WSS_DATA_OTHER_SHIFT	11
+
+/** @}
+ */
+
+
 #define PIPEA_DSL		0x70000
 
 #define PIPEACONF 0x70008
diff --git a/src/i830_tv.c b/src/i830_tv.c
index f037171..3f1b463 100644
--- a/src/i830_tv.c
+++ b/src/i830_tv.c
@@ -1235,6 +1235,20 @@ i830_tv_mode_set(xf86OutputPtr output, DisplayModePtr mode,
 	OUTREG(TV_V_LUMA_0 + (i<<2), tv_mode->filter_table[j++]);
     for (i = 0; i < 43; i++)
 	OUTREG(TV_V_CHROMA_0 + (i<<2), tv_mode->filter_table[j++]);
+
+
+
+    wssctl  = TV_WSS_ENABLE;
+    wssctl |= 1 << TV_WSS_FID_SHIFT;
+    wssctl |= 148 << TV_WSS_HOFF_SHIFT;
+    wssctl |= 27 << TV_WSS_BIT_SHIFT;
+    wssctl |= 25 << TV_WSS_LINE_SHIFT;
+
+    wssdata = 0x7;
+
+    OUTREG(TV_WSS_DATA, wssdata);
+    OUTREG(TV_WSS_CONTROL, wssctl);
+
     OUTREG(TV_DAC, 0);
     OUTREG(TV_CTL, tv_ctl);
 }

_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic