/* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef CRAS_CARD_CONFIG_H_
#define CRAS_CARD_CONFIG_H_

struct cras_card_config;
struct cras_volume_curve;

/* Creates a configuration based on the config file specified.
 * Args:
 *    config_path - Path containing the config files.
 *    card_name - Name of the card to load a configuration for.
 * Returns:
 *    A pointer to the created config on success, NULL on failure.
 */
struct cras_card_config *cras_card_config_create(const char *config_path,
						 const char *card_name);

/* Destroys a configuration returned by cras_card_config_create().
 * Args:
 *    card_config - Card configuration returned by cras_card_config_create()
 */
void cras_card_config_destroy(struct cras_card_config *card_config);

/* Returns the apporpriate volume curve to use for the control given by name.
 * Args:
 *    card_config - Card configuration returned by cras_card_config_create()
 * Returns:
 *    The specialized curve for the control if there is one, otherwise NULL.
 */
struct cras_volume_curve *cras_card_config_get_volume_curve_for_control(
	const struct cras_card_config *card_config, const char *control_name);

#endif /* CRAS_CARD_CONFIG_H_ */
