diff --git a/board/czechlight/clearfog/patches/linux.patch b/board/czechlight/clearfog/patches/linux.patch
index 81dbd2f..d975bf6 100644
--- a/board/czechlight/clearfog/patches/linux.patch
+++ b/board/czechlight/clearfog/patches/linux.patch
@@ -165,7 +165,7 @@
  }
  
 diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c
-index cf73a403d22d..250e5e536a9c 100644
+index 98905d4a79ca..64c67478f781 100644
 --- a/drivers/pinctrl/pinctrl-mcp23s08.c
 +++ b/drivers/pinctrl/pinctrl-mcp23s08.c
 @@ -16,6 +16,7 @@
@@ -176,7 +176,15 @@
  
  /*
   * MCP types supported by driver
-@@ -265,7 +266,6 @@ static int mcp_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
+@@ -68,6 +69,7 @@ struct mcp23s08 {
+ 	struct mutex		lock;
+ 
+ 	struct gpio_chip	chip;
++	struct irq_chip		irq_chip;
+ 
+ 	struct regmap		*regmap;
+ 	struct device		*dev;
+@@ -265,7 +267,6 @@ static int mcp_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
  		status = (data & BIT(pin)) ? 1 : 0;
  		break;
  	default:
@@ -184,7 +192,7 @@
  		return -ENOTSUPP;
  	}
  
-@@ -292,7 +292,7 @@ static int mcp_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
+@@ -292,7 +293,7 @@ static int mcp_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
  			ret = mcp_set_bit(mcp, MCP_GPPU, pin, arg);
  			break;
  		default:
@@ -193,7 +201,41 @@
  			return -ENOTSUPP;
  		}
  	}
-@@ -664,115 +664,6 @@ static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp)
+@@ -607,15 +608,6 @@ static void mcp23s08_irq_bus_unlock(struct irq_data *data)
+ 	mutex_unlock(&mcp->lock);
+ }
+ 
+-static struct irq_chip mcp23s08_irq_chip = {
+-	.name = "gpio-mcp23xxx",
+-	.irq_mask = mcp23s08_irq_mask,
+-	.irq_unmask = mcp23s08_irq_unmask,
+-	.irq_set_type = mcp23s08_irq_set_type,
+-	.irq_bus_lock = mcp23s08_irq_bus_lock,
+-	.irq_bus_sync_unlock = mcp23s08_irq_bus_unlock,
+-};
+-
+ static int mcp23s08_irq_setup(struct mcp23s08 *mcp)
+ {
+ 	struct gpio_chip *chip = &mcp->chip;
+@@ -645,7 +637,7 @@ static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp)
+ 	int err;
+ 
+ 	err =  gpiochip_irqchip_add_nested(chip,
+-					   &mcp23s08_irq_chip,
++					   &mcp->irq_chip,
+ 					   0,
+ 					   handle_simple_irq,
+ 					   IRQ_TYPE_NONE);
+@@ -656,7 +648,7 @@ static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp)
+ 	}
+ 
+ 	gpiochip_set_nested_irqchip(chip,
+-				    &mcp23s08_irq_chip,
++				    &mcp->irq_chip,
+ 				    mcp->irq);
+ 
+ 	return 0;
+@@ -664,115 +656,6 @@ static int mcp23s08_irqchip_setup(struct mcp23s08 *mcp)
  
  /*----------------------------------------------------------------------*/
  
@@ -309,7 +351,7 @@
  static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
  			      void *data, unsigned addr, unsigned type,
  			      unsigned int base, int cs)
-@@ -793,7 +684,6 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
+@@ -793,7 +676,6 @@ static int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
  	mcp->chip.get = mcp23s08_get;
  	mcp->chip.direction_output = mcp23s08_direction_output;
  	mcp->chip.set = mcp23s08_set;
@@ -317,7 +359,21 @@
  #ifdef CONFIG_OF_GPIO
  	mcp->chip.of_gpio_n_cells = 2;
  	mcp->chip.of_node = dev->of_node;
-@@ -1099,6 +989,7 @@ static int mcp23s08_probe(struct spi_device *spi)
+@@ -1047,6 +929,13 @@ static int mcp230xx_probe(struct i2c_client *client,
+ 		return -ENOMEM;
+ 
+ 	mcp->irq = client->irq;
++	mcp->irq_chip.name = dev_name(&client->dev);
++	mcp->irq_chip.irq_mask = mcp23s08_irq_mask;
++	mcp->irq_chip.irq_unmask = mcp23s08_irq_unmask;
++	mcp->irq_chip.irq_set_type = mcp23s08_irq_set_type;
++	mcp->irq_chip.irq_bus_lock = mcp23s08_irq_bus_lock;
++	mcp->irq_chip.irq_bus_sync_unlock = mcp23s08_irq_bus_unlock;
++
+ 	status = mcp23s08_probe_one(mcp, &client->dev, client, client->addr,
+ 				    id->driver_data, pdata->base, 0);
+ 	if (status)
+@@ -1104,6 +993,7 @@ static int mcp23s08_probe(struct spi_device *spi)
  	int				status, type;
  	unsigned			ngpio = 0;
  	const struct			of_device_id *match;
@@ -325,7 +381,31 @@
  
  	match = of_match_device(of_match_ptr(mcp23s08_spi_of_match), &spi->dev);
  	if (match)
-@@ -1161,6 +1052,16 @@ static int mcp23s08_probe(struct spi_device *spi)
+@@ -1144,8 +1034,7 @@ static int mcp23s08_probe(struct spi_device *spi)
+ 		return -ENODEV;
+ 
+ 	data = devm_kzalloc(&spi->dev,
+-			    sizeof(*data) + chips * sizeof(struct mcp23s08),
+-			    GFP_KERNEL);
++			    struct_size(data, chip, chips), GFP_KERNEL);
+ 	if (!data)
+ 		return -ENOMEM;
+ 
+@@ -1157,6 +1046,13 @@ static int mcp23s08_probe(struct spi_device *spi)
+ 		chips--;
+ 		data->mcp[addr] = &data->chip[chips];
+ 		data->mcp[addr]->irq = spi->irq;
++		data->mcp[addr]->irq_chip.name = dev_name(&spi->dev);
++		data->mcp[addr]->irq_chip.irq_mask = mcp23s08_irq_mask;
++		data->mcp[addr]->irq_chip.irq_unmask = mcp23s08_irq_unmask;
++		data->mcp[addr]->irq_chip.irq_set_type = mcp23s08_irq_set_type;
++		data->mcp[addr]->irq_chip.irq_bus_lock = mcp23s08_irq_bus_lock;
++		data->mcp[addr]->irq_chip.irq_bus_sync_unlock =
++			mcp23s08_irq_bus_unlock;
+ 		status = mcp23s08_probe_one(data->mcp[addr], &spi->dev, spi,
+ 					    0x40 | (addr << 1), type,
+ 					    pdata->base, addr);
+@@ -1166,6 +1062,16 @@ static int mcp23s08_probe(struct spi_device *spi)
  		if (pdata->base != -1)
  			pdata->base += data->mcp[addr]->chip.ngpio;
  		ngpio += data->mcp[addr]->chip.ngpio;
@@ -343,7 +423,7 @@
  	data->ngpio = ngpio;
  
 diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
-index 47ef6b1a2e76..d28ecdf3bafc 100644
+index 7f280567093e..1c4ec4452700 100644
 --- a/drivers/spi/spi-orion.c
 +++ b/drivers/spi/spi-orion.c
 @@ -93,6 +93,7 @@ struct orion_direct_acc {
@@ -354,9 +434,9 @@
  };
  
  struct orion_spi {
-@@ -432,7 +433,7 @@ orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer)
- 	struct orion_spi *orion_spi;
+@@ -433,7 +434,7 @@ orion_spi_write_read(struct spi_device *spi, struct spi_transfer *xfer)
  	int cs = spi->chip_select;
+ 	void __iomem *vaddr;
  
 -	word_len = spi->bits_per_word;
 +	word_len = xfer->bits_per_word;
@@ -381,7 +461,7 @@
  			count -= 2;
  		} while (count);
  	}
-@@ -733,6 +738,12 @@ static int orion_spi_probe(struct platform_device *pdev)
+@@ -734,6 +739,12 @@ static int orion_spi_probe(struct platform_device *pdev)
  			}
  		}
  
@@ -394,7 +474,7 @@
  		/*
  		 * Check if an address is configured for this SPI device. If
  		 * not, the MBus mapping via the 'ranges' property in the 'soc'
-@@ -744,6 +755,12 @@ static int orion_spi_probe(struct platform_device *pdev)
+@@ -745,6 +756,12 @@ static int orion_spi_probe(struct platform_device *pdev)
  		if (status)
  			continue;
  
@@ -408,123 +488,27 @@
  		 * Only map one page for direct access. This is enough for the
  		 * simple TX transfer which only writes to the first word.
 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
-index 9da0bc5a036c..097883f1fabd 100644
+index 9a7def7c3237..1c618bd5b55c 100644
 --- a/drivers/spi/spi.c
 +++ b/drivers/spi/spi.c
-@@ -60,6 +60,7 @@ static void spidev_release(struct device *dev)
- 		spi->controller->cleanup(spi);
- 
- 	spi_controller_put(spi->controller);
-+	kfree(spi->driver_override);
- 	kfree(spi);
- }
- 
-@@ -77,6 +78,58 @@ modalias_show(struct device *dev, struct device_attribute *a, char *buf)
- }
- static DEVICE_ATTR_RO(modalias);
- 
-+static ssize_t driver_override_store(struct device *dev,
-+				     struct device_attribute *a,
-+				     const char *buf, size_t count)
-+{
-+	struct spi_device *spi = to_spi_device(dev);
-+	const char *end = memchr(buf, '\n', count);
-+	const size_t len = end ? end - buf : count;
-+	const char *driver_override, *old;
+@@ -75,6 +75,7 @@ static ssize_t driver_override_store(struct device *dev,
+ 	const char *end = memchr(buf, '\n', count);
+ 	const size_t len = end ? end - buf : count;
+ 	const char *driver_override, *old;
 +	int ret;
-+
-+	/* We need to keep extra room for a newline when displaying value */
-+	if (len >= (PAGE_SIZE - 1))
-+		return -EINVAL;
-+
-+	driver_override = kstrndup(buf, len, GFP_KERNEL);
-+	if (!driver_override)
-+		return -ENOMEM;
-+
-+	device_lock(dev);
-+	old = spi->driver_override;
-+	if (len) {
-+		spi->driver_override = driver_override;
-+	} else {
-+		/* Emptry string, disable driver override */
-+		spi->driver_override = NULL;
-+		kfree(driver_override);
-+	}
-+	device_unlock(dev);
-+	kfree(old);
-+
+ 
+ 	/* We need to keep extra room for a newline when displaying value */
+ 	if (len >= (PAGE_SIZE - 1))
+@@ -96,6 +97,12 @@ static ssize_t driver_override_store(struct device *dev,
+ 	device_unlock(dev);
+ 	kfree(old);
+ 
 +	/* Attach device to new driver if it's not already attached */
 +	ret = device_attach(dev);
 +	if (ret < 0 && ret != -EPROBE_DEFER)
 +		dev_warn(dev, "device attach to '%s' failed (%d)\n",
 +			 spi->driver_override, ret);
 +
-+	return count;
-+}
-+
-+static ssize_t driver_override_show(struct device *dev,
-+				    struct device_attribute *a, char *buf)
-+{
-+	const struct spi_device *spi = to_spi_device(dev);
-+	ssize_t len;
-+
-+	device_lock(dev);
-+	len = snprintf(buf, PAGE_SIZE, "%s\n", spi->driver_override ? : "");
-+	device_unlock(dev);
-+	return len;
-+}
-+static DEVICE_ATTR_RW(driver_override);
-+
- #define SPI_STATISTICS_ATTRS(field, file)				\
- static ssize_t spi_controller_##field##_show(struct device *dev,	\
- 					     struct device_attribute *attr, \
-@@ -158,6 +211,7 @@ SPI_STATISTICS_SHOW(transfers_split_maxsize, "%lu");
+ 	return count;
+ }
  
- static struct attribute *spi_dev_attrs[] = {
- 	&dev_attr_modalias.attr,
-+	&dev_attr_driver_override.attr,
- 	NULL,
- };
- 
-@@ -305,6 +359,10 @@ static int spi_match_device(struct device *dev, struct device_driver *drv)
- 	const struct spi_device	*spi = to_spi_device(dev);
- 	const struct spi_driver	*sdrv = to_spi_driver(drv);
- 
-+	/* Check override first, and if set, only use the named driver */
-+	if (spi->driver_override)
-+		return strcmp(spi->driver_override, drv->name) == 0;
-+
- 	/* Attempt an OF style match */
- 	if (of_driver_match_device(dev, drv))
- 		return 1;
-diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
-index cda10719d1d1..c5fe08bc34a0 100644
---- a/drivers/spi/spidev.c
-+++ b/drivers/spi/spidev.c
-@@ -724,11 +724,9 @@ static int spidev_probe(struct spi_device *spi)
- 	 * compatible string, it is a Linux implementation thing
- 	 * rather than a description of the hardware.
- 	 */
--	if (spi->dev.of_node && !of_match_device(spidev_dt_ids, &spi->dev)) {
--		dev_err(&spi->dev, "buggy DT: spidev listed directly in DT\n");
--		WARN_ON(spi->dev.of_node &&
--			!of_match_device(spidev_dt_ids, &spi->dev));
--	}
-+	WARN(spi->dev.of_node &&
-+	     of_device_is_compatible(spi->dev.of_node, "spidev"),
-+	     "%pOF: buggy DT: spidev listed directly in DT\n", spi->dev.of_node);
- 
- 	spidev_probe_acpi(spi);
- 
-diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
-index a64235e05321..e28f7c5d6eb6 100644
---- a/include/linux/spi/spi.h
-+++ b/include/linux/spi/spi.h
-@@ -167,6 +167,7 @@ struct spi_device {
- 	void			*controller_state;
- 	void			*controller_data;
- 	char			modalias[SPI_NAME_SIZE];
-+	const char		*driver_override;
- 	int			cs_gpio;	/* chip select gpio */
- 
- 	/* the statistics */
