I have just *sort of* fixed overscan on one TV I'm testing (Sony FD Trinitron). I also searched a lot, tried diffrent things, but couldn't get anywhere. It seems the TV parameters are hardcoded in the driver code but I think it's a bit overkill to recompile a driver to get this to work (I'm not even sure if it's possible without recompiling the whole kernel!).
Anyway, in one of the places I looked, I found that there are some control files that allow some configuration to the display framebuffer. These are at /sys/devices/platform/disp/graphics/fb0/, where fb0 is the framebuffer connected to the composite out connector on my board. I think this depends on the script.fex configuration. So, check first.
In here, there are 2 files: virtual_size and pan. virtual_size, for PAL TV mode, contains 720,1152. pan contains 0,0. Without changing the virtual_size, you can only write to pan "0,x" where x=pixels to scroll up. To change the actual horizontal panning, you need to set a value in virtual_size different than 720. So, for this TV, I did:
echo 719,1152 > /sys/devices/platform/disp/graphics/fb0/virtual_size
echo 712,12 > /sys/devices/platform/disp/graphics/fb0/pan
This makes the lower left corner perfectly visible, and the left side aligned with the left display border.
The problem is that the actual display size won't be resized. Meaning the top line will be hidden, and some 5 characters width will be hidden on the right side. I tried to define a smaller horizontal value for virtual_size, but the display would wrap, so if you defined it as 360, you'd get 2 screens side by side. Maybe there's some way to tell Linux to consider using only X columns and Y rows (I'm a rookie on Linux, I don't know...)
I suspect these values need to be fine tuned for each TV.
Again, this is a nasty hack. Not a proper solution But it's better than before, at least for me.
Now I need to find out how to set this on boot...