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