一般會有一個 1.1 的 controller 叫 companion controller,跟 ehci 一起,接在 usb 末端的 TT (Tansition Transistor) 後面。
然後 programmer 可以控制這個 TT ,讓他接到 componion controller 上,就變成 1.1。
接到 ehci 上,就變成 2.0。
linux 也 follow 這個,在 usb device 的 sys filesystem 裡,實做一個 "componion" attribute file。
把數字寫進這個 componion file,該 port (--) 的 TT 就會接到 componion controll 上。
要恢復的話,就把port number 的負值寫到 componion 上 (e.g: -4),TT 就會接回 ehci controller 。
藉此,可以分別控制 各個 ehci 的速度。
但是有些 controller 把 1.0 的功能也作在 ehci 裡,同時內建 TT,這樣,就沒有 companion controller 了。 == source code 叫這種 controller 是 TDI , structure 中用 has_tt 來代表。
這樣,就沒辦法強制工作在 1.1 了。
但是,這邊有一個 patch,是利用這類 controller 的 :
+#define PORT_PFSC (1<<24) /* port force full-speed connect */
強制讓 ehci 工作在 full speed,來模擬 componion 的作用。
ref : http://permalink.gmane.org/gmane.linux.usb.general/14891
沒有留言:
張貼留言