For those not desiring to upgrade their Kindle DX to 3.2.1 in order to get PDF contrast, here is a replacement that allows setting contrast (and more!) throughout the whole system. It replaces a kernel module and adds a simple watcher so that you can modify the contrast with the keyboard. In addition to contrast, you can also reduce the number of shades so that page turns are faster and/or flashless. The README is duplicated below. Enjoy!

Code:

NOTE: This has been tested on a Kindle DX Graphite 2.5.8. You must update your
Kindle DX to this version before installing the update! Installing on the
3.2.1+ adaptation should be okay but hasn't been tested.
INSTALLATION INSTRUCTIONS
1. Plug your Kindle into your computer.
2. Copy update_contrast_0.1_install.bin to the root of the Kindle.
3. Eject/unplug the Kindle DXG.
4. Go to the Home screen, press the Menu key, and select Settings.
5. Press the Menu key again, and select Update Your Kindle.
6. Select Ok when prompted if you want to perform an update.
USAGE INSTRUCTIONS
1. While holding Shift, press up/down to move among 5 contrast levels.
2. While holding Shift, press left/right to move among 3 bit depths.
(16 shades is default; 4 shades has faster updates; 2 shades has no flashes)
3. While holding Shift, press the five way to invert the screen.
UNINSTALLATION INSTRUCTIONS
1. Plug your Kindle into your computer.
2. Copy update_contrast_0.1_uninstall.bin to the root of the Kindle.
3. Eject/unplug the Kindle DXG.
4. Go to the Home screen, press the Menu key, and select Settings.
5. Press the Menu key again, and select Update Your Kindle.
6. Select Ok when prompted if you want to perform an update.
INTERNAL DOCUMENTATION
It adds a command 99 to /proc/eink_fb/update_display which takes 16 numbers as
arguments. These are the shades 0-15 that each shande should be mapped to before
it is displayed. This allows you to set up pretty much any mapping you want. e.g.
echo "99 0 3 6 9 12 15 15 15 15 15 15 15 15 15 15 15" >/proc/eink_fb/update_display
LICENSE AND DISCLAIMER
You may freely use and share unmodified versions of this software so long as
you do not charge a fee for redistribution. This software may not be bundled,
preloaded on devices, included in collections, or otherwise aggregated without
prior written consent of the copyright holder. All other rights reserved to
the maximum extent permitted by applicable law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

*scratch head* so... did you simply retro-fit the code that emerged in the later kernels to the DX...

as-in later devices could ALREADY be convinced to do what you are indicating.. ?

Am code diving and attempting to figure out what might be done to convince later device to go monochrome natively...

Anyone???

The code posted by the O.P. certainly looks clean enough, and the user can effectively disable it.

Will have to see how it would all fit into the newer devices e-ink driver before making any additional comment.

@twobob: Just one patch, to one module, does not sound like much of a reason to ask the O.P. to setup a repo for it - - -
Do you want to push it to the */systems repo or shall I give it a public repo on my system ?
I can give the O.P. write access to the repo for it on my system.

@twobob: We need another chat on that */systems tree structure - I think we missed something in our last planning.

The trouble with porting to Kindle 3 (not sure about later versions as I didn't look at their kernels) is that it already has a different contrast ioctl (accessed as command 19 via update_display). It provides not as good contrast adjustments (they output only 4-bit shades and the monochrome adjustment is extremely dark).

On K3, it currently allows levels 0 through 7. I think the code could be combined in the following way: Add a level 8, which enables the new contrast table. Route all contrast lookups through the K3's pointer rather than directly through the custom table.

The trouble with porting to Kindle 3 (not sure about later versions as I didn't look at their kernels) is that it already has a different contrast ioctl (accessed as command 19 via update_display). It provides not as good contrast adjustments (they output only 4-bit shades and the monochrome adjustment is extremely dark).

On K3, it currently allows levels 0 through 7. I think the code could be combined in the following way: Add a level 8, which enables the new contrast table. Route all contrast lookups through the K3's pointer rather than directly through the custom table.

I don't think this will help with video speed - not on the DX at least. The updates are still relatively slow. Thanks for creating the repo! You are of course free to integrate this (with the keystrokes now too) into KUAL if you like.

I have updated the first post, so that it contains update packages and a helper utility to change contrast and bit depth with simple keystrokes.

I did think about trying this on the later devices. the 3/4 specifically

it WOULD ROCK if this could/would provide the solution to the dithering problem on a FW level. sadly of course the X implementations on the later devices just utterly trash this "being included in the FW" I checked OF COURSE... not there.

I don't think this will help with video speed - not on the DX at least. The updates are still relatively slow. Thanks for creating the repo! You are of course free to integrate this (with the keystrokes now too) into KUAL if you like.

I have updated the first post, so that it contains update packages and a helper utility to change contrast and bit depth with simple keystrokes.

I've updated to 0.2 to fix an issue with the hotkey listener, where it would accumulate arrow keypresses and then act on them as soon as you pushed Shift. Although I'm not sure if anyone has actually tried this.

Feel free to push the updated code... Haven't gotten around to requesting push access yet. I don't have any other Kindle but could assist sometime in modifying the later Kernels to do the same.

I've updated to 0.2 to fix an issue with the hotkey listener, where it would accumulate arrow keypresses and then act on them as soon as you pushed Shift. Although I'm not sure if anyone has actually tried this.

Feel free to push the updated code... Haven't gotten around to requesting push access yet. I don't have any other Kindle but could assist sometime in modifying the later Kernels to do the same.

most certainly will push that to the kual-system-development area mate.