Skip to content

Commit

Permalink
staging: comedi: ni_routes: Refactor ni_find_valid_routes()
Browse files Browse the repository at this point in the history
Split out the loops in `ni_find_valid_routes()` into separate functions:

* ni_find_route_values(device_family) to find the list of route values
  for a device family (e.g "ni-mseries"); and
* ni_find_valid_routes(board_name) to find the set of valid routes for a
  board name.

The functions above return `NULL` if the information is not found (as we
do not currently have the routing information available for all
supported boards).

Cc: Éric Piel <[email protected]>
Cc: Spencer E. Olson <[email protected]>
Signed-off-by: Ian Abbott <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
ian-abbott authored and gregkh committed Feb 10, 2020
1 parent 0e3ee7f commit 075a329
Showing 1 changed file with 34 additions and 10 deletions.
44 changes: 34 additions & 10 deletions drivers/staging/comedi/drivers/ni_routes.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,36 +50,60 @@
#define RVi(table, src, dest) ((table)[(dest) * NI_NUM_NAMES + (src)])

/*
* Find the proper route_values and ni_device_routes tables for this particular
* device.
*
* Return: -ENODATA if either was not found; 0 if both were found.
* Find the route values for a device family.
*/
static int ni_find_device_routes(const char *device_family,
const char *board_name,
struct ni_route_tables *tables)
static const u8 *ni_find_route_values(const char *device_family)
{
const struct ni_device_routes *dr = NULL;
const u8 *rv = NULL;
int i;

/* First, find the register_values table for this device family */
for (i = 0; ni_all_route_values[i]; ++i) {
if (memcmp(ni_all_route_values[i]->family, device_family,
strnlen(device_family, 30)) == 0) {
rv = &ni_all_route_values[i]->register_values[0][0];
break;
}
}
return rv;
}

/*
* Find the valid routes for a board.
*/
static const struct ni_device_routes *
ni_find_valid_routes(const char *board_name)
{
const struct ni_device_routes *dr = NULL;
int i;

/* Second, find the set of routes valid for this device. */
for (i = 0; ni_device_routes_list[i]; ++i) {
if (memcmp(ni_device_routes_list[i]->device, board_name,
strnlen(board_name, 30)) == 0) {
dr = ni_device_routes_list[i];
break;
}
}
return dr;
}

/*
* Find the proper route_values and ni_device_routes tables for this particular
* device.
*
* Return: -ENODATA if either was not found; 0 if both were found.
*/
static int ni_find_device_routes(const char *device_family,
const char *board_name,
struct ni_route_tables *tables)
{
const struct ni_device_routes *dr;
const u8 *rv;

/* First, find the register_values table for this device family */
rv = ni_find_route_values(device_family);

/* Second, find the set of routes valid for this device. */
dr = ni_find_valid_routes(board_name);

tables->route_values = rv;
tables->valid_routes = dr;
Expand Down

0 comments on commit 075a329

Please sign in to comment.