The firmware sometimes wants more data, different places to set the data, so on. The firmware changes, and you gotta adapt the driver to it. Sometimes it's a complete overhaul.
Every major OS already has this HAL layer, we just need to decide/design a generic and hope that every player will use it.