diff --git a/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts b/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts
index 64aafd0a52..38f0b92f0f 100644
--- a/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts
+++ b/target/linux/ramips/dts/mt7620a_bdcom_wap2100-sk.dts
@@ -111,6 +111,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts b/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts
index 9a9d9f45ae..dde729eb19 100644
--- a/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts
+++ b/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts
@@ -126,6 +126,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts b/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts
index 9df5f464c7..9dd802303f 100644
--- a/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts
+++ b/target/linux/ramips/dts/mt7620a_glinet_gl-mt750.dts
@@ -121,6 +121,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts b/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts
index fbee809893..c900288044 100644
--- a/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts
+++ b/target/linux/ramips/dts/mt7620a_head-weblink_hdrm200.dts
@@ -111,6 +111,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi b/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi
index 82bc8c9957..c6846c8bf3 100644
--- a/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi
+++ b/target/linux/ramips/dts/mt7620a_hiwifi_hc5x61.dtsi
@@ -117,6 +117,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &wmac {
diff --git a/target/linux/ramips/dts/mt7620a_hnet_c108.dts b/target/linux/ramips/dts/mt7620a_hnet_c108.dts
index 15b2a12af7..9078ea367f 100644
--- a/target/linux/ramips/dts/mt7620a_hnet_c108.dts
+++ b/target/linux/ramips/dts/mt7620a_hnet_c108.dts
@@ -154,6 +154,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_ohyeah_oy-0001.dts b/target/linux/ramips/dts/mt7620a_ohyeah_oy-0001.dts
index b8f86fad50..bf53713987 100644
--- a/target/linux/ramips/dts/mt7620a_ohyeah_oy-0001.dts
+++ b/target/linux/ramips/dts/mt7620a_ohyeah_oy-0001.dts
@@ -117,6 +117,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts b/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts
index 3998ea6019..96c8311ecd 100644
--- a/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts
+++ b/target/linux/ramips/dts/mt7620a_planex_cs-qr10.dts
@@ -140,6 +140,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_ralink_mt7620a-evb.dts b/target/linux/ramips/dts/mt7620a_ralink_mt7620a-evb.dts
index 34f870906e..abcaf4932c 100644
--- a/target/linux/ramips/dts/mt7620a_ralink_mt7620a-evb.dts
+++ b/target/linux/ramips/dts/mt7620a_ralink_mt7620a-evb.dts
@@ -112,6 +112,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &pcie {
diff --git a/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts b/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts
index b4554675c7..b0fab5381e 100644
--- a/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts
+++ b/target/linux/ramips/dts/mt7620a_ralink_mt7620a-mt7610e-evb.dts
@@ -83,6 +83,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &pcie {
diff --git a/target/linux/ramips/dts/mt7620a_sanlinking_d240.dts b/target/linux/ramips/dts/mt7620a_sanlinking_d240.dts
index 2bbd68cf7a..162c5a7b55 100644
--- a/target/linux/ramips/dts/mt7620a_sanlinking_d240.dts
+++ b/target/linux/ramips/dts/mt7620a_sanlinking_d240.dts
@@ -156,6 +156,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  	/* the pins function is already set during pinmux driver load */
  	/delete-property/ pinctrl-0;
  };
diff --git a/target/linux/ramips/dts/mt7620a_youku_yk1.dts b/target/linux/ramips/dts/mt7620a_youku_yk1.dts
index a95f1e9320..9ddce40d1f 100644
--- a/target/linux/ramips/dts/mt7620a_youku_yk1.dts
+++ b/target/linux/ramips/dts/mt7620a_youku_yk1.dts
@@ -129,6 +129,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we1026.dtsi b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we1026.dtsi
index 91bbd4a044..52517e009e 100644
--- a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we1026.dtsi
+++ b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we1026.dtsi
@@ -76,6 +76,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi
index a2051efaad..386fc3c391 100644
--- a/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi
+++ b/target/linux/ramips/dts/mt7620a_zbtlink_zbt-we826.dtsi
@@ -63,6 +63,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7620a_zte_q7.dts b/target/linux/ramips/dts/mt7620a_zte_q7.dts
index 182b7db905..8ff8f8ad9c 100644
--- a/target/linux/ramips/dts/mt7620a_zte_q7.dts
+++ b/target/linux/ramips/dts/mt7620a_zte_q7.dts
@@ -107,6 +107,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &ehci {
diff --git a/target/linux/ramips/dts/mt7621_afoundry_ew1200.dts b/target/linux/ramips/dts/mt7621_afoundry_ew1200.dts
index 97f13b0bb0..321c5d8719 100644
--- a/target/linux/ramips/dts/mt7621_afoundry_ew1200.dts
+++ b/target/linux/ramips/dts/mt7621_afoundry_ew1200.dts
@@ -49,6 +49,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_alfa-network_quad-e4g.dts b/target/linux/ramips/dts/mt7621_alfa-network_quad-e4g.dts
index 6ac9e337fc..c70536b05c 100644
--- a/target/linux/ramips/dts/mt7621_alfa-network_quad-e4g.dts
+++ b/target/linux/ramips/dts/mt7621_alfa-network_quad-e4g.dts
@@ -204,6 +204,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_asiarf_ap7621.dtsi b/target/linux/ramips/dts/mt7621_asiarf_ap7621.dtsi
index bd6642fe51..5cc18a4dd7 100644
--- a/target/linux/ramips/dts/mt7621_asiarf_ap7621.dtsi
+++ b/target/linux/ramips/dts/mt7621_asiarf_ap7621.dtsi
@@ -37,6 +37,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_asus_rt-acx5p.dtsi b/target/linux/ramips/dts/mt7621_asus_rt-acx5p.dtsi
index 37056c7934..736234f0e2 100644
--- a/target/linux/ramips/dts/mt7621_asus_rt-acx5p.dtsi
+++ b/target/linux/ramips/dts/mt7621_asus_rt-acx5p.dtsi
@@ -62,6 +62,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &nand {
diff --git a/target/linux/ramips/dts/mt7621_d-team_pbr-m1.dts b/target/linux/ramips/dts/mt7621_d-team_pbr-m1.dts
index 49d8648f8a..880c0cb365 100644
--- a/target/linux/ramips/dts/mt7621_d-team_pbr-m1.dts
+++ b/target/linux/ramips/dts/mt7621_d-team_pbr-m1.dts
@@ -103,6 +103,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_firefly_firewrt.dts b/target/linux/ramips/dts/mt7621_firefly_firewrt.dts
index 10b33993ac..f863b316eb 100644
--- a/target/linux/ramips/dts/mt7621_firefly_firewrt.dts
+++ b/target/linux/ramips/dts/mt7621_firefly_firewrt.dts
@@ -48,6 +48,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_gnubee_gb-pc1.dts b/target/linux/ramips/dts/mt7621_gnubee_gb-pc1.dts
index 6b1c9a8f9d..7064edf2c7 100644
--- a/target/linux/ramips/dts/mt7621_gnubee_gb-pc1.dts
+++ b/target/linux/ramips/dts/mt7621_gnubee_gb-pc1.dts
@@ -57,6 +57,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_gnubee_gb-pc2.dts b/target/linux/ramips/dts/mt7621_gnubee_gb-pc2.dts
index a015a5e84a..98eccf74c8 100644
--- a/target/linux/ramips/dts/mt7621_gnubee_gb-pc2.dts
+++ b/target/linux/ramips/dts/mt7621_gnubee_gb-pc2.dts
@@ -67,6 +67,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_lenovo_newifi-d1.dts b/target/linux/ramips/dts/mt7621_lenovo_newifi-d1.dts
index 5654a6f196..96af204e1b 100644
--- a/target/linux/ramips/dts/mt7621_lenovo_newifi-d1.dts
+++ b/target/linux/ramips/dts/mt7621_lenovo_newifi-d1.dts
@@ -71,6 +71,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_mediatek_ap-mt7621a-v60.dts b/target/linux/ramips/dts/mt7621_mediatek_ap-mt7621a-v60.dts
index 731eb4d8e2..1b9021242c 100644
--- a/target/linux/ramips/dts/mt7621_mediatek_ap-mt7621a-v60.dts
+++ b/target/linux/ramips/dts/mt7621_mediatek_ap-mt7621a-v60.dts
@@ -116,6 +116,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &gmac0 {
diff --git a/target/linux/ramips/dts/mt7621_mediatek_mt7621-eval-board.dts b/target/linux/ramips/dts/mt7621_mediatek_mt7621-eval-board.dts
index 8321caae6e..40e6755313 100644
--- a/target/linux/ramips/dts/mt7621_mediatek_mt7621-eval-board.dts
+++ b/target/linux/ramips/dts/mt7621_mediatek_mt7621-eval-board.dts
@@ -43,6 +43,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &switch0 {
diff --git a/target/linux/ramips/dts/mt7621_mikrotik_routerboard-750gr3.dts b/target/linux/ramips/dts/mt7621_mikrotik_routerboard-750gr3.dts
index 3f37155f24..d36378776a 100644
--- a/target/linux/ramips/dts/mt7621_mikrotik_routerboard-750gr3.dts
+++ b/target/linux/ramips/dts/mt7621_mikrotik_routerboard-750gr3.dts
@@ -175,4 +175,5 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
diff --git a/target/linux/ramips/dts/mt7621_mikrotik_routerboard-m33g.dts b/target/linux/ramips/dts/mt7621_mikrotik_routerboard-m33g.dts
index 19e1a71e99..bf1f397854 100644
--- a/target/linux/ramips/dts/mt7621_mikrotik_routerboard-m33g.dts
+++ b/target/linux/ramips/dts/mt7621_mikrotik_routerboard-m33g.dts
@@ -197,6 +197,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &i2c {
diff --git a/target/linux/ramips/dts/mt7621_mqmaker_witi.dts b/target/linux/ramips/dts/mt7621_mqmaker_witi.dts
index 87421486a9..0b8572816f 100644
--- a/target/linux/ramips/dts/mt7621_mqmaker_witi.dts
+++ b/target/linux/ramips/dts/mt7621_mqmaker_witi.dts
@@ -38,6 +38,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_mtc_wr1201.dts b/target/linux/ramips/dts/mt7621_mtc_wr1201.dts
index 66b4f92852..851b369011 100644
--- a/target/linux/ramips/dts/mt7621_mtc_wr1201.dts
+++ b/target/linux/ramips/dts/mt7621_mtc_wr1201.dts
@@ -141,6 +141,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &pcie {
diff --git a/target/linux/ramips/dts/mt7621_thunder_timecloud.dts b/target/linux/ramips/dts/mt7621_thunder_timecloud.dts
index 60eea877b1..21420a5b73 100644
--- a/target/linux/ramips/dts/mt7621_thunder_timecloud.dts
+++ b/target/linux/ramips/dts/mt7621_thunder_timecloud.dts
@@ -53,6 +53,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi b/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi
index ca0e2d7dcd..e5786ff18f 100644
--- a/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi
+++ b/target/linux/ramips/dts/mt7621_unielec_u7621-06.dtsi
@@ -98,6 +98,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &pcie {
diff --git a/target/linux/ramips/dts/mt7621_xzwifi_creativebox-v1.dts b/target/linux/ramips/dts/mt7621_xzwifi_creativebox-v1.dts
index 0db8b34474..e32776fee0 100644
--- a/target/linux/ramips/dts/mt7621_xzwifi_creativebox-v1.dts
+++ b/target/linux/ramips/dts/mt7621_xzwifi_creativebox-v1.dts
@@ -130,6 +130,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &pcie {
diff --git a/target/linux/ramips/dts/mt7621_youku_yk-l2.dts b/target/linux/ramips/dts/mt7621_youku_yk-l2.dts
index e43ee8451a..0f5f49fa90 100644
--- a/target/linux/ramips/dts/mt7621_youku_yk-l2.dts
+++ b/target/linux/ramips/dts/mt7621_youku_yk-l2.dts
@@ -62,6 +62,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &xhci {
diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-we1326.dts b/target/linux/ramips/dts/mt7621_zbtlink_zbt-we1326.dts
index f91f0d77d4..aa3990b269 100644
--- a/target/linux/ramips/dts/mt7621_zbtlink_zbt-we1326.dts
+++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-we1326.dts
@@ -131,4 +131,5 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-we3526.dts b/target/linux/ramips/dts/mt7621_zbtlink_zbt-we3526.dts
index 1f43f2a2dc..4e50db68c9 100644
--- a/target/linux/ramips/dts/mt7621_zbtlink_zbt-we3526.dts
+++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-we3526.dts
@@ -32,6 +32,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg2626.dts b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg2626.dts
index 5e8e250432..1f2e7ff51a 100644
--- a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg2626.dts
+++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg2626.dts
@@ -48,6 +48,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg3526.dtsi b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg3526.dtsi
index 8c9d31325a..f1d9028cf0 100644
--- a/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg3526.dtsi
+++ b/target/linux/ramips/dts/mt7621_zbtlink_zbt-wg3526.dtsi
@@ -46,6 +46,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &spi0 {
diff --git a/target/linux/ramips/dts/mt7628an_d-team_pbr-d1.dts b/target/linux/ramips/dts/mt7628an_d-team_pbr-d1.dts
index d406bac0e8..1c2ec916f0 100644
--- a/target/linux/ramips/dts/mt7628an_d-team_pbr-d1.dts
+++ b/target/linux/ramips/dts/mt7628an_d-team_pbr-d1.dts
@@ -159,5 +159,6 @@
  
  &sdhci {
  	status = "okay";
-	mediatek,cd-high;
+	bus-width = <4>;
+	cd-inverted;
  };
diff --git a/target/linux/ramips/dts/mt7628an_duzun_dm06.dts b/target/linux/ramips/dts/mt7628an_duzun_dm06.dts
index 4164bae184..4d08c8a849 100644
--- a/target/linux/ramips/dts/mt7628an_duzun_dm06.dts
+++ b/target/linux/ramips/dts/mt7628an_duzun_dm06.dts
@@ -85,6 +85,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &gdma {
diff --git a/target/linux/ramips/dts/mt7628an_mediatek_linkit-smart-7688.dts b/target/linux/ramips/dts/mt7628an_mediatek_linkit-smart-7688.dts
index ebc4c3d6f9..b4a5fb0793 100644
--- a/target/linux/ramips/dts/mt7628an_mediatek_linkit-smart-7688.dts
+++ b/target/linux/ramips/dts/mt7628an_mediatek_linkit-smart-7688.dts
@@ -154,7 +154,8 @@
  
  &sdhci {
  	status = "okay";
-	mediatek,cd-high;
+	bus-width = <4>;
+	cd-inverted;
  };
  
  &wmac {
diff --git a/target/linux/ramips/dts/mt7628an_onion_omega2.dtsi b/target/linux/ramips/dts/mt7628an_onion_omega2.dtsi
index f8fad35c05..ed582e5c46 100644
--- a/target/linux/ramips/dts/mt7628an_onion_omega2.dtsi
+++ b/target/linux/ramips/dts/mt7628an_onion_omega2.dtsi
@@ -156,6 +156,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  	mediatek,cd-low;
  };
  
diff --git a/target/linux/ramips/dts/mt7628an_widora_neo.dtsi b/target/linux/ramips/dts/mt7628an_widora_neo.dtsi
index 252ffd71f5..4bd548f386 100644
--- a/target/linux/ramips/dts/mt7628an_widora_neo.dtsi
+++ b/target/linux/ramips/dts/mt7628an_widora_neo.dtsi
@@ -110,6 +110,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  	mediatek,cd-low;
  };
  
diff --git a/target/linux/ramips/dts/mt7628an_wiznet_wizfi630s.dts b/target/linux/ramips/dts/mt7628an_wiznet_wizfi630s.dts
index 0aeff750e9..ddea3cb700 100644
--- a/target/linux/ramips/dts/mt7628an_wiznet_wizfi630s.dts
+++ b/target/linux/ramips/dts/mt7628an_wiznet_wizfi630s.dts
@@ -176,7 +176,8 @@
  
  &sdhci {
  	status = "okay";
-	mediatek,cd-high;
+	bus-width = <4>;
+	cd-inverted;
  };
  
  &wmac {
diff --git a/target/linux/ramips/dts/mt7628an_wrtnode_wrtnode2.dtsi b/target/linux/ramips/dts/mt7628an_wrtnode_wrtnode2.dtsi
index 882a8838dd..c7788e9964 100644
--- a/target/linux/ramips/dts/mt7628an_wrtnode_wrtnode2.dtsi
+++ b/target/linux/ramips/dts/mt7628an_wrtnode_wrtnode2.dtsi
@@ -79,6 +79,7 @@
  
  &sdhci {
  	status = "okay";
+	bus-width = <4>;
  };
  
  &pcie {
diff --git a/target/linux/ramips/files/drivers/mmc/host/mtk-mmc/sd.c b/target/linux/ramips/files/drivers/mmc/host/mtk-mmc/sd.c
index 8cbc87da3a..9094270818 100644
--- a/target/linux/ramips/files/drivers/mmc/host/mtk-mmc/sd.c
+++ b/target/linux/ramips/files/drivers/mmc/host/mtk-mmc/sd.c
@@ -2235,15 +2235,22 @@ static int msdc_drv_probe(struct platform_device *pdev)
  	mmc->f_max      = HOST_MAX_MCLK;
  	mmc->ocr_avail  = MSDC_OCR_AVAIL;
  
-	mmc->caps   = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED;
+	ret = mmc_of_parse(mmc);
+	if (ret)
+		goto release;
  
-	//TODO: read this as bus-width from dt (via mmc_of_parse)
-	mmc->caps  |= MMC_CAP_4_BIT_DATA;
+	if (mmc->f_max > HOST_MAX_MCLK) {
+		dev_warn(mmc->parent,
+				"\"max-frequency\" property greater than max-frequency of %d, using %d.\n",
+				HOST_MAX_MCLK, HOST_MAX_MCLK);
+		mmc->f_max = HOST_MAX_MCLK;
+	}
  
-	cd_active_low = !of_property_read_bool(pdev->dev.of_node, "mediatek,cd-high");
+	/* It seems these caps must be set regardles of the dt */
+	mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED;
  
-	if (of_property_read_bool(pdev->dev.of_node, "mediatek,cd-poll"))
-		mmc->caps |= MMC_CAP_NEEDS_POLL;
+	/* Get cd_active_low from caps2's MMC_CAP2_CD_ACTIVE_HIGH flag */
+	cd_active_low = (mmc->caps2 & MMC_CAP2_CD_ACTIVE_HIGH) == 0;
  
  	/* MMC core transfer sizes tunable parameters */
  	mmc->max_segs      = MAX_HW_SGMTS;
