I only tried with all 3, if I get some more time I'll try excluding them.
For anyone interested in doing further testing here's what I did (on top of current raw_video_10bit_12bit). To check what a1ex asked about above simply change the two #ifdef CONFIG_EOSM lines in the edmac_raw_slurp() function to #if 0 (try each one separately and both)
diff --git a/platform/EOSM.202/internals.h b/platform/EOSM.202/internals.h
--- a/platform/EOSM.202/internals.h
+++ b/platform/EOSM.202/internals.h
@@ -142,3 +142,6 @@
/** Workaround for menu timeout in LiveView */
#define CONFIG_MENU_TIMEOUT_FIX
+
+/** this method bypasses Canon's lv_save_raw and slurps the raw data directly from connection #0 */
+#define CONFIG_EDMAC_RAW_SLURP
diff --git a/src/edmac-memcpy.c b/src/edmac-memcpy.c
--- a/src/edmac-memcpy.c
+++ b/src/edmac-memcpy.c
@@ -388,6 +388,10 @@
uint32_t raw_write_chan = 4;
#endif
+#ifdef CONFIG_EOSM
+uint32_t raw_write_chan = 0x12;
+#endif
+
static void edmac_slurp_complete_cbr (void* ctx)
{
@@ -401,7 +405,11 @@
void edmac_raw_slurp(void* dst, int w, int h)
{
/* see wiki, register map, EDMAC what the flags mean. they are for setting up copy block size */
+#ifdef CONFIG_EOSM
+ uint32_t dmaFlags = 0x20000000;
+#else
uint32_t dmaFlags = 0x20001000;
+#endif
/* @g3gg0: this callback does get called */
RegisterEDmacCompleteCBR(raw_write_chan, &edmac_slurp_complete_cbr, 0);
@@ -420,6 +428,10 @@
SetEDmac(raw_write_chan, (void*)dst, &dst_edmac_info, dmaFlags);
/* start transfer. no flags for write, 2 for read channels */
+#ifdef CONFIG_EOSM
StartEDmac(raw_write_chan, 0);
+#else
+ StartEDmac(raw_write_chan, 2);
+#endif
}
#endif /* CONFIG_EDMAC_RAW_SLURP */
diff --git a/src/raw.c b/src/raw.c
--- a/src/raw.c
+++ b/src/raw.c
@@ -114,6 +114,10 @@
//~ #define DEFAULT_RAW_BUFFER MEM(0x25f1c + 0x34) /* 123 */
#endif
+#ifdef CONFIG_EOSM
+#define DEFAULT_RAW_BUFFER MEM(0x404E4 + 0x44)
+#endif
+
#else
/* with Canon lv_save_raw, just read it from EDMAC */
@@ -430,6 +434,12 @@
*height = zoom ? 1106 : mv1080crop ? 1048 : mv720 ? 720 : 1182;
return 1;
#endif
+
+ #ifdef CONFIG_EOSM
+ *width = video_mode_crop ? 1872 : 1808;
+ *height = video_mode_crop ? 1060 : 727;
+ return 1;
+ #endif
/* unknown camera? */
return 0;