You could try obtaining a replacement sun visor (one that still works) at a junk yard. There is no tension adjustment on a modern visor that I'm aware of. I think the problem is age and wear.
How about some velcro? Glue a piece to the head liner and another piece to the back of the visor. That should keep the visor up.