These 3 functions are only present in Canon firmware on models with flip-out LCD. The feature is likely implemented in hardware, so the low-level interface might be present in other models as well.
If you run these functions in QEMU (-d debugmsg to log Canon's debug messages; change this option from ML menu and write down what their code does), you'll get this (700D):
[ GuiMainTask:ff4d5698 ] (04:03) -->Mirror start
...
[ DisplayMgr:ff129644 ] (82:03) TFT Command start
[ DisplayMgr:ff127de0 ] (82:01) SIO [0]:0x36
[ DisplayMgr:ff127de0 ] (82:01) SIO [1]:0x140
[ DisplayMgr:ff129684 ] (82:03) TFT Command end
...
[ GuiMainTask:00088c10 ] (04:03) Mirror finish
[ GuiMainTask:ff4d56f8 ] (04:03) -->Normal start
...
[ DisplayMgr:ff127de0 ] (82:01) SIO [0]:0x36
[ DisplayMgr:ff127de0 ] (82:01) SIO [1]:0x100
[ GuiMainTask:ff4d56c8 ] (04:03) -->Reverse start
[ DisplayMgr:ff127de0 ] (82:01) SIO [0]:0x36
[ DisplayMgr:ff127de0 ] (82:01) SIO [1]:0x1c0
so it's likely to be on the TFT controller, in SIO [1]. On D4 models, this looks similar, but with 4 SIO numbers and different values. 70D uses yet another set of values.
Can the same SIO communication be replayed on other models? I've tested this on 5D3 1.1.3, unsuccessfully (the display turns off; you can check the debug messages in QEMU or with dm-spy-experiments):
static void run_test()
{
msleep(3000);
#ifdef CONFIG_5D3_113
void (*lcd_sio_init)() = (void *) 0xFF12D284;
void (*lcd_sio_write)(uint32_t * data, int size) = (void *) 0xFF12D1E0;
void (*lcd_sio_finish)(void * sio_obj) = (void *) 0xFF13BDC8;
void ** p_lcd_sio_obj = (void **) 0x246F0;
#endif
printf("LCD sio start\n");
lcd_sio_init();
lcd_sio_write((uint32_t[]) { 0x36, 0x140 }, 2);
lcd_sio_finish(*p_lcd_sio_obj);
printf("LCD sio finish\n");
}
My advice would be:
1) try the above code (update the stubs first!) on 700D or 650D (not other models) and make sure it mirrors the display (there may be more things to patch, no idea)
2) after 1) is working, try on EOS M (extremely unlikely to work on other models)
edit: after comparing the TFT SIO initialization sequences, 650D and 700D are identical, while 5D3 and EOSM are quite different, so the chances of this working are next to none. Still, I'm curious whether the above code works on 650D/700D (even if this knowledge has no practical value right now, it might have later).
BTW - it is possible to implement the image orientation in software, using the display filter interface. Disadvantages: low frame rate; will not work with other display filters (raw video preview, anamorphic/fisheye correction etc).