@Jimmy14 pretty close. I was just about to provide you an example *.dts but I see you did it already by yourself. Chapeau!
For your question:
I assume the fragment@NN and the numbers in __overrides__ are not aligned in your implementation:
These two lines (joy1, joy1-hotkey) below must match the fragment@NN numbers in the *.dts:
Currently you have:
__overrides__ {
/* odd fragments for joystick 1 */
joy1 = <0>, "+1+3";
joy1-hotkey = <0>, "+5+7";
But it should read as:
__overrides__ {
joy1 = <0>, "+1+2"; /* fragment@1 and fragment@2 */
joy1-hotkey = <0>, "+3+4"; /* fragment@3 and fragment@4 */
Which means for the device tree parser: If in config.txt the joy1 is set then do load fragments one and two, and if joy1-hotkey is set in config.txt do load fragment three and four, which should be defined already in the dts file.
If they can't be found they are silently not loaded, unless you have set dtdebug=1 in your config.txt and examine the log with sudo vclog -m after reboot.
Hope this helps.