brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 8fc017d Raw
96 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.4 *5 * @File	ctamixer.h6 *7 * @Brief8 * This file contains the definition of the Audio Mixer9 * resource management object.10 *11 * @Author	Liu Chun12 * @Date 	May 21 200813 */14 15#ifndef CTAMIXER_H16#define CTAMIXER_H17 18#include "ctresource.h"19#include <linux/spinlock.h>20#include <sound/core.h>21 22/* Define the descriptor of a summation node resource */23struct sum {24	struct rsc rsc;		/* Basic resource info */25	unsigned char idx[8];26};27 28/* Define sum resource request description info */29struct sum_desc {30	unsigned int msr;31};32 33struct sum_mgr {34	struct rsc_mgr mgr;	/* Basic resource manager info */35	struct snd_card *card;	/* pointer to this card */36	spinlock_t mgr_lock;37 38	 /* request one sum resource */39	int (*get_sum)(struct sum_mgr *mgr,40			const struct sum_desc *desc, struct sum **rsum);41	/* return one sum resource */42	int (*put_sum)(struct sum_mgr *mgr, struct sum *sum);43};44 45/* Constructor and destructor of daio resource manager */46int sum_mgr_create(struct hw *hw, void **ptr);47int sum_mgr_destroy(void *ptr);48 49/* Define the descriptor of a amixer resource */50struct amixer_rsc_ops;51 52struct amixer {53	struct rsc rsc;		/* Basic resource info */54	unsigned char idx[8];55	struct rsc *input;	/* pointer to a resource acting as source */56	struct sum *sum;	/* Put amixer output to this summation node */57	const struct amixer_rsc_ops *ops;	/* AMixer specific operations */58};59 60struct amixer_rsc_ops {61	int (*set_input)(struct amixer *amixer, struct rsc *rsc);62	int (*set_scale)(struct amixer *amixer, unsigned int scale);63	int (*set_invalid_squash)(struct amixer *amixer, unsigned int iv);64	int (*set_sum)(struct amixer *amixer, struct sum *sum);65	int (*commit_write)(struct amixer *amixer);66	/* Only for interleaved recording */67	int (*commit_raw_write)(struct amixer *amixer);68	int (*setup)(struct amixer *amixer, struct rsc *input,69			unsigned int scale, struct sum *sum);70	int (*get_scale)(struct amixer *amixer);71};72 73/* Define amixer resource request description info */74struct amixer_desc {75	unsigned int msr;76};77 78struct amixer_mgr {79	struct rsc_mgr mgr;	/* Basic resource manager info */80	struct snd_card *card;	/* pointer to this card */81	spinlock_t mgr_lock;82 83	 /* request one amixer resource */84	int (*get_amixer)(struct amixer_mgr *mgr,85			  const struct amixer_desc *desc,86			  struct amixer **ramixer);87	/* return one amixer resource */88	int (*put_amixer)(struct amixer_mgr *mgr, struct amixer *amixer);89};90 91/* Constructor and destructor of amixer resource manager */92int amixer_mgr_create(struct hw *hw, void **ramixer_mgr);93int amixer_mgr_destroy(void *amixer_mgr);94 95#endif /* CTAMIXER_H */96