brintos

brintos / linux-shallow public Read only

0
0
Text · 5.1 KiB · 0bc7b71 Raw
157 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2008, Creative Technology Ltd. All Rights Reserved.4 *5 * @File	ctatc.h6 *7 * @Brief8 * This file contains the definition of the device resource management object.9 *10 * @Author	Liu Chun11 * @Date 	Mar 28 200812 */13 14#ifndef CTATC_H15#define CTATC_H16 17#include <linux/types.h>18#include <linux/mutex.h>19#include <linux/pci.h>20#include <linux/timer.h>21#include <sound/core.h>22 23#include "ctvmem.h"24#include "cthardware.h"25#include "ctresource.h"26 27enum CTALSADEVS {		/* Types of alsa devices */28	FRONT,29	SURROUND,30	CLFE,31	SIDE,32	IEC958,33	MIXER,34	NUM_CTALSADEVS		/* This should always be the last */35};36 37struct ct_atc_chip_sub_details {38	u16 subsys;39	const char *nm_model;40};41 42struct ct_atc_chip_details {43	u16 vendor;44	u16 device;45	const struct ct_atc_chip_sub_details *sub_details;46	const char *nm_card;47};48 49struct ct_atc;50struct ct_timer;51struct ct_timer_instance;52 53/* alsa pcm stream descriptor */54struct ct_atc_pcm {55	struct snd_pcm_substream *substream;56	void (*interrupt)(struct ct_atc_pcm *apcm);57	struct ct_timer_instance *timer;58	unsigned int started:1;59 60	/* Only mono and interleaved modes are supported now. */61	struct ct_vm_block *vm_block;62	void *src;		/* SRC for interacting with host memory */63	void **srccs;		/* SRCs for sample rate conversion */64	void **srcimps;		/* SRC Input Mappers */65	void **amixers;		/* AMIXERs for routing converted data */66	void *mono;		/* A SUM resource for mixing chs to one */67	unsigned char n_srcc;	/* Number of converting SRCs */68	unsigned char n_srcimp;	/* Number of SRC Input Mappers */69	unsigned char n_amixer;	/* Number of AMIXERs */70};71 72/* Chip resource management object */73struct ct_atc {74	struct pci_dev *pci;75	struct snd_card *card;76	unsigned int rsr; /* reference sample rate in Hz */77	unsigned int msr; /* master sample rate in rsr */78	unsigned int pll_rate; /* current rate of Phase Lock Loop */79 80	int chip_type;81	int model;82	const char *chip_name;83	const char *model_name;84 85	struct ct_vm *vm; /* device virtual memory manager for this card */86	int (*map_audio_buffer)(struct ct_atc *atc, struct ct_atc_pcm *apcm);87	void (*unmap_audio_buffer)(struct ct_atc *atc, struct ct_atc_pcm *apcm);88	unsigned long (*get_ptp_phys)(struct ct_atc *atc, int index);89 90	struct mutex atc_mutex;91 92	int (*pcm_playback_prepare)(struct ct_atc *atc,93				    struct ct_atc_pcm *apcm);94	int (*pcm_playback_start)(struct ct_atc *atc, struct ct_atc_pcm *apcm);95	int (*pcm_playback_stop)(struct ct_atc *atc, struct ct_atc_pcm *apcm);96	int (*pcm_playback_position)(struct ct_atc *atc,97				     struct ct_atc_pcm *apcm);98	int (*spdif_passthru_playback_prepare)(struct ct_atc *atc,99					       struct ct_atc_pcm *apcm);100	int (*pcm_capture_prepare)(struct ct_atc *atc, struct ct_atc_pcm *apcm);101	int (*pcm_capture_start)(struct ct_atc *atc, struct ct_atc_pcm *apcm);102	int (*pcm_capture_stop)(struct ct_atc *atc, struct ct_atc_pcm *apcm);103	int (*pcm_capture_position)(struct ct_atc *atc,104				    struct ct_atc_pcm *apcm);105	int (*pcm_release_resources)(struct ct_atc *atc,106				     struct ct_atc_pcm *apcm);107	int (*select_line_in)(struct ct_atc *atc);108	int (*select_mic_in)(struct ct_atc *atc);109	int (*select_digit_io)(struct ct_atc *atc);110	int (*line_front_unmute)(struct ct_atc *atc, unsigned char state);111	int (*line_surround_unmute)(struct ct_atc *atc, unsigned char state);112	int (*line_clfe_unmute)(struct ct_atc *atc, unsigned char state);113	int (*line_rear_unmute)(struct ct_atc *atc, unsigned char state);114	int (*line_in_unmute)(struct ct_atc *atc, unsigned char state);115	int (*mic_unmute)(struct ct_atc *atc, unsigned char state);116	int (*spdif_out_unmute)(struct ct_atc *atc, unsigned char state);117	int (*spdif_in_unmute)(struct ct_atc *atc, unsigned char state);118	int (*spdif_out_get_status)(struct ct_atc *atc, unsigned int *status);119	int (*spdif_out_set_status)(struct ct_atc *atc, unsigned int status);120	int (*spdif_out_passthru)(struct ct_atc *atc, unsigned char state);121	struct capabilities (*capabilities)(struct ct_atc *atc);122	int (*output_switch_get)(struct ct_atc *atc);123	int (*output_switch_put)(struct ct_atc *atc, int position);124	int (*mic_source_switch_get)(struct ct_atc *atc);125	int (*mic_source_switch_put)(struct ct_atc *atc, int position);126 127	/* Don't touch! Used for internal object. */128	void *rsc_mgrs[NUM_RSCTYP]; /* chip resource managers */129	void *mixer;		/* internal mixer object */130	struct hw *hw;		/* chip specific hardware access object */131	void **daios;		/* digital audio io resources */132	void **pcm;		/* SUMs for collecting all pcm stream */133	void **srcs;		/* Sample Rate Converters for input signal */134	void **srcimps;		/* input mappers for SRCs */135	unsigned char n_daio;136	unsigned char n_src;137	unsigned char n_srcimp;138	unsigned char n_pcm;139 140	struct ct_timer *timer;141 142#ifdef CONFIG_PM_SLEEP143	int (*suspend)(struct ct_atc *atc);144	int (*resume)(struct ct_atc *atc);145#define NUM_PCMS (NUM_CTALSADEVS - 1)146	struct snd_pcm *pcms[NUM_PCMS];147#endif148};149 150 151int ct_atc_create(struct snd_card *card, struct pci_dev *pci,152		  unsigned int rsr, unsigned int msr, int chip_type,153		  unsigned int subsysid, struct ct_atc **ratc);154int ct_atc_create_alsa_devs(struct ct_atc *atc);155 156#endif /* CTATC_H */157