[PATCH 10/15] staging: comedi: tio: implement global tio/ctr routing
Ian Abbott
abbotti at mev.co.uk
Thu Nov 10 19:36:05 UTC 2016
On 12/10/16 12:05, Spencer E. Olson wrote:
> Adds ability to use device-global names in command args, in particular
> cmd->start_arg (for NI_CtrArmStartTrigger), and cmd->scan_begin_arg or
> cmd->convert_arg (either is used to specify NI_CtrGate, with preference
> given to cmd->scan_begin_arg, if it is set).
>
> The actual arguments of cmd->start_arg are not fully checked against known
> register values for the particular devices because these are not documented
> or currently known. This follows the precedence of prior versions of the
> tio driver. Should these become known, they should be annotated in the
> route_values tables and the set of lines in ni_tio_cmdtest should be
> uncommented to allow the tests to be made.
>
> This patch also adds interface functions that allow routes for particular
> counter route destinations to be made/queried/unmade. This allows overseer
> modules to implement test_route, connect_route, and disconnect_route. As a
> part of these changes, various functions were cleaned up and clarified.
>
> These new interface functions allow direct writing/reading of register
> values. This is an example of exactly what the new device-global access
> was intended to solve: the old interface was not consistent with other
> portions of the ni_* drivers--it did not allow full register values to be
> given for various MUXes. Instead, the old interface _did_ abstract away
> some of the actual hardware from the underlying devices, but it was not
> consistent with any other NI hardware. Allowing the device-global
> identifiers to be used, the new patch provides for consistency across all
> ni_* drivers. One final note: these changes provide for backwards
> compatibility by allowing the older values to still be used in through the
> pre-existing kernel interfaces--though not in the new device-global
> test/dis/connect/route interfaces.
>
> Signed-off-by: Spencer E. Olson <olsonse at umich.edu>
> ---
> drivers/staging/comedi/drivers/ni_660x.c | 18 +-
> drivers/staging/comedi/drivers/ni_mio_common.c | 6 +-
> drivers/staging/comedi/drivers/ni_tio.c | 428 +++++++++++++++++------
> drivers/staging/comedi/drivers/ni_tio.h | 42 ++-
> drivers/staging/comedi/drivers/ni_tio_internal.h | 1 +
> drivers/staging/comedi/drivers/ni_tiocmd.c | 66 +++-
> 6 files changed, 446 insertions(+), 115 deletions(-)
>
[snip]
> diff --git a/drivers/staging/comedi/drivers/ni_tio.h b/drivers/staging/comedi/drivers/ni_tio.h
> index 4978358..57e6c6a 100644
> --- a/drivers/staging/comedi/drivers/ni_tio.h
> +++ b/drivers/staging/comedi/drivers/ni_tio.h
> @@ -116,8 +116,10 @@ struct ni_gpct_device {
> enum ni_gpct_variant variant;
> struct ni_gpct *counters;
> unsigned int num_counters;
> + unsigned int counters_per_chip;
> unsigned int regs[NITIO_NUM_REGS];
> spinlock_t regs_lock; /* protects 'regs' */
> + const struct ni_route_tables *routing_tables; /* link to routes */
> };
>
> struct ni_gpct_device *
> @@ -128,7 +130,9 @@ ni_gpct_device_construct(struct comedi_device *,
> unsigned int (*read)(struct ni_gpct *,
> enum ni_gpct_register),
> enum ni_gpct_variant,
> - unsigned int num_counters);
> + unsigned int num_counters,
> + unsigned int counters_per_chip,
> + const struct ni_route_tables *routing_tables);
> void ni_gpct_device_destroy(struct ni_gpct_device *);
> void ni_tio_init_counter(struct ni_gpct *);
> int ni_tio_insn_read(struct comedi_device *, struct comedi_subdevice *,
> @@ -145,4 +149,40 @@ void ni_tio_handle_interrupt(struct ni_gpct *, struct comedi_subdevice *);
> void ni_tio_set_mite_channel(struct ni_gpct *, struct mite_channel *);
> void ni_tio_acknowledge(struct ni_gpct *);
>
> +/**
> + * Retrieves the register value of the current source of the output selector for
> + * the given destination.
> + *
> + * If the terminal for the destination is not already configured as an output,
> + * this function returns -EINVAL as error.
> + *
> + * Return: the register value of the destination output selector;
> + * -EINVAL if terminal is not configured for output.
> + */
> +int ni_tio_get_routing(struct ni_gpct_device *counter_dev,
> + unsigned int destination);
The kerneldoc comments should go with the function definitions, not the
declarations.
--
-=( Ian Abbott @ MEV Ltd. E-mail: <abbotti at mev.co.uk> )=-
-=( Web: http://www.mev.co.uk/ )=-
More information about the devel
mailing list