On Tuesday, February 18, 2014 4:36 AM, Ian Abbott wrote:
> On 2014-02-17 21:27, H Hartley Sweeten wrote:
>> The maximum chanlist that this hardware can handle is 16 (the number of
>> input channels).
>>
>> Remove this incorrect data from the boardinfo and just initialize the
>> subdevice 'len_chanlist' to subdevice 'n_chan'.
>
> The driver used to allow repeated channel segments in the channel list
> (with a maximum segment length of 16), which would be far more
> restricted by this patch. Is there any reason to restrict it?
I don't think it's a restriction just a simplification. And it fixes the number
of
scans that occur when the chanlist repeats.
The hardware can only handle a first channel (0-16) to last channel (0-16)
scanlist. It will automatically restart the scanlist once the last channel has
been sampled. For instance a first = 12 to last = 3 scanlist results in these
channels being scanned: 12, 13, 14, 15, 0, 1, 2, 3, 12, 13, ...
The cmd->scan_end_src can only be TRIG_COUNT in this driver. This trigger
source argument is validated to be the cmd->chanlist_len, which in the
example above should be 8.
The cmd->stop_src can be TRIG_COUNT or TRIG_NONE. TRIG_NONE indicates
that the scan should be continued until canceled. TRIG_COUNT indicates that
the scan should happen cmd->stop_arg times.
With the longer maximum chanlist value the user could pass a chanlist that
had repeating first/last channels. This then needs to be sanity checked to
make sure the first/last channels are identical with check_channel_list().
As a simple example, the old way a cmd with a chanlist like this could be
passed:
chanlist[0] -> channel 2
chanlist[1] -> channel 3
chanlist[2] -> channel 4
chanlist[0] -> channel 2
chanlist[1] -> channel 3
chanlist[2] -> channel 4
chanlist[0] -> channel 2
chanlist[1] -> channel 3
chanlist[2] -> channel 4
This is valid and indicates that channels 2-4 should be scanned 3 times. If the
cmd->stop _src == TRIG_COUNT and cmd->stop_arg = 2 the full scan should
then be 6 (3 repeats of the chanlist * 2) scans of channels 2-4. Unfortunately
check_channel_list() does not return how many times the chanlist repeats so
only 2 actual scans will occur.
By changing the maximum chanlist to 16 we enforce the first/last channel scan
and the cmd->stop_arg then scans the list the correct number of times.
I still need to clean up the check_channel_list() functions to remove the now
unnecessary check for the repeats. These functions should now just need to
verify that the first/last channels are incremental.
Regards,
Hartley
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel