// SPDX-License-Identifier: GPL-2.0
//
// kselftest configuration helpers for the hw specific configuration
//
// Original author: Jaroslav Kysela <perex@perex.cz>
// Copyright (c) 2022 Red Hat Inc.

#ifndef __ALSA_LOCAL_H
#define __ALSA_LOCAL_H

#include <alsa/asoundlib.h>

snd_config_t *get_alsalib_config(void);

snd_config_t *conf_load_from_file(const char *filename);
void conf_load(void);
void conf_free(void);
snd_config_t *conf_by_card(int card);
snd_config_t *conf_get_subtree(snd_config_t *root, const char *key1, const char *key2);
int conf_get_count(snd_config_t *root, const char *key1, const char *key2);
const char *conf_get_string(snd_config_t *root, const char *key1, const char *key2, const char *def);
long conf_get_long(snd_config_t *root, const char *key1, const char *key2, long def);
int conf_get_bool(snd_config_t *root, const char *key1, const char *key2, int def);
void conf_get_string_array(snd_config_t *root, const char *key1, const char *key2,
			   const char **array, int array_size, const char *def);

struct card_cfg_data {
	int card;
	snd_config_t *config;
	const char *filename;
	const char *config_id;
	struct card_cfg_data *next;
};

extern struct card_cfg_data *conf_cards;

#endif /* __ALSA_LOCAL_H */
