We use a free, open source software called Trac. It's bug tracking software for software developers, so it's not a perfect fit. Trac has three major components to it: a wiki, a ticketing system, and Subversion integration.
We use the wiki for our controlled documents. Editing a wiki takes some getting used to, but once you get it, it's a breeze. And document review is never easier. I just do a "diff" from the current version to the previous version and I can see exactly what was changed. (I wish our customers would put their 40-page terms and conditions in a wiki.)
The other use for wikis is logs: calibration log, approved supplier log, external documents list, etc. It's not great at tables, but it's good enough and it forces us to keep things lean and simple.
The second main part of Trac is a ticketing system. We use it for document approvals. When a controlled document is changed, a ticket is created describing the change. The approver "signs" the ticket by leaving a comment that it's been approved. The documents all have links to the approval ticket so you can easily see who approved it.
Another use for tickets is CARs and PARs. The comment part of the tickets is a great way to document the steps and approvals and all the "electronic signatures" are properly controlled.
Trac also integrates with Subversion. If we have controlled documents that can't be done in a wiki, mainly because they require fancier formatting than is practical on the wiki, they are controlled in Subversion.
It's an 80% perfect system for us, but isn't everything. The biggest downside, IMO, is that you need someone who can maintain a Linux server. We're chock full of engineers, so it's no problem for us, but it's definitely a consideration.