162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * @File ctmixer.h 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * @Brief 862306a36Sopenharmony_ci * This file contains the definition of the mixer device functions. 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * @Author Liu Chun 1162306a36Sopenharmony_ci * @Date Mar 28 2008 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifndef CTMIXER_H 1562306a36Sopenharmony_ci#define CTMIXER_H 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#include "ctatc.h" 1862306a36Sopenharmony_ci#include "ctresource.h" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define INIT_VOL 0x1c00 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cienum MIXER_PORT_T { 2362306a36Sopenharmony_ci MIX_WAVE_FRONT, 2462306a36Sopenharmony_ci MIX_WAVE_REAR, 2562306a36Sopenharmony_ci MIX_WAVE_CENTLFE, 2662306a36Sopenharmony_ci MIX_WAVE_SURROUND, 2762306a36Sopenharmony_ci MIX_SPDIF_OUT, 2862306a36Sopenharmony_ci MIX_PCMO_FRONT, 2962306a36Sopenharmony_ci MIX_MIC_IN, 3062306a36Sopenharmony_ci MIX_LINE_IN, 3162306a36Sopenharmony_ci MIX_SPDIF_IN, 3262306a36Sopenharmony_ci MIX_PCMI_FRONT, 3362306a36Sopenharmony_ci MIX_PCMI_REAR, 3462306a36Sopenharmony_ci MIX_PCMI_CENTLFE, 3562306a36Sopenharmony_ci MIX_PCMI_SURROUND, 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci NUM_MIX_PORTS 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/* alsa mixer descriptor */ 4162306a36Sopenharmony_cistruct ct_mixer { 4262306a36Sopenharmony_ci struct ct_atc *atc; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci void **amixers; /* amixer resources for volume control */ 4562306a36Sopenharmony_ci void **sums; /* sum resources for signal collection */ 4662306a36Sopenharmony_ci unsigned int switch_state; /* A bit-map to indicate state of switches */ 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci int (*get_output_ports)(struct ct_mixer *mixer, enum MIXER_PORT_T type, 4962306a36Sopenharmony_ci struct rsc **rleft, struct rsc **rright); 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci int (*set_input_left)(struct ct_mixer *mixer, 5262306a36Sopenharmony_ci enum MIXER_PORT_T type, struct rsc *rsc); 5362306a36Sopenharmony_ci int (*set_input_right)(struct ct_mixer *mixer, 5462306a36Sopenharmony_ci enum MIXER_PORT_T type, struct rsc *rsc); 5562306a36Sopenharmony_ci#ifdef CONFIG_PM_SLEEP 5662306a36Sopenharmony_ci int (*resume)(struct ct_mixer *mixer); 5762306a36Sopenharmony_ci#endif 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ciint ct_alsa_mix_create(struct ct_atc *atc, 6162306a36Sopenharmony_ci enum CTALSADEVS device, 6262306a36Sopenharmony_ci const char *device_name); 6362306a36Sopenharmony_ciint ct_mixer_create(struct ct_atc *atc, struct ct_mixer **rmixer); 6462306a36Sopenharmony_ciint ct_mixer_destroy(struct ct_mixer *mixer); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#endif /* CTMIXER_H */ 67