diff --git a/patches/fmc-adc-100m14b4cha-sw.diff b/patches/fmc-adc-100m14b4cha-sw.diff
new file mode 100644
index 0000000000000000000000000000000000000000..00d1d494bc046645d38d29012e8fa5917423d07f
--- /dev/null
+++ b/patches/fmc-adc-100m14b4cha-sw.diff
@@ -0,0 +1,123 @@
+diff --git a/kernel/fa-zio-drv.c b/kernel/fa-zio-drv.c
+index a3a288d..69f545e 100644
+--- a/kernel/fa-zio-drv.c
++++ b/kernel/fa-zio-drv.c
+@@ -193,10 +193,13 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
+ 		return 0;
+ 	case ZFA_SW_CH1_OFFSET_ZERO:
+ 		i--;
++		__attribute__((fallthrough));
+ 	case ZFA_SW_CH2_OFFSET_ZERO:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_SW_CH3_OFFSET_ZERO:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_SW_CH4_OFFSET_ZERO:
+ 		i--;
+ 
+@@ -223,10 +226,13 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
+ 	/* FIXME temporary until TLV control */
+ 	case ZFA_CH1_OFFSET:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH2_OFFSET:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH3_OFFSET:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH4_OFFSET:
+ 		i--;
+ 
+@@ -252,9 +258,13 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
+ 		break;
+ 	/* FIXME temporary until TLV control */
+ 	case ZFA_CH1_CTL_TERM:
++		/*fallthrough*/
+ 	case ZFA_CH2_CTL_TERM:
++		/*fallthrough*/
+ 	case ZFA_CH3_CTL_TERM:
++		/*fallthrough*/
+ 	case ZFA_CH4_CTL_TERM:
++		/*fallthrough*/
+ 	case ZFA_CHx_CTL_TERM:
+ 		if (usr_val > 1)
+ 			usr_val = 1;
+@@ -263,10 +273,13 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
+ 	/* FIXME temporary until TLV control */
+ 	case ZFA_CH1_CTL_RANGE:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH2_CTL_RANGE:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH3_CTL_RANGE:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH4_CTL_RANGE:
+ 		i--;
+ 		range = zfad_convert_user_range(usr_val);
+@@ -336,10 +349,13 @@ static int zfad_info_get(struct device *dev, struct zio_attribute *zattr,
+ 	/* FIXME temporary until TLV control */
+ 	case ZFA_CH1_OFFSET:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH2_OFFSET:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH3_OFFSET:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_CH4_OFFSET:
+ 		i--;
+ 		*usr_val = fa->user_offset[i];
+@@ -349,7 +365,9 @@ static int zfad_info_get(struct device *dev, struct zio_attribute *zattr,
+ 		*usr_val = fa->user_offset[to_zio_chan(dev)->index];
+ 		return 0;
+ 	case ZFAT_ADC_TST_PATTERN:
++		/*fallthrough*/
+ 	case ZFA_SW_R_NOADDRES_NBIT:
++		/*fallthrough*/
+ 	case ZFA_SW_R_NOADDERS_AUTO:
+ 		/* ZIO automatically return the attribute value */
+ 		return 0;
+@@ -363,16 +381,21 @@ static int zfad_info_get(struct device *dev, struct zio_attribute *zattr,
+ 		return 0;
+ 	case ZFA_SW_CH1_OFFSET_ZERO:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_SW_CH2_OFFSET_ZERO:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_SW_CH3_OFFSET_ZERO:
+ 		i--;
++		/*fallthrough*/
+ 	case ZFA_SW_CH4_OFFSET_ZERO:
+ 		i--;
+ 		*usr_val = fa->zero_offset[i];
+ 		return 0;
+ 	case ZFA_CHx_SAT:
++		/*fallthrough*/
+ 	case ZFA_CHx_CTL_TERM:
++		/*fallthrough*/
+ 	case ZFA_CHx_CTL_RANGE:
+ 		reg_index = zfad_get_chx_index(zattr->id, to_zio_chan(dev));
+ 		break;
+diff --git a/kernel/fmc-adc-100m14b4cha.h b/kernel/fmc-adc-100m14b4cha.h
+index 98ace36..359e312 100644
+--- a/kernel/fmc-adc-100m14b4cha.h
++++ b/kernel/fmc-adc-100m14b4cha.h
+@@ -11,11 +11,10 @@
+ #include <linux/types.h>
+ #else
+ #include <stdint.h>
+-#endif
+-
+ #ifndef BIT
+ #define BIT(nr) (1UL << (nr))
+ #endif
++#endif
+ 
+ /* Trigger sources */
+ #define FA100M14B4C_TRG_SRC_EXT BIT(0)
diff --git a/patches/zio.diff b/patches/zio.diff
new file mode 100644
index 0000000000000000000000000000000000000000..0ebb7eac30580b11f01544752274e54a1e528cb2
--- /dev/null
+++ b/patches/zio.diff
@@ -0,0 +1,24 @@
+diff --git a/drivers/zio/devices/zio-loop.c b/drivers/zio/devices/zio-loop.c
+index 4edd97f..c88acda 100644
+--- a/drivers/zio/devices/zio-loop.c
++++ b/drivers/zio/devices/zio-loop.c
+@@ -186,6 +186,7 @@ static int zloop_raw_output(struct zio_cset *cset)
+ 
+ 	case ZLOOP_CSET_OUT_DATA:
+ 		index = ZLOOP_TYPE_READ_DATA;
++		/*@fallthrough@*/
+ 	case ZLOOP_CSET_OUT_CTRLDATA:
+ 		if (index < 0)
+ 			index = ZLOOP_TYPE_READ_CTRLDATA;
+diff --git a/drivers/zio/sysfs.c b/drivers/zio/sysfs.c
+index 42f292a..9f0ca40 100644
+--- a/drivers/zio/sysfs.c
++++ b/drivers/zio/sysfs.c
+@@ -764,6 +764,7 @@ static ssize_t zio_store_alarm(struct device *dev,
+ 	switch (sscanf(buf, "%i %i", &v1, &v2)) {
+ 	case 2:
+ 		ctrl->drv_alarms &= (~v2);
++		/*@fallthrough@*/
+ 	case 1:
+ 		ctrl->zio_alarms &= (~v1);
+ 		break;
diff --git a/scripts/zio_build.sh b/scripts/zio_build.sh
index 0f2ba39069272a4580d9265db12e93f2393b939f..5b045b38a0211b3777fa366f40fc3d96e42c4e46 100644
--- a/scripts/zio_build.sh
+++ b/scripts/zio_build.sh
@@ -9,6 +9,7 @@ cd $BUILD_DIR
 [ -d $PROJECT ] || git clone https://ohwr.org/project/zio.git $PROJECT
 cd $PROJECT
 git checkout -B release v1.4.2
+[ -e $PATCH_DIR/$PROJECT.diff ] && patch -p1 < $PATCH_DIR/$PROJECT.diff
 make -C drivers/zio
 sudo -E make -C drivers/zio modules_install