- 07 Jan, 2013 40 commits
-
-
Ian Abbott authored
Represent the fake samples as unsigned shorts instead of signed shorts, as this is the usual Comedi convention. There is no change to the actual binary representation, although the `cfc_write_to_buffer()` call currently expects a signed short for some bizarre reason. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
In the "comedi_test" module's acquisition timer function `waveform_ai_interrupt()`, move the code for ending the acquisition outside the scan loop. Determine if the number of scans to be done is sufficient to end the acquisition before entering the scan loop. On leaving the scan loop, set the `COMEDI_CB_EOA` event if the acquisition is ending. Only reschedule the timer if the acquisition is not ending. Remove the somewhat useless `timer_running` flag from the private data. This was intended to stop the timer function adding the timer back on the timer queue periodically, but the flag setting wasn't synchronized with the timer and we already use `del_timer_sync()` to synchronize removal from the queue. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
In the "comedi_test" module, the timer function `waveform_ai_interrupt()` doesn't need to remove the timer from the timer queue as the caller has already removed it from the queue. Remove the call to `del_timer()` in this function. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
Éric Piel reported a kernel oops in the "comedi_test" module. It was a NULL pointer dereference within `waveform_ai_interrupt()` (actually a timer function) that sometimes occurred when a running asynchronous command is cancelled (either by the `COMEDI_CANCEL` ioctl or by closing the device file). This seems to be a race between the caller of `waveform_ai_cancel()` which on return from that function goes and tears down the running command, and the timer function which uses the command. In particular, `async->cmd.chanlist` gets freed (and the pointer set to NULL) by `do_become_nonbusy()` in "comedi_fops.c" but a previously scheduled `waveform_ai_interrupt()` timer function will dereference that pointer regardless, leading to the oops. Fix it by replacing the `del_timer()` call in `waveform_ai_cancel()` with `del_timer_sync()`. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Reported-by: Éric Piel <piel@delmic.com> Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Lijo Antony authored
Fixed a camel case issue. Signed-off-by: Lijo Antony <lijo.kernel@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Store the 'index' for each comedi_subdevice when they are initially allocated by comedi_alloc_subdevice(). This allows removing the pointer math in comedi_fops.c which is used to figure out the index that user space uses to access the individual subdevices. Fix the ni_mio_common driver so it also uses the 'index' instead of doing the pointer math. Also, remove a couple unused macros in the pcmda12, pcmmio, and pcmuio drivers which also do the pointer math to figure out the index. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
The hardware_device member of comedi_file_info is not set in this function. Use kzalloc to make sure this pointer does not contain invalid data. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Use comedi_dev_from_minor() to simplify the return -ENODEV tests. Change the (foo == NULL) tests to simply (!foo). Use a local variable to hold a pointer to the async->buf_page_list[] when doing the remap_pfn_range(). This cleans up the ugly line breaks for the page_to_pfn(virt_to_page(...) operation. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Flip the info->device tests so than the return NULL occurs last. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Introduce, and use, a helper to check the subdevice runflags to see if it is not in error and not running. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Introduce, and use, a helper to check the subdevice runflags to see if the SRF_ERROR flag is set. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
The subdevice runflags are protected with a spin_lock. Only the comedi core should be accessing them directly. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Use the helper function comedi_is_subdevice_running() instead of getting the subdevice runflags and then masking the result. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Introduce a helper function that checks the subdevice runflags to see if the subdevice is running a command. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
For aesthetic reasons, move this function so its near comedi_set_subdevice_runflags(). Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
As mentioned in CodingStyle, the prefered form is: p = kmalloc(sizeof(*p), ...); Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
This function is only called by the module_{init,exit} functions. For aesthetic reasons, move it near them. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
For aesthetic reasons, move the module_{init,exit} functions to the end of the file. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
For aesthetic reasons, move the MODULE_* information to the end of the file. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Use comedi_dev_from_minor() to simplify the return -ENODEV tests. Cleanup the sanity checking a bit and remove the need for the goto's when returning an initial error condition. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Use comedi_dev_from_minor() to simplify the return -ENODEV tests. Cleanup the sanity checking a bit and remove the need for the goto's when returning an initial error condition. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Consolidate the local variables 'read_subdev' and 'write_subdev' into a single local variable 's'. Use comedi_dev_from_minor() to simplify the return -ENODEV tests. Use a goto in the !dev->attached test so that the mutex_unlock() call is in a common place. Cleanup the formating of the || in the read and write subdevice poll code. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Consolidate the local variables 'read_subdev' and 'write_subdev' into a single local variable 's'. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
The 'get' usually implies increasing a reference count of an object. These function return a pointer but do not do any reference counting. For aesthetic reasons, rename the functions to better represent what they do. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
The 'get' usually implies increasing a reference count of an object. This function returns a pointer but does not do any reference counting. For aesthetic reasons, rename the function to better represent what its doing. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
For aesthetic reasons, rename this struct to comedi_file_info. It's a bit shorter and allows fixing some of the ugly line breaks used to keep the lines < 80 chars. Also, consistently use the local variable name 'info' instead of the longer 'dev_file_info' to also fix some ugly line breaks. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
This structure is only used in comedi_fops.c as part of handling the file operations and sysfs files. Remove it's defenition from comedidev.h so it's not exposed to the comedi drivers. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
This function is now only used in comedi_fops.c and does not need to be exported. Make it static and move it to avoid forward declarations. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Remove the need to export comedi_get_device_file_info() by using the new helper comedi_dev_from_minor(). This will also allow us to make the comedi_device_file_info struct private. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
A number of functions have to call comedi_get_device_file_info() to get the comedi_device_file_info pointer for a given minor. That pointer is only used to get the actual comedi_device pointer for the minor. Introduce a new helper function, comedi_dev_from_minor(), to simplify this operation. This will also allow us to make the comedi_device_file_info struct private. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
These two inline helper function in comedidev.h are only used in comedi_fops.c. They return information that should only be used by the comedi core. Move both functions to comedi_fops.c so they aren't exposed to the comedi drivers. Also, remove the inline tag and let the compiler figure it out. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
Move a couple of the functions to remove the need for the forward declarations. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
H Hartley Sweeten authored
This module is built whenever CONFIG_COMEDI is enabled but it is only used by the pcmmio and pcmuio drivers. The pcm_common module consists of one exported function. Put a local copy of the function in the pcmmio and pcmuio drivers. This removes the need for the pcm_common module and the now unused pcm_common.[ch] files can be deleted and removed from the Makefile. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
When setting up asynchronous commands on the special interrupt subdevice, support the `TRIG_COUNT` stop source to allow the command to stop automatically after a specified number of scans. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
Initialize the special interrupt subdevice as a digital input subdevice even if the interrupt handler cannot be registered. It's `insn_bits` handler will still read the interrupt status register. This hardware status bits in this register might be valid even if they haven't been enabled in the interrupt control register, but this needs to be checked. In any case, initializing the subdevice as a digital input subdevice is harmless. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
When setting up asynchronous commands for the special interrupt subdevice, use the channel list to decide which interrupt sources to enable. Set the maximum length of the channel list to be the same as the number of channels (2). Normally, the channel list would include channel 0, channel 1 or both. When reading the scan data in the interrupt routine, the readings from each channel in the channel list will be packed into a single unsigned short data value. Make each bit in this value correspond to an index in the channel list. Since all the channels in the channel list are read at the same time, insist that the scan end argument is the length of the channel list and that the conversion source is `TRIG_NOW`. Allocate some private data for the special interrupt subdevice to hold a spin-lock, the channels to be enabled and an indication of whether the command is still active. Stop the command if a buffer overflow occurs. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
The interrupt handler disables all interrupt sources when a valid interrupt occurs. Just disable the triggered interrupt source so we can still get interrupts for the other interrupt source. Also add a comment indicating why the triggered interrupt source is disabled. The interrupt sources are level-sensitive and indicate hardware errors that are likely to be persistent, so if we reenabled them they would just keep triggering repeatedly. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
The `insn_bits` handler for the special digital input subdevice used for interrupts currently uses `s->state` for the data value, which is set to the value of the APCI2032_INT_STATUS_REG register when a valid interrupt occurs. Just read the live register contents in the `insn_bits` handler instead of relying on the interrupt service routine to read it for us. The register contains a couple of hardware error status bits. They might also be valid even when the corresponding bits have not been enabled in the APCI_INT_CTRL_REG register in which case this would be useful for checking for hardware errors without using interrupts, but this needs to be checked. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
If the call to `comedi_buf_put()` fails in the interrupt routine, set the `COMEDI_CB_OVERFLOW` event flag. Note that the `COMEDI_CB_ERROR` flag will have also been set by `comedi_buf_put()` in this case. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
Ian Abbott authored
The subdevice type and flags are initialized incorrectly for the interrupt subdevice - the SDF_CMD_READ value belongs in the subdevice flags. Fix it. Also set the number of channels to 2 since there are 2 interrupt sources each with its own status bit. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-