From f70575805708cabdedea7498aaa3f710fde4d920 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 31 Jan 2024 03:29:01 +0000
Subject: [PATCH] add lvds1024*800

---
 kernel/drivers/staging/comedi/drivers.c |   30 +++++++++++++++++++++++++++++-
 1 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/kernel/drivers/staging/comedi/drivers.c b/kernel/drivers/staging/comedi/drivers.c
index 5329a39..750a6ff 100644
--- a/kernel/drivers/staging/comedi/drivers.c
+++ b/kernel/drivers/staging/comedi/drivers.c
@@ -159,6 +159,8 @@
 	int i;
 	struct comedi_subdevice *s;
 
+	lockdep_assert_held(&dev->attach_lock);
+	lockdep_assert_held(&dev->mutex);
 	if (dev->subdevices) {
 		for (i = 0; i < dev->n_subdevices; i++) {
 			s = &dev->subdevices[i];
@@ -196,6 +198,7 @@
 
 void comedi_device_detach(struct comedi_device *dev)
 {
+	lockdep_assert_held(&dev->mutex);
 	comedi_device_cancel_all(dev);
 	down_write(&dev->attach_lock);
 	dev->attached = false;
@@ -209,6 +212,19 @@
 static int poll_invalid(struct comedi_device *dev, struct comedi_subdevice *s)
 {
 	return -EINVAL;
+}
+
+static int insn_device_inval(struct comedi_device *dev,
+			     struct comedi_insn *insn, unsigned int *data)
+{
+	return -EINVAL;
+}
+
+static unsigned int get_zero_valid_routes(struct comedi_device *dev,
+					  unsigned int n_pairs,
+					  unsigned int *pair_data)
+{
+	return 0;
 }
 
 int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s,
@@ -630,6 +646,7 @@
 	unsigned int buf_size;
 	int ret;
 
+	lockdep_assert_held(&dev->mutex);
 	if ((s->subdev_flags & (SDF_CMD_READ | SDF_CMD_WRITE)) == 0) {
 		dev_warn(dev->class_dev,
 			 "async subdevices must support SDF_CMD_READ or SDF_CMD_WRITE\n");
@@ -676,6 +693,13 @@
 	struct comedi_subdevice *s;
 	int ret;
 	int i;
+
+	lockdep_assert_held(&dev->mutex);
+	if (!dev->insn_device_config)
+		dev->insn_device_config = insn_device_inval;
+
+	if (!dev->get_valid_routes)
+		dev->get_valid_routes = get_zero_valid_routes;
 
 	for (i = 0; i < dev->n_subdevices; i++) {
 		s = &dev->subdevices[i];
@@ -728,6 +752,7 @@
 {
 	int ret;
 
+	lockdep_assert_held(&dev->mutex);
 	ret = __comedi_device_postconfig(dev);
 	if (ret < 0)
 		return ret;
@@ -927,6 +952,7 @@
 	struct comedi_driver *driv;
 	int ret;
 
+	lockdep_assert_held(&dev->mutex);
 	if (dev->attached)
 		return -EBUSY;
 
@@ -1034,18 +1060,19 @@
 		return PTR_ERR(dev);
 	}
 	/* Note: comedi_alloc_board_minor() locked dev->mutex. */
+	lockdep_assert_held(&dev->mutex);
 
 	dev->driver = driver;
 	dev->board_name = dev->driver->driver_name;
 	ret = driver->auto_attach(dev, context);
 	if (ret >= 0)
 		ret = comedi_device_postconfig(dev);
-	mutex_unlock(&dev->mutex);
 
 	if (ret < 0) {
 		dev_warn(hardware_device,
 			 "driver '%s' failed to auto-configure device.\n",
 			 driver->driver_name);
+		mutex_unlock(&dev->mutex);
 		comedi_release_hardware_device(hardware_device);
 	} else {
 		/*
@@ -1055,6 +1082,7 @@
 		dev_info(dev->class_dev,
 			 "driver '%s' has successfully auto-configured '%s'.\n",
 			 driver->driver_name, dev->board_name);
+		mutex_unlock(&dev->mutex);
 	}
 	return ret;
 }

--
Gitblit v1.6.2