Some cameras don´t patch sd_uhs like on eos m, 6D etc. Reason for this is this piece of code in sd_uhs.c:
/* called right before the case switch in sd_setup_mode (not at the start of the function!) */
static void sd_setup_mode_in_log(uint32_t* regs, uint32_t* stack, uint32_t pc)
{
qprintf("sd_setup_mode switch(mode=%x) en=%d\n", regs[sd_setup_mode_reg], sd_setup_mode_enable);
if (sd_setup_mode_enable && regs[sd_setup_mode_reg] == 4) /* SDR50? */
{
/* set our register overrides */
for (int i = 0; i < COUNT(uhs_regs); i++)
{
MEM(uhs_regs[i]) = uhs_vals[i];
}
/* set some invalid mode to bypass the case switch
* and keep our register values only */
regs[sd_setup_mode_reg] = 0x13;
}
}
If sd_setup_mode_enable isn´t enabled it won´t patch. So we tested to override this by patching card anyway neglecting conflicts. This seemed to work until someone reported formatting wasn´t working properly on eosm. So here we go. If you want to enable 70D sd_uhs module you could compile it yourself with this part changed to something like this:
/* called right before the case switch in sd_setup_mode (not at the start of the function!) */
static void sd_setup_mode_in_log(uint32_t* regs, uint32_t* stack, uint32_t pc)
{
qprintf("sd_setup_mode switch(mode=%x) en=%d\n", regs[sd_setup_mode_reg], sd_setup_mode_enable);
/* set our register overrides */
for (int i = 0; i < COUNT(uhs_regs); i++)
{
MEM(uhs_regs[i]) = uhs_vals[i];
}
/* set some invalid mode to bypass the case switch
* and keep our register values only */
regs[sd_setup_mode_reg] = 0x13;
}
Or you need to run the script version which handles the routine after camera is started. Maybe there are other ways about this, maybe telling the function to start later etc but I am not very skilled at this.