forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/staging/comedi/drivers.c
....@@ -159,6 +159,8 @@
159159 int i;
160160 struct comedi_subdevice *s;
161161
162
+ lockdep_assert_held(&dev->attach_lock);
163
+ lockdep_assert_held(&dev->mutex);
162164 if (dev->subdevices) {
163165 for (i = 0; i < dev->n_subdevices; i++) {
164166 s = &dev->subdevices[i];
....@@ -196,6 +198,7 @@
196198
197199 void comedi_device_detach(struct comedi_device *dev)
198200 {
201
+ lockdep_assert_held(&dev->mutex);
199202 comedi_device_cancel_all(dev);
200203 down_write(&dev->attach_lock);
201204 dev->attached = false;
....@@ -209,6 +212,19 @@
209212 static int poll_invalid(struct comedi_device *dev, struct comedi_subdevice *s)
210213 {
211214 return -EINVAL;
215
+}
216
+
217
+static int insn_device_inval(struct comedi_device *dev,
218
+ struct comedi_insn *insn, unsigned int *data)
219
+{
220
+ return -EINVAL;
221
+}
222
+
223
+static unsigned int get_zero_valid_routes(struct comedi_device *dev,
224
+ unsigned int n_pairs,
225
+ unsigned int *pair_data)
226
+{
227
+ return 0;
212228 }
213229
214230 int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s,
....@@ -630,6 +646,7 @@
630646 unsigned int buf_size;
631647 int ret;
632648
649
+ lockdep_assert_held(&dev->mutex);
633650 if ((s->subdev_flags & (SDF_CMD_READ | SDF_CMD_WRITE)) == 0) {
634651 dev_warn(dev->class_dev,
635652 "async subdevices must support SDF_CMD_READ or SDF_CMD_WRITE\n");
....@@ -676,6 +693,13 @@
676693 struct comedi_subdevice *s;
677694 int ret;
678695 int i;
696
+
697
+ lockdep_assert_held(&dev->mutex);
698
+ if (!dev->insn_device_config)
699
+ dev->insn_device_config = insn_device_inval;
700
+
701
+ if (!dev->get_valid_routes)
702
+ dev->get_valid_routes = get_zero_valid_routes;
679703
680704 for (i = 0; i < dev->n_subdevices; i++) {
681705 s = &dev->subdevices[i];
....@@ -728,6 +752,7 @@
728752 {
729753 int ret;
730754
755
+ lockdep_assert_held(&dev->mutex);
731756 ret = __comedi_device_postconfig(dev);
732757 if (ret < 0)
733758 return ret;
....@@ -927,6 +952,7 @@
927952 struct comedi_driver *driv;
928953 int ret;
929954
955
+ lockdep_assert_held(&dev->mutex);
930956 if (dev->attached)
931957 return -EBUSY;
932958
....@@ -1034,18 +1060,19 @@
10341060 return PTR_ERR(dev);
10351061 }
10361062 /* Note: comedi_alloc_board_minor() locked dev->mutex. */
1063
+ lockdep_assert_held(&dev->mutex);
10371064
10381065 dev->driver = driver;
10391066 dev->board_name = dev->driver->driver_name;
10401067 ret = driver->auto_attach(dev, context);
10411068 if (ret >= 0)
10421069 ret = comedi_device_postconfig(dev);
1043
- mutex_unlock(&dev->mutex);
10441070
10451071 if (ret < 0) {
10461072 dev_warn(hardware_device,
10471073 "driver '%s' failed to auto-configure device.\n",
10481074 driver->driver_name);
1075
+ mutex_unlock(&dev->mutex);
10491076 comedi_release_hardware_device(hardware_device);
10501077 } else {
10511078 /*
....@@ -1055,6 +1082,7 @@
10551082 dev_info(dev->class_dev,
10561083 "driver '%s' has successfully auto-configured '%s'.\n",
10571084 driver->driver_name, dev->board_name);
1085
+ mutex_unlock(&dev->mutex);
10581086 }
10591087 return ret;
10601088 }