cras_iodev_list.h revision ddab985b9d96e8a3b386079c620422c1aab557a9
13af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
23af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Use of this source code is governed by a BSD-style license that can be
33af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * found in the LICENSE file.
43af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
53af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
63af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid/*
73af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * IO list manages the list of inputs and outputs available.
83af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
93af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid#ifndef CRAS_IODEV_LIST_H_
103af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid#define CRAS_IODEV_LIST_H_
113af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
123af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid#include <stdint.h>
133af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
14b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang#include "cras_alert.h"
15ce895e7bb75a63c593bec7a5a36bfed3241ab829Dylan Reid#include "cras_types.h"
16ce895e7bb75a63c593bec7a5a36bfed3241ab829Dylan Reid
173af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidstruct cras_iodev;
183af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidstruct cras_iodev_info;
19f1a7e0c094f29c16f6aa9f97d328a93769e69e5cChih-Chung Changstruct cras_ionode;
203af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidstruct cras_rclient;
213af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidstruct cras_rstream;
223af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidstruct cras_audio_format;
233af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
24b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reidtypedef void (*node_volume_callback_t)(cras_node_id_t, int);
253ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiangtypedef void (*node_left_right_swapped_callback_t)(cras_node_id_t, int);
26b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid
27e28134b543e2ed27c39a505d0f9e8fd76f916875Dylan Reid/* Initialize the list of iodevs. */
28e28134b543e2ed27c39a505d0f9e8fd76f916875Dylan Reidvoid cras_iodev_list_init();
29e28134b543e2ed27c39a505d0f9e8fd76f916875Dylan Reid
30e28134b543e2ed27c39a505d0f9e8fd76f916875Dylan Reid/* Clean up any resources used by iodev. */
31e28134b543e2ed27c39a505d0f9e8fd76f916875Dylan Reidvoid cras_iodev_list_deinit();
32e28134b543e2ed27c39a505d0f9e8fd76f916875Dylan Reid
333af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid/* Gets the iodev that should be used for a stream of given type.
343af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Args:
353af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    type - The type of stream to find the output for. (media, voice).
363af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    direction - Playback or capture.
373c698f3975096b7a92c6df2c0c69ea59e1942e81Dylan Reid *    idev - Filled with a pointer to the input device.
383c698f3975096b7a92c6df2c0c69ea59e1942e81Dylan Reid *    odev - Filled with a pointer to the output device.
393af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Returns:
403c698f3975096b7a92c6df2c0c69ea59e1942e81Dylan Reid *    0 on success or a negative error on failure.
413af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
423c698f3975096b7a92c6df2c0c69ea59e1942e81Dylan Reidint cras_get_iodev_for_stream_type(enum CRAS_STREAM_TYPE type,
433c698f3975096b7a92c6df2c0c69ea59e1942e81Dylan Reid				   enum CRAS_STREAM_DIRECTION direction,
443c698f3975096b7a92c6df2c0c69ea59e1942e81Dylan Reid				   struct cras_iodev **idev,
453c698f3975096b7a92c6df2c0c69ea59e1942e81Dylan Reid				   struct cras_iodev **odev);
463af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
473af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid/* Adds an output to the output list.
483af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Args:
49ece5813aeae7b1779d00292ec7ecc404e9396811Dylan Reid *    output - the output to add.
503af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Returns:
513af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    0 on success, negative error on failure.
523af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
53f0b5ce85d54d7d655ac7b8694a5635ecab365d55Dylan Reidint cras_iodev_list_add_output(struct cras_iodev *output);
543af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
553af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid/* Adds an input to the input list.
563af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Args:
573af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    input - the input to add.
583af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Returns:
593af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    0 on success, negative error on failure.
603af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
61f0b5ce85d54d7d655ac7b8694a5635ecab365d55Dylan Reidint cras_iodev_list_add_input(struct cras_iodev *input);
623af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
633af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid/* Removes an output from the output list.
643af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Args:
653af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    output - the output to remove.
663af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Returns:
673af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    0 on success, negative error on failure.
683af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
693af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidint cras_iodev_list_rm_output(struct cras_iodev *output);
703af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
713af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid/* Removes an input from the input list.
723af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Args:
733af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    output - the input to remove.
743af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Returns:
753af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    0 on success, negative error on failure.
763af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
773af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidint cras_iodev_list_rm_input(struct cras_iodev *input);
783af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
79a3bafb94aa13ba1445140b22611104fadb655629Dylan Reid/* Gets a list of outputs. Callee must free the list when finished.  If list_out
80a3bafb94aa13ba1445140b22611104fadb655629Dylan Reid * is NULL, this function can be used to return the number of outputs.
813af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Args:
823af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    list_out - This will be set to the malloc'd area containing the list of
83a3bafb94aa13ba1445140b22611104fadb655629Dylan Reid *        devices.  Ignored if NULL.
843af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Returns:
853af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    The number of devices on the list.
863af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
873af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidint cras_iodev_list_get_outputs(struct cras_iodev_info **list_out);
883af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
89a3bafb94aa13ba1445140b22611104fadb655629Dylan Reid/* Gets a list of inputs. Callee must free the list when finished.  If list_out
90a3bafb94aa13ba1445140b22611104fadb655629Dylan Reid * is NULL, this function can be used to return the number of inputs.
913af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Args:
923af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    list_out - This will be set to the malloc'd area containing the list of
93a3bafb94aa13ba1445140b22611104fadb655629Dylan Reid *        devices.  Ignored if NULL.
943af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid * Returns:
953af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid *    The number of devices on the list.
963af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid */
973af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reidint cras_iodev_list_get_inputs(struct cras_iodev_info **list_out);
983af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid
999827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang/* Returns the active node id.
1009827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang * Args:
1019827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang *    direction - Playback or capture.
1029827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang * Returns:
1039827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang *    The id of the active node.
1049827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang */
1059827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Changcras_node_id_t cras_iodev_list_get_active_node_id(
1069827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang	enum CRAS_STREAM_DIRECTION direction);
1079827d4b8ffd6483687f7760db4a235477fd90cedChih-Chung Chang
108b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang/* Stores the following data to the shared memory server state region:
109b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang * (1) device list
110b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang * (2) node list
111b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang * (3) selected nodes
112b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang */
11304cf46dbfbbf557847b462e4bb0e2b42402bd3cbChih-Chung Changvoid cras_iodev_list_update_device_list();
1142c78ba503e3c97f90d4e8b0171c8e3ac50eada42Dylan Reid
115b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang/* Stores the node list in the shared memory server state region. */
116b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Changvoid cras_iodev_list_update_node_list();
117b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang
118b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang/* Adds a callback to call when the nodes are added/removed.
119b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang * Args:
120b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang *    cb - Function to call when there is a change.
121b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang *    arg - Value to pass back to callback.
122b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang */
123b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Changint cras_iodev_list_register_nodes_changed_cb(cras_alert_cb cb, void *arg);
124b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang
125b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang/* Removes a callback to call when the nodes are added/removed.
126b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang * Args:
127b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang *    cb - Function to call when there is a change.
128b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang *    arg - Value to pass back to callback.
129b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang */
130b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Changint cras_iodev_list_remove_nodes_changed_cb(cras_alert_cb cb, void *arg);
131b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang
132b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang/* Notify that nodes are added/removed. */
133b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Changvoid cras_iodev_list_notify_nodes_changed();
134b2ad33424e21106930eb23db093746dc30926f27Chih-Chung Chang
135c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang/* Adds a callback to call when the active output/input node changes.
136c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang * Args:
137c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang *    cb - Function to call when there is a change.
138c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang *    arg - Value to pass back to callback.
139c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang */
140c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Changint cras_iodev_list_register_active_node_changed_cb(cras_alert_cb cb,
141c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang						    void *arg);
142c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang
143c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang/* Removes a callback to call when the active output/input node changes.
144c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang * Args:
145c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang *    cb - Function to call when there is a change.
146c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang *    arg - Value to pass back to callback.
147c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang */
148c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Changint cras_iodev_list_remove_active_node_changed_cb(cras_alert_cb cb,
149c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang						  void *arg);
150c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang
151c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang/* Notify that active output/input node is changed. */
152c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Changvoid cras_iodev_list_notify_active_node_changed();
153c732e27a905ddce9ccb4507bec7431b6406fdda4Chih-Chung Chang
154d59b94ce647077ea9a4bb1c3593d32ac5ed02e22Chih-Chung Chang/* Sets an attribute of an ionode on a device.
155741ad2848629417c45ce2064b77cde0e26538f04Chih-Chung Chang * Args:
156770ea30175b730e5b771eeae808bbf959e132c3eChih-Chung Chang *    id - the id of the ionode.
157741ad2848629417c45ce2064b77cde0e26538f04Chih-Chung Chang *    node_index - Index of the ionode on the device.
158d59b94ce647077ea9a4bb1c3593d32ac5ed02e22Chih-Chung Chang *    attr - the attribute we want to change.
159d59b94ce647077ea9a4bb1c3593d32ac5ed02e22Chih-Chung Chang *    value - the value we want to set.
160741ad2848629417c45ce2064b77cde0e26538f04Chih-Chung Chang */
161770ea30175b730e5b771eeae808bbf959e132c3eChih-Chung Changint cras_iodev_list_set_node_attr(cras_node_id_t id,
162d59b94ce647077ea9a4bb1c3593d32ac5ed02e22Chih-Chung Chang				  enum ionode_attr attr, int value);
163741ad2848629417c45ce2064b77cde0e26538f04Chih-Chung Chang
164ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Chang/* Select a node as the preferred node.
1656f0a5e6a967558105f37513801af573167890f67Chih-Chung Chang * Args:
1666f0a5e6a967558105f37513801af573167890f67Chih-Chung Chang *    direction - Playback or capture.
167ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Chang *    node_id - the id of the ionode to be selected. As a special case, if
168ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Chang *        node_id is 0, don't select any node in this direction.
1696f0a5e6a967558105f37513801af573167890f67Chih-Chung Chang */
170ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Changvoid cras_iodev_list_select_node(enum CRAS_STREAM_DIRECTION direction,
171ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Chang				 cras_node_id_t node_id);
172ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Chang
173aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao/* Adds a node to the active devices list.
174aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao * Args:
175ddab985b9d96e8a3b386079c620422c1aab557a9Hsin-Yu Chao *    direction - Playback or capture.
176aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao *    node_id - The id of the ionode to be added.
177aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao */
178ddab985b9d96e8a3b386079c620422c1aab557a9Hsin-Yu Chaovoid cras_iodev_list_add_active_node(enum CRAS_STREAM_DIRECTION direction,
179ddab985b9d96e8a3b386079c620422c1aab557a9Hsin-Yu Chao				     cras_node_id_t node_id);
180aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao
181aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao/* Removes a node from the active devices list.
182aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao * Args:
183ddab985b9d96e8a3b386079c620422c1aab557a9Hsin-Yu Chao *    direction - Playback or capture.
184aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao *    node_id - The id of the ionode to be removed.
185aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao */
186ddab985b9d96e8a3b386079c620422c1aab557a9Hsin-Yu Chaovoid cras_iodev_list_rm_active_node(enum CRAS_STREAM_DIRECTION direction,
187ddab985b9d96e8a3b386079c620422c1aab557a9Hsin-Yu Chao				    cras_node_id_t node_id);
188aa7392943403d106e899be550e52cc2a0053642fHsin-Yu Chao
189ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Chang/* Returns 1 if the node is selected, 0 otherwise. */
190ea1b78a018d72fd22f5ce5650121f5e4b8325a1dChih-Chung Changint cras_iodev_list_node_selected(struct cras_ionode *node);
1916f0a5e6a967558105f37513801af573167890f67Chih-Chung Chang
192b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid/* Sets the function to call when a node volume changes. */
193b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reidvoid cras_iodev_list_set_node_volume_callbacks(node_volume_callback_t volume_cb,
194b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid					       node_volume_callback_t gain_cb);
195b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid
196b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid/* Notify the current volume of the given node. */
197b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reidvoid cras_iodev_list_notify_node_volume(struct cras_ionode *node);
198b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid
199b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid/* Notify the current capture gain of the given node. */
200b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reidvoid cras_iodev_list_notify_node_capture_gain(struct cras_ionode *node);
201b6670c0295704e171c518e7ae9fd9a2c6f88f535Dylan Reid
2023ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiang/* Sets the function to call when a node's left right channel swapping state
2033ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiang * is changes. */
2043ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiangvoid cras_iodev_list_set_node_left_right_swapped_callbacks(
2053ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiang				node_left_right_swapped_callback_t swapped_cb);
2063ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiang
2073ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiang/* Notify the current left right channel swapping state of the given node. */
2083ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiangvoid cras_iodev_list_notify_node_left_right_swapped(struct cras_ionode *node);
2093ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiang
2103ac00e542de73e404423161a412b04b64fe7d847Cheng-Yi Chiang
2110e5fc2e0264e7adf3ab4f39d6be156fc53114544Dylan Reid/* Gets the audio thread used by the devices. */
2120e5fc2e0264e7adf3ab4f39d6be156fc53114544Dylan Reidstruct audio_thread *cras_iodev_list_get_audio_thread();
2130e5fc2e0264e7adf3ab4f39d6be156fc53114544Dylan Reid
2148392426821216de7fd739913c229382c92b6fde6Dylan Reid/* For unit test only. */
2158392426821216de7fd739913c229382c92b6fde6Dylan Reidvoid cras_iodev_list_reset();
2168392426821216de7fd739913c229382c92b6fde6Dylan Reid
2173af1108724ed69d138d2c3399cd95e0e0e7e382aDylan Reid#endif /* CRAS_IODEV_LIST_H_ */
218