ALSA 驅動程式 API¶
卡和裝置管理¶
卡管理¶
-
int snd_device_alloc(struct device **dev_p, struct snd_card *card)¶
為聲音裝置分配和初始化
struct device
-
int snd_card_new(struct device *parent, int idx, const char *xid, struct module *module, int extra_size, struct snd_card **card_ret)¶
建立並初始化音效卡結構體
引數
struct device *parent父裝置物件
int idx卡索引(地址)[0 ... (SNDRV_CARDS-1)]
const char *xid卡標識(ASCII 字串)
struct module *module用於鎖定的頂層模組
int extra_size在主音效卡結構體之後分配此額外大小的空間
struct snd_card **card_ret用於儲存已建立的卡例項的指標
該函式透過 kzalloc 分配 snd_card 例項,併為驅動程式提供自由使用的空間。分配的 struct 儲存在給定的 card_ret 指標中。
返回值
成功則返回零,否則返回負錯誤程式碼。
-
int snd_devm_card_new(struct device *parent, int idx, const char *xid, struct module *module, size_t extra_size, struct snd_card **card_ret)¶
託管 snd_card 物件建立
引數
struct device *parent父裝置物件
int idx卡索引(地址)[0 ... (SNDRV_CARDS-1)]
const char *xid卡標識(ASCII 字串)
struct module *module用於鎖定的頂層模組
size_t extra_size在主音效卡結構體之後分配此額外大小的空間
struct snd_card **card_ret用於儲存已建立的卡例項的指標
描述
此函式的工作方式類似於 snd_card_new(),但透過 devres 管理已分配的資源,即您無需顯式釋放它。
當使用此函式建立 snd_card 物件並透過 snd_card_register() 註冊時,呼叫 snd_card_free() 的第一個 devres 操作會自動新增。 這樣,首先確保資源斷開連線,然後在預期的順序中釋放。
如果在呼叫 snd_card_register() 之前,探測過程中發生錯誤,並且存在其他 devres 資源,則您需要透過錯誤中的 snd_card_free() 呼叫手動釋放卡; 否則,由於 devres 呼叫順序,可能會導致 UAF。 您可以使用 snd_card_free_on_error() 助手更輕鬆地處理它。
返回值
如果成功,則為零,否則為負錯誤程式碼
引數
struct device *dev託管裝置物件
int ret來自探測回撥的返回值
描述
此函式處理來自探測回撥錯誤的顯式 snd_card_free() 呼叫。 它只是一個用於簡化使用託管裝置進行錯誤處理的小助手。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
struct snd_card *snd_card_ref(int idx)¶
從索引獲取卡物件
-
void snd_card_disconnect(struct snd_card *card)¶
斷開所有來自檔案操作(使用者空間)的 API
引數
struct snd_card *card音效卡結構體
斷開所有來自檔案操作(使用者空間)的 API。
返回值
零,否則為負錯誤程式碼。
注意
- 當前實現將所有活動的 file->f_op 替換為特殊的
虛擬檔案操作(除了釋放之外,它們什麼也不做)。
-
void snd_card_disconnect_sync(struct snd_card *card)¶
斷開卡並等待檔案關閉
引數
struct snd_card *card要斷開連線的卡物件
描述
此函式呼叫 snd_card_disconnect() 以斷開所有所屬元件的連線,並等待所有掛起的檔案關閉。 它確保使用者空間的所有訪問都已完成,以便驅動程式可以優雅地釋放其資源。
-
void snd_card_free_when_closed(struct snd_card *card)¶
斷開卡,最終稍後釋放它
引數
struct snd_card *card音效卡結構體
描述
與 snd_card_free() 不同,此函式不會嘗試立即釋放卡資源,而是首先嚐試斷開連線。 當卡仍在使用時,該函式會在釋放資源之前返回。 當引用計數達到零時,卡資源將被釋放。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
void snd_card_free(struct snd_card *card)¶
釋放給定的音效卡結構體
引數
struct snd_card *card音效卡結構體
描述
此函式自動釋放音效卡結構體和所有已分配的裝置。 也就是說,您不必自己釋放裝置。
此函式等待直到所有資源被正確釋放。
返回值
零。 釋放所有關聯的裝置並釋放與給定音效卡關聯的控制介面。
-
void snd_card_set_id(struct snd_card *card, const char *nid)¶
設定卡標識名稱
引數
struct snd_card *card音效卡結構體
const char *nid新的標識字串
此函式設定卡標識並檢查名稱衝突。
-
int snd_card_add_dev_attr(struct snd_card *card, const struct attribute_group *group)¶
將新的 sysfs 屬性組附加到卡
引數
struct snd_card *card卡例項
const struct attribute_group *group要附加的屬性組
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_card_register(struct snd_card *card)¶
註冊音效卡
引數
struct snd_card *card音效卡結構體
此函式註冊分配給音效卡的所有裝置。 在呼叫此函式之前,ALSA 控制介面被阻止從外部訪問。 因此,您應該在卡初始化結束時呼叫此函式。
返回值
如果註冊失敗,則為零,否則為負錯誤程式碼。
-
int snd_component_add(struct snd_card *card, const char *component)¶
新增元件字串
引數
struct snd_card *card音效卡結構體
const char *component元件 ID 字串
此函式將元件 ID 字串新增到支援的列表中。 可以從 alsa-lib 引用該元件。
返回值
如果成功,則為零,否則為負錯誤程式碼。
引數
struct snd_card *card音效卡結構體
struct file *file檔案指標
此函式將檔案新增到卡的檔案連結串列中。 此連結串列用於跟蹤連線狀態,並避免熱插拔釋放繁忙資源。
返回值
零或負錯誤程式碼。
引數
struct snd_card *card音效卡結構體
struct file *file檔案指標
此函式刪除先前透過
snd_card_file_add()函式新增到卡的檔案。 如果刪除了所有檔案並且預先呼叫了snd_card_free_when_closed(),它將處理掛起的資源釋放。
返回值
零或負錯誤程式碼。
-
int snd_power_ref_and_wait(struct snd_card *card)¶
等待卡上電
引數
struct snd_card *card音效卡結構體
描述
獲取給定卡的 power_ref 引用計數,並等待卡上電到 SNDRV_CTL_POWER_D0 狀態。 在休眠直到上電時,引用計數再次下降,因此此函式可用於同步浮動控制操作訪問,通常在呼叫控制操作時使用。
無論是否從此函式返回錯誤,呼叫者都需要稍後透過 snd_power_unref() 拉低引用計數。
返回值
如果成功,則為零,否則為負錯誤程式碼。
-
int snd_power_wait(struct snd_card *card)¶
等待卡上電(舊格式)
引數
struct snd_card *card音效卡結構體
描述
等待卡上電到 SNDRV_CTL_POWER_D0 狀態。
返回值
如果成功,則為零,否則為負錯誤程式碼。
裝置元件¶
-
int snd_device_new(struct snd_card *card, enum snd_device_type type, void *device_data, const struct snd_device_ops *ops)¶
建立 ALSA 裝置元件
引數
struct snd_card *card卡例項
enum snd_device_type type裝置型別,SNDRV_DEV_XXX
void *device_data此裝置的資料指標
const struct snd_device_ops *ops操作表
描述
為給定的資料指標建立一個新的裝置元件。 該裝置將被分配給卡並由卡一起管理。
資料指標也充當識別符號,因此指標地址必須是唯一的且不變的。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
void snd_device_disconnect(struct snd_card *card, void *device_data)¶
斷開裝置
引數
struct snd_card *card卡例項
void *device_data要斷開連線的資料指標
描述
將裝置轉換為斷開連線狀態,呼叫 dev_disconnect 回撥,如果裝置已註冊。
通常從 snd_card_disconnect() 呼叫。
返回值
如果成功,則為零,如果失敗或未找到裝置,則為負錯誤程式碼。
-
void snd_device_free(struct snd_card *card, void *device_data)¶
從卡中釋放裝置
引數
struct snd_card *card卡例項
void *device_data要釋放的資料指標
描述
從卡上的列表中刪除裝置,並呼叫回撥 dev_disconnect 和 dev_free,對應於狀態。 然後釋放裝置。
-
int snd_device_register(struct snd_card *card, void *device_data)¶
註冊裝置
引數
struct snd_card *card卡例項
void *device_data要註冊的資料指標
描述
註冊已透過 snd_device_new() 建立的裝置。 通常從 snd_card_register() 呼叫此函式,但如果在呼叫 snd_card_register() 後建立了任何新裝置,則可以稍後呼叫。
返回值
如果成功,則為零,如果失敗或未找到裝置,則為負錯誤程式碼。
模組請求和裝置檔案條目¶
-
void snd_request_card(int card)¶
嘗試載入卡模組
引數
int card卡號
描述
嘗試透過 request_module 為給定的卡號載入模組 “snd-card-X”。 如果已載入,則立即返回。
-
void *snd_lookup_minor_data(unsigned int minor, int type)¶
獲取已註冊裝置的使用者資料
引數
unsigned int minor次要編號
int type裝置型別 (SNDRV_DEVICE_TYPE_XXX)
描述
檢查是否已註冊具有指定型別的次要裝置,並返回其使用者資料指標。
如果找到具有給定次要編號和型別的關聯例項,此函式會增加卡例項的引用計數器。 呼叫者必須稍後適當地呼叫 snd_card_unref()。
返回值
如果找到指定的裝置,則為使用者資料指標。 否則為 NULL。
-
int snd_register_device(int type, struct snd_card *card, int dev, const struct file_operations *f_ops, void *private_data, struct device *device)¶
為卡註冊 ALSA 裝置檔案
引數
int type裝置型別,SNDRV_DEVICE_TYPE_XXX
struct snd_card *card卡例項
int dev裝置索引
const struct file_operations *f_ops檔案操作
void *private_data用於 f_ops->open() 的使用者指標
struct device *device要註冊的裝置
描述
為給定的卡註冊 ALSA 裝置檔案。 必須在 reg 引數中設定運算子。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
記憶體管理助手¶
-
int copy_to_user_fromio(void __user *dst, volatile const void __iomem *src, size_t count)¶
將資料從 mmio 空間複製到使用者空間
引數
void __user *dst使用者空間中的目標指標
const volatile void __iomem *srcmmio 上的源指標
size_t count要複製的資料大小(以位元組為單位)
描述
將資料從 mmio 空間複製到使用者空間。
返回值
如果成功,則為零; 如果失敗,則為非零。
-
size_t copy_to_iter_fromio(const void __iomem *src, size_t count, struct iov_iter *dst)¶
將資料從 mmio 空間複製到 iov_iter
引數
const void __iomem *srcmmio 上的源指標
size_t count要複製的資料大小(以位元組為單位)
struct iov_iter *dst目標 iov_iter
描述
將資料從 mmio 空間複製到 iov_iter。
返回值
要複製的位元組數
-
int copy_from_user_toio(volatile void __iomem *dst, const void __user *src, size_t count)¶
將資料從使用者空間複製到 mmio 空間
引數
volatile void __iomem *dstmmio 空間中的目標指標
const void __user *src使用者空間中的源指標
size_t count要複製的資料大小(以位元組為單位)
描述
將資料從使用者空間複製到 MMIO 空間。
返回值
如果成功,則為零; 如果失敗,則為非零。
-
size_t copy_from_iter_toio(void __iomem *dst, size_t count, struct iov_iter *src)¶
將資料從 iov_iter 複製到 MMIO 空間
引數
void __iomem *dstmmio 空間中的目標指標
size_t count要複製的資料大小(以位元組為單位)
struct iov_iter *src源 iov_iter
描述
將資料從 iov_iter 複製到 MMIO 空間。
返回值
要複製的位元組數
-
int snd_dma_alloc_dir_pages(int type, struct device *device, enum dma_data_direction dir, size_t size, struct snd_dma_buffer *dmab)¶
根據給定的型別和方向分配緩衝區區域
引數
int typeDMA 緩衝區型別
struct device *device裝置指標
enum dma_data_direction dirDMA 方向
size_t size要分配的緩衝區大小
struct snd_dma_buffer *dmab用於儲存已分配資料的緩衝區分配記錄
描述
為相應的緩衝區型別呼叫記憶體分配器函式。
返回值
如果成功分配了給定大小的緩衝區,則為零;否則,發生錯誤時為負值。
-
int snd_dma_alloc_pages_fallback(int type, struct device *device, size_t size, struct snd_dma_buffer *dmab)¶
根據給定的型別分配緩衝區區域,並帶有回退
引數
int typeDMA 緩衝區型別
struct device *device裝置指標
size_t size要分配的緩衝區大小
struct snd_dma_buffer *dmab用於儲存已分配資料的緩衝區分配記錄
描述
為相應的緩衝區型別呼叫記憶體分配器函式。當沒有剩餘空間時,此函式會減小大小並再次嘗試分配。實際分配的大小儲存在 res_size 引數中。
返回值
如果成功分配了給定大小的緩衝區,則為零;否則,發生錯誤時為負值。
-
void snd_dma_free_pages(struct snd_dma_buffer *dmab)¶
釋放已分配的緩衝區
引數
struct snd_dma_buffer *dmab要釋放的緩衝區分配記錄
描述
透過 snd_dma_alloc_pages() 釋放已分配的緩衝區。
-
struct snd_dma_buffer *snd_devm_alloc_dir_pages(struct device *dev, int type, enum dma_data_direction dir, size_t size)¶
分配緩衝區並使用 devres 進行管理
引數
struct device *dev裝置指標
int typeDMA 緩衝區型別
enum dma_data_direction dirDMA 方向
size_t size要分配的緩衝區大小
描述
根據給定的型別分配緩衝區頁,並使用 devres 進行管理。這些頁面將在裝置移除時自動釋放。
與 snd_dma_alloc_pages() 不同,此函式需要真實的裝置指標,因此它不能與 SNDRV_DMA_TYPE_CONTINUOUS 或 SNDRV_DMA_TYPE_VMALLOC 型別一起使用。
返回值
成功時的 snd_dma_buffer 物件,如果失敗,則為 NULL
-
int snd_dma_buffer_mmap(struct snd_dma_buffer *dmab, struct vm_area_struct *area)¶
執行給定 DMA 緩衝區的 mmap
引數
struct snd_dma_buffer *dmab緩衝區分配資訊
struct vm_area_struct *areaVM 區域資訊
返回值
如果成功,則為零,否則為負錯誤程式碼
-
void snd_dma_buffer_sync(struct snd_dma_buffer *dmab, enum snd_dma_sync_mode mode)¶
在 CPU 和裝置之間同步 DMA 緩衝區
引數
struct snd_dma_buffer *dmab緩衝區分配資訊
enum snd_dma_sync_mode mode同步模式
-
dma_addr_t snd_sgbuf_get_addr(struct snd_dma_buffer *dmab, size_t offset)¶
返回相應偏移處的物理地址
引數
struct snd_dma_buffer *dmab緩衝區分配資訊
size_t offset環形緩衝區中的偏移量
返回值
物理地址
-
struct page *snd_sgbuf_get_page(struct snd_dma_buffer *dmab, size_t offset)¶
返回相應偏移處的物理頁面
引數
struct snd_dma_buffer *dmab緩衝區分配資訊
size_t offset環形緩衝區中的偏移量
返回值
頁面指標
-
unsigned int snd_sgbuf_get_chunk_size(struct snd_dma_buffer *dmab, unsigned int ofs, unsigned int size)¶
計算 sg 緩衝區上具有連續頁面的最大塊大小
引數
struct snd_dma_buffer *dmab緩衝區分配資訊
unsigned int ofs環形緩衝區中的偏移量
unsigned int size請求的大小
返回值
塊大小
PCM API¶
PCM 核心¶
-
const char *snd_pcm_format_name(snd_pcm_format_t format)¶
返回給定 PCM 格式的名稱字串
引數
snd_pcm_format_t formatPCM 格式
返回值
格式名稱字串
-
int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count)¶
建立一個新的 PCM 流
引數
struct snd_pcm *pcmpcm 例項
int stream流方向,SNDRV_PCM_STREAM_XXX
int substream_count子流的數量
描述
為 pcm 建立一個新流。在呼叫此函式之前,pcm 上的相應流必須為空,即必須為 snd_pcm_new() 的引數提供零。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_new(struct snd_card *card, const char *id, int device, int playback_count, int capture_count, struct snd_pcm **rpcm)¶
建立一個新的 PCM 例項
引數
struct snd_card *card卡例項
const char *idid 字串
int device裝置索引(從零開始)
int playback_count播放的子流數量
int capture_count捕獲的子流數量
struct snd_pcm **rpcm用於儲存新 pcm 例項的指標
描述
建立一個新的 PCM 例項。
pcm 運算子必須在此之後透過 snd_pcm_set_ops() 設定為新例項。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_new_internal(struct snd_card *card, const char *id, int device, int playback_count, int capture_count, struct snd_pcm **rpcm)¶
建立一個新的內部 PCM 例項
引數
struct snd_card *card卡例項
const char *idid 字串
int device裝置索引(從零開始 - 與普通 PCM 共享)
int playback_count播放的子流數量
int capture_count捕獲的子流數量
struct snd_pcm **rpcm用於儲存新 pcm 例項的指標
描述
建立一個新的內部 PCM 例項,沒有使用者空間裝置或 procfs 條目。這由 ASoC 後端 PCM 使用,目的是建立一個僅供核心驅動程式內部使用的 PCM。即,使用者空間無法開啟它。它為現有的 ASoC 元件驅動程式提供子流以及對任何私有資料的訪問。
pcm 運算子必須在此之後透過 snd_pcm_set_ops() 設定為新例項。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_notify(struct snd_pcm_notify *notify, int nfree)¶
新增/刪除通知列表
引數
struct snd_pcm_notify *notifyPCM 通知列表
int nfree0 = 註冊,1 = 登出
描述
這將給定的通知器新增到全域性列表,以便為每個註冊的 PCM 裝置呼叫回撥。到目前為止,這僅適用於 PCM OSS 模擬。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
void snd_pcm_set_ops(struct snd_pcm *pcm, int direction, const struct snd_pcm_ops *ops)¶
設定 PCM 運算子
引數
struct snd_pcm *pcmpcm 例項
int direction流方向,SNDRV_PCM_STREAM_XXX
const struct snd_pcm_ops *ops操作表
描述
將給定的 PCM 運算子設定為 pcm 例項。
-
void snd_pcm_set_sync_per_card(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, const unsigned char *id, unsigned int len)¶
使用卡號設定 PCM 同步 id
引數
struct snd_pcm_substream *substreampcm 子流
struct snd_pcm_hw_params *params修改後的硬體引數
const unsigned char *id識別符號(最多 12 個位元組)
unsigned int len識別符號長度(最多 12 個位元組)
描述
設定卡的 PCM 同步識別符號,並用零填充。
使用者空間或任何使用者應僅使用此 16 位元組識別符號進行比較,以檢查兩個 ID 是否相似或不同。特殊情況是僅包含零的識別符號。對此組合的解釋是 - 空(未設定)。不應以任何其他方式解釋識別符號的內容。
每個時鐘源(通常是一張音效卡,但多張音效卡可能使用一個 PCM 字時鐘源,這意味著它們是完全同步的)的同步 ID 必須是唯一的。
此例程使用前四個位元組中的卡號和 12 位元組的附加 ID 來組合此 ID。當使用其他 ID 組合(例如,對於多張音效卡)時,請確保該組合不會與此組合方案衝突。
-
int snd_interval_refine(struct snd_interval *i, const struct snd_interval *v)¶
細化配置器的間隔值
引數
struct snd_interval *i要細化的間隔值
const struct snd_interval *v要參考的間隔值
描述
使用參考值細化間隔值。間隔將更改為滿足兩個間隔的範圍。評估間隔狀態(最小值、最大值、整數等)。
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
void snd_interval_div(const struct snd_interval *a, const struct snd_interval *b, struct snd_interval *c)¶
使用除法細化間隔值
引數
const struct snd_interval *a被除數
const struct snd_interval *b除數
struct snd_interval *c商
描述
c = a / b
如果值已更改,則返回非零值;如果未更改,則返回零。
-
void snd_interval_muldivk(const struct snd_interval *a, const struct snd_interval *b, unsigned int k, struct snd_interval *c)¶
細化間隔值
引數
const struct snd_interval *a被除數 1
const struct snd_interval *b被除數 2
unsigned int k除數(作為整數)
struct snd_interval *c結果
描述
c = a * b / k
如果值已更改,則返回非零值;如果未更改,則返回零。
-
void snd_interval_mulkdiv(const struct snd_interval *a, unsigned int k, const struct snd_interval *b, struct snd_interval *c)¶
細化間隔值
引數
const struct snd_interval *a被除數 1
unsigned int k被除數 2(作為整數)
const struct snd_interval *b除數
struct snd_interval *c結果
描述
c = a * k / b
如果值已更改,則返回非零值;如果未更改,則返回零。
-
int snd_interval_ratnum(struct snd_interval *i, unsigned int rats_count, const struct snd_ratnum *rats, unsigned int *nump, unsigned int *denp)¶
細化間隔值
引數
struct snd_interval *i要細化的間隔
unsigned int rats_countratnum_t 的數量
const struct snd_ratnum *ratsratnum_t 陣列
unsigned int *nump指向儲存結果分子指標
unsigned int *denp指向儲存結果分母的指標
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
int snd_interval_ratden(struct snd_interval *i, unsigned int rats_count, const struct snd_ratden *rats, unsigned int *nump, unsigned int *denp)¶
細化間隔值
引數
struct snd_interval *i要細化的間隔
unsigned int rats_countstruct ratden 的數量
const struct snd_ratden *ratsstruct ratden 陣列
unsigned int *nump指向儲存結果分子指標
unsigned int *denp指向儲存結果分母的指標
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
int snd_interval_list(struct snd_interval *i, unsigned int count, const unsigned int *list, unsigned int mask)¶
從列表中細化間隔值
引數
struct snd_interval *i要細化的間隔值
unsigned int count列表中的元素數量
const unsigned int *list值列表
unsigned int mask要評估的位掩碼
描述
從列表中細化間隔值。當掩碼非零時,僅評估對應於位 1 的元素。
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
int snd_interval_ranges(struct snd_interval *i, unsigned int count, const struct snd_interval *ranges, unsigned int mask)¶
從範圍列表中細化間隔值
引數
struct snd_interval *i要細化的間隔值
unsigned int count範圍列表中的元素數量
const struct snd_interval *ranges範圍列表
unsigned int mask要評估的位掩碼
描述
從範圍列表中細化間隔值。當掩碼非零時,僅評估對應於位 1 的元素。
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
int snd_pcm_hw_rule_add(struct snd_pcm_runtime *runtime, unsigned int cond, int var, snd_pcm_hw_rule_func_t func, void *private, int dep, ...)¶
新增硬體約束規則
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
int var要評估的變數
snd_pcm_hw_rule_func_t func評估函式
void *private傳遞給函式的私有資料指標
int dep依賴變數
...可變引數
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_mask(struct snd_pcm_runtime *runtime, snd_pcm_hw_param_t var, u_int32_t mask)¶
應用給定的點陣圖掩碼約束
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
snd_pcm_hw_param_t var要應用掩碼的 hw_params 變數
u_int32_t mask點陣圖掩碼
描述
將給定的點陣圖掩碼約束應用於 32 位掩碼引數。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_mask64(struct snd_pcm_runtime *runtime, snd_pcm_hw_param_t var, u_int64_t mask)¶
應用給定的點陣圖掩碼約束
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
snd_pcm_hw_param_t var要應用掩碼的 hw_params 變數
u_int64_t mask64 位點陣圖掩碼
描述
將給定的點陣圖掩碼約束應用於 64 位掩碼引數。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_integer(struct snd_pcm_runtime *runtime, snd_pcm_hw_param_t var)¶
將整數約束應用於間隔
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
snd_pcm_hw_param_t var要應用整數約束的 hw_params 變數
描述
將整數約束應用於間隔引數。
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
int snd_pcm_hw_constraint_minmax(struct snd_pcm_runtime *runtime, snd_pcm_hw_param_t var, unsigned int min, unsigned int max)¶
將最小/最大範圍約束應用於間隔
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
snd_pcm_hw_param_t var要應用範圍的 hw_params 變數
unsigned int min最小值
unsigned int max最大值
描述
將最小/最大範圍約束應用於間隔引數。
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
int snd_pcm_hw_constraint_list(struct snd_pcm_runtime *runtime, unsigned int cond, snd_pcm_hw_param_t var, const struct snd_pcm_hw_constraint_list *l)¶
將約束列表應用於引數
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
snd_pcm_hw_param_t var要應用列表約束的 hw_params 變數
const struct snd_pcm_hw_constraint_list *l列表
描述
將約束列表應用於間隔引數。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_ranges(struct snd_pcm_runtime *runtime, unsigned int cond, snd_pcm_hw_param_t var, const struct snd_pcm_hw_constraint_ranges *r)¶
將範圍約束列表應用於引數
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
snd_pcm_hw_param_t var要應用範圍約束列表的 hw_params 變數
const struct snd_pcm_hw_constraint_ranges *r範圍
描述
將範圍約束列表應用於間隔引數。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_ratnums(struct snd_pcm_runtime *runtime, unsigned int cond, snd_pcm_hw_param_t var, const struct snd_pcm_hw_constraint_ratnums *r)¶
將 ratnums 約束應用於引數
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
snd_pcm_hw_param_t var要應用 ratnums 約束的 hw_params 變數
const struct snd_pcm_hw_constraint_ratnums *rstruct snd_ratnums 約束
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_ratdens(struct snd_pcm_runtime *runtime, unsigned int cond, snd_pcm_hw_param_t var, const struct snd_pcm_hw_constraint_ratdens *r)¶
將 ratdens 約束應用於引數
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
snd_pcm_hw_param_t var要應用 ratdens 約束的 hw_params 變數
const struct snd_pcm_hw_constraint_ratdens *rstruct snd_ratdens 約束
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_msbits(struct snd_pcm_runtime *runtime, unsigned int cond, unsigned int width, unsigned int msbits)¶
新增硬體約束 msbits 規則
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
unsigned int width取樣位寬度
unsigned int msbitsmsbits 寬度
描述
如果已選擇具有指定寬度的取樣格式,則此約束將設定最高有效位數 (msbits) 的數量。 如果 width 設定為 0,則將為任何寬度大於指定 msbits 的取樣格式設定 msbits。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_step(struct snd_pcm_runtime *runtime, unsigned int cond, snd_pcm_hw_param_t var, unsigned long step)¶
新增硬體約束步長規則
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
snd_pcm_hw_param_t var要應用步長約束的 hw_params 變數
unsigned long step步長大小
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_constraint_pow2(struct snd_pcm_runtime *runtime, unsigned int cond, snd_pcm_hw_param_t var)¶
新增硬體約束 2 的冪規則
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int cond條件位
snd_pcm_hw_param_t var要應用 2 的冪約束的 hw_params 變數
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_rule_noresample(struct snd_pcm_runtime *runtime, unsigned int base_rate)¶
新增允許停用硬體重取樣的規則
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
unsigned int base_rate硬體不重取樣的速率
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_param_value(const struct snd_pcm_hw_params *params, snd_pcm_hw_param_t var, int *dir)¶
返回 params 欄位 var 值
引數
const struct snd_pcm_hw_params *paramshw_params 例項
snd_pcm_hw_param_t var要檢索的引數
int *dir指向方向 (-1,0,1) 的指標或
NULL
返回值
如果欄位 var 在由 params 定義的配置空間中是固定的,則為該欄位的值。 否則為 -EINVAL。
-
int snd_pcm_hw_param_first(struct snd_pcm_substream *pcm, struct snd_pcm_hw_params *params, snd_pcm_hw_param_t var, int *dir)¶
最佳化配置空間並返回最小值
引數
struct snd_pcm_substream *pcmPCM 例項
struct snd_pcm_hw_params *paramshw_params 例項
snd_pcm_hw_param_t var要檢索的引數
int *dir指向方向 (-1,0,1) 的指標或
NULL
描述
在由 params 定義的配置空間內,從 var 中移除所有值 > 最小值。 相應地減小配置空間。
返回值
最小值,或失敗時的負錯誤程式碼。
-
int snd_pcm_hw_param_last(struct snd_pcm_substream *pcm, struct snd_pcm_hw_params *params, snd_pcm_hw_param_t var, int *dir)¶
最佳化配置空間並返回最大值
引數
struct snd_pcm_substream *pcmPCM 例項
struct snd_pcm_hw_params *paramshw_params 例項
snd_pcm_hw_param_t var要檢索的引數
int *dir指向方向 (-1,0,1) 的指標或
NULL
描述
在由 params 定義的配置空間內,從 var 中移除所有值 < 最大值。 相應地減小配置空間。
返回值
最大值,或失敗時的負錯誤程式碼。
-
int snd_pcm_hw_params_bits(const struct snd_pcm_hw_params *p)¶
獲取每個取樣的位數。
引數
const struct snd_pcm_hw_params *p硬體引數
返回值
每個取樣的位數,基於指定硬體引數的格式、子格式和 msbits。
-
int snd_pcm_lib_ioctl(struct snd_pcm_substream *substream, unsigned int cmd, void *arg)¶
通用 PCM ioctl 回撥
引數
struct snd_pcm_substream *substreamPCM 子流例項
unsigned int cmdioctl 命令
void *argioctl 引數
描述
處理 PCM 的通用 ioctl 命令。 可以作為 PCM 操作的 ioctl 回撥傳遞。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
void snd_pcm_period_elapsed_under_stream_lock(struct snd_pcm_substream *substream)¶
在獲取 PCM 子流鎖的情況下,更新下一個週期的執行狀態。
引數
struct snd_pcm_substream *substreampcm 子流的例項。
描述
當音訊資料幀批處理的大小與緩衝區週期大小相同時,在音訊資料傳輸中已處理,將呼叫此函式。
該函式使用音訊資料傳輸的最新位置更新執行時狀態,檢查緩衝區中的溢位和欠載,喚醒使用者程序以等待可用的音訊資料幀,取樣音訊時間戳,並根據配置的閾值執行停止或排空 PCM 子流。
該函式旨在用於 PCM 驅動程式在獲取 PCM 子流鎖的情況下操作音訊資料幀的情況;例如,在程序上下文中 snd_pcm_ops 的任何操作的回撥中。 在任何中斷上下文中,最好使用 snd_pcm_period_elapsed(),因為應該提前獲取 PCM 子流鎖。
開發人員應充分注意 snd_pcm_ops 中的某些回撥是透過呼叫該函式來完成的
.pointer - 透過幀計數或 XRUN 狀態檢索音訊資料傳輸的當前位置。
.trigger - 在 XRUN 或 DRAINING 狀態下使用 SNDRV_PCM_TRIGGER_STOP。
.get_time_info - 如果需要,檢索音訊時間戳。
即使自上次呼叫以來已經過了多個週期,也只需呼叫一次。
-
void snd_pcm_period_elapsed(struct snd_pcm_substream *substream)¶
透過獲取 PCM 子流鎖來更新下一個週期的執行時狀態。
引數
struct snd_pcm_substream *substreamPCM 子流的例項。
描述
此函式與 snd_pcm_period_elapsed_under_stream_lock() 大部分相似,不同之處在於自願獲取 PCM 子流鎖。
當硬體 IRQ 發生時,它通常由任何型別的 IRQ 處理程式呼叫,以通知事件,即與緩衝區週期大小相同的音訊資料幀批處理已在音訊資料傳輸中處理。
-
int snd_pcm_add_chmap_ctls(struct snd_pcm *pcm, int stream, const struct snd_pcm_chmap_elem *chmap, int max_channels, unsigned long private_value, struct snd_pcm_chmap **info_ret)¶
建立通道對映控制元素
引數
struct snd_pcm *pcm分配的 PCM 例項
int stream流方向
const struct snd_pcm_chmap_elem *chmap通道對映元素(用於查詢)
int max_channels流的最大通道數
unsigned long private_value傳遞給每個 kcontrol 的 private_value 欄位的值
struct snd_pcm_chmap **info_ret如果非 NULL,則儲存 struct snd_pcm_chmap 例項
描述
建立分配給給定 PCM 流的通道對映控制元素。
返回值
成功則為零,否則為負錯誤值。
-
void snd_pcm_stream_lock(struct snd_pcm_substream *substream)¶
鎖定 PCM 流
引數
struct snd_pcm_substream *substreamPCM 子流
描述
這會鎖定 PCM 流的自旋鎖或互斥鎖,具體取決於給定子流的 nonatomic 標誌。 這也會獲取全域性連結讀寫鎖(或讀寫訊號量),以避免與連結流發生競爭。
-
void snd_pcm_stream_unlock(struct snd_pcm_substream *substream)¶
解鎖 PCM 流
-
void snd_pcm_stream_lock_irq(struct snd_pcm_substream *substream)¶
鎖定 PCM 流
引數
struct snd_pcm_substream *substreamPCM 子流
描述
這會像 snd_pcm_stream_lock() 一樣鎖定 PCM 流,並停用本地 IRQ(僅當 nonatomic 為 false 時)。 在 nonatomic 情況下,這與 snd_pcm_stream_lock() 相同。
-
void snd_pcm_stream_unlock_irq(struct snd_pcm_substream *substream)¶
解鎖 PCM 流
-
void snd_pcm_stream_unlock_irqrestore(struct snd_pcm_substream *substream, unsigned long flags)¶
解鎖 PCM 流
引數
struct snd_pcm_substream *substreamPCM 子流
unsigned long flagsirq 標誌
描述
這是 snd_pcm_stream_lock_irqsave() 的對應函式。
-
int snd_pcm_hw_params_choose(struct snd_pcm_substream *pcm, struct snd_pcm_hw_params *params)¶
選擇由 params 定義的配置
引數
struct snd_pcm_substream *pcmPCM 例項
struct snd_pcm_hw_params *paramshw_params 例項
描述
從由 params 定義的配置空間中選擇一個配置。 選擇的配置是按以下順序固定的配置:首先訪問、首先格式、首先子格式、最小通道數、最小速率、最小週期時間、最大緩衝區大小、最小刻度時間
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_start(struct snd_pcm_substream *substream)¶
啟動所有連結的流
引數
struct snd_pcm_substream *substreamPCM 子流例項
返回值
成功則為零,否則為負錯誤程式碼。 在呼叫此函式之前,必須獲取流鎖。
-
int snd_pcm_stop(struct snd_pcm_substream *substream, snd_pcm_state_t state)¶
嘗試停止子流組中的所有正在執行的流
引數
struct snd_pcm_substream *substreamPCM 子流例項
snd_pcm_state_t state停止流之後的 PCM 狀態
描述
每個流的狀態將無條件地更改為給定的狀態。
返回值
如果成功,則為零,否則為負錯誤程式碼。
-
int snd_pcm_drain_done(struct snd_pcm_substream *substream)¶
僅當給定流是回放流時才停止 DMA
引數
struct snd_pcm_substream *substreamPCM 子流
描述
停止後,狀態將更改為 SETUP。與 snd_pcm_stop() 不同,這僅影響給定的流。
返回值
如果成功,則為零,否則為負錯誤程式碼。
-
int snd_pcm_stop_xrun(struct snd_pcm_substream *substream)¶
停止執行流,作為 XRUN
引數
struct snd_pcm_substream *substreamPCM 子流例項
描述
這將停止給定的執行子流(以及所有連結的子流),作為 XRUN。與 snd_pcm_stop() 不同,此函式本身採用子流鎖。
返回值
如果成功,則為零,否則為負錯誤程式碼。
-
int snd_pcm_suspend_all(struct snd_pcm *pcm)¶
觸發 SUSPEND 到給定 pcm 中的所有子流
引數
struct snd_pcm *pcmPCM 例項
描述
呼叫此函式後,所有流都將更改為 SUSPENDED 狀態。
返回值
如果成功(或 pcm 為 NULL),則為零,否則為負錯誤程式碼。
引數
struct snd_pcm_substream *substreamPCM 子流例項
struct file *file要參考 f_flags 的檔案
返回值
如果成功,則為零,否則為負錯誤程式碼。
-
int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream, unsigned int cmd, void *arg)¶
在核心空間中執行 PCM ioctl
引數
struct snd_pcm_substream *substreamPCM 子流
unsigned int cmdIOCTL cmd
void *argIOCTL 引數
描述
該函式主要為 OSS 層和 USB gadget 驅動程式提供,它僅允許有限的 ioctl 集(hw_params、sw_params、prepare、start、drain、drop、forward)。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_pcm_lib_default_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *area)¶
預設 PCM 資料 mmap 函式
引數
struct snd_pcm_substream *substreamPCM 子流
struct vm_area_struct *areaVMA
描述
這是 PCM 資料的預設 mmap 處理程式。當 mmap pcm_ops 為 NULL 時,將隱式呼叫此函式。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream, struct vm_area_struct *area)¶
I/O mem 的預設 PCM 資料 mmap 函式
引數
struct snd_pcm_substream *substreamPCM 子流
struct vm_area_struct *areaVMA
描述
當您的硬體使用 iomapped 頁面作為硬體緩衝區並想要 mmap 它時,請將此函式作為 mmap pcm_ops 傳遞。請注意,這應該僅在有限的體系結構上工作。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_pcm_stream_linked(struct snd_pcm_substream *substream)¶
檢查子流是否與其他子流連結
引數
struct snd_pcm_substream *substream要檢查的子流
返回值
如果給定的子流正在與其他子流連結,則為 true
-
snd_pcm_stream_lock_irqsave¶
snd_pcm_stream_lock_irqsave (substream, flags)
鎖定 PCM 流
引數
子流PCM 子流
標誌irq 標誌
描述
這會像 snd_pcm_stream_lock() 一樣鎖定 PCM 流,但具有本地 IRQ(僅當 nonatomic 為 false 時)。在 nonatomic 情況下,這與 snd_pcm_stream_lock() 相同。
-
snd_pcm_stream_lock_irqsave_nested¶
snd_pcm_stream_lock_irqsave_nested (substream, flags)
單層巢狀 PCM 流鎖定
-
snd_pcm_group_for_each_entry¶
snd_pcm_group_for_each_entry (s, substream)
迭代連結的子流
引數
s迭代器
子流子流
描述
迭代到給定 substream 的所有連結子流。當 substream 未與任何其他子流連結時,這將一次返回 substream 本身。
-
int snd_pcm_running(struct snd_pcm_substream *substream)¶
檢查子流是否處於執行狀態
引數
struct snd_pcm_substream *substream要檢查的子流
返回值
如果給定的子流處於 RUNNING 狀態,或者對於回放處於 DRAINING 狀態,則為 true。
-
void __snd_pcm_set_state(struct snd_pcm_runtime *runtime, snd_pcm_state_t state)¶
更改當前的 PCM 狀態
引數
struct snd_pcm_runtime *runtime要設定的 PCM 執行時
snd_pcm_state_t state要設定的當前狀態
描述
在流鎖內呼叫
-
ssize_t bytes_to_samples(struct snd_pcm_runtime *runtime, ssize_t size)¶
從位元組到取樣的單位大小轉換
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
ssize_t size以位元組為單位的大小
返回值
以取樣為單位的大小
-
snd_pcm_sframes_t bytes_to_frames(struct snd_pcm_runtime *runtime, ssize_t size)¶
從位元組到幀的單位大小轉換
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
ssize_t size以位元組為單位的大小
返回值
以幀為單位的大小
-
ssize_t samples_to_bytes(struct snd_pcm_runtime *runtime, ssize_t size)¶
從取樣到位元組的單位大小轉換
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
ssize_t size以取樣為單位的大小
返回值
位元組大小
-
ssize_t frames_to_bytes(struct snd_pcm_runtime *runtime, snd_pcm_sframes_t size)¶
從幀到位元組的單位大小轉換
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
snd_pcm_sframes_t size以幀為單位的大小
返回值
位元組大小
-
int frame_aligned(struct snd_pcm_runtime *runtime, ssize_t bytes)¶
檢查位元組大小是否與幀對齊
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
ssize_t bytes以位元組為單位的大小
返回值
如果對齊,則為 true;如果未對齊,則為 false
-
size_t snd_pcm_lib_buffer_bytes(struct snd_pcm_substream *substream)¶
獲取當前 PCM 的緩衝區大小(以位元組為單位)
引數
struct snd_pcm_substream *substreamPCM 子流
返回值
緩衝區位元組大小
-
size_t snd_pcm_lib_period_bytes(struct snd_pcm_substream *substream)¶
獲取當前 PCM 的週期大小(以位元組為單位)
引數
struct snd_pcm_substream *substreamPCM 子流
返回值
週期位元組大小
-
snd_pcm_uframes_t snd_pcm_playback_avail(struct snd_pcm_runtime *runtime)¶
獲取可用於回放的可用(可寫)空間
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
描述
結果介於 0 ... (boundary - 1) 之間
返回值
可用幀大小
-
snd_pcm_uframes_t snd_pcm_capture_avail(struct snd_pcm_runtime *runtime)¶
獲取可用於捕獲的可用(可讀)空間
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
描述
結果介於 0 ... (boundary - 1) 之間
返回值
可用幀大小
-
snd_pcm_sframes_t snd_pcm_playback_hw_avail(struct snd_pcm_runtime *runtime)¶
獲取回放的排隊空間
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
返回值
可用幀大小
-
snd_pcm_sframes_t snd_pcm_capture_hw_avail(struct snd_pcm_runtime *runtime)¶
獲取捕獲的可用空間
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
返回值
可用幀大小
-
int snd_pcm_playback_ready(struct snd_pcm_substream *substream)¶
檢查回放緩衝區是否可用
引數
struct snd_pcm_substream *substreamPCM 子流例項
描述
檢查回放緩衝區上是否有足夠的可用空間。
返回值
如果可用,則為非零值;如果不可用,則為零。
-
int snd_pcm_capture_ready(struct snd_pcm_substream *substream)¶
檢查捕獲緩衝區是否可用
引數
struct snd_pcm_substream *substreamPCM 子流例項
描述
檢查捕獲緩衝區上是否有足夠的捕獲資料。
返回值
如果可用,則為非零值;如果不可用,則為零。
-
int snd_pcm_playback_data(struct snd_pcm_substream *substream)¶
檢查回放緩衝區上是否存在任何資料
引數
struct snd_pcm_substream *substreamPCM 子流例項
描述
檢查回放緩衝區上是否存在任何資料。
返回值
如果存在任何資料,則為非零值;如果不存在,則為零。如果 stop_threshold 大於或等於 boundary,則此函式始終返回非零值。
-
int snd_pcm_playback_empty(struct snd_pcm_substream *substream)¶
檢查回放緩衝區是否為空
引數
struct snd_pcm_substream *substreamPCM 子流例項
描述
檢查回放緩衝區是否為空。
返回值
如果為空,則為非零值;如果不為空,則為零。
-
int snd_pcm_capture_empty(struct snd_pcm_substream *substream)¶
檢查捕獲緩衝區是否為空
引數
struct snd_pcm_substream *substreamPCM 子流例項
描述
檢查捕獲緩衝區是否為空。
返回值
如果為空,則為非零值;如果不為空,則為零。
-
void snd_pcm_trigger_done(struct snd_pcm_substream *substream, struct snd_pcm_substream *master)¶
標記主子流
引數
struct snd_pcm_substream *substreamPCM 子流例項
struct snd_pcm_substream *master連結的主子流
描述
當同一卡的多個子流連結且硬體支援單次操作時,驅動程式會在 snd_pcm_group_for_each_entry() 的迴圈中呼叫此函式,以將子流標記為“已完成”。然後,大多數觸發操作僅對給定的主子流執行。
觸發主標記在觸發操作結束時的 timestamp 更新時清除。
-
unsigned int params_channels(const struct snd_pcm_hw_params *p)¶
從 hw params 獲取通道數
引數
const struct snd_pcm_hw_params *phw params
返回值
通道數
-
unsigned int params_rate(const struct snd_pcm_hw_params *p)¶
從 hw params 獲取取樣率
引數
const struct snd_pcm_hw_params *phw params
返回值
取樣率
-
unsigned int params_period_size(const struct snd_pcm_hw_params *p)¶
從 hw params 獲取週期大小(以幀為單位)
引數
const struct snd_pcm_hw_params *phw params
返回值
以幀為單位的週期大小
-
unsigned int params_periods(const struct snd_pcm_hw_params *p)¶
從 hw params 獲取週期數
引數
const struct snd_pcm_hw_params *phw params
返回值
週期數
-
unsigned int params_buffer_size(const struct snd_pcm_hw_params *p)¶
從 hw params 獲取緩衝區大小(以幀為單位)
引數
const struct snd_pcm_hw_params *phw params
返回值
以幀為單位的緩衝區大小
-
unsigned int params_buffer_bytes(const struct snd_pcm_hw_params *p)¶
從 hw params 獲取緩衝區大小(以位元組為單位)
引數
const struct snd_pcm_hw_params *phw params
返回值
以位元組為單位的緩衝區大小
-
int snd_pcm_hw_constraint_single(struct snd_pcm_runtime *runtime, snd_pcm_hw_param_t var, unsigned int val)¶
將引數約束為單個值
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
snd_pcm_hw_param_t var要約束的 hw_params 變數
unsigned int val要約束到的值
返回值
如果值已更改,則為正數;如果未更改,則為零;或負錯誤程式碼。
-
int snd_pcm_format_cpu_endian(snd_pcm_format_t format)¶
檢查 PCM 格式是否為 CPU 位元組序
引數
snd_pcm_format_t format要檢查的格式
返回值
如果給定的 PCM 格式為 CPU 位元組序,則為 1;如果相反,則為 0;如果未指定位元組序,則為負錯誤程式碼。
-
void snd_pcm_set_sync(struct snd_pcm_substream *substream)¶
設定 PCM 同步 ID
引數
struct snd_pcm_substream *substreampcm 子流
描述
將預設 PCM 同步識別符號用於特定卡。
-
void snd_pcm_set_runtime_buffer(struct snd_pcm_substream *substream, struct snd_dma_buffer *bufp)¶
設定 PCM 執行時緩衝區
引數
struct snd_pcm_substream *substream要設定的 PCM 子流
struct snd_dma_buffer *bufp緩衝區資訊,NULL 表示清除
描述
當 bufp 為非 NULL 時,將緩衝區資訊複製到 runtime->dma_buffer。否則,它會清除當前的緩衝區資訊。
-
void snd_pcm_gettime(struct snd_pcm_runtime *runtime, struct timespec64 *tv)¶
根據 timestamp 模式填充 timespec64
引數
struct snd_pcm_runtime *runtimePCM 執行時例項
struct timespec64 *tv要填充的 timespec64
-
int snd_pcm_set_fixed_buffer(struct snd_pcm_substream *substream, int type, struct device *data, size_t size)¶
預先分配並設定固定大小的 PCM 緩衝區
引數
struct snd_pcm_substream *substreamPCM 子流例項
int typeDMA 型別 (SNDRV_DMA_TYPE_*)
struct device *dataDMA 型別相關資料
size_t size請求的預分配大小(以位元組為單位)
描述
這是 snd_pcm_set_managed_buffer() 的一個變體,但是它只預先分配給定大小的緩衝區,並且不允許重新分配或動態分配更大的緩衝區,這與標準緩衝區不同。該函式可能會返回 -ENOMEM 錯誤,因此呼叫方必須檢查它。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_pcm_set_fixed_buffer_all(struct snd_pcm *pcm, int type, struct device *data, size_t size)¶
預先分配並設定固定大小的 PCM 緩衝區
引數
struct snd_pcm *pcmpcm 例項
int typeDMA 型別 (SNDRV_DMA_TYPE_*)
struct device *dataDMA 型別相關資料
size_t size請求的預分配大小(以位元組為單位)
描述
透過 snd_pcm_set_fixed_buffer() 將固定緩衝區的設定應用於所有子流。如果任何分配失敗,則返回 -ENOMEM,因此呼叫方必須檢查返回值。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
dma_addr_t snd_pcm_sgbuf_get_addr(struct snd_pcm_substream *substream, unsigned int ofs)¶
獲取相應偏移量的 DMA 地址
引數
struct snd_pcm_substream *substreamPCM 子流
unsigned int ofs位元組偏移量
返回值
DMA 地址
-
unsigned int snd_pcm_sgbuf_get_chunk_size(struct snd_pcm_substream *substream, unsigned int ofs, unsigned int size)¶
計算從給定大小開始的最大大小,該大小適合 contig. 頁面
引數
struct snd_pcm_substream *substreamPCM 子流
unsigned int ofs位元組偏移量
unsigned int size要檢查的位元組大小
返回值
塊大小
-
void snd_pcm_limit_isa_dma_size(int dma, size_t *max)¶
獲取與 ISA DMA 傳輸匹配的最大大小
引數
int dmaDMA 編號
size_t *max用於儲存最大大小的指標
-
const char *snd_pcm_direction_name(int direction)¶
獲取命名流方向的字串
引數
int direction流的方向,SNDRV_PCM_STREAM_XXX 之一
描述
返回一個命名流方向的字串。
-
const char *snd_pcm_stream_str(struct snd_pcm_substream *substream)¶
獲取命名流方向的字串
引數
struct snd_pcm_substream *substreamPCM 子流例項
返回值
一個命名流方向的字串。
-
struct snd_pcm_substream *snd_pcm_chmap_substream(struct snd_pcm_chmap *info, unsigned int idx)¶
獲取分配給給定 chmap 資訊的 PCM 子流
引數
struct snd_pcm_chmap *infochmap 資訊
unsigned int idx子流編號索引
返回值
匹配的 PCM 子流,如果未找到則為 NULL
-
u64 pcm_format_to_bits(snd_pcm_format_t pcm_format)¶
pcm_format 的強型別轉換到位運算
引數
snd_pcm_format_t pcm_formatPCM 格式
返回值
對應於給定 PCM 格式的 64 位掩碼
-
pcm_for_each_format¶
pcm_for_each_format (f)
用於迭代每種格式型別的助手
引數
fsnd_pcm_format_t 型別中的迭代器變數
PCM 格式助手¶
-
int snd_pcm_format_signed(snd_pcm_format_t format)¶
檢查 PCM 格式是否為有符號線性
引數
snd_pcm_format_t format要檢查的格式
返回值
如果給定的 PCM 格式是有符號線性,則為 1;如果是無符號線性,則為 0;對於非線性格式,則為負錯誤程式碼。
-
int snd_pcm_format_unsigned(snd_pcm_format_t format)¶
檢查 PCM 格式是否為無符號線性
引數
snd_pcm_format_t format要檢查的格式
返回值
如果給定的 PCM 格式是無符號線性,則為 1;如果是有符號線性,則為 0;對於非線性格式,則為負錯誤程式碼。
-
int snd_pcm_format_linear(snd_pcm_format_t format)¶
檢查 PCM 格式是否為線性
引數
snd_pcm_format_t format要檢查的格式
返回值
如果給定的 PCM 格式是線性,則為 1;如果不是,則為 0。
-
int snd_pcm_format_little_endian(snd_pcm_format_t format)¶
檢查 PCM 格式是否為小端
引數
snd_pcm_format_t format要檢查的格式
返回值
如果給定的 PCM 格式是小端,則為 1;如果是大端,則為 0;如果未指定位元組序,則為負錯誤程式碼。
-
int snd_pcm_format_big_endian(snd_pcm_format_t format)¶
檢查 PCM 格式是否為大端
引數
snd_pcm_format_t format要檢查的格式
返回值
如果給定的 PCM 格式是大端,則為 1;如果是小端,則為 0;如果未指定位元組序,則為負錯誤程式碼。
-
int snd_pcm_format_width(snd_pcm_format_t format)¶
返回格式的位寬
引數
snd_pcm_format_t format要檢查的格式
返回值
格式的位寬,如果格式未知,則為負錯誤程式碼。
-
int snd_pcm_format_physical_width(snd_pcm_format_t format)¶
返回格式的物理位寬
引數
snd_pcm_format_t format要檢查的格式
返回值
格式的物理位寬,如果格式未知,則為負錯誤程式碼。
-
ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples)¶
返回給定格式的樣本的位元組大小
引數
snd_pcm_format_t format要檢查的格式
size_t samples取樣率
返回值
給定格式的樣本的位元組大小,如果格式未知,則為負錯誤程式碼。
-
const unsigned char *snd_pcm_format_silence_64(snd_pcm_format_t format)¶
返回 8 位元組陣列中的靜默資料
引數
snd_pcm_format_t format要檢查的格式
返回值
要填充的格式模式,如果出錯,則為 NULL。
-
int snd_pcm_format_set_silence(snd_pcm_format_t format, void *data, unsigned int samples)¶
在緩衝區上設定靜默資料
引數
snd_pcm_format_t formatPCM 格式
void *data緩衝區指標
unsigned int samples要設定靜默的樣本數
描述
在給定樣本的緩衝區上設定靜默資料。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_pcm_hw_limit_rates(struct snd_pcm_hardware *hw)¶
確定 rate_min/rate_max 欄位
引數
struct snd_pcm_hardware *hwpcm hw 例項
描述
從給定 hw 的速率位確定 rate_min 和 rate_max 欄位。
返回值
如果成功,則為零。
-
unsigned int snd_pcm_rate_to_rate_bit(unsigned int rate)¶
將取樣率轉換為 SNDRV_PCM_RATE_xxx 位
引數
unsigned int rate要轉換的取樣率
返回值
對應於給定速率的 SNDRV_PCM_RATE_xxx 標誌,對於未知速率,則為 SNDRV_PCM_RATE_KNOT。
-
unsigned int snd_pcm_rate_bit_to_rate(unsigned int rate_bit)¶
將 SNDRV_PCM_RATE_xxx 位轉換為取樣率
引數
unsigned int rate_bit要轉換的速率位
返回值
對應於給定 SNDRV_PCM_RATE_xxx 標誌的取樣率,對於未知速率位,則為 0。
-
unsigned int snd_pcm_rate_mask_intersect(unsigned int rates_a, unsigned int rates_b)¶
計算兩個速率掩碼之間的交集
引數
unsigned int rates_a第一個速率掩碼
unsigned int rates_b第二個速率掩碼
描述
此函式計算兩個傳遞給該函式的速率掩碼都支援的速率。它將處理 SNDRV_PCM_RATE_CONTINUOUS 和 SNDRV_PCM_RATE_KNOT 的特殊處理。
返回值
一個速率掩碼,包含 rates_a 和 rates_b 都支援的速率。
PCM 記憶體管理¶
-
void snd_pcm_lib_preallocate_free(struct snd_pcm_substream *substream)¶
釋放指定子流的預分配緩衝區。
引數
struct snd_pcm_substream *substreamPCM 子流例項
描述
釋放給定子流的預分配緩衝區。
-
void snd_pcm_lib_preallocate_free_for_all(struct snd_pcm *pcm)¶
釋放 pcm 上的所有預分配緩衝區
引數
struct snd_pcm *pcmpcm 例項
描述
釋放給定 pcm 上的所有預分配緩衝區。
-
void snd_pcm_lib_preallocate_pages(struct snd_pcm_substream *substream, int type, struct device *data, size_t size, size_t max)¶
給定 DMA 型別的預分配
引數
struct snd_pcm_substream *substreamPCM 子流例項
int typeDMA 型別 (SNDRV_DMA_TYPE_*)
struct device *dataDMA 型別相關資料
size_t size請求的預分配大小(以位元組為單位)
size_t max允許的最大預分配大小
描述
為給定的 DMA 緩衝區型別進行預分配。
-
void snd_pcm_lib_preallocate_pages_for_all(struct snd_pcm *pcm, int type, void *data, size_t size, size_t max)¶
連續記憶體型別的預分配(所有子流)
引數
struct snd_pcm *pcmpcm 例項
int typeDMA 型別 (SNDRV_DMA_TYPE_*)
void *dataDMA 型別相關資料
size_t size請求的預分配大小(以位元組為單位)
size_t max允許的最大預分配大小
描述
為指定 DMA 型別的給定 pcm 的所有子流進行預分配。
-
int snd_pcm_set_managed_buffer(struct snd_pcm_substream *substream, int type, struct device *data, size_t size, size_t max)¶
為子流設定緩衝區管理
引數
struct snd_pcm_substream *substreamPCM 子流例項
int typeDMA 型別 (SNDRV_DMA_TYPE_*)
struct device *dataDMA 型別相關資料
size_t size請求的預分配大小(以位元組為單位)
size_t max允許的最大預分配大小
描述
為給定 DMA 緩衝區型別進行預分配,並將託管緩衝區分配模式設定為給定子流。在此模式下,PCM 核心將在 PCM hw_params 操作呼叫之前自動分配緩衝區,並在 PCM hw_free 操作呼叫之後釋放緩衝區,以便驅動程式無需在其回撥中顯式呼叫分配和釋放。當在 PCM hw_params 呼叫之前實際分配緩衝區時,它會為驅動程式更改其 h/w 引數開啟執行時 buffer_changed 標誌。
當 size 非零且 max 為零時,這將嘗試僅為精確的緩衝區大小分配而不回退,並可能返回 -ENOMEM。否則,如果分配失敗,該函式會嘗試分配較小的塊。這是 snd_pcm_set_fixed_buffer() 的行為。
當 size 和 max 都為零時,該函式僅設定緩衝區以供以後動態分配。它通常用於具有 SNDRV_DMA_TYPE_VMALLOC 型別的緩衝區。
成功分配和設定緩衝區後,該函式返回 0。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_pcm_set_managed_buffer_all(struct snd_pcm *pcm, int type, struct device *data, size_t size, size_t max)¶
為所有子流設定緩衝區管理
引數
struct snd_pcm *pcmpcm 例項
int typeDMA 型別 (SNDRV_DMA_TYPE_*)
struct device *dataDMA 型別相關資料
size_t size請求的預分配大小(以位元組為單位)
size_t max允許的最大預分配大小
描述
為指定 DMA 型別和大小的給定 pcm 的所有子流進行預分配,並將 managed_buffer_alloc 標誌設定為每個子流。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_pcm_lib_malloc_pages(struct snd_pcm_substream *substream, size_t size)¶
分配 DMA 緩衝區
引數
struct snd_pcm_substream *substream要將 DMA 緩衝區分配到的子流
size_t size以位元組為單位的請求緩衝區大小
描述
在先前傳遞給 snd_pcm_lib_preallocate_xxx_pages() 的 BUS 型別上分配 DMA 緩衝區。
返回值
如果緩衝區已更改,則為 1;如果未更改,則為 0;如果失敗,則為負程式碼。
-
int snd_pcm_lib_free_pages(struct snd_pcm_substream *substream)¶
釋放已分配的 DMA 緩衝區。
引數
struct snd_pcm_substream *substream要釋放 DMA 緩衝區的子流
描述
釋放透過 snd_pcm_lib_malloc_pages() 分配的 DMA 緩衝區。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
PCM DMA 引擎 API¶
-
int snd_hwparams_to_dma_slave_config(const struct snd_pcm_substream *substream, const struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config)¶
將 hw_params 轉換為 dma_slave_config
引數
const struct snd_pcm_substream *substreamPCM 子流
const struct snd_pcm_hw_params *paramshw_params
struct dma_slave_config *slave_configDMA 從裝置配置
描述
此函式可用於從基於 dmaengine 的 PCM 驅動程式實現中的子流和 hw_params 初始化 dma_slave_config。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
void snd_dmaengine_pcm_set_config_from_dai_data(const struct snd_pcm_substream *substream, const struct snd_dmaengine_dai_dma_data *dma_data, struct dma_slave_config *slave_config)¶
使用 DAI DMA 資料初始化 DMA 從裝置配置。
引數
const struct snd_pcm_substream *substreamPCM 子流
const struct snd_dmaengine_dai_dma_data *dma_dataDAI DMA 資料
struct dma_slave_config *slave_configDMA 從裝置配置
描述
從 DAI DMA 資料結構的相同欄位初始化 DMA 從裝置配置的 {dst,src}_addr、{dst,src}_maxburst、{dst,src}_addr_width 欄位。src 和 dst 欄位將根據子流的方向進行初始化。如果子流是回放流,則將初始化 dst 欄位;如果是捕獲流,則將初始化 src 欄位。只有在設定了 SND_DMAENGINE_PCM_DAI_FLAG_PACK 標誌或 DAI DMA 資料結構的 addr_width 欄位不等於 DMA_SLAVE_BUSWIDTH_UNDEFINED 時,才會初始化 {dst,src}_addr_width 欄位。如果滿足這兩個條件,則後者優先。
-
int snd_dmaengine_pcm_trigger(struct snd_pcm_substream *substream, int cmd)¶
基於 dmaengine 的 PCM 觸發器實現
引數
struct snd_pcm_substream *substreamPCM 子流
int cmd觸發器命令
描述
此函式可用作基於 dmaengine 的 PCM 驅動程式實現的 PCM 觸發器回撥。
返回值
成功時為 0,否則為負錯誤程式碼
-
snd_pcm_uframes_t snd_dmaengine_pcm_pointer_no_residue(struct snd_pcm_substream *substream)¶
基於 dmaengine 的 PCM 指標實現
引數
struct snd_pcm_substream *substreamPCM 子流
描述
此函式已棄用,新驅動程式不應使用,因為其結果可能不可靠。
返回值
幀中的 PCM 位置
-
snd_pcm_uframes_t snd_dmaengine_pcm_pointer(struct snd_pcm_substream *substream)¶
基於 dmaengine 的 PCM 指標實現
引數
struct snd_pcm_substream *substreamPCM 子流
描述
此函式可用作基於 dmaengine 的 PCM 驅動程式實現的 PCM 指標回撥。
返回值
幀中的 PCM 位置
-
struct dma_chan *snd_dmaengine_pcm_request_channel(dma_filter_fn filter_fn, void *filter_data)¶
為 dmaengine PCM 請求通道
引數
dma_filter_fn filter_fn用於請求 DMA 通道的過濾器函式
void *filter_data傳遞給 DMA 過濾器函式的資料
描述
此函式請求一個 DMA 通道以用於 dmaengine PCM。
返回值
NULL 或請求的 DMA 通道
-
int snd_dmaengine_pcm_open(struct snd_pcm_substream *substream, struct dma_chan *chan)¶
開啟一個基於 dmaengine 的 PCM 子流
引數
struct snd_pcm_substream *substreamPCM 子流
struct dma_chan *chan用於資料傳輸的 DMA 通道
描述
該函式通常應從 pcm 打開回調中呼叫。請注意,此函式將使用子流執行時的 private_data 欄位。因此,它不適用於您的 pcm 驅動程式實現。
返回值
成功時為 0,否則為負錯誤程式碼
-
int snd_dmaengine_pcm_close(struct snd_pcm_substream *substream)¶
關閉一個基於 dmaengine 的 PCM 子流
引數
struct snd_pcm_substream *substreamPCM 子流
返回值
成功時為 0,否則為負錯誤程式碼
-
int snd_dmaengine_pcm_close_release_chan(struct snd_pcm_substream *substream)¶
關閉一個基於 dmaengine 的 PCM 子流並釋放通道
引數
struct snd_pcm_substream *substreamPCM 子流
描述
釋放與 PCM 子流關聯的 DMA 通道。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_dmaengine_pcm_refine_runtime_hwparams(struct snd_pcm_substream *substream, struct snd_dmaengine_dai_dma_data *dma_data, struct snd_pcm_hardware *hw, struct dma_chan *chan)¶
最佳化執行時 hw 引數
引數
struct snd_pcm_substream *substreamPCM 子流
struct snd_dmaengine_dai_dma_data *dma_dataDAI DMA 資料
struct snd_pcm_hardware *hwPCM hw 引數
struct dma_chan *chan用於資料傳輸的 DMA 通道
描述
此函式將查詢 DMA 功能,然後最佳化 pcm 硬體引數。
返回值
成功時為 0,否則為負錯誤程式碼
-
enum dma_transfer_direction snd_pcm_substream_to_dma_direction(const struct snd_pcm_substream *substream)¶
獲取 PCM 子流的 dma_transfer_direction
引數
const struct snd_pcm_substream *substreamPCM 子流
返回值
DMA 傳輸方向
-
struct snd_dmaengine_dai_dma_data¶
DAI DMA 配置資料
定義:
struct snd_dmaengine_dai_dma_data {
dma_addr_t addr;
enum dma_slave_buswidth addr_width;
u32 maxburst;
void *filter_data;
const char *chan_name;
unsigned int fifo_size;
unsigned int flags;
void *peripheral_config;
size_t peripheral_size;
};
成員
addrDAI 資料來源或目標暫存器的地址。
addr_widthDAI 資料來源或目標暫存器的寬度。
maxburst可以在一次突發中傳送到或從 DAI 接收的最大字數(注意:字數,就像 src_addr_width 成員的單位,而不是位元組)。
filter_data自定義 DMA 通道過濾器資料,這通常在請求 DMA 通道時使用。
chan_name請求 DMA 通道時要使用的自定義通道名稱。
fifo_sizeDAI 控制器的 FIFO 大小(以位元組為單位)
標誌PCM_DAI 標誌,目前只有 SND_DMAENGINE_PCM_DAI_FLAG_PACK
peripheral_config用於為 dmaengine 傳輸程式設計外圍裝置的外圍裝置配置
peripheral_size外圍裝置配置緩衝區大小
-
struct snd_dmaengine_pcm_config¶
基於 dmaengine 的 PCM 的配置資料
定義:
struct snd_dmaengine_pcm_config {
int (*prepare_slave_config)(struct snd_pcm_substream *substream,struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config);
struct dma_chan *(*compat_request_channel)(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_substream *substream);
int (*process)(struct snd_pcm_substream *substream,int channel, unsigned long hwoff, unsigned long bytes);
const char *name;
dma_filter_fn compat_filter_fn;
struct device *dma_dev;
const char *chan_names[SNDRV_PCM_STREAM_LAST + 1];
const struct snd_pcm_hardware *pcm_hardware;
unsigned int prealloc_buffer_size;
};
成員
prepare_slave_config用於填充 PCM 子流的 DMA slave_config 的回撥。將從 PCM 驅動程式的 hwparams 回撥中呼叫。
compat_request_channel為不使用裝置樹的平臺請求 DMA 通道的回撥。
process用於對從/到使用者空間傳輸的樣本應用處理的回撥。
name元件名稱。如果為 null,將使用 dev_name。
compat_filter_fn在為不使用裝置樹的平臺請求通道時,將用作過濾器函式。過濾器引數將是 DAI 的 DMA 資料。
dma_dev如果設定,則在此裝置而不是 DAI 裝置上請求 DMA 通道。
chan_names如果設定,將在註冊時請求這些自定義 DMA 通道名稱。
pcm_hardware用於 PCM 的 snd_pcm_hardware 結構。
prealloc_buffer_size預分配音訊緩衝區的大小。
注意
如果同時設定了 compat_request_channel 和 compat_filter_fn,則將使用 compat_request_channel 請求通道,並且將忽略 compat_filter_fn。否則,將使用 dma_request_channel 請求通道,並將 compat_filter_fn 用作過濾器函式。
控制/混音器 API¶
通用控制介面¶
-
void snd_ctl_notify(struct snd_card *card, unsigned int mask, struct snd_ctl_elem_id *id)¶
向用戶空間傳送控制更改的通知
引數
struct snd_card *card要傳送通知的卡
unsigned int mask事件掩碼,SNDRV_CTL_EVENT_*
struct snd_ctl_elem_id *id要傳送通知的 ctl 元素 id
描述
此函式使用給定的 id 和掩碼新增一個事件記錄,附加到列表並喚醒使用者空間以進行通知。可以在原子上下文中呼叫此函式。
-
void snd_ctl_notify_one(struct snd_card *card, unsigned int mask, struct snd_kcontrol *kctl, unsigned int ioff)¶
向用戶空間傳送控制更改的通知
引數
struct snd_card *card要傳送通知的卡
unsigned int mask事件掩碼,SNDRV_CTL_EVENT_*
struct snd_kcontrol *kctl控制例項的指標
unsigned int ioff控制索引的附加偏移量
描述
此函式呼叫 snd_ctl_notify() 並執行額外的作業,如 LED 狀態更改。
-
int snd_ctl_new(struct snd_kcontrol **kctl, unsigned int count, unsigned int access, struct snd_ctl_file *file)¶
建立一個具有一些元素的新控制例項
引數
struct snd_kcontrol **kctl用於儲存新控制例項的指標
unsigned int count此控制元件中的元素數量
unsigned int access此控制元件中元素的預設訪問標誌
struct snd_ctl_file *file鎖定這些元素時給定
描述
為新的控制例項分配一個記憶體物件。 該例項具有與給定數量 (count) 一樣多的元素。 每個元素都具有給定的訪問許可權 (access)。 當給出 file 時,每個元素都被鎖定。
返回值
成功時為 0,失敗時為錯誤程式碼
-
struct snd_kcontrol *snd_ctl_new1(const struct snd_kcontrol_new *ncontrol, void *private_data)¶
從模板建立控制例項
引數
const struct snd_kcontrol_new *ncontrol初始化記錄
void *private_data要設定的私有資料
描述
分配一個新的 struct snd_kcontrol 例項並從給定的模板初始化。 當 ncontrol 的 access 欄位為 0 時,假定為 READWRITE 訪問。 當 count 欄位為 0 時,假定為一個。
返回值
新生成的例項的指標,如果失敗,則為 NULL。
-
void snd_ctl_free_one(struct snd_kcontrol *kcontrol)¶
釋放控制例項
引數
struct snd_kcontrol *kcontrol控制例項
描述
釋放透過 snd_ctl_new() 或 snd_ctl_new1() 建立的控制例項。 不要在此控制元件新增到卡後呼叫此函式。
-
int snd_ctl_add(struct snd_card *card, struct snd_kcontrol *kcontrol)¶
將控制例項新增到卡
引數
struct snd_card *card卡例項
struct snd_kcontrol *kcontrol要新增的控制例項
描述
將透過 snd_ctl_new() 或 snd_ctl_new1() 建立的控制例項新增到給定的卡。 還會分配一個用於快速搜尋的唯一 numid。
它會自動釋放無法新增的控制元件。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ctl_replace(struct snd_card *card, struct snd_kcontrol *kcontrol, bool add_on_replace)¶
替換卡的控制例項
引數
struct snd_card *card卡例項
struct snd_kcontrol *kcontrol要替換的控制例項
bool add_on_replace如果尚未新增控制元件,則新增控制元件
描述
替換給定的控制元件。 如果給定的控制元件不存在並且設定了 add_on_replace 標誌,則會新增該控制元件。 如果控制元件存在,則首先將其銷燬。
它會自動釋放無法新增或替換的控制元件。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ctl_remove(struct snd_card *card, struct snd_kcontrol *kcontrol)¶
從卡中刪除控制元件並釋放它
引數
struct snd_card *card卡例項
struct snd_kcontrol *kcontrol要刪除的控制例項
描述
從卡中刪除控制元件,然後釋放該例項。 您無需呼叫 snd_ctl_free_one()。 允許將 NULL 傳遞給 kcontrol 引數作為空操作。
請注意,此函式在內部獲取 card->controls_rwsem 鎖。
返回值
如果成功,則為 0;如果失敗,則為負錯誤程式碼。
-
int snd_ctl_remove_id(struct snd_card *card, struct snd_ctl_elem_id *id)¶
刪除給定 id 的控制元件並釋放它
引數
struct snd_card *card卡例項
struct snd_ctl_elem_id *id要刪除的控制元件 id
描述
查詢具有給定 id 的控制例項,將其從卡列表中刪除並釋放它。
返回值
如果成功,則為 0;如果失敗,則為負錯誤程式碼。
-
int snd_ctl_remove_user_ctl(struct snd_ctl_file *file, struct snd_ctl_elem_id *id)¶
刪除並釋放未鎖定的使用者控制元件
引數
struct snd_ctl_file * file活動控制控制代碼
struct snd_ctl_elem_id *id要刪除的控制元件 id
描述
查詢具有給定 id 的控制例項,將其從卡列表中刪除並釋放它。
返回值
如果成功,則為 0;如果失敗,則為負錯誤程式碼。
-
int snd_ctl_activate_id(struct snd_card *card, struct snd_ctl_elem_id *id, int active)¶
啟用/停用給定 id 的控制元件
引數
struct snd_card *card卡例項
struct snd_ctl_elem_id *id要啟用/停用的控制元件 id
int active非零以啟用
描述
查詢具有給定 id 的控制例項,並在更改時啟用或停用控制元件以及通知。 給定的 ID 資料填充了完整資訊。
返回值
如果未更改,則為 0;如果已更改,則為 1;如果失敗,則為負錯誤程式碼。
-
int snd_ctl_rename_id(struct snd_card *card, struct snd_ctl_elem_id *src_id, struct snd_ctl_elem_id *dst_id)¶
替換卡上控制元件的 id
引數
struct snd_card *card卡例項
struct snd_ctl_elem_id *src_id舊 id
struct snd_ctl_elem_id *dst_id新 id
描述
從卡中查詢具有舊 id 的控制元件,並將 id 替換為新 id。
該函式嘗試在替換其餘部分時保留已分配的 numid。
請注意,此函式應僅在卡初始化階段使用。 在卡例項例項化後呼叫可能會導致使用者空間期望持久 numid 出現問題。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
void snd_ctl_rename(struct snd_card *card, struct snd_kcontrol *kctl, const char *name)¶
重新命名卡上的控制元件
引數
struct snd_card *card卡例項
struct snd_kcontrol *kctl要重新命名的控制元件
const char *name新名稱
描述
將卡上指定的控制元件重新命名為新名稱。
請注意,此函式在內部獲取 card->controls_rwsem 鎖。
-
struct snd_kcontrol *snd_ctl_find_numid(struct snd_card *card, unsigned int numid)¶
查詢具有給定數字 id 的控制例項
引數
struct snd_card *card卡例項
unsigned int numid要搜尋的數字 id
描述
從卡中查詢具有給定數字 id 的控制例項。
請注意,此函式在內部獲取 card->controls_rwlock 鎖。
返回值
如果找到例項的指標,如果未找到,則為 NULL。
-
struct snd_kcontrol *snd_ctl_find_id(struct snd_card *card, const struct snd_ctl_elem_id *id)¶
查詢具有給定 id 的控制例項
引數
struct snd_card *card卡例項
const struct snd_ctl_elem_id *id要搜尋的 id
描述
從卡中查詢具有給定 id 的控制例項。
請注意,此函式在內部獲取 card->controls_rwlock 鎖。
返回值
如果找到例項的指標,如果未找到,則為 NULL。
-
int snd_ctl_register_ioctl(snd_kctl_ioctl_func_t fcn)¶
註冊裝置特定的控制 ioctl
引數
snd_kctl_ioctl_func_t fcnioctl 回撥函式
描述
從每個裝置管理器(如 pcm.c、hwdep.c 等)呼叫。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_ctl_register_ioctl_compat(snd_kctl_ioctl_func_t fcn)¶
註冊裝置特定的 32 位相容控制 ioctl
引數
snd_kctl_ioctl_func_t fcnioctl 回撥函式
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_ctl_unregister_ioctl(snd_kctl_ioctl_func_t fcn)¶
取消註冊裝置特定的控制 ioctl
引數
snd_kctl_ioctl_func_t fcn要取消註冊的 ioctl 回撥函式
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_ctl_unregister_ioctl_compat(snd_kctl_ioctl_func_t fcn)¶
取消註冊裝置特定的相容 32 位控制 ioctl
引數
snd_kctl_ioctl_func_t fcn要取消註冊的 ioctl 回撥函式
返回值
如果成功,則為零,否則為負錯誤程式碼
-
int snd_ctl_request_layer(const char *module_name)¶
請求使用該層
引數
const char *module_name核心模組的名稱(NULL == 內建)
返回值
如果成功,則為零;如果無法載入模組,則為錯誤程式碼
-
void snd_ctl_register_layer(struct snd_ctl_layer_ops *lops)¶
註冊新的控制層
引數
struct snd_ctl_layer_ops *lops操作結構
描述
新層可以跟蹤所有控制元素並在頂部執行其他操作(如音訊 LED 處理)。
-
void snd_ctl_disconnect_layer(struct snd_ctl_layer_ops *lops)¶
斷開控制層
引數
struct snd_ctl_layer_ops *lops操作結構
描述
預計在此呼叫之前會釋放有關跟蹤卡的資訊(此處不呼叫斷開連接回調)。
-
int snd_ctl_boolean_mono_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)¶
用於具有單聲道通道的標準布林資訊回撥的輔助函式
引數
struct snd_kcontrol *kcontrolkcontrol 例項
struct snd_ctl_elem_info *uinfo要儲存的資訊
描述
這是一個可以用作具有單個單聲道通道的標準布林控制元件的資訊回撥的函式。
返回值
零(始終成功)
-
int snd_ctl_boolean_stereo_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)¶
用於具有立體聲雙通道的標準布林資訊回撥的輔助函式
引數
struct snd_kcontrol *kcontrolkcontrol 例項
struct snd_ctl_elem_info *uinfo要儲存的資訊
描述
這是一個可以用作具有立體聲雙通道的標準布林控制元件的資訊回撥的函式。
返回值
零(始終成功)
-
int snd_ctl_enum_info(struct snd_ctl_elem_info *info, unsigned int channels, unsigned int items, const char *const names[])¶
填充列舉控制元件的資訊結構
引數
struct snd_ctl_elem_info *info要填充的結構
unsigned int channels控制元件通道的數量;通常為一個
unsigned int items控制元件值的數量;也是 names 的大小
const char *const names[]包含所有控制元件值的名稱的陣列
描述
將 info 中的所有必需欄位設定為其適當的值。 如果控制元件的可訪問性不是預設值(可讀寫),則呼叫者必須填充 info->access。
返回值
零(始終成功)
AC97 Codec API¶
-
void snd_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)¶
在給定暫存器上寫入值
引數
struct snd_ac97 *ac97ac97 例項
unsigned short reg要更改的暫存器
unsigned short value要設定的值
描述
在給定暫存器上寫入一個值。 這將在暫存器檢查後直接呼叫寫入回撥。 此函式不像 #snd_ca97_write_cache() 那樣更改暫存器快取,因此僅當您不想將更改反映到掛起/恢復狀態時才使用此函式。
-
unsigned short snd_ac97_read(struct snd_ac97 *ac97, unsigned short reg)¶
從給定暫存器讀取一個值
引數
struct snd_ac97 *ac97ac97 例項
unsigned short reg要讀取的暫存器
描述
從給定暫存器讀取一個值。 這將在暫存器檢查後直接呼叫讀取回調。
返回值
讀取的值。
-
void snd_ac97_write_cache(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)¶
在給定暫存器上寫入一個值並更新快取
引數
struct snd_ac97 *ac97ac97 例項
unsigned short reg要更改的暫存器
unsigned short value要設定的值
描述
在給定暫存器上寫入一個值並更新暫存器快取。 快取的值用於快取讀取和掛起/恢復。
-
int snd_ac97_update(struct snd_ac97 *ac97, unsigned short reg, unsigned short value)¶
更新給定暫存器上的值
引數
struct snd_ac97 *ac97ac97 例項
unsigned short reg要更改的暫存器
unsigned short value要設定的值
描述
將該值與暫存器快取進行比較,並且僅在該值已更改時才更新該值。
返回值
如果值已更改,則為 1;如果未更改,則為 0;如果失敗,則為負程式碼。
-
int snd_ac97_update_bits(struct snd_ac97 *ac97, unsigned short reg, unsigned short mask, unsigned short value)¶
更新給定暫存器上的位
引數
struct snd_ac97 *ac97ac97 例項
unsigned short reg要更改的暫存器
unsigned short mask要更改的位掩碼
unsigned short value要設定的值
描述
僅在該值已更改時才更新給定暫存器上的遮蔽位。
返回值
如果位已更改,則為 1;如果未更改,則為 0;如果失敗,則為負程式碼。
-
const char *snd_ac97_get_short_name(struct snd_ac97 *ac97)¶
檢索編解碼器名稱
引數
struct snd_ac97 *ac97編解碼器例項
返回值
編解碼器的短標識名稱。
-
int snd_ac97_bus(struct snd_card *card, int num, const struct snd_ac97_bus_ops *ops, void *private_data, struct snd_ac97_bus **rbus)¶
建立 AC97 匯流排元件
引數
struct snd_card *card卡例項
int num匯流排號
const struct snd_ac97_bus_ops *ops匯流排回調錶
void *private_data新例項的私有資料指標
struct snd_ac97_bus **rbus用於儲存新 AC97 匯流排例項的指標。
描述
建立一個 AC97 匯流排元件。 新分配並初始化一個 struct snd_ac97_bus 例項。
ops 表必須包括有效回撥(至少讀取和寫入)。 其他回撥(等待和重置)不是強制性的。
時鐘設定為 48000。 如果需要另一個時鐘,請手動設定 (*rbus)->clock。
AC97 匯流排例項註冊為低階裝置,因此您不必手動釋放它。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ac97_mixer(struct snd_ac97_bus *bus, struct snd_ac97_template *template, struct snd_ac97 **rac97)¶
建立 Codec97 元件
引數
struct snd_ac97_bus *bus編解碼器連線到的 AC97 匯流排
struct snd_ac97_template *templateac97 的模板,包括索引、回撥和私有資料。
struct snd_ac97 **rac97用於儲存新 ac97 例項的指標。
描述
建立 Codec97 元件。 從模板中新分配並初始化一個 struct snd_ac97 例項。 然後透過標準過程初始化編解碼器。
模板必須包括編解碼器編號 (num) 和地址 (addr) 以及私有資料 (private_data)。
ac97 例項註冊為低階裝置,因此您不必手動釋放它。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ac97_update_power(struct snd_ac97 *ac97, int reg, int powerup)¶
更新斷電暫存器
引數
struct snd_ac97 *ac97編解碼器例項
int reg速率暫存器,例如 AC97_PCM_FRONT_DAC_RATE
int powerup為部件供電時為非零
描述
更新給定部件的 AC97 斷電暫存器位。
返回值
零。
-
void snd_ac97_suspend(struct snd_ac97 *ac97)¶
AC97 編解碼器的通用掛起函式
引數
struct snd_ac97 *ac97ac97 例項
描述
掛起編解碼器,關閉晶片電源。
-
void snd_ac97_resume(struct snd_ac97 *ac97)¶
AC97 編解碼器的通用恢復函式
引數
struct snd_ac97 *ac97ac97 例項
描述
執行標準恢復程式,開啟電源並恢復舊的暫存器值。
-
int snd_ac97_tune_hardware(struct snd_ac97 *ac97, const struct ac97_quirk *quirk, const char *override)¶
調整硬體
引數
struct snd_ac97 *ac97ac97 例項
const struct ac97_quirk *quirkquirk 列表
const char *override顯式 quirk 值(如果非 NULL,則覆蓋列表)
描述
為每個 pci 裝置做一些變通方法,例如將耳機(真線路輸出)控制元件重新命名為“Master”。quirk 列表必須以零填充條目結尾。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ac97_set_rate(struct snd_ac97 *ac97, int reg, unsigned int rate)¶
更改給定輸入/輸出的速率。
引數
struct snd_ac97 *ac97ac97 例項
int reg要更改的暫存器
unsigned int rate要設定的取樣率
描述
更改編解碼器上給定輸入/輸出的速率。如果編解碼器不支援 VAR,則速率必須為 48000(SPDIF 除外)。
有效的暫存器是 AC97_PCM_MIC_ADC_RATE、AC97_PCM_FRONT_DAC_RATE、AC97_PCM_LR_ADC_RATE。如果編解碼器支援,則接受 AC97_PCM_SURR_DAC_RATE 和 AC97_PCM_LFE_DAC_RATE。AC97_SPDIF 被接受為修改 SPDIF 狀態位的偽暫存器。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ac97_pcm_assign(struct snd_ac97_bus *bus, unsigned short pcms_count, const struct ac97_pcm *pcms)¶
將 AC97 插槽分配給給定的 PCM 流
引數
struct snd_ac97_bus *busac97 匯流排例項
unsigned short pcms_count要分配的 PCM 的計數
const struct ac97_pcm *pcms要分配的 PCM
描述
它為給定的 PCM 分配可用的 AC97 插槽。如果沒有或只有一些插槽可用,則 pcm->xxx.slots 和 pcm->xxx.rslots[] 成員會減少,並且可能為零。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ac97_pcm_open(struct ac97_pcm *pcm, unsigned int rate, enum ac97_pcm_cfg cfg, unsigned short slots)¶
開啟給定的 AC97 pcm
引數
struct ac97_pcm *pcmac97 pcm 例項
unsigned int rate以 Hz 為單位的速率,如果編解碼器不支援 VRA,則該值必須為 48000Hz
enum ac97_pcm_cfg cfg輸出流特徵
unsigned short slots此 pcm 的已分配插槽(snd_ac97_pcm_assign)的子集
描述
它鎖定指定的插槽並將給定的速率設定為 AC97 暫存器。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_ac97_pcm_close(struct ac97_pcm *pcm)¶
關閉給定的 AC97 pcm
引數
struct ac97_pcm *pcmac97 pcm 例項
描述
它釋放鎖定的 AC97 插槽。
返回值
零。
-
int snd_ac97_pcm_double_rate_rules(struct snd_pcm_runtime *runtime)¶
設定雙倍速率約束
引數
struct snd_pcm_runtime *runtimeac97 前端回放 pcm 的執行時
描述
安裝硬體約束規則以防止同時使用雙倍速率和兩個以上的通道。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
虛擬主控制 API¶
-
int snd_ctl_add_followers(struct snd_card *card, struct snd_kcontrol *master, const char *const *list)¶
向 vmaster 新增多個 follower
引數
struct snd_card *card卡例項
struct snd_kcontrol *master目標 vmaster kcontrol 物件
const char * const *list要新增的 follower 的名稱字串的 NULL 終止列表
描述
新增具有給定名稱的多個 follower kcontrol。成功時返回 0,否則返回負錯誤程式碼。
-
struct snd_kcontrol *snd_ctl_make_virtual_master(char *name, const unsigned int *tlv)¶
建立虛擬主控制
引數
char *name要建立的控制元素的名稱字串
const unsigned int *tlvdB 資訊的可選 TLV int 陣列
描述
建立具有給定名稱字串的虛擬主控制。
建立 vmaster 元素後,可以透過 snd_ctl_add_follower() 或 snd_ctl_add_follower_uncached() 新增 follower 控制。
可選引數 tlv 可用於指定主控制的 dB 比例的 TLV 資訊。它應該是一個帶有 #SNDRV_CTL_TLVT_DB_SCALE、#SNDRV_CTL_TLV_DB_MINMAX 或 #SNDRV_CTL_TLVT_DB_MINMAX_MUTE 型別的單個元素,並且應該是最大 0dB。
返回值
建立的控制元素,或 NULL 表示錯誤 (ENOMEM)。
-
int snd_ctl_add_vmaster_hook(struct snd_kcontrol *kcontrol, void (*hook)(void *private_data, int), void *private_data)¶
向 vmaster 控制新增 hook
引數
struct snd_kcontrol *kcontrolvmaster kctl 元素
void (*hook)(void *private_data, int)hook 函式
void *private_data要儲存的 private_data 指標
描述
將給定的 hook 新增到 vmaster 控制元素,以便在每次更改值時呼叫它。
返回值
零。
-
void snd_ctl_sync_vmaster(struct snd_kcontrol *kcontrol, bool hook_only)¶
同步 vmaster follower 和 hook
引數
struct snd_kcontrol *kcontrolvmaster kctl 元素
bool hook_only僅同步 hook
描述
強制呼叫每個 follower 的 put 回撥,並呼叫 hook 函式以與給定 vmaster 元素的當前值同步。當將 NULL 傳遞給 kcontrol 時,為 NOP。
-
int snd_ctl_apply_vmaster_followers(struct snd_kcontrol *kctl, int (*func)(struct snd_kcontrol *vfollower, struct snd_kcontrol *follower, void *arg), void *arg)¶
將函式應用於每個 vmaster follower
引數
struct snd_kcontrol *kctlvmaster kctl 元素
int (*func)(struct snd_kcontrol *vfollower, struct snd_kcontrol *follower, void *arg)要應用的函式
void *arg可選函式引數
描述
將函式 func 應用於給定 vmaster kctl 的每個 follower kctl。
返回值
成功時為 0,否則為負錯誤程式碼
-
struct snd_kcontrol *snd_ctl_find_id_mixer(struct snd_card *card, const char *name)¶
查詢具有給定名稱字串的控制例項
引數
struct snd_card *card卡例項
const char *name名稱字串
描述
查詢具有給定名稱和 SNDRV_CTL_ELEM_IFACE_MIXER 的控制例項。其他欄位設定為零。
這僅僅是 snd_ctl_find_id() 的包裝器。
返回值
如果找到例項的指標,如果未找到,則為 NULL。
-
int snd_ctl_add_follower(struct snd_kcontrol *master, struct snd_kcontrol *follower)¶
新增虛擬 follower 控制
引數
struct snd_kcontrol *mastervmaster 元素
struct snd_kcontrol *follower要新增的 follower 元素
描述
將虛擬 follower 控制新增到先前透過 snd_ctl_create_virtual_master() 建立的給定主元素。
所有 follower 必須是相同的型別(透過 info 回撥返回相同的資訊)。該函式不檢查它,因此您有責任。
此外,還有一些其他限制:最多兩個通道,對數音量控制(dB 電平),因此沒有線性音量,主控只能衰減音量,沒有增益
返回值
成功則返回零,否則返回負錯誤程式碼。
-
int snd_ctl_add_follower_uncached(struct snd_kcontrol *master, struct snd_kcontrol *follower)¶
新增虛擬 follower 控制
引數
struct snd_kcontrol *mastervmaster 元素
struct snd_kcontrol *follower要新增的 follower 元素
描述
向給定的主控新增虛擬 follower 控制。與 snd_ctl_add_follower() 不同,透過此函式新增的元素應該具有易失性值,並且每次從主控查詢時都會呼叫 get 回撥。
當控制直接窺視硬體值並且該值可以透過元素 put 回撥以外的其他方式更改時,應使用此函式來使該值始終保持最新。
返回值
成功則返回零,否則返回負錯誤程式碼。
MIDI API¶
原始 MIDI API¶
-
int snd_rawmidi_receive(struct snd_rawmidi_substream *substream, const unsigned char *buffer, int count)¶
接收來自裝置的輸入資料
引數
struct snd_rawmidi_substream *substream原始 MIDI 子流
const unsigned char *buffer緩衝區指標
int count要讀取的資料大小
描述
從內部緩衝區讀取資料。
返回值
讀取資料的大小,如果失敗則返回負錯誤程式碼。
-
int snd_rawmidi_transmit_empty(struct snd_rawmidi_substream *substream)¶
檢查輸出緩衝區是否為空
引數
struct snd_rawmidi_substream *substream原始 MIDI 子流
返回值
如果內部輸出緩衝區為空,則為 1,否則為 0。
-
int snd_rawmidi_transmit_peek(struct snd_rawmidi_substream *substream, unsigned char *buffer, int count)¶
從內部緩衝區複製資料
引數
struct snd_rawmidi_substream *substream原始 MIDI 子流
unsigned char *buffer緩衝區指標
int count要傳輸的資料大小
描述
將資料從內部輸出緩衝區複製到給定緩衝區。
當 MIDI 輸出準備好時在中斷處理程式中呼叫此方法,並在傳輸完成後呼叫 snd_rawmidi_transmit_ack()。
返回值
複製資料的大小,如果失敗則返回負錯誤程式碼。
-
int snd_rawmidi_transmit_ack(struct snd_rawmidi_substream *substream, int count)¶
確認傳輸
引數
struct snd_rawmidi_substream *substream原始 MIDI 子流
int count傳輸的計數
描述
使用給定大小推進內部輸出緩衝區的硬體指標,並更新條件。傳輸完成後呼叫。
返回值
如果成功,則返回推進的大小,如果失敗,則返回負錯誤程式碼。
-
int snd_rawmidi_transmit(struct snd_rawmidi_substream *substream, unsigned char *buffer, int count)¶
從緩衝區複製到裝置
引數
struct snd_rawmidi_substream *substream原始 MIDI 子流
unsigned char *buffer緩衝區指標
int count要傳輸的資料大小
描述
將資料從緩衝區複製到裝置並推進指標。
返回值
如果成功,則返回複製的大小,如果失敗,則返回負錯誤程式碼。
-
int snd_rawmidi_proceed(struct snd_rawmidi_substream *substream)¶
丟棄所有掛起的位元組並繼續
引數
struct snd_rawmidi_substream *substream原始 MIDI 子流
返回值
丟棄的位元組數
-
int snd_rawmidi_new(struct snd_card *card, char *id, int device, int output_count, int input_count, struct snd_rawmidi **rrawmidi)¶
建立原始 MIDI 例項
引數
struct snd_card *card卡例項
char *idid 字串
int device裝置索引
int output_count輸出流的數量
int input_count輸入流的數量
struct snd_rawmidi **rrawmidi用於儲存新原始 MIDI 例項的指標
描述
建立新的原始 MIDI 例項。使用 snd_rawmidi_set_ops() 將運算子設定為新例項。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
void snd_rawmidi_set_ops(struct snd_rawmidi *rmidi, int stream, const struct snd_rawmidi_ops *ops)¶
設定原始 MIDI 運算子
引數
struct snd_rawmidi *rmidi原始 MIDI 例項
int stream流方向,SNDRV_RAWMIDI_STREAM_XXX
const struct snd_rawmidi_ops *ops操作表
描述
為給定的流方向設定原始 MIDI 運算子。
MPU401-UART API¶
-
irqreturn_t snd_mpu401_uart_interrupt(int irq, void *dev_id)¶
通用 MPU401-UART 中斷處理程式
引數
int irqirq 編號
void *dev_idMPU401 例項
描述
處理 MPU401-UART i/o 的中斷。
返回值
如果處理了中斷,則為 IRQ_HANDLED。否則為 IRQ_NONE。
-
irqreturn_t snd_mpu401_uart_interrupt_tx(int irq, void *dev_id)¶
通用 MPU401-UART 傳輸 irq 處理程式
引數
int irqirq 編號
void *dev_idMPU401 例項
描述
處理 MPU401-UART 輸出的中斷。
返回值
如果處理了中斷,則為 IRQ_HANDLED。否則為 IRQ_NONE。
-
int snd_mpu401_uart_new(struct snd_card *card, int device, unsigned short hardware, unsigned long port, unsigned int info_flags, int irq, struct snd_rawmidi **rrawmidi)¶
建立 MPU401-UART 例項
引數
struct snd_card *card卡例項
int device裝置索引,從零開始
unsigned short hardware硬體型別,MPU401_HW_XXXX
unsigned long portMPU401 埠的基地址
unsigned int info_flags位標誌 MPU401_INFO_XXX
int irqISA irq 編號,如果未分配,則為 -1
struct snd_rawmidi ** rrawmidi用於儲存新原始 MIDI 例項的指標
描述
建立新的 MPU-401 例項。
請注意,原始 MIDI 例項在 rrawmidi 引數上返回,而不是 MPU401 例項本身。要訪問 MPU401 例項,請從 rawmidi->private_data 轉換(使用 struct snd_mpu401 magic-cast)。
返回值
如果成功,則為零,否則為負錯誤程式碼。
Proc Info API¶
Proc Info 介面¶
-
int snd_info_get_line(struct snd_info_buffer *buffer, char *line, int len)¶
從 procfs 緩衝區讀取一行
引數
struct snd_info_buffer *bufferprocfs 緩衝區
char *line要儲存的緩衝區
int len最大緩衝區大小
描述
從緩衝區讀取一行並存儲字串。
返回值
如果成功,則為零,如果出錯或 EOF,則為 1。
-
const char *snd_info_get_str(char *dest, const char *src, int len)¶
解析字串令牌
引數
char *dest用於儲存字串令牌的緩衝區
const char *src原始字串
int len令牌的最大長度 - 1
描述
解析原始字串並將令牌複製到給定的字串緩衝區。
返回值
原始字串的更新指標,以便它可以用於下一次呼叫。
-
struct snd_info_entry *snd_info_create_module_entry(struct module *module, const char *name, struct snd_info_entry *parent)¶
為給定的模組建立 info 條目
引數
struct module * module模組指標
const char *name檔名
struct snd_info_entry *parent父目錄
描述
建立一個新的 info 條目並將其分配給給定的模組。
返回值
新例項的指標,如果失敗,則為 NULL。
-
struct snd_info_entry *snd_info_create_card_entry(struct snd_card *card, const char *name, struct snd_info_entry *parent)¶
為給定的卡建立 info 條目
引數
struct snd_card *card卡例項
const char *name檔名
struct snd_info_entry * parent父目錄
描述
建立一個新的 info 條目並將其分配給給定的卡。
返回值
新例項的指標,如果失敗,則為 NULL。
-
void snd_info_free_entry(struct snd_info_entry *entry)¶
釋放 info 條目
引數
struct snd_info_entry * entryinfo 條目
描述
釋放 info 條目。
-
int snd_info_register(struct snd_info_entry *entry)¶
註冊 info 條目
引數
struct snd_info_entry *entryinfo 條目
描述
註冊 proc info 條目。所有子條目都會遞迴註冊。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_card_rw_proc_new(struct snd_card *card, const char *name, void *private_data, void (*read)(struct snd_info_entry*, struct snd_info_buffer*), void (*write)(struct snd_info_entry *entry, struct snd_info_buffer *buffer))¶
為卡建立一個讀/寫文字 proc 檔案條目
引數
struct snd_card *card卡例項
const char *name檔名
void *private_data任意的私有資料
void (*read)(struct snd_info_entry *, struct snd_info_buffer *)讀取回調
void (*write)(struct snd_info_entry *entry, struct snd_info_buffer *buffer)寫入回撥,對於只讀檔案,此引數為 NULL
描述
此 proc 檔案條目將透過 snd_card_register() 呼叫註冊,並且也會在卡移除時自動刪除。
返回值
如果成功,則為零,否則為負錯誤程式碼
壓縮解除安裝¶
壓縮解除安裝 API¶
-
int snd_compr_stop_error(struct snd_compr_stream *stream, snd_pcm_state_t state)¶
報告流上的致命錯誤
引數
struct snd_compr_stream *stream流的指標
snd_pcm_state_t state將流轉換到的狀態
描述
停止流並設定其狀態。
應在持有壓縮裝置鎖的情況下呼叫。
返回值
如果成功,則為零,否則為負錯誤程式碼
-
void snd_compr_task_finished(struct snd_compr_stream *stream, struct snd_compr_task_runtime *task)¶
通知任務已完成
引數
struct snd_compr_stream *stream流的指標
struct snd_compr_task_runtime *task執行時任務結構
描述
設定已完成的任務狀態並通知等待者。
-
int snd_compress_new(struct snd_card *card, int device, int dirn, const char *id, struct snd_compr *compr)¶
建立新的壓縮裝置
引數
struct snd_card *card音效卡指標
int device裝置號
int dirn裝置方向,應為 enum snd_compr_direction 型別
const char *idID 字串
struct snd_compr *compr壓縮裝置指標
返回值
如果成功,則為零,否則為負錯誤程式碼
-
struct snd_compressed_buffer¶
壓縮緩衝區
定義:
struct snd_compressed_buffer {
__u32 fragment_size;
__u32 fragments;
};
成員
fragment_size緩衝區片段的大小(以位元組為單位)
fragments此類片段的數量
-
struct snd_compr_params¶
壓縮流引數
定義:
struct snd_compr_params {
struct snd_compressed_buffer buffer;
struct snd_codec codec;
__u8 no_wake_mode;
};
成員
buffer緩衝區描述
codec編解碼器引數
no_wake_mode不要在片段經過時喚醒
-
struct snd_compr_tstamp¶
時間戳描述符
定義:
struct snd_compr_tstamp {
__u32 byte_offset;
__u32 copied_total;
__u32 pcm_frames;
__u32 pcm_io_frames;
__u32 sampling_rate;
};
成員
byte_offset環形緩衝區中到 DSP 的位元組偏移
copied_total從/到環形緩衝區複製到/由 DSP 複製的總位元組數
pcm_frames由 DSP 解碼或編碼的幀。此欄位將以較大的步長髮展,並且僅應用於監視編碼/解碼進度。它不應用於時間估計。
pcm_io_frames由 DSP 渲染或接收到混音器或音訊輸入/輸出中的幀。此欄位應用於 A/V 同步或時間估計。
sampling_rate音訊的取樣率
-
struct snd_compr_avail¶
可用描述符
定義:
struct snd_compr_avail {
__u64 avail;
struct snd_compr_tstamp tstamp;
};
成員
avail環形緩衝區中可用於寫入/讀取的位元組數
tstamp時間戳資訊
-
struct snd_compr_caps¶
caps 描述符
定義:
struct snd_compr_caps {
__u32 num_codecs;
__u32 direction;
__u32 min_fragment_size;
__u32 max_fragment_size;
__u32 min_fragments;
__u32 max_fragments;
__u32 codecs[MAX_NUM_CODECS];
__u32 reserved[11];
};
成員
num_codecs支援的編解碼器數量
direction支援的方向。屬於 snd_compr_direction 型別
min_fragment_sizeDSP 支援的最小片段
max_fragment_sizeDSP 支援的最大片段
min_fragmentsDSP 支援的最小片段數
max_fragmentsDSP 支援的最大片段數
codecs編解碼器陣列的指標
reserved保留欄位
-
struct snd_compr_codec_caps¶
查詢編解碼器的功能
定義:
struct snd_compr_codec_caps {
__u32 codec;
__u32 num_descriptors;
struct snd_codec_desc descriptor[MAX_NUM_CODEC_DESCRIPTORS];
};
成員
codec為其查詢功能的編解碼器
num_descriptors編解碼器描述符的數量
descriptor編解碼器功能描述符的陣列
-
enum sndrv_compress_encoder¶
編碼器元資料鍵
常量
SNDRV_COMPRESS_ENCODER_PADDING編碼器在音軌末尾附加的樣本數
SNDRV_COMPRESS_ENCODER_DELAY編碼器在音軌開頭插入的樣本數
-
struct snd_compr_metadata¶
壓縮流元資料
定義:
struct snd_compr_metadata {
__u32 key;
__u32 value[8];
};
成員
key鍵 ID
value鍵值
-
struct snd_compr_task¶
非即時操作的任務原語
定義:
struct snd_compr_task {
__u64 seqno;
__u64 origin_seqno;
int input_fd;
int output_fd;
__u64 input_size;
__u32 flags;
__u8 reserved[16];
};
成員
seqno序列號(任務識別符號)
origin_seqno先前的序列號(任務識別符號) - 用於重用
input_fd資料輸入檔案描述符 (dma-buf)
output_fd資料輸出檔案描述符 (dma-buf)
input_size填充的資料(以位元組為單位)(來自呼叫方,不得超過片段大小)
標誌請參閱 SND_COMPRESS_TFLG_* 定義
reserved為將來的擴充套件保留
-
enum snd_compr_state¶
任務狀態
常量
SND_COMPRESS_TASK_STATE_IDLE任務未排隊
SND_COMPRESS_TASK_STATE_ACTIVE任務在佇列中
SND_COMPRESS_TASK_STATE_FINISHED任務已處理,輸出可用
-
struct snd_compr_task_status¶
任務狀態
定義:
struct snd_compr_task_status {
__u64 seqno;
__u64 input_size;
__u64 output_size;
__u32 output_flags;
__u8 state;
__u8 reserved[15];
};
成員
seqno序列號(任務識別符號)
input_size填充的資料(以位元組為單位)(來自使用者空間)
output_size填充的資料(以位元組為單位)(來自驅動程式)
output_flags為將來保留(全部為零 - 來自驅動程式)
state實際任務狀態 (SND_COMPRESS_TASK_STATE_*)
reserved為將來的擴充套件保留
-
struct snd_enc_vorbis¶
Vorbis 編碼器引數
定義:
struct snd_enc_vorbis {
__s32 quality;
__u32 managed;
__u32 max_bit_rate;
__u32 min_bit_rate;
__u32 downmix;
};
成員
quality將編碼質量設定為 n,介於 -1(低)和 10(高)之間。在預設操作模式下,質量等級為 3。正常質量範圍為 0 - 10。
managed布林值。設定位元率管理模式。這將關閉正常的 VBR 編碼,但允許編碼器強制執行硬或軟位元率約束。此模式可能較慢,質量也可能較低。它主要用於流式傳輸。
max_bit_rate僅當 managed 為 TRUE 時才啟用
min_bit_rate僅當 managed 為 TRUE 時才啟用
downmix布林值。將輸入從立體聲下混音到單聲道(對非立體聲流沒有影響)。對較低位元率的編碼有用。
描述
這些選項是從 OpenMAX IL 規範和 Gstreamer vorbisenc 屬性中提取的
為了獲得最佳質量,使用者應指定 VBR 模式並設定質量等級。
-
struct snd_enc_real¶
RealAudio 編碼器引數
定義:
struct snd_enc_real {
__u32 quant_bits;
__u32 start_region;
__u32 num_regions;
};
成員
quant_bits流中耦合量化位數
start_region流中耦合的起始區域
num_regions區域值的數量
描述
這些選項是從 OpenMAX IL 規範中提取的
-
struct snd_enc_flac¶
FLAC 編碼器引數
定義:
struct snd_enc_flac {
__u32 num;
__u32 gain;
};
成員
num序列號,僅對 OGG 格式有效,需要由應用程式設定
gain新增重放增益標籤
描述
這些選項是從 FLAC 線上文件中提取的,網址為 http://flac.sourceforge.net/documentation_tools_flac.html
為了簡化 API,假設使用者將選擇質量配置檔案。如果需要,可以在以後階段新增影響編碼質量和速度的其他選項。
預設情況下,編碼器使用 Subset 格式。
諸如圖片等 TAGS 不能由解除安裝的編碼器處理,並且此 API 不支援。
-
struct snd_compr_task_runtime¶
任務執行時描述
定義:
struct snd_compr_task_runtime {
struct list_head list;
struct dma_buf *input;
struct dma_buf *output;
u64 seqno;
u64 input_size;
u64 output_size;
u32 flags;
u8 state;
void *private_value;
};
成員
列表所有託管任務的列表
input輸入 DMA 緩衝區
output輸出 DMA 緩衝區
seqnosequence number
input_size輸入緩衝區中實際使用的資料
output_size輸出緩衝區中實際使用的資料
標誌請參閱 SND_COMPRESS_TFLG_*
state實際任務狀態
private_value由底層驅動程式使用(不透明)
-
struct snd_compr_runtime¶
執行時流描述
定義:
struct snd_compr_runtime {
snd_pcm_state_t state;
struct snd_compr_ops *ops;
void *buffer;
u64 buffer_size;
u32 fragment_size;
u32 fragments;
u64 total_bytes_available;
u64 total_bytes_transferred;
wait_queue_head_t sleep;
void *private_data;
unsigned char *dma_area;
dma_addr_t dma_addr;
size_t dma_bytes;
struct snd_dma_buffer *dma_buffer_p;
#if IS_ENABLED(CONFIG_SND_COMPRESS_ACCEL);
u32 active_tasks;
u32 total_tasks;
u64 task_seqno;
struct list_head tasks;
#endif;
};
成員
state流狀態
opsDSP 回撥的指標
buffer核心緩衝區的指標,僅當不在 mmap 模式或 DSP 不實現複製時有效
buffer_size上述緩衝區的大小
fragment_size緩衝區片段的大小(以位元組為單位)
fragments此類片段的數量
total_bytes_available環形緩衝區中可用的累積位元組數
total_bytes_transferred解除安裝 DSP 傳輸的累積位元組數
sleep輪詢休眠
private_data驅動程式私有資料指標
dma_area虛擬緩衝區地址
dma_addr物理緩衝區地址(無法從主 CPU 訪問)
dma_bytesDMA 區域的大小
dma_buffer_p執行時 dma 緩衝區指標
active_tasks活動任務計數
total_tasks所有任務的計數
task_seqno上次任務序列號 (!= 0)
tasks所有任務的列表
-
struct snd_compr_stream¶
壓縮流
定義:
struct snd_compr_stream {
const char *name;
struct snd_compr_ops *ops;
struct snd_compr_runtime *runtime;
struct snd_compr *device;
struct delayed_work error_work;
enum snd_compr_direction direction;
bool metadata_set;
bool next_track;
bool partial_drain;
bool pause_in_draining;
void *private_data;
struct snd_dma_buffer dma_buffer;
};
成員
name裝置名稱
opsDSP 回撥的指標
runtime執行時結構的指標
device裝置指標
error_work由於錯誤關閉流時使用的延遲工作
direction流方向,播放/錄製
metadata_set元資料設定標誌,設定為 true
next_track具有使用者空間訊號下一曲目過渡,設定為 true
partial_drain正在進行流的部分耗盡,設定為 true
pause_in_draining在耗盡狀態期間暫停,設定為 true
private_dataDSP 私有資料的指標
dma_buffer已分配的緩衝區(如果有)
-
struct snd_compr_ops¶
壓縮路徑 DSP 操作
定義:
struct snd_compr_ops {
int (*open)(struct snd_compr_stream *stream);
int (*free)(struct snd_compr_stream *stream);
int (*set_params)(struct snd_compr_stream *stream, struct snd_compr_params *params);
int (*get_params)(struct snd_compr_stream *stream, struct snd_codec *params);
int (*set_metadata)(struct snd_compr_stream *stream, struct snd_compr_metadata *metadata);
int (*get_metadata)(struct snd_compr_stream *stream, struct snd_compr_metadata *metadata);
int (*trigger)(struct snd_compr_stream *stream, int cmd);
int (*pointer)(struct snd_compr_stream *stream, struct snd_compr_tstamp *tstamp);
int (*copy)(struct snd_compr_stream *stream, char __user *buf, size_t count);
int (*mmap)(struct snd_compr_stream *stream, struct vm_area_struct *vma);
int (*ack)(struct snd_compr_stream *stream, size_t bytes);
int (*get_caps) (struct snd_compr_stream *stream, struct snd_compr_caps *caps);
int (*get_codec_caps) (struct snd_compr_stream *stream, struct snd_compr_codec_caps *codec);
#if IS_ENABLED(CONFIG_SND_COMPRESS_ACCEL);
int (*task_create) (struct snd_compr_stream *stream, struct snd_compr_task_runtime *task);
int (*task_start) (struct snd_compr_stream *stream, struct snd_compr_task_runtime *task);
int (*task_stop) (struct snd_compr_stream *stream, struct snd_compr_task_runtime *task);
int (*task_free) (struct snd_compr_stream *stream, struct snd_compr_task_runtime *task);
#endif;
};
成員
open開啟壓縮流 此回撥是強制性的,並且應保持 dsp 準備好接收流引數
free關閉壓縮流,強制性
set_params設定壓縮流引數,強制性 只能在流建立期間呼叫此方法以設定編解碼器引數和流屬性
get_params檢索編解碼器引數,強制性
set_metadata設定流的元資料值
get_metadata從流中檢索請求的元資料值
trigger觸發操作,如啟動、暫停、恢復、耗盡、停止。此回撥是強制性的
pointer檢索當前 h/w 指標資訊。強制性
copy將壓縮資料複製到/從使用者空間複製,可選 如果 DSP 支援 mmap,則無法實現
mmap用於 mmap DSP 儲存的 DSP mmap 方法
ack當資料寫入音訊緩衝區時,DSP 的確認,可選 如果實現了複製,則無效
get_caps檢索 DSP 功能,強制性
get_codec_caps檢索特定編解碼器的功能,強制性
task_create為加速操作建立一組輸入/輸出緩衝區
task_start啟動(排隊)加速操作的任務
task_stop停止(取消排隊)加速操作的任務
task_free釋放一組用於加速操作的輸入/輸出緩衝區
-
struct snd_compr¶
壓縮裝置
定義:
struct snd_compr {
const char *name;
struct device *dev;
struct snd_compr_ops *ops;
void *private_data;
struct snd_card *card;
unsigned int direction;
struct mutex lock;
int device;
bool use_pause_in_draining;
#ifdef CONFIG_SND_VERBOSE_PROCFS;
};
成員
nameDSP 裝置名稱
dev關聯的裝置例項
opsDSP 回撥的指標
private_dataDSP pvt 資料的指標
card音效卡指標
direction播放或捕獲方向
lock裝置鎖
devicedevice id
use_pause_in_draining允許在耗盡期間暫停,設定為 true
-
void snd_compr_use_pause_in_draining(struct snd_compr_stream *substream)¶
允許在耗盡狀態下暫停和恢復
引數
struct snd_compr_stream *substream要設定的壓縮子流
描述
允許在耗盡狀態下暫停和恢復。只有 HW 驅動程式支援此轉換才能呼叫此 API。
-
void snd_compr_set_runtime_buffer(struct snd_compr_stream *stream, struct snd_dma_buffer *bufp)¶
設定壓縮執行時緩衝區
引數
struct snd_compr_stream *stream要設定的壓縮流
struct snd_dma_buffer *bufp緩衝區資訊,NULL 表示清除
描述
當 bufp 為非 NULL 時,將緩衝區資訊複製到執行時緩衝區。否則,它將清除當前緩衝區資訊。
ASoC¶
ASoC 核心 API¶
-
struct snd_soc_component *snd_soc_kcontrol_component(struct snd_kcontrol *kcontrol)¶
返回註冊控制元件的元件
引數
struct snd_kcontrol *kcontrol要獲取元件的控制元件
注意
如果已為元件註冊控制元件,則此函式將正常工作。使用 snd_soc_add_codec_controls() 或透過基於表的設定(針對 CODEC 或元件驅動程式)。否則,行為未定義。
-
struct snd_soc_dai *snd_soc_find_dai(const struct snd_soc_dai_link_component *dlc)¶
查詢已註冊的 DAI
引數
const struct snd_soc_dai_link_component *dlcDAI 的名稱或 DAI 驅動程式和可選元件資訊以匹配
描述
此函式將搜尋所有已註冊的元件及其 DAI,以查詢具有相同名稱的 DAI。如果指定,元件的 of_node 和名稱也應匹配。
返回值
DAI 的指標,如果未找到,則為 NULL。
-
void snd_soc_remove_pcm_runtime(struct snd_soc_card *card, struct snd_soc_pcm_runtime *rtd)¶
從卡中刪除 pcm_runtime
引數
struct snd_soc_card *cardpcm_runtime 已新增到的 ASoC 卡
struct snd_soc_pcm_runtime *rtd要刪除的 pcm_runtime
描述
此函式從 ASoC 卡中刪除 pcm_runtime。
-
int snd_soc_add_pcm_runtime(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)¶
透過 dai_link 動態新增 pcm_runtime
引數
struct snd_soc_card *card將 pcm_runtime 新增到的 ASoC 卡
struct snd_soc_dai_link *dai_link用於查詢 pcm_runtime 的 DAI 連結
描述
此函式透過使用 dai_link 將 pcm_runtime 新增到 ASoC 卡。
注意
拓撲可以使用此 API 在探測拓撲元件時新增 pcm_runtime。機器驅動程式仍然可以在 dai_link 陣列中定義靜態 DAI 連結。
-
int snd_soc_runtime_set_dai_fmt(struct snd_soc_pcm_runtime *rtd, unsigned int dai_fmt)¶
為ASoC執行時更改DAI連結格式
引數
struct snd_soc_pcm_runtime *rtd應該更改DAI連結格式的執行時
unsigned int dai_fmt新的DAI連結格式
描述
此函式更新連線到指定執行時DAI連結的所有DAI的DAI連結格式。
成功返回0,否則返回負錯誤程式碼。
注意
對於具有靜態格式的設定,請在相應的snd_dai_link結構中設定dai_fmt欄位,而不是使用此函式。
-
int snd_soc_set_dmi_name(struct snd_soc_card *card)¶
將DMI名稱註冊到音效卡
引數
struct snd_soc_card *card要註冊DMI名稱的音效卡
描述
Intel機器驅動程式可能被許多不同的裝置使用,但是使用者空間很難區分,因為機器驅動程式通常使用自己的名稱作為音效卡短名稱,而將音效卡長名稱留為空白。為了區分此類裝置並修復由於缺少裝置特定的配置而導致的錯誤,此函式允許將DMI資訊用作音效卡長名稱,格式為“vendor-product-version-board”(字元“-”在此處用於分隔不同的DMI欄位)。這將幫助使用者空間為該音效卡載入裝置特定的用例管理器(UCM)配置。
可能的音效卡長名稱可能是:DellInc.-XPS139343-01-0310JH ASUSTeKCOMPUTERINC.-T100TA-1.0-T100TA Circuitco-MinnowboardMaxD0PLATFORM-D0-MinnowBoardMAX
此功能還支援為音效卡長名稱新增修飾詞,以提供額外的區分,例如“vendor-product-version-board-flavor”。
我們僅保留音效卡長名稱中的數字和字母字元以及一些分隔符字元,因為使用者空間中的UCM使用音效卡長名稱作為音效卡配置目錄名稱,並且AudoConf不支援空格之類的特殊字元。
成功返回0,否則返回負錯誤程式碼。
-
struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template, void *data, const char *long_name, const char *prefix)¶
建立新控制元件
引數
const struct snd_kcontrol_new *_template控制元件模板
void *data控制元件私有資料
const char *long_name控制元件長名稱
const char *prefix控制元件名稱字首
描述
從模板控制元件建立新的混音器控制元件。
成功返回0,否則返回錯誤。
-
int snd_soc_add_component_controls(struct snd_soc_component *component, const struct snd_kcontrol_new *controls, unsigned int num_controls)¶
將控制元件陣列新增到元件。
引數
struct snd_soc_component *component要新增控制元件的元件
const struct snd_kcontrol_new *controls要新增的控制元件陣列
unsigned int num_controls陣列中的元素數
返回值
成功返回0,否則返回錯誤。
-
int snd_soc_add_card_controls(struct snd_soc_card *soc_card, const struct snd_kcontrol_new *controls, int num_controls)¶
將控制元件陣列新增到SoC音效卡。新增控制元件列表的便捷函式。
引數
struct snd_soc_card *soc_card要新增控制元件的SoC音效卡
const struct snd_kcontrol_new *controls要新增的控制元件陣列
int num_controls陣列中的元素數
描述
成功返回0,否則返回錯誤。
-
int snd_soc_add_dai_controls(struct snd_soc_dai *dai, const struct snd_kcontrol_new *controls, int num_controls)¶
將控制元件陣列新增到DAI。新增控制元件列表的便捷函式。
引數
struct snd_soc_dai *dai要新增控制元件的DAI
const struct snd_kcontrol_new *controls要新增的控制元件陣列
int num_controls陣列中的元素數
描述
成功返回0,否則返回錯誤。
-
int snd_soc_register_card(struct snd_soc_card *card)¶
在ASoC核心中註冊音效卡
引數
struct snd_soc_card *card要註冊的音效卡
-
void snd_soc_unregister_card(struct snd_soc_card *card)¶
從ASoC核心登出音效卡
引數
struct snd_soc_card *card要登出的音效卡
-
struct snd_soc_dai *snd_soc_register_dai(struct snd_soc_component *component, struct snd_soc_dai_driver *dai_drv, bool legacy_dai_naming)¶
動態註冊DAI並建立其控制元件
引數
struct snd_soc_component *component為其註冊DAI的元件
struct snd_soc_dai_driver *dai_drv用於DAI的DAI驅動程式
bool legacy_dai_naming如果
true,請使用舊的單名稱格式;如果false,請使用多名稱格式;
描述
拓撲可以使用此API在探測元件時註冊DAI。這些DAI的控制元件將在音效卡清理中釋放,而DAI將在元件清理中釋放。
-
void snd_soc_unregister_dais(struct snd_soc_component *component)¶
從ASoC核心登出DAI
引數
struct snd_soc_component *component應該為其登出DAI的元件
-
int snd_soc_register_dais(struct snd_soc_component *component, struct snd_soc_dai_driver *dai_drv, size_t count)¶
在ASoC核心中註冊DAI
引數
struct snd_soc_component *component為其註冊DAI的元件
struct snd_soc_dai_driver *dai_drv用於DAI的DAI驅動程式
size_t countDAI的數量
-
void snd_soc_unregister_component_by_driver(struct device *dev, const struct snd_soc_component_driver *component_driver)¶
使用給定的驅動程式從ASoC核心登出元件
引數
struct device *dev要登出的裝置
const struct snd_soc_component_driver *component_driver要登出的元件驅動程式
-
int devm_snd_soc_register_component(struct device *dev, const struct snd_soc_component_driver *cmpnt_drv, struct snd_soc_dai_driver *dai_drv, int num_dai)¶
資源管理的元件註冊
引數
struct device *dev用於管理元件的裝置
const struct snd_soc_component_driver *cmpnt_drv元件驅動程式
struct snd_soc_dai_driver *dai_drvDAI驅動程式
int num_dai要註冊的DAI數量
描述
註冊元件,並在登出裝置時自動登出。
引數
struct device *dev用於管理音效卡的裝置
struct snd_soc_card *card要註冊的音效卡
描述
註冊音效卡,並在登出裝置時自動登出。
-
int devm_snd_dmaengine_pcm_register(struct device *dev, const struct snd_dmaengine_pcm_config *config, unsigned int flags)¶
資源管理的dmaengine PCM註冊
引數
struct device *devPCM裝置的父裝置
const struct snd_dmaengine_pcm_config *config平臺特定的PCM配置
unsigned int flags平臺特定的怪癖
描述
註冊基於dmaengine的PCM裝置,並在登出裝置時自動登出。
-
int snd_soc_component_set_sysclk(struct snd_soc_component *component, int clk_id, int source, unsigned int freq, int dir)¶
配置COMPONENT系統時鐘或主時鐘。
引數
struct snd_soc_component *componentCOMPONENT
int clk_idDAI特定的時鐘ID
int source時鐘的來源
unsigned int freq新的時鐘頻率,單位為Hz
int dir新的時鐘方向 - 輸入/輸出。
描述
配置CODEC主時鐘(MCLK)或系統時鐘(SYSCLK)。
-
int snd_soc_component_set_jack(struct snd_soc_component *component, struct snd_soc_jack *jack, void *data)¶
配置元件插孔。
引數
struct snd_soc_component *componentCOMPONENT
struct snd_soc_jack *jack用於插孔的結構
void *data如果編解碼器驅動程式需要額外的配置插孔資料,則可以使用
描述
配置並啟用插孔檢測功能。
-
int snd_soc_component_get_jack_type(struct snd_soc_component *component)¶
引數
struct snd_soc_component *componentCOMPONENT
描述
返回元件的插孔型別。這可以是支援的型別,也可以是從裝置樹中讀取的型別,屬性為:jack-type。
-
void snd_soc_component_init_regmap(struct snd_soc_component *component, struct regmap *regmap)¶
初始化元件的regmap例項
引數
struct snd_soc_component *component要為其初始化regmap例項的元件
struct regmap *regmap元件應使用的regmap例項
描述
此函式允許延遲分配與元件關聯的regmap例項。只有在註冊元件時regmap例項尚未準備就緒時才使用此方法。該函式還必須在元件的首次IO嘗試之前呼叫。
-
void snd_soc_component_exit_regmap(struct snd_soc_component *component)¶
取消初始化元件的regmap例項
引數
struct snd_soc_component *component要為其取消初始化regmap例項的元件
描述
對與元件關聯的regmap例項呼叫regmap_exit(),並從元件中刪除regmap例項。
僅當使用snd_soc_component_init_regmap()初始化regmap例項時,才應使用此功能。
-
unsigned int snd_soc_component_read(struct snd_soc_component *component, unsigned int reg)¶
讀取暫存器值
引數
struct snd_soc_component *component從中讀取的元件
unsigned int reg要讀取的暫存器
返回值
讀取的值
-
int snd_soc_component_write(struct snd_soc_component *component, unsigned int reg, unsigned int val)¶
寫入暫存器值
引數
struct snd_soc_component *component要寫入的元件
unsigned int reg要寫入的暫存器
unsigned int val要寫入暫存器的值
返回值
成功返回0,否則返回負錯誤程式碼。
-
int snd_soc_component_update_bits(struct snd_soc_component *component, unsigned int reg, unsigned int mask, unsigned int val)¶
執行讀/修改/寫週期
引數
struct snd_soc_component *component要更新的元件
unsigned int reg要更新的暫存器
unsigned int mask指定要更新哪些位的掩碼
unsigned int valmask指定的位的新值
返回值
如果操作成功並且暫存器的值已更改,則為1;如果操作成功但值未更改,則為0。否則,返回負錯誤程式碼。
-
int snd_soc_component_update_bits_async(struct snd_soc_component *component, unsigned int reg, unsigned int mask, unsigned int val)¶
執行非同步讀/修改/寫週期
引數
struct snd_soc_component *component要更新的元件
unsigned int reg要更新的暫存器
unsigned int mask指定要更新哪些位的掩碼
unsigned int valmask指定的位的新值
描述
此函式類似於snd_soc_component_update_bits(),但是更新操作是非同步排程的。這意味著函式返回時可能尚未完成。要確保所有計劃的更新都已完成,必須呼叫snd_soc_component_async_complete()。
返回值
如果操作成功並且暫存器的值已更改,則為1;如果操作成功但值未更改,則為0。否則,返回負錯誤程式碼。
-
unsigned int snd_soc_component_read_field(struct snd_soc_component *component, unsigned int reg, unsigned int mask)¶
讀取暫存器欄位值
引數
struct snd_soc_component *component從中讀取的元件
unsigned int reg要讀取的暫存器
unsigned int mask暫存器欄位的掩碼
返回值
讀取暫存器欄位的值。
-
int snd_soc_component_write_field(struct snd_soc_component *component, unsigned int reg, unsigned int mask, unsigned int val)¶
寫入暫存器欄位
引數
struct snd_soc_component *component要寫入的元件
unsigned int reg要寫入的暫存器
unsigned int mask要更新的暫存器欄位的掩碼
unsigned int val要寫入的欄位的值
返回值
更改返回1,否則返回0。
-
void snd_soc_component_async_complete(struct snd_soc_component *component)¶
確保非同步I/O已完成
引數
struct snd_soc_component *component要等待的元件
描述
此函式會阻塞,直到先前使用snd_soc_component_update_bits_async()排程的所有非同步I/O都已完成。
-
int snd_soc_component_test_bits(struct snd_soc_component *component, unsigned int reg, unsigned int mask, unsigned int value)¶
測試暫存器是否已更改
引數
struct snd_soc_component *component元件
unsigned int reg要測試的暫存器
unsigned int mask指定要測試哪些位的掩碼
unsigned int value要測試的值
描述
使用新值測試暫存器,並檢查新值是否與舊值不同。
返回值
更改返回1,否則返回0。
-
void snd_soc_runtime_action(struct snd_soc_pcm_runtime *rtd, int stream, int action)¶
增加/減少PCM執行時元件的活動計數
引數
struct snd_soc_pcm_runtime *rtd啟用的ASoC PCM執行時
int streamPCM流的方向
int action如果為1,則啟用流。如果為-1,則停用。
描述
增加/減少連線到PCM執行時的所有DAI和元件的活動計數。通常應在開啟流時呼叫。
必須持有rtd->card->pcm_mutex才能呼叫
-
bool snd_soc_runtime_ignore_pmdown_time(struct snd_soc_pcm_runtime *rtd)¶
檢查是否忽略掉電延遲
引數
struct snd_soc_pcm_runtime *rtd應該檢查的 ASoC PCM 執行時。
描述
此函式檢查是否應該為特定的 PCM 執行時忽略掉電延遲。如果延遲為 0,如果 DAI 連結已配置為忽略延遲,或者如果沒有元件從延遲中受益,則返回 true。
-
int snd_soc_runtime_calc_hw(struct snd_soc_pcm_runtime *rtd, struct snd_pcm_hardware *hw, int stream)¶
計算 PCM 流的硬體限制
引數
struct snd_soc_pcm_runtime *rtdASoC PCM 執行時
struct snd_pcm_hardware *hwPCM 硬體引數(輸出)
int streamPCM流的方向
描述
計算所有與 PCM 流關聯的 DAI 支援的流引數子集。
-
int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)¶
列舉雙混音器資訊回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_info *uinfo控制元素資訊
描述
回撥以提供有關雙列舉混音器控制的資訊。
成功返回 0。
-
int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
列舉雙混音器獲取回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以獲取雙列舉混音器的值。
成功返回 0。
-
int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
列舉雙混音器設定回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以設定雙列舉混音器的值。
成功返回 0。
-
int snd_soc_info_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)¶
帶範圍的單個混音器資訊回撥。
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_info *uinfo控制元素資訊
描述
回撥以提供有關具有範圍的單個混音器控制的資訊,或跨越 2 個暫存器的雙混音器控制的資訊。
成功返回 0。
-
int snd_soc_info_volsw_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)¶
用於 SX TLV 控制的混音器資訊回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_info *uinfo控制元素資訊
描述
回撥以提供有關單個混音器控制的資訊,或 SX TLV 型別的跨越 2 個暫存器的雙混音器控制的資訊。SX TLV 控制具有一個範圍,該範圍表示零兩側的正值和負值,但沒有符號位。min 是最小暫存器值,max 是步數。
成功返回 0。
-
int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
帶範圍的單個混音器獲取回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以獲取具有範圍的單個混音器控制的值,或跨越 2 個暫存器的雙混音器控制的值。
成功返回 0。
-
int snd_soc_put_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
帶範圍的單個混音器設定回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以設定具有範圍的單個混音器控制的值,或跨越 2 個暫存器的雙混音器控制的值。
成功返回 0。
-
int snd_soc_get_volsw_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
單個混音器獲取回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以獲取單個混音器控制的值,或跨越 2 個暫存器的雙混音器控制的值。
成功返回 0。
-
int snd_soc_put_volsw_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
雙混音器設定回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以設定跨越 2 個暫存器的雙混音器控制的值。
成功返回 0。
-
int snd_soc_limit_volume(struct snd_soc_card *card, const char *name, int max)¶
為現有音量控制設定新的限制。
引數
struct snd_soc_card *card在哪裡查詢控制
const char *name控制的名稱
int max新的最大限制
描述
成功返回0,否則返回錯誤。
-
int snd_soc_info_xr_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)¶
帶符號的多暫存器資訊回撥
引數
struct snd_kcontrol *kcontrolmreg 控制
struct snd_ctl_elem_info *uinfo控制元素資訊
描述
回撥以提供有關可以跨越多個編解碼器暫存器的控制的資訊,這些暫存器共同形成單個帶符號的值。請注意,與 sx 控制的非 xr 變體不同,這些可能包含也可能不包含符號位,具體取決於 nbits,並且沒有移位。
成功返回 0。
-
int snd_soc_get_xr_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
帶符號的多暫存器獲取回撥
引數
struct snd_kcontrol *kcontrolmreg 控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以獲取可以跨越多個編解碼器暫存器的控制的值,這些暫存器共同形成單個帶符號的值。控制支援指定用於允許多個編解碼器暫存器中的位域的總位數。請注意,與 sx 控制的非 xr 變體不同,這些可能包含也可能不包含符號位,具體取決於 nbits,並且沒有移位。
成功返回 0。
-
int snd_soc_put_xr_sx(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
帶符號的多暫存器獲取回撥
引數
struct snd_kcontrol *kcontrolmreg 控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以設定可以跨越多個編解碼器暫存器的控制的值,這些暫存器共同形成單個帶符號的值。控制支援指定用於允許多個編解碼器暫存器中的位域的總位數。請注意,與 sx 控制的非 xr 變體不同,這些可能包含也可能不包含符號位,具體取決於 nbits,並且沒有移位。
成功返回 0。
-
int snd_soc_get_strobe(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
選通獲取回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥獲取選通混音器控制的值。
成功返回 0。
-
int snd_soc_put_strobe(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
選通設定回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥在一個單混音器列舉控制的一次傳遞中將暫存器位選通為高然後低(或相反)。
成功返回 1。
-
int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd)¶
建立一個新的壓縮。
引數
struct snd_soc_pcm_runtime *rtd我們將為其建立壓縮的執行時
返回值
成功返回0,否則返回錯誤。
ASoC DAPM API¶
-
struct snd_soc_dapm_widget *snd_soc_dapm_kcontrol_widget(struct snd_kcontrol *kcontrol)¶
返回與 kcontrol 關聯的小部件
引數
struct snd_kcontrol *kcontrolkcontrol
-
struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_dapm(struct snd_kcontrol *kcontrol)¶
返回與 kcontrol 關聯的 dapm 上下文
引數
struct snd_kcontrol *kcontrolkcontrol
注意
此函式只能用於已知已為 CODEC 註冊的 kcontrol。否則,行為未定義。
-
int snd_soc_dapm_force_bias_level(struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level)¶
設定 DAPM 偏置電平
引數
struct snd_soc_dapm_context *dapm為其設定電平的 DAPM 上下文
enum snd_soc_bias_level level要設定的電平
描述
將 DAPM 偏置電平強制設定為特定狀態。它將使用指定的電平呼叫 DAPM 上下文的偏置電平回撥。即使上下文已經處於相同的電平,也會發生這種情況。此外,它不會經歷正常的偏置電平排序,這意味著不會進入當前狀態和目標狀態之間的任何中間狀態。
請注意,偏置電平的變化只是暫時的,下次呼叫 snd_soc_dapm_sync() 時,狀態將設定為由 DAPM 核心確定的電平。該函式主要用於探測期間或從掛起到加電的恢復期間,以便可以在 DAPM 核心接管之前完成初始化。
-
int snd_soc_dapm_set_bias_level(struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level)¶
設定系統的偏置電平
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
enum snd_soc_bias_level level要配置的電平
描述
配置 SoC 音訊裝置的偏置(功率)電平。
成功返回 0,否則返回錯誤。
-
int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream, struct snd_soc_dapm_widget_list **list, bool (*custom_stop_condition)(struct snd_soc_dapm_widget*, enum snd_soc_dapm_direction))¶
查詢音訊路徑及其小部件。
引數
struct snd_soc_dai *daisoc DAI。
int stream流方向。
struct snd_soc_dapm_widget_list **list此流的活動小部件列表。
bool (*custom_stop_condition)(struct snd_soc_dapm_widget *, enum snd_soc_dapm_direction)(可選)用於根據自定義邏輯停止小部件圖遍歷的函式。
描述
查詢 DAPM 圖是否存在初始流(由名稱指定)的有效音訊流路徑。這考慮了當前的混音器和多路複用器 kcontrol 設定。建立有效小部件列表。
(可選)可以提供一個充當停止條件的函式。此函式將當前正在檢查的 dapm 小部件和遍歷方向作為引數,如果應該停止遍歷,則應返回 true,否則返回 false。
返回有效路徑的數量或負錯誤。
-
void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w)¶
釋放指定的小部件
引數
struct snd_soc_dapm_widget *w要釋放的小部件
描述
從小部件中刪除所有路徑並釋放它佔用的記憶體。
-
int snd_soc_dapm_sync_unlocked(struct snd_soc_dapm_context *dapm)¶
掃描和供電 dapm 路徑
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
描述
遍歷所有 dapm 音訊路徑,並根據其流或路徑使用情況為小部件供電。
需要外部鎖定。
成功返回 0。
-
int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm)¶
掃描和供電 dapm 路徑
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
描述
遍歷所有 dapm 音訊路徑,並根據其流或路徑使用情況為小部件供電。
成功返回 0。
-
int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm, const struct snd_soc_dapm_route *route, int num)¶
在 DAPM 小部件之間新增路由
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const struct snd_soc_dapm_route *route音訊路由
int num路由數
描述
透過命名的音訊路徑將 2 個 dapm 小部件連線在一起。接收器是接收音訊訊號的小部件,而源是音訊訊號的傳送者。
成功返回 0,否則返回錯誤。發生錯誤時,可以透過呼叫 snd_soc_card_free() 釋放所有資源。
-
int snd_soc_dapm_del_routes(struct snd_soc_dapm_context *dapm, const struct snd_soc_dapm_route *route, int num)¶
刪除 DAPM 小部件之間的路由
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const struct snd_soc_dapm_route *route音訊路由
int num路由數
描述
從 DAPM 上下文中刪除路由。
-
int snd_soc_dapm_weak_routes(struct snd_soc_dapm_context *dapm, const struct snd_soc_dapm_route *route, int num)¶
將 DAPM 小部件之間的路由標記為弱路由
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const struct snd_soc_dapm_route *route音訊路由
int num路由數
描述
將與傳遞的陣列中指定的路由匹配的現有路由標記為弱路由,這意味著為了電源決策的目的,會忽略它們。主要預期用例是側音路徑,如果在其他獨立路徑都處於活動狀態時將音訊耦合在它們之間,以便使使用者級別的組合效果更好,但這些路徑並不打算“使用”。
請注意,CODEC 驅動程式不應使用此方法,因為側音型別路徑通常也可以用作旁路路徑。
-
int snd_soc_dapm_new_widgets(struct snd_soc_card *card)¶
新增新的 dapm 小部件
引數
struct snd_soc_card *card要檢查是否有新的 dapm 小部件的卡
描述
檢查編解碼器是否有任何新的 dapm 小部件,如果找到,則建立它們。
成功返回 0。
-
int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
dapm 混音器獲取回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以獲取 dapm 混音器控制元件的值。
成功返回 0。
-
int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
dapm 混音器設定回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以設定 dapm 混音器控制元件的值。
成功返回 0。
-
int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
dapm 列舉雙混音器獲取回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以獲取 dapm 列舉雙混音器控制元件的值。
成功返回 0。
-
int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
dapm 列舉雙混音器設定回撥
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol控制元素資訊
描述
回撥以設定 dapm 列舉雙混音器控制元件的值。
成功返回 0。
-
int snd_soc_dapm_info_pin_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo)¶
引腳開關的資訊
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_info *uinfo控制元素資訊
描述
回撥以提供有關引腳開關控制元件的資訊。
-
int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
獲取引腳開關的資訊
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol值
描述
回撥以提供有關在卡級別新增的引腳開關的資訊。
-
int snd_soc_dapm_get_component_pin_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
獲取引腳開關的資訊
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol值
描述
回撥以提供有關在元件級別新增的引腳開關的資訊。
-
int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
設定引腳開關的資訊
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol值
描述
回撥以提供有關在卡級別新增的引腳開關的資訊。
-
int snd_soc_dapm_put_component_pin_switch(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)¶
設定引腳開關的資訊
引數
struct snd_kcontrol *kcontrol混音器控制
struct snd_ctl_elem_value *ucontrol值
描述
回撥以提供有關在元件級別新增的引腳開關的資訊。
-
struct snd_soc_dapm_widget *snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm, const struct snd_soc_dapm_widget *widget)¶
建立新的 dapm 控制
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const struct snd_soc_dapm_widget *widget小部件模板
描述
基於模板建立新的 DAPM 控制。
成功時返回小部件指標,失敗時返回錯誤指標
-
int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm, const struct snd_soc_dapm_widget *widget, unsigned int num)¶
建立新的 dapm 控制
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const struct snd_soc_dapm_widget *widget小部件陣列
unsigned int num小部件數量
描述
基於模板建立新的 DAPM 控制。
成功返回 0,否則返回錯誤。
-
int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, struct snd_soc_dai *dai)¶
建立新的 DAPM 小部件
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
struct snd_soc_dai *dai父 DAI
描述
成功時返回 0,否則返回錯誤程式碼。
-
void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream, int event)¶
向 dapm 核心傳送流事件
引數
struct snd_soc_pcm_runtime *rtdPCM 執行時資料
int stream流名稱
int event流事件
描述
向 dapm 核心傳送流事件。然後,核心進行任何必要的小部件電源更改。
成功返回 0,否則返回錯誤。
-
int snd_soc_dapm_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin)¶
啟用引腳。
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
如果存在有效的音訊路由和活動的音訊流,則啟用輸入/輸出引腳及其父級或子級小部件。
需要外部鎖定。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin)¶
啟用引腳。
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
如果存在有效的音訊路由和活動的音訊流,則啟用輸入/輸出引腳及其父級或子級小部件。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin)¶
強制啟用引腳
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
無論任何其他狀態如何,都啟用輸入/輸出引腳。這旨在用於麥克風插孔檢測中使用的麥克風偏置電源。
需要外部鎖定。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin)¶
強制啟用引腳
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
無論任何其他狀態如何,都啟用輸入/輸出引腳。這旨在用於麥克風插孔檢測中使用的麥克風偏置電源。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_disable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin)¶
停用引腳。
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
停用輸入/輸出引腳及其父級或子級小部件。
需要外部鎖定。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm, const char *pin)¶
停用引腳。
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
停用輸入/輸出引腳及其父級或子級小部件。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_nc_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin)¶
永久停用引腳。
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
將指定的引腳標記為未連線,從而停用它以及任何父級或子級小部件。目前,這與 snd_soc_dapm_disable_pin() 相同,但在將來它將被擴充套件以執行其他操作,例如停用僅影響透過引腳的路徑的控制元件。
需要外部鎖定。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_nc_pin(struct snd_soc_dapm_context *dapm, const char *pin)¶
永久停用引腳。
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin引腳名稱
描述
將指定的引腳標記為未連線,從而停用它以及任何父級或子級小部件。目前,這與 snd_soc_dapm_disable_pin() 相同,但在將來它將被擴充套件以執行其他操作,例如停用僅影響透過引腳的路徑的控制元件。
注意
在此之後需要呼叫 snd_soc_dapm_sync(),以便 DAPM 進行任何小部件電源切換。
-
int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm, const char *pin)¶
獲取音訊引腳狀態
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin音訊訊號引腳端點(或起點)
描述
獲取音訊引腳狀態 - 已連線或已斷開連線。
連線時返回 1,否則返回 0。
-
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, const char *pin)¶
忽略 DAPM 端點的掛起狀態
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
const char *pin音訊訊號引腳端點(或起點)
描述
將給定的端點或引腳標記為忽略掛起。當系統被停用時,兩個標記為忽略掛起的端點之間的路徑將不會被停用。該路徑必須已經在掛起時透過正常方式啟用,如果尚未啟用,則不會開啟。
-
void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm)¶
釋放 dapm 資源
引數
struct snd_soc_dapm_context *dapmDAPM 上下文
描述
釋放所有 dapm 小部件和資源。
ASoC DMA 引擎 API¶
-
int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct dma_slave_config *slave_config)¶
通用 prepare_slave_config 回撥
引數
struct snd_pcm_substream *substreamPCM 子流
struct snd_pcm_hw_params *paramshw_params
struct dma_slave_config *slave_config要準備的 DMA 從機配置
描述
此函式可用作平臺的通用 prepare_slave_config 回撥,這些平臺使用 snd_dmaengine_dai_dma_data 結構作為其 DAI DMA 資料。在內部,該函式將首先呼叫 snd_hwparams_to_dma_slave_config 以基於 hw_params 填充從機配置,然後呼叫 snd_dmaengine_pcm_set_config_from_dai_data 以基於 DAI DMA 資料填充剩餘欄位。
-
int snd_dmaengine_pcm_register(struct device *dev, const struct snd_dmaengine_pcm_config *config, unsigned int flags)¶
註冊一個基於 dmaengine 的 PCM 裝置
引數
struct device *devPCM裝置的父裝置
const struct snd_dmaengine_pcm_config *config平臺特定的PCM配置
unsigned int flags平臺特定的怪癖
引數
struct device *dev註冊 PCM 的父裝置
描述
刪除先前使用 snd_dmaengine_pcm_register 註冊的基於 dmaengine 的 PCM 裝置。
雜項函式¶
硬體相關裝置 API¶
-
int snd_hwdep_new(struct snd_card *card, char *id, int device, struct snd_hwdep **rhwdep)¶
建立一個新的 hwdep 例項
引數
struct snd_card *card卡例項
char *idid 字串
int device裝置索引(從零開始)
struct snd_hwdep **rhwdep用於儲存新 hwdep 例項的指標
描述
在卡上使用給定的索引建立一個新的 hwdep 例項。在此呼叫之後,呼叫方必須手動在返回的例項上設定回撥 (hwdep->ops)。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
插孔抽象層 API¶
-
enum snd_jack_types¶
可以報告的插孔型別
常量
SND_JACK_HEADPHONE耳機
SND_JACK_MICROPHONE麥克風
SND_JACK_HEADSET耳機
SND_JACK_LINEOUT線路輸出
SND_JACK_MECHANICAL機械開關
SND_JACK_VIDEOOUT影片輸出
SND_JACK_AVOUTAV(音訊影片)輸出
SND_JACK_LINEIN線路輸入
SND_JACK_USBUSB 音訊裝置
SND_JACK_BTN_0按鈕 0
SND_JACK_BTN_1按鈕 1
SND_JACK_BTN_2按鈕 2
SND_JACK_BTN_3按鈕 3
SND_JACK_BTN_4按鈕 4
SND_JACK_BTN_5按鈕 5
描述
這些值用作位掩碼。
請注意,這必須與 sound/core/jack.c 中的查詢表保持同步。
-
int snd_jack_add_new_kctl(struct snd_jack *jack, const char *name, int mask)¶
建立一個新的 snd_jack_kctl 並將其新增到 jack
引數
struct snd_jack *jackkctl 將附加到的插孔例項
const char * namesnd_kcontrol 物件的名稱
int mask一個 enum snd_jack_type 值的位掩碼,可以由此 snd_jack_kctl 物件檢測到。
描述
建立一個新的 snd_kcontrol 物件並將其新增到 jack kctl_list。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
int snd_jack_new(struct snd_card *card, const char *id, int type, struct snd_jack **jjack, bool initial_kctl, bool phantom_jack)¶
建立一個新的插孔
引數
struct snd_card *card卡例項
const char *id此插孔的標識字串
int type可以由此插孔檢測到的 enum snd_jack_type 值的位掩碼
struct snd_jack **jjack用於向呼叫方提供已分配的插孔物件。
bool initial_kctl如果為 true,則建立一個 kcontrol 並將其新增到插孔列表。
bool phantom_jack不要為幻像插孔建立輸入裝置。
描述
建立一個新的插孔物件。
返回值
如果成功則為零,失敗則為負錯誤程式碼。如果成功,則將初始化 jjack。
-
int snd_jack_set_key(struct snd_jack *jack, enum snd_jack_types type, int keytype)¶
在插孔上設定鍵對映
引數
struct snd_jack *jack要配置的插孔
enum snd_jack_types type此鍵的插孔報告型別
int keytype要報告的輸入層鍵型別
描述
將 SND_JACK_BTN_* 按鈕型別對映到輸入層鍵,允許透過插孔抽象報告配件上的鍵。如果未提供對映,但在插孔型別中啟用了鍵,則將報告 BTN_n 數字按鈕。
如果插孔未透過輸入 API 報告,則此呼叫將不起作用。
請注意,這旨在由具有少量可以報告的鍵的簡單裝置使用。也可以直接訪問輸入裝置 - 具有複雜配件輸入功能的裝置應考慮這樣做,而不是使用此抽象。
只能在註冊插孔之前呼叫此函式。
返回值
如果成功,則為零,如果失敗,則為負錯誤程式碼。
-
void snd_jack_report(struct snd_jack *jack, int status)¶
報告插孔的當前狀態
引數
struct snd_jack *jack要報告狀態的插孔
int status插孔的當前狀態
注意
此函式使用互斥鎖,應從可以休眠的上下文(如工作佇列)呼叫。
-
void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask)¶
報告插孔的當前狀態
引數
struct snd_soc_jack *jack插孔
int status當前檢測到的 enum snd_jack_type 值的位掩碼。
int mask正在報告的 enum snd_jack_type 值的位掩碼。
描述
如果使用 snd_soc_jack_add_pins() 進行配置,則將根據需要啟用或停用關聯的 DAPM 引腳,並同步 DAPM。
注意
此函式使用互斥鎖,應從可以休眠的上下文(如工作佇列)呼叫。
-
int snd_soc_jack_add_zones(struct snd_soc_jack *jack, int count, struct snd_soc_jack_zone *zones)¶
將電壓區域與插孔關聯
引數
struct snd_soc_jack *jackASoC 插孔
int count區域數量
struct snd_soc_jack_zone *zones區域陣列
描述
呼叫此函式後,陣列中指定的區域將與插孔關聯。
-
int snd_soc_jack_get_type(struct snd_soc_jack *jack, int micbias_voltage)¶
基於麥克風偏置值,此函式從插孔型別中宣告的區域返回插孔的型別
引數
struct snd_soc_jack *jackASoC 插孔
int micbias_voltage插入插孔時在 adc 通道上的麥克風偏置電壓
描述
基於傳遞的麥克風偏置值,此函式有助於從已宣告的插孔區域中識別插孔的型別
-
int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count, struct snd_soc_jack_pin *pins)¶
將 DAPM 引腳與 ASoC 插孔關聯
引數
struct snd_soc_jack *jack使用 snd_soc_card_jack_new_pins() 建立的 ASoC 插孔
int count引腳數量
struct snd_soc_jack_pin *pins引腳陣列
描述
呼叫此函式後,每當更新插孔狀態時,pins 陣列中指定的 DAPM 引腳的狀態都將更新以反映插孔的當前狀態。
-
void snd_soc_jack_notifier_register(struct snd_soc_jack *jack, struct notifier_block *nb)¶
註冊插孔狀態的通知程式
引數
struct snd_soc_jack *jackASoC 插孔
struct notifier_block *nb要註冊的通知程式塊
描述
註冊以接收插孔當前狀態的通知。請注意,無法在通知程式的callback中報告其他插孔事件,這旨在支援僅在發生機械檢測事件時才啟用電氣檢測等應用。
-
void snd_soc_jack_notifier_unregister(struct snd_soc_jack *jack, struct notifier_block *nb)¶
取消註冊插孔狀態的通知程式
引數
struct snd_soc_jack *jackASoC 插孔
struct notifier_block *nb要取消註冊的通知程式塊
描述
停止通知狀態更改。
-
int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count, struct snd_soc_jack_gpio *gpios)¶
將 GPIO 引腳與 ASoC 插孔關聯
引數
struct snd_soc_jack *jackASoC 插孔
int count引腳數量
struct snd_soc_jack_gpio *gpiosgpio 引腳陣列
描述
此函式將為陣列中的每個 gpio 請求 gpio、設定資料方向並請求 irq。
-
int snd_soc_jack_add_gpiods(struct device *gpiod_dev, struct snd_soc_jack *jack, int count, struct snd_soc_jack_gpio *gpios)¶
將 GPIO 描述符引腳與 ASoC 插孔關聯
引數
struct device *gpiod_devGPIO 使用者裝置
struct snd_soc_jack *jackASoC 插孔
int count引腳數量
struct snd_soc_jack_gpio *gpiosgpio 引腳陣列
描述
此函式將為陣列中的每個 gpio 請求 gpio、設定資料方向並請求 irq。
-
void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count, struct snd_soc_jack_gpio *gpios)¶
釋放 ASoC 插孔的 GPIO 引腳資源
引數
struct snd_soc_jack *jackASoC 插孔
int count引腳數量
struct snd_soc_jack_gpio *gpiosgpio 引腳陣列
描述
釋放與 ASoC 插孔關聯的 GPIO 引腳的 gpio 和 irq 資源。
ISA DMA 助手¶
-
void snd_dma_program(unsigned long dma, unsigned long addr, unsigned int size, unsigned short mode)¶
程式設計一個 ISA DMA 傳輸
引數
unsigned long dmadma 編號
unsigned long addr緩衝區的物理地址
unsigned int sizeDMA 傳輸大小
unsigned short modeDMA 傳輸模式,DMA_MODE_XXX
描述
為給定的緩衝區程式設計一個 ISA DMA 傳輸。
-
void snd_dma_disable(unsigned long dma)¶
停止 ISA DMA 傳輸
引數
unsigned long dmadma 編號
描述
停止 ISA DMA 傳輸。
-
unsigned int snd_dma_pointer(unsigned long dma, unsigned int size)¶
以位元組為單位返回 DMA 傳輸緩衝區的當前指標
引數
unsigned long dmadma 編號
unsigned int sizedma 傳輸大小
返回值
DMA 傳輸緩衝區中以位元組為單位的當前指標。
-
int snd_devm_request_dma(struct device *dev, int dma, const char *name)¶
request_dma()的託管版本
引數
struct device *dev裝置指標
int dmadma 編號
const char *name請求者的名稱字串
描述
請求的 DMA 將透過 devres 在解除繫結時自動釋放。
返回值
成功時為零,否則為負錯誤程式碼
其他助手宏¶
-
void snd_power_ref(struct snd_card *card)¶
獲取電源控制的引用計數
引數
struct snd_card *card音效卡物件
描述
卡的 power_ref 引用用於管理以阻止 snd_power_sync_ref() 操作。此函式增加引用計數。稍後必須適當呼叫對應函式 snd_power_unref()。
-
void snd_power_unref(struct snd_card *card)¶
釋放電源控制的引用計數
引數
struct snd_card *card音效卡物件
-
void snd_power_sync_ref(struct snd_card *card)¶
等待直到 card power_ref 被釋放
引數
struct snd_card *card音效卡物件
描述
此函式用於與待釋放的 power_ref 進行同步。
-
void snd_card_unref(struct snd_card *card)¶
取消引用 card 物件
引數
struct snd_card *card要取消引用的 card 物件
描述
對透過 snd_card_ref() 或 snd_lookup_minor_data() 獲取的 card 物件呼叫此函式。
-
snd_BUG¶
snd_BUG ()
給出 BUG 警告訊息和堆疊跟蹤
描述
如果設定了 CONFIG_SND_DEBUG,則呼叫 WARN()。當未設定 CONFIG_SND_DEBUG 時,將被忽略。
-
snd_BUG_ON¶
snd_BUG_ON (cond)
除錯檢查宏
引數
cond要評估的條件
描述
當設定了 CONFIG_SND_DEBUG 時,具有與 WARN_ON 相同的行為,否則僅評估條件並返回值。
-
int register_sound_special_device(const struct file_operations *fops, int unit, struct device *dev)¶
註冊一個特殊的音訊節點
引數
const struct file_operations *fops驅動程式的檔案操作
int unit要分配的單元號
struct device *dev裝置指標
透過音訊子系統的次要編號分配一個特殊的音訊裝置。
返回值
- 成功時返回分配的編號。失敗時,
返回一個負錯誤程式碼。
-
int register_sound_mixer(const struct file_operations *fops, int dev)¶
註冊一個混音器裝置
引數
const struct file_operations *fops驅動程式的檔案操作
int dev要分配的單元號
分配一個混音器裝置。Unit 是請求的混音器的編號。傳遞 -1 以請求下一個空閒的混音器單元。
返回值
- 成功時,返回分配的編號。失敗時,
返回一個負錯誤程式碼。
-
int register_sound_dsp(const struct file_operations *fops, int dev)¶
註冊一個 DSP 裝置
引數
const struct file_operations *fops驅動程式的檔案操作
int dev要分配的單元號
分配一個 DSP 裝置。Unit 是請求的 DSP 的編號。傳遞 -1 以請求下一個空閒的 DSP 單元。
此函式同時分配音訊和 dsp 裝置條目,並將始終將它們分配為匹配對 - 例如 dsp3/audio3
返回值
- 成功時,返回分配的編號。失敗時,
返回一個負錯誤程式碼。
-
void unregister_sound_special(int unit)¶
登出一個特殊的音訊裝置
引數
int unit要分配的單元號
釋放使用 register_sound_special() 分配的音訊裝置。傳遞的 unit 是 register 函式的返回值。
-
void unregister_sound_mixer(int unit)¶
登出一個混音器
引數
int unit要分配的單元號
釋放使用
register_sound_mixer()分配的音訊裝置。傳遞的 unit 是 register 函式的返回值。
-
void unregister_sound_dsp(int unit)¶
登出一個 DSP 裝置
引數
int unit要分配的單元號
釋放使用
register_sound_dsp()分配的音訊裝置。傳遞的 unit 是 register 函式的返回值。兩個分配的單元將自動一起釋放。