함수 sndsoc_register_codec () 분석
여러 개의 주요 데이터 구 조 를 사 용 했 는데,
1. codec 와 관련 된 구조 체 는 장치 의 구조 체 'snd soc codec' 와 장치 작업 의 구동 'snd soc codec driver' 를 포함한다.
2. platform 과 관련 된 구조 체 는 장치 의 구조 체 인 'snd soc platform' 과 장치 작업 의 구동 인 'snd soc platform driver' 를 포함한다.
3. DAI (Digital Audio Interface) 와 관련 된 구조 체 는 장치 의 구조 체 'snd soc dai' 와 장치 작업 의 구동 'snd soc dai driver' 를 포함한다.
4. 또한 "snd soc card" 를 포함 하여, "snd_pcm_runtime", "snd_soc_dai_link";
이들 구조 체 를 상세 하 게 분석 하고 정리 하면 ALSA 가 어떻게 작 동 하 는 지 비교적 전면적으로 알 수 있다.
함수 안에서 어떤 동작 을 했 는 지 살 펴 보 자.
1. codec 에 메모리 공간 신청
codec 의 이름과 지정 한 형식 을 만 듭 니 다.
4. 567913. 3. codec 의 초기 화 는 읽 기와 쓰기 와 관련 된 조작 함수 (실제 codec drv 로 관리) 를 포함 하고 dev 와 driver 지침 의 링크 도 포함한다.
4. 567913. 4. 다음은 codec 레지스터 cache 와 관련 된 작업 입 니 다. 데이터 와 조작 함수 (왜 codec 에서 직접 읽 지 않 고 codec 에서 백업 해 야 합 니까? 이상 합 니 다) 를 포함 합 니 다.
데이터 형식 (big and little endian) 을 설정 합 니 다.
codec list 에 가입 합 니 다.
등록 DAI (디지털 오디 오 인터페이스)
DAI (Digital Audio Interface) 등록 에 대한 분석 은 박문 을 참고 하 시기 바 랍 니 다.http://blog.csdn.net/jgw2008/article/details/52808044
codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
if (codec == NULL)
return -ENOMEM;
이로써 함수 snd soc register codec () 가 끝 났 습 니 다.
snd soc codec 구조 체 정 의 는 다음 과 같 습 니 다.
/* create CODEC component name */
codec->name = fmt_single_name(dev, &codec->id);
if (codec->name == NULL) {
ret = -ENOMEM;
goto fail_codec;
}
if (codec_drv->compress_type)
codec->compress_type = codec_drv->compress_type;
else
codec->compress_type = SND_SOC_FLAT_COMPRESSION;
snd soc codec driver 정 의 는 다음 과 같 습 니 다.
codec->write = codec_drv->write;
codec->read = codec_drv->read;
codec->volatile_register = codec_drv->volatile_register;
codec->readable_register = codec_drv->readable_register;
codec->writable_register = codec_drv->writable_register;
codec->ignore_pmdown_time = codec_drv->ignore_pmdown_time;
codec->dapm.bias_level = SND_SOC_BIAS_OFF;
codec->dapm.dev = dev;
codec->dapm.codec = codec;
codec->dapm.seq_notifier = codec_drv->seq_notifier;
codec->dapm.stream_event = codec_drv->stream_event;
codec->dev = dev;
codec->driver = codec_drv;
codec->num_dai = num_dai;
mutex_init(&codec->mutex);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ubuntu16.04LTS 전면 패널의 사운드 출력 단자에 사운드가 없습니다.Ubuntu16.04에서 자체 제작 PC를 조립할 때 전면 패널에 연결된 음성 출력 단자의 장치에 소리가 없는 문제가 발생했습니다.이 사건이 발생한 환경은 다음과 같다. 자체 제작 PC 케이스(IN WIN 805) ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.