I cannot completely answer, but realize that often the driver is in fact already there. The device tree can make the driver succeed or fail. Imagine a “hello world” program which has as its only job to echo the argument passed to it to the output…one would not write a new “hello world” application for every possible argument passed. The device tree is the argument passed and is why the driver itself does not need to be rewritten for other variations of the same hardware which would merely be some “rearrangement” of that chipset.
Note about this:
…it means the driver is already there in a state where you cannot add the driver twice. If the driver is not working correctly, then it is likely (though not guaranteed) because the tree passed to it is not correct.