免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

ASoC編解碼器驅(qū)動(dòng)開(kāi)發(fā):音頻控件類(lèi)型、注冊(cè)與DAPM調(diào)試實(shí)戰(zhàn)

ASoC編解碼器驅(qū)動(dòng)開(kāi)發(fā):音頻控件類(lèi)型、注冊(cè)與DAPM調(diào)試實(shí)戰(zhàn) 1. 從一次耳機(jī)雜音排查說(shuō)起ASoC控件到底在管什么前陣子幫朋友調(diào)一塊基于i.MX6ULL的工控板音頻部分用的是WM8960編解碼器?,F(xiàn)象很怪系統(tǒng)能枚舉出聲卡aplay也能跑但插上耳機(jī)后左聲道一直有沙沙底噪右聲道正常。一開(kāi)始懷疑是硬件布線(xiàn)示波器量了半天沒(méi)發(fā)現(xiàn)問(wèn)題。后來(lái)用amixer把播放通路的幾個(gè)開(kāi)關(guān)逐個(gè)關(guān)掉發(fā)現(xiàn)只要關(guān)掉Left Output Mixer PCM這個(gè)控件底噪立刻消失。問(wèn)題根因是PCM數(shù)據(jù)在左聲道混音器里被重復(fù)疊加了一次而驅(qū)動(dòng)里這個(gè)控件的默認(rèn)值設(shè)錯(cuò)了。這件事讓我再次意識(shí)到ASoC編解碼器驅(qū)動(dòng)里音頻控件kcontrol才是真正決定聲音長(zhǎng)什么樣的那一層。寄存器配置、時(shí)鐘樹(shù)、DMA這些固然重要但用戶(hù)空間能感知到的音量、通路、靜音、增益全部通過(guò)控件暴露出來(lái)??丶O(shè)計(jì)得對(duì)不對(duì)直接決定了這顆codec能不能被正常使用。這篇內(nèi)容面向的是已經(jīng)寫(xiě)過(guò)基礎(chǔ)字符設(shè)備驅(qū)動(dòng)、正在往ASoC方向深入的嵌入式Linux開(kāi)發(fā)者也適合那些能跑通聲卡但搞不清amixer里那一堆開(kāi)關(guān)到底對(duì)應(yīng)什么的工程師。我會(huì)圍繞編解碼器驅(qū)動(dòng)中音頻控件的開(kāi)發(fā)把控件類(lèi)型、注冊(cè)流程、與DAPM的關(guān)系、調(diào)試手段這些核心要點(diǎn)拆開(kāi)講盡量把我在實(shí)際項(xiàng)目里踩過(guò)的坑和總結(jié)的經(jīng)驗(yàn)都放進(jìn)來(lái)。需要先明確一個(gè)概念邊界ASoCALSA System on Chip把音頻系統(tǒng)拆成三塊——Machine驅(qū)動(dòng)負(fù)責(zé)把CPU DAI和Codec DAI綁在一起Platform驅(qū)動(dòng)管DMA和CPU側(cè)DAICodec驅(qū)動(dòng)管編解碼芯片本身。音頻控件主要誕生在Codec驅(qū)動(dòng)里少數(shù)在Machine驅(qū)動(dòng)里定義。所以下面討論的控件開(kāi)發(fā)默認(rèn)是在Codec驅(qū)動(dòng)的語(yǔ)境下。2. 音頻控件的四種基本類(lèi)型與選型邏輯2.1 從用戶(hù)能調(diào)什么反推控件類(lèi)型很多人寫(xiě)控件是照著芯片手冊(cè)的寄存器表一個(gè)個(gè)抄抄完發(fā)現(xiàn)amixer里冒出來(lái)幾十個(gè)控件用戶(hù)根本不知道該動(dòng)哪個(gè)。正確的思路應(yīng)該反過(guò)來(lái)先想清楚用戶(hù)空間需要調(diào)整哪些量再?zèng)Q定用哪種控件類(lèi)型去封裝。ALSA的snd_kcontrol_new結(jié)構(gòu)體里iface、name、info、get、put這幾個(gè)字段決定了控件的類(lèi)型和行為。按功能劃分編解碼器驅(qū)動(dòng)里最常用的是四類(lèi)控件類(lèi)型典型用途關(guān)鍵回調(diào)用戶(hù)空間表現(xiàn)音量/增益調(diào)節(jié)PCM、ADC、DAC增益snd_ctl_boolean_mono_info等帶數(shù)值范圍的滑動(dòng)條開(kāi)關(guān)靜音、通路使能snd_ctl_boolean_mono_infoon/off開(kāi)關(guān)枚舉輸入源選擇、濾波器模式snd_ctl_enum_info下拉列表路由混音器通路連接snd_soc_dapm_*由DAPM自動(dòng)管理選型的核心判斷標(biāo)準(zhǔn)是這個(gè)量是連續(xù)可調(diào)的、二值的、還是多選一的。連續(xù)可調(diào)就用SNDRV_CTL_ELEM_IFACE_MIXER配合info回調(diào)返回范圍二值用SNDRV_CTL_ELEM_IFACE_MIXER配合布爾info多選一用枚舉。路由類(lèi)控件比較特殊它不直接暴露給用戶(hù)而是交給DAPM去管理后面單獨(dú)講。2.2 音量控件的范圍計(jì)算別直接抄手冊(cè)音量控件最容易出錯(cuò)的地方是范圍計(jì)算。芯片手冊(cè)通常給的是寄存器值到dB的對(duì)應(yīng)關(guān)系比如WM8960的耳機(jī)輸出增益寄存器0x02的bit[6:0]對(duì)應(yīng)0到127每步0.5dB。但你不能直接把0到127丟給用戶(hù)空間因?yàn)橛脩?hù)看到的是0到127這種裸數(shù)值沒(méi)有物理意義不同通路的增益步進(jìn)不一樣混在一起很亂有些芯片的增益是反的寄存器值越大增益越小。我的做法是在info回調(diào)里把范圍映射成dB值或者至少映射成有意義的百分比。具體實(shí)現(xiàn)時(shí)snd_ctl_elem_info的value.integer.min和max填映射后的值get和put回調(diào)里做雙向轉(zhuǎn)換。舉個(gè)例子如果寄存器0到127對(duì)應(yīng)-17.25dB到30dB步進(jìn)0.375dB那可以這樣處理static int wm8960_hp_vol_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { uinfo-type SNDRV_CTL_ELEM_TYPE_INTEGER; uinfo-count 2; /* 左右聲道 */ uinfo-value.integer.min 0; uinfo-value.integer.max 127; uinfo-value.integer.step 1; return 0; }這里我保留了原始寄存器范圍但在控件名字里標(biāo)注了單位比如Headphone Playback Volume讓用戶(hù)知道這是寄存器級(jí)調(diào)節(jié)。如果要做dB映射就在get里把寄存器值轉(zhuǎn)成dB再返回。兩種做法各有取舍保留原始值實(shí)現(xiàn)簡(jiǎn)單、調(diào)試直觀映射成dB對(duì)用戶(hù)友好但代碼復(fù)雜。我個(gè)人的經(jīng)驗(yàn)是調(diào)試階段保留原始值產(chǎn)品化階段再考慮映射因?yàn)檎{(diào)試時(shí)你更關(guān)心寄存器現(xiàn)在是多少。2.3 枚舉控件的坑字符串?dāng)?shù)組的生命周期枚舉控件用來(lái)做多選一比如輸入源選擇Line In / Mic / PCM。它的info回調(diào)需要返回一個(gè)字符串?dāng)?shù)組這里有個(gè)非常隱蔽的坑字符串?dāng)?shù)組必須是靜態(tài)的或者生命周期覆蓋整個(gè)控件存在期。我見(jiàn)過(guò)有人在info回調(diào)里用局部數(shù)組結(jié)果amixer讀出來(lái)的選項(xiàng)是亂碼或者空。正確的寫(xiě)法是把字符串?dāng)?shù)組定義成static const char *放在文件作用域static const char *wm8960_input_texts[] { Line In, Mic, PCM }; static int wm8960_input_enum_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { return snd_ctl_enum_info(uinfo, 1, 3, wm8960_input_texts); }snd_ctl_enum_info的第二個(gè)參數(shù)是通道數(shù)第三個(gè)是選項(xiàng)個(gè)數(shù)。注意選項(xiàng)個(gè)數(shù)要和數(shù)組長(zhǎng)度嚴(yán)格一致多一個(gè)少一個(gè)都會(huì)導(dǎo)致越界讀。這個(gè)函數(shù)是ALSA提供的輔助函數(shù)比自己填uinfo-value.enumerated.item省事得多。2.4 開(kāi)關(guān)控件與靜音別把兩者混為一談開(kāi)關(guān)控件看起來(lái)最簡(jiǎn)單但靜音和通路開(kāi)關(guān)是兩個(gè)不同的東西。靜音Mute是在信號(hào)鏈末端把輸出拉低通路開(kāi)關(guān)Switch是控制某段電路是否導(dǎo)通。有些芯片兩者都有有些只有其一。寫(xiě)驅(qū)動(dòng)時(shí)要看清楚手冊(cè)別把靜音寄存器當(dāng)成通路開(kāi)關(guān)來(lái)用。另外開(kāi)關(guān)控件的get回調(diào)要返回當(dāng)前實(shí)際狀態(tài)而不是你上次put進(jìn)去的值。因?yàn)樾酒赡芤驗(yàn)槠渌虮热缟想姀?fù)位、DAPM自動(dòng)管理改變了寄存器狀態(tài)。每次get都去讀一次寄存器這是最穩(wěn)妥的做法雖然多一次I2C讀但避免了狀態(tài)不一致。3. 控件注冊(cè)的完整鏈路從snd_kcontrol_new到用戶(hù)空間3.1 注冊(cè)時(shí)機(jī)為什么不能在probe里一股腦全注冊(cè)Codec驅(qū)動(dòng)的probe函數(shù)里通常會(huì)調(diào)用snd_soc_add_component_controls或者把控件數(shù)組掛到snd_soc_component_driver的controls字段上。后者是推薦做法因?yàn)锳SoC框架會(huì)在合適的時(shí)機(jī)統(tǒng)一注冊(cè)。但這里有個(gè)時(shí)機(jī)問(wèn)題DAPM的widget和route必須在控件注冊(cè)之前或者同時(shí)建立好否則控件可能引用到不存在的通路。我一般把控件數(shù)組、DAPM widget數(shù)組、route數(shù)組都定義成靜態(tài)的然后在component_driver里一次性?huà)焐先プ尶蚣苋ヌ幚眄樞?。static const struct snd_soc_component_driver wm8960_component_driver { .controls wm8960_snd_controls, .num_controls ARRAY_SIZE(wm8960_snd_controls), .dapm_widgets wm8960_dapm_widgets, .num_dapm_widgets ARRAY_SIZE(wm8960_dapm_widgets), .dapm_routes wm8960_dapm_routes, .num_dapm_routes ARRAY_SIZE(wm8960_dapm_routes), };ARRAY_SIZE這個(gè)宏一定要用別手寫(xiě)數(shù)字。我見(jiàn)過(guò)有人改了控件數(shù)組但忘了改num_controls結(jié)果多出來(lái)的控件沒(méi)注冊(cè)或者注冊(cè)了越界的內(nèi)存現(xiàn)象是amixer里少幾個(gè)控件或者內(nèi)核直接oops。3.2 控件命名規(guī)范用戶(hù)空間靠名字找控件控件的name字段是用戶(hù)空間識(shí)別控件的唯一標(biāo)識(shí)。amixer、alsactl、各種音頻框架都靠名字來(lái)匹配。命名不規(guī)范會(huì)導(dǎo)致用戶(hù)空間找不到控件音量調(diào)不了同名控件沖突后注冊(cè)的覆蓋先注冊(cè)的自動(dòng)化測(cè)試腳本匹配失敗。ALSA有一套約定俗成的命名規(guī)范核心是**源 方向 功能**三段式比如Headphone Playback Volume—— 耳機(jī)播放音量Capture Volume—— 錄音音量Left Output Mixer PCM—— 左輸出混音器的PCM輸入開(kāi)關(guān)ADC PCM Capture Volume—— ADC到PCM的錄音音量方向詞用Playback和Capture功能詞用Volume、Switch、Route、Mux。別自創(chuàng)命名比如寫(xiě)成hp_vol雖然能注冊(cè)成功但用戶(hù)空間的通用工具可能識(shí)別不了而且可讀性差。3.3 私有數(shù)據(jù)的傳遞kcontrol到codec的橋梁控件的get和put回調(diào)里需要訪(fǎng)問(wèn)codec的寄存器。怎么從kcontrol拿到codec的指針標(biāo)準(zhǔn)做法是用snd_soc_component_get_drvdatastatic int wm8960_hp_vol_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_component *component snd_kcontrol_chip(kcontrol); struct wm8960_priv *wm8960 snd_soc_component_get_drvdata(component); /* 讀寄存器填ucontrol */ ... }snd_kcontrol_chip返回的是snd_soc_component指針在ASoC語(yǔ)境下再通過(guò)get_drvdata拿到驅(qū)動(dòng)私有數(shù)據(jù)。這個(gè)鏈路要記牢因?yàn)閹缀趺總€(gè)回調(diào)都要用。注意早期內(nèi)核版本用的是snd_soc_kcontrol_codec新版本改成了snd_soc_component。移植驅(qū)動(dòng)時(shí)要注意內(nèi)核版本差異別直接抄老代碼。3.4 寄存器訪(fǎng)問(wèn)的原子性put回調(diào)里的讀改寫(xiě)put回調(diào)里經(jīng)常要做讀-改-寫(xiě)讀出寄存器當(dāng)前值改掉某幾位再寫(xiě)回去。這個(gè)操作在并發(fā)場(chǎng)景下可能出問(wèn)題比如兩個(gè)進(jìn)程同時(shí)調(diào)amixer。ASoC框架對(duì)控件的put回調(diào)有加鎖保護(hù)但如果你在put里訪(fǎng)問(wèn)了多個(gè)寄存器或者訪(fǎng)問(wèn)了非控件管理的寄存器就要自己加鎖。我的習(xí)慣是在put里盡量只操作一個(gè)寄存器如果必須操作多個(gè)用snd_soc_component_read和snd_soc_component_write這對(duì)函數(shù)它們內(nèi)部有緩存和鎖機(jī)制。別直接用i2c_smbus_read_byte_data繞過(guò)ASoC的寄存器緩存否則DAPM的狀態(tài)會(huì)和實(shí)際寄存器不一致。4. DAPM與控件的關(guān)系為什么你的控件不生效4.1 DAPM自動(dòng)管理了大部分通路很多人寫(xiě)完控件后發(fā)現(xiàn)amixer里明明把某個(gè)開(kāi)關(guān)打開(kāi)了但聲音還是出不來(lái)。原因往往是DAPM在背后自動(dòng)管理了通路你手動(dòng)開(kāi)的開(kāi)關(guān)被DAPM關(guān)掉了。DAPMDynamic Audio Power Management是ASoC的核心機(jī)制它根據(jù)當(dāng)前的音頻流狀態(tài)自動(dòng)開(kāi)關(guān)音頻通路上各個(gè)widget的電源。一個(gè)widget只有在被需要的時(shí)候才會(huì)通電。比如播放時(shí)從PCM到DAC到輸出混音器到耳機(jī)這條路徑上的widget會(huì)被自動(dòng)上電不在這條路徑上的比如錄音通路會(huì)被斷電。所以如果你把某個(gè)通路開(kāi)關(guān)定義成了普通kcontrolDAPM不認(rèn)識(shí)它就不會(huì)在需要的時(shí)候打開(kāi)它。正確的做法是把通路開(kāi)關(guān)定義成DAPM widget讓DAPM去管理。4.2 什么時(shí)候該用DAPM widget什么時(shí)候用kcontrol判斷標(biāo)準(zhǔn)很簡(jiǎn)單這個(gè)開(kāi)關(guān)是否參與音頻通路的自動(dòng)電源管理。如果是某段電路是否導(dǎo)通、某個(gè)混音器輸入是否使能用DAPM widgetSND_SOC_DAPM_MIXER、SND_SOC_DAPM_SWITCH等如果是用戶(hù)手動(dòng)調(diào)節(jié)的音量、用戶(hù)手動(dòng)選擇的輸入源用kcontrol如果是靜音兩者都可以但用kcontrol更直觀因?yàn)橛脩?hù)需要看到靜音狀態(tài)。我見(jiàn)過(guò)一個(gè)典型錯(cuò)誤把Left Output Mixer PCM這個(gè)混音器輸入開(kāi)關(guān)定義成了普通kcontrol。結(jié)果播放時(shí)DAPM不知道要打開(kāi)它聲音出不來(lái)用戶(hù)手動(dòng)打開(kāi)后停止播放再播放DAPM又把它關(guān)了。改成SND_SOC_DAPM_MIXER的輸入后DAPM自動(dòng)管理問(wèn)題解決。4.3 widget與kcontrol的命名對(duì)應(yīng)關(guān)系DAPM widget和kcontrol在用戶(hù)空間的表現(xiàn)不同widget通常不直接暴露除非用dapm調(diào)試接口kcontrol會(huì)出現(xiàn)在amixer里。但它們的名字在驅(qū)動(dòng)內(nèi)部要能對(duì)應(yīng)上因?yàn)閞oute數(shù)組里用名字來(lái)連接widget。比如static const struct snd_soc_dapm_widget wm8960_dapm_widgets[] { SND_SOC_DAPM_MIXER(Left Output Mixer, WM8960_POWER1, 5, 0, wm8960_left_mixer_controls, ARRAY_SIZE(wm8960_left_mixer_controls)), ... }; static const struct snd_soc_dapm_route wm8960_dapm_routes[] { { Left Output Mixer, PCM Playback Switch, Left DAC }, ... };route里的第二個(gè)參數(shù)是widget的輸入名要和mixer controls里的名字對(duì)應(yīng)。這個(gè)對(duì)應(yīng)關(guān)系錯(cuò)了DAPM就建不起通路現(xiàn)象是聲音出不來(lái)或者通路不完整。4.4 用debugfs看DAPM狀態(tài)調(diào)試DAPM最有效的手段是debugfs。掛載debugfs后/sys/kernel/debug/asoc/card/dapm/下面有每個(gè)widget的狀態(tài)。播放時(shí)看哪些widget是On哪些是Off就能判斷通路是否正確建立。mount -t debugfs none /sys/kernel/debug cat /sys/kernel/debug/asoc/*/dapm/Left\ Output\ Mixer輸出里會(huì)顯示widget的電源狀態(tài)、輸入輸出連接、當(dāng)前是否在活動(dòng)路徑上。這個(gè)信息比猜寄存器值有用得多。我調(diào)音頻通路問(wèn)題時(shí)第一步就是看DAPM狀態(tài)基本能定位到是哪個(gè)widget沒(méi)連上。5. 調(diào)試與驗(yàn)證讓控件真正可控5.1 amixer的常用操作與輸出解讀amixer是驗(yàn)證控件最直接的工具。幾個(gè)常用命令amixer controls # 列出所有控件 amixer contents # 列出控件及當(dāng)前值 amixer sget Headphone Playback Volume # 讀某個(gè)控件 amixer sset Headphone Playback Volume 80% # 設(shè)某個(gè)控件 amixer sset Left Output Mixer PCM on # 開(kāi)某個(gè)開(kāi)關(guān)amixer contents的輸出里每個(gè)控件會(huì)顯示numid、iface、name、type、access、當(dāng)前值。重點(diǎn)看type和accesstype是INTEGER、BOOLEAN、ENUMERATED之一access里有rw表示可讀寫(xiě)。如果某個(gè)控件顯示type不對(duì)或者access是r只讀說(shuō)明info回調(diào)或者put回調(diào)有問(wèn)題。5.2 用alsactl保存和恢復(fù)控件狀態(tài)產(chǎn)品化時(shí)控件狀態(tài)需要在開(kāi)機(jī)時(shí)恢復(fù)。alsactl store把當(dāng)前所有控件狀態(tài)存到/var/lib/alsa/asound.statealsactl restore恢復(fù)。這個(gè)機(jī)制依賴(lài)控件的名字和numid穩(wěn)定。如果你改了控件名字或者增刪了控件舊的state文件會(huì)失效需要重新store。我遇到過(guò)一個(gè)問(wèn)題驅(qū)動(dòng)里控件注冊(cè)順序變了導(dǎo)致numid變化alsactl restore把值設(shè)到了錯(cuò)誤的控件上。解決辦法是保證控件注冊(cè)順序穩(wěn)定或者在state文件里用名字而不是numid來(lái)匹配alsactl默認(rèn)用名字但有些版本會(huì)混用。5.3 常見(jiàn)問(wèn)題排查表現(xiàn)象可能原因排查手段amixer里看不到控件控件數(shù)組沒(méi)掛到component_driver或num_controls不對(duì)檢查component_driver定義看dmesg有無(wú)注冊(cè)失敗日志控件能讀不能寫(xiě)put回調(diào)返回錯(cuò)誤或access沒(méi)設(shè)成rw看put回調(diào)返回值檢查info里access字段設(shè)了值但聲音不變控件沒(méi)連到實(shí)際寄存器或DAPM覆蓋了讀寄存器確認(rèn)值變了看DAPM狀態(tài)聲音有底噪混音器重復(fù)疊加或增益設(shè)置不當(dāng)逐個(gè)關(guān)控件定位看混音器route播放時(shí)控件自動(dòng)變DAPM自動(dòng)管理了該控件把控件改成DAPM widget5.4 一個(gè)真實(shí)的排查案例回到開(kāi)頭那個(gè)左聲道底噪問(wèn)題。排查過(guò)程是這樣的amixer contents看所有控件發(fā)現(xiàn)Left Output Mixer PCM和Right Output Mixer PCM都在值都是on關(guān)掉左聲道的PCM輸入底噪消失說(shuō)明問(wèn)題在左混音器看DAPM route發(fā)現(xiàn)左混音器有兩條輸入一條來(lái)自L(fǎng)eft DAC一條來(lái)自Right DAC用于單聲道轉(zhuǎn)立體聲檢查驅(qū)動(dòng)代碼發(fā)現(xiàn)route里錯(cuò)誤地把Right DAC也連到了Left Output Mixer導(dǎo)致右聲道信號(hào)混進(jìn)了左聲道刪掉那條錯(cuò)誤的route問(wèn)題解決。這個(gè)案例說(shuō)明控件本身沒(méi)問(wèn)題問(wèn)題在route定義。DAPM的route數(shù)組是音頻通路的接線(xiàn)圖接錯(cuò)一根線(xiàn)聲音就不對(duì)。調(diào)試時(shí)要把route和芯片手冊(cè)的通路圖對(duì)照著看。6. 從能用到好用控件設(shè)計(jì)的進(jìn)階經(jīng)驗(yàn)6.1 控件粒度別太細(xì)也別太粗控件粒度是個(gè)權(quán)衡。太細(xì)用戶(hù)空間冒出上百個(gè)控件用戶(hù)懵太粗用戶(hù)想調(diào)某個(gè)具體增益調(diào)不了。我的經(jīng)驗(yàn)是按用戶(hù)會(huì)獨(dú)立調(diào)節(jié)的量來(lái)劃分每個(gè)輸出通路的音量單獨(dú)一個(gè)控件每個(gè)輸入源的選擇單獨(dú)一個(gè)枚舉控件混音器的每個(gè)輸入開(kāi)關(guān)單獨(dú)一個(gè)控件但用DAPM管理全局靜音一個(gè)控件。別把左聲道音量和右聲道音量合成一個(gè)控件除非芯片本身就是聯(lián)動(dòng)調(diào)節(jié)的。也別把播放音量和錄音音量合成一個(gè)它們物理上就是獨(dú)立的。6.2 默認(rèn)值的設(shè)計(jì)開(kāi)機(jī)就能出聲控件注冊(cè)后有個(gè)默認(rèn)值這個(gè)默認(rèn)值決定了開(kāi)機(jī)后聲卡能不能直接出聲。很多驅(qū)動(dòng)默認(rèn)值是0靜音導(dǎo)致用戶(hù)以為聲卡壞了。合理的默認(rèn)值應(yīng)該是通路開(kāi)關(guān)打開(kāi)、音量設(shè)到中間偏上、靜音關(guān)閉。但默認(rèn)值不能亂設(shè)要考慮硬件安全。比如耳機(jī)輸出增益默認(rèn)設(shè)太高可能損壞耳機(jī)或者聽(tīng)力。我的做法是參考芯片評(píng)估板的默認(rèn)配置再根據(jù)實(shí)際產(chǎn)品調(diào)整。默認(rèn)值在控件的info回調(diào)里通過(guò)uinfo-value.integer.min等字段體現(xiàn)或者在probe里主動(dòng)寫(xiě)一次寄存器。6.3 控件與電源管理的配合Codec通常有多個(gè)電源域控件操作可能觸發(fā)電源域切換。比如從待機(jī)喚醒時(shí)要先上電再寫(xiě)寄存器。ASoC的component框架有set_bias_level回調(diào)用來(lái)處理電源狀態(tài)切換??丶卣{(diào)里不要直接操作電源寄存器交給set_bias_level統(tǒng)一管理否則容易出現(xiàn)電源狀態(tài)不一致。另外put回調(diào)里如果發(fā)現(xiàn)codec處于低功耗狀態(tài)應(yīng)該先喚醒再寫(xiě)。ASoC框架通常會(huì)自動(dòng)處理但如果你用了自定義的電源管理就要自己保證順序。6.4 多codec場(chǎng)景下的控件命名沖突一塊板子上有兩顆codec時(shí)控件名字可能沖突。比如兩顆都有Headphone Playback Volumeamixer里會(huì)顯示兩個(gè)同名控件用戶(hù)分不清。解決辦法是在控件名字里加上codec標(biāo)識(shí)比如CODEC1 Headphone Playback Volume。ASoC的component有name字段可以在注冊(cè)時(shí)用component-name做前綴。這個(gè)細(xì)節(jié)在單codec項(xiàng)目里不重要但多codec項(xiàng)目里不注意就會(huì)踩坑。我建議從一開(kāi)始就養(yǎng)成加前綴的習(xí)慣哪怕現(xiàn)在只有一顆codec將來(lái)擴(kuò)展也方便。6.5 內(nèi)核版本差異從snd_soc_codec到snd_soc_componentLinux 4.10左右ASoC進(jìn)行了一次大重構(gòu)snd_soc_codec被snd_soc_component取代。老驅(qū)動(dòng)里的snd_soc_codec、snd_soc_codec_driver、codec-control_data這些在新內(nèi)核里都變了。移植驅(qū)動(dòng)時(shí)要注意snd_soc_codec→snd_soc_componentsnd_soc_codec_driver→snd_soc_component_driversnd_soc_kcontrol_codec→snd_soc_kcontrol_componentcodec-control_data→component-regmap這個(gè)重構(gòu)影響面很大控件相關(guān)的API幾乎都改了。如果你在維護(hù)老驅(qū)動(dòng)要么整體移植到新框架要么鎖定內(nèi)核版本。別混用新舊API編譯能過(guò)但運(yùn)行時(shí)行為可能不對(duì)。7. 寫(xiě)在最后控件是驅(qū)動(dòng)和用戶(hù)的契約調(diào)了這么多codec驅(qū)動(dòng)我越來(lái)越覺(jué)得音頻控件不只是一堆寄存器封裝它是驅(qū)動(dòng)開(kāi)發(fā)者給用戶(hù)空間的一份契約。用戶(hù)通過(guò)控件名字和取值范圍來(lái)理解這顆codec能做什么通過(guò)amixer來(lái)調(diào)整它。控件設(shè)計(jì)得好用戶(hù)不用看手冊(cè)就能把聲音調(diào)對(duì)設(shè)計(jì)得差用戶(hù)對(duì)著幾十個(gè)控件一臉茫然。我自己的習(xí)慣是每寫(xiě)完一個(gè)codec驅(qū)動(dòng)先用amixer contents把控件列表打出來(lái)假裝自己是個(gè)第一次用這顆芯片的用戶(hù)看能不能憑名字和取值范圍猜出每個(gè)控件的作用。猜不出來(lái)的要么改名要么合并要么補(bǔ)文檔。這個(gè)自檢過(guò)程能發(fā)現(xiàn)大部分控件設(shè)計(jì)問(wèn)題。最后分享一個(gè)實(shí)用技巧調(diào)試階段可以在probe里把所有控件的當(dāng)前值打印一遍和芯片手冊(cè)的復(fù)位值對(duì)照。如果某個(gè)控件讀出來(lái)的值和手冊(cè)不符說(shuō)明get回調(diào)或者寄存器訪(fǎng)問(wèn)有問(wèn)題。這個(gè)檢查花不了幾分鐘但能提前發(fā)現(xiàn)很多隱蔽的bug。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丁香激情网| 色婷婷欧美| 久久这里面只有精品视频| 亚洲色综合| 精品国产va久久久久| 五月色网| 激情综合激情综合| 天天激情视频| 久大香蕉| 亚洲成片在线观看| 激情内射人妻1区2区3区| 色婷婷裸体色性在线| 亚洲免费av观看| 性色五月天| 九九色99| 狠狠va| 色亭亭九月| 91综合色| 九九热在线视频观看| 99热热热天天人人人超超碰| site:901-07.com| 五月婷婷五月丁香综合| 综合狠久久| 另类激情综合| 综合网啪| 五月丁香婷婷AV| 深夜婷婷五月丁香| 婷婷丁香六月五月天| 五月丁香激情综合网官网| 天天干天天干天天操| 婷婷激情视频欧美视频自拍视频欧美剧 | 色情成人五月天| 大香蕉久久婷婷精品综合| 综合久色五月| 开心丁五月| 久人操| 91无码色色| 欧美人人操| 九九久热| 久久精品亚洲一级牲爱综合| 天天操,天天插| 中文字幕精品在线观看| 色九月国产| 99A片| AA丁香综合激情| 天堂色婷婷| 激情五月婷婷开心网| 激情宗合网激情五月天| 五月婷婷婷自由综合| www.主妇. com| 狠狠综合网| 天天肏高清在线| 强奸幻女毛片| 九九自拍网| 91九色 婷婷| 天天肏天天肏| 色播五月天婷婷老师| 婷婷天天五月天| 亚洲综合五月天婷婷| 精品亚洲国产成AV人片传媒| 免费黄网不卡AV| 亚韩在线视频| 噜噜五月天综合| 成人短视频在线| 丁香五月婷婷五月天| 天天操夜夜橾| 综合XX网| 欧美性爱中文字幕| 国产精品电影| 202丰满熟女妇大| 99精品在线| 久久久com| 熟女人妻一区二区三区免费看| 五月丁香综合啪啪| 婷婷五月天A V| 亚洲AV无码成人电影| 久久五月婷综合网| 日本久久精品| 国产资源91在线| 夜夜操夜夜操| 99精品视频免费观看| 九九热精品视频在线观看| 久久大香蕉丁香| av在线免费播放观看| 狠狠操狠狠色| 亚洲旡码| 天堂婷婷丁香六月网| 亚洲色亚洲精品| 六月丁香激情网| 激情綜合網址| 欧美性生交xXxX久久久| 色九月婷婷综合| 深爱五月中文字幕| 欧美日韩成人免费在线| 亚洲午夜成人av电影网| 情色五月天网站| 五月天天天综合| 丁香五月激情婷婷激情| 97碰| 91狼友视频网页更新| 丁香五月天激情四射网| yazhouzonghesese| 色婷婷综合久久久久| 99免费在线视频| 婷综合六月| 久久婷婷精品| 五月激情六月丁香| 国产精品成人AV在线观看春天| 伊人丁香五月婷婷潮吹| 日韩六十路91性交电影| 五月丁香六月婷婷网| 性按摩玩人妻HD中文字幕| 人操人| 综合色99| 99热国产免费| 九月丁香很很色| 无码髙清| 天天操天天曰| 婷婷色影音天| 五月丁欧美| 婷婷在线免费| 免费观看欧美成人AA片爱我多深| 亚洲成人综合在线| 99热这里只有精品99| 色播五月丁香| 91蜜桃婷婷狠狠久久综合9色| 五月久久丁香| 极品人妻VIDEOSSS人妻| 91人妻PORNY九色大屁股| 丁香五月五月婷婷五月天激情四射| 99自拍视频网站| 丁香五月婷婷啪啪视频| 26uuu国产精品| 综合色99| 9久热免费视频99| 五月婷色啪| 天天爽天天日| WWW,激情五月天,COM| 五月丁香啪啪| av在线观看网址| 综合色天天| 午夜成人天堂久久无码日韩久久| 91精品人妻少妇无码影院| 五月综合在线婷婷图片| 五月丁香久久| 五月天婷亚洲综合在线嫩草网| 国产成人高清| 91九色在线视频| 天天色激情| 亚洲乱码日产精品BD在线观看| www.婷婷五月天| 一本久道综合色婷婷五月| 人妻久久久| 91啪啪视频| 开心婷婷五月| 成人精品人妻| 九九久久99| 久99精品视频| 第四色五月婷婷| 色色综合网。| 网站免费一站二站| 情色五月天网站| 亚洲激情另类| 色婷婷AAA| 99九无网码| 伊人色综合久久久| 丁香色五月 97干| 女同激情久久av久久| 97人妻碰碰碰久久香蕉| 五月丁香激情综合| 久久免费精彩视频| 在线A色| 江苏少妇性BBB搡BBB爽爽爽| 91久久婷婷人人澡草 | 美日韩成人| 亚洲av网站| 色婷久九| 狠狠穞A片一區二區三區| 91超级碰| 少妇大叫太大太粗太爽了A片| 天天草人人摸| 五月婷婷很很色| 婷婷五月婷婷五月| 另类亚洲视频| 99综合| 婷婷丁香色五月天久久88| 丁香色五月 97干| Av性爱网站| 久久精品99国产精品日本| 五月婷婷少妇之| 性按摩玩人妻HD中文字幕| 呦呦v线| 激情98色婷婷五| 这里只有精品视频一区| 久久总和99| 亚洲热久久| 婷婷伊人激情婷婷| 欧美激情伊人| 超碰成人免费| 久久视频这里有精品99| 999婷婷综合| 亚洲操B| 开心五月丁香综合久久| 性爱网六月丁香| 五月天婷婷AV| 五月天伊人日日噜影片AV| 玖玖婷婷免费| www久久99| 丁香婷婷免费| 蜜桃婷婷狠狠久久| 国产99久久久国产精品免费看| 亚洲色 视频| 亚洲成人av在线播放| 黄网在线播放| 欧美成人精品一区二区| 开心久久xxx色| 欧美久久一级内射wwwwww.| 色久五月天| 肏屄色播伊人97婷婷| 99精品网| 超碰免费成人| 亚洲色模骚货| 色婷婷在线视频久| 色六月婷婷| 久久精品99国产精品日本| 五月天激情.com| 久久香蕉福利| 99精彩视频在线观看| 91色噜噜狠狠狠狠色综合| 99re这里只有精品视频6| 96丁香婷婷九月蜜桃综合久久| 丁香六月激情综合| WWW.桔色成人.COM| 婷婷久久欧美| 久久婷婷综合网| wwwav大香蕉| 熟女激情网| 天天射天天射一道本日本社区 | 久久婷婷亚洲| 欧美久人人| 国产亚洲精品AAAAAAA片| 色五月播五月| 九九热这里只有精品31| 色青青五月| 久久精品99久久久久久| 丁香社92视频| 大香蕉色婷婷伊人在线| 婷婷九月| 开心五月婷婷| 思思热精品在线视频| 九九热在线99| 五月丁香六月婷婷的女人| 无码地址| 欧美激情五月综合| 伊人久久婷婷| 亚洲在线综合| 丁香五月最新地址| 色婷久九| 久久新| 精品热青草| 一起草AV| 香蕉久久国产AV一区二区| 丁香六月激情| 色无码| 色婷婷香蕉丁丁网| 夜夜操少妇| 99色热| 98色花堂98t.R| 五月天婷婷无码| 性做久久久久久久免费看| 99精品久久久| 色五月婷婷丁香五月| 久久综合五月天| 涩婷婷五月天| 欧美婷婷综合| 天天日天天插| 91成人电影| 天天做夜夜爽| 99网99热| 美女激情综合| 久99视频| 亚洲无码99| 天天日夜夜拍| 久久久久9| 91狠狠综合久久久久久| 激情五月天影院| 91精品无码| 一月婷婷色色| 婷婷丁香在线| 丁香六月婷婷综合| 亚洲精品国产熟女久久久| 日韩视频99| 丁香五月激情婷婷| 激情开心五月天| 日日天天干| 婷婷99狠狠| 可以看的AV| 久久亚洲激情五码| 99爱精品| 久久月天堂| 99热99日天天干| 丁香九色不卡aaa| 精品综合爱| 五夜丁香| 欧美激情五月天婷婷| caopeng超碰| 色色影院aaaav| 激情都市五月天| 这里只有精彩视| 色播五月| 色播五月天激情| 97色吧| 色五月婷婷在线观看第一页舔| 新激情五月天| 熟女啪啪视频| 97亚洲色 torrent magnet| 99热这里只有精品21| 天天日综合网射| 丁香5月啪啪| 五月天婷婷丁香社区| 久久这里都是精品| 亚洲操b| AA片在线观看视频在线播放| 2021日韩无码| 五月丁香六月激情综合网| 激情综合五月激情XXXX| 天天日,天天插| 色久女| 色五月婷婷久久| 蜜桃婷婷丁香综合久久开心亚洲| 97精品自拍视频| 成人网址在线观看| 亚洲色 视频| 色婷婷五月综合在线| 色五月天综合网| 亚洲字幕AV一区二区三区四区| 人操91在线| 欧美久久婷婷| 日日夜夜狠狠干| 91超碰在线播放| 久久99热这里只频精品6学生| 激情五月丁香五月色| 97成人在线视频精品| 色婷婷基地| 大伊久久| 五月天成人在线视频网站| 内射 无码 伊人| 超碰91av| 日日噜狠狠色综合久| 99性视频| 婷婷激情啪啪| 亚洲婷婷五月天激情综合| 91人操人人人操人| 天天射天天操天天干| 丁香婷婷色色| 亚洲成人噜噜| 午夜精品久久久久久久爽| 九九九九大香蕉| 婷婷五月天,影院| 久久久无码精品成人A片小说| 激情五月天色色| www色哟哟| 亚洲区,视频区,视频区免费| 色色99| 超碰v| 黄色成人网站在线播放| www.色五月.com| 99久久久| 丁香五月花婷婷开心| 天天草天天爽| 激情婷婷护士激情| 另类小说婷婷色| 色香欲综合| 日韩无码乱轮| 97精品自拍视频| 97操碰在线视频| 九九99九九99| 色欲日日躁| 亚洲天天操| 日韩av一区二区在线/日产精品久久久 | 99热这里只| 伊人大香蕉综合在线| 五月婷婷丁香伦理网| 久久东京热婷婷五月| 色拍九九九| 五月天婷婷色小说| 五月综合激情久久| 人妻 性久久久久久| 日本综合久久| 婷婷,五月天,丁香,第一| 五月天婷婷爱| 亚洲人妻Av| 色情五月综合婷婷| 99热在线看片| 五月婷婷深深爱| 搡BBBB搡BBB搡18| 婷婷五月天开心激情网| 日本精品99| 风流少妇A片一区二区蜜桃 | 五月丁香久久综合| 综合激情深爱| 黄网在线播放| 激情婷婷内射| 99热精品在线观看| 六月婷婷狠狠色在线观看| 日日色综合| 久久99综合| WWW.婷婷五月天.COM| 亚洲人妻电影| 9 1超碰九色| 婷婷六月天天| 久久99操| 亚洲性受XXXX五月丁香| 久久99综合| 涩涩五月天| 婷婷五月天在线观看av| 国产综合视频婷婷| 九色1区视频在线| 日日夜夜天天综合| 婷婷娌伦网| 婷婷深爱五月天在线| 小色小蛇伊人婷婷色香五月| 丁香8月手机综合| 久久性爱视频| 超碰a女人的天堂| 午夜精品777| 伊人婷婷五月天| 激情啪啪五月天| 久久99国产综合精品免费| RenRenSe在线视频网站| 丁香五月色色婷| 久久久27操| 成人在线99| 亚洲精品亚洲人成人网| 九月av在线| 六月婷婷激情| 五月天成人综合| 激情五月综合色| 99操| 战争与艾拉电影免费观看| 伊人激情综合| www.91九色| 婷婷色播色五月五色五月天色妇| 男人操女人高潮91视频| 天天狠狠夜夜狠狠2023| 欧美激情综合| 99欧美精品99日本精品| 日韩精品一品二区三区的使用体验| 九九这里是免费的视频5| 丁香五月天堂网| 亚洲五月天狠狠| 天天操天天国产三级片处女学生妹| 丁香五月天婷婷激情| 九九99免费视频| 蜜臀AV在线观看| 久播影院免费观看电视剧大全最新网| 色吧婷婷| 97热91| 天天摸天天做天天爱天天爽| www.日本久久videos| 1024亚洲无码| 男女99免费视频| 五月婷丁香在线视频在线| 97ai婷婷| 狠狠综合网| 99九九视频| 热99玖玖99玖玖99九九| 好大好粗嗯啊-一级黄色大片免费观看-成人AV| 国产激情一区| 色播五月丁香综合| 婷婷五月天激情电影| 色婷婷情片| 久久婷婷人人| AV堂狠狠干| 婷婷五月综合婷婷| 甈你aaaaa| 5月婷婷五月天| 99爱视频在线| 色丁香五月天| 五月婷婷香蕉| 亚洲综合色色色| 丁香五月婷婷骚视屏| 色~性~乱~伦~噜| 丰滿爆乳一区二区三区| 久久婷婷热| 日本狠狠色| 思思热99在线| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 欧美激情-区二区三区| 五月婷婷久久久| 激情六月综合| 五月天久久久| 人妻五月天激情开心网| 伊人网欧美在线男人天堂五月丁香| 99热精品10| 亚洲第一视频 久久| 婷婷五月激情视频在线| 婷婷久久网| 欧美性猛交99久久久久99按摩| 十二区无码| 色九亚洲| 激情综合亚洲色婷婷五月| 亚洲欧洲中文日韩久久AV乱码| 色婷婷丁香五月综合| 开心婷婷五| 五月丁香激情四射| 色九月国产| www91色网站| 成人片黄网站色大片免费毛片| 婷婷的99视频网站| 丁香五月六月综合激情| 五月丁香成人网| 国产精品婷婷午夜在线观看| 欧爱综合视频| 色狠狠综合网| 丁香五月综合图片在线观看| 婷婷五月天色丁香| 91九色精品女同系列| 噜噜干日本| 99在线资源视频| 91色综合| 婷婷亚洲综合| 欧美色激情四射| 超碰免费人人| 久久婷婷视频| 99五月香婷婷丁香在线视频| 青青草性爱视频| 婷婷丁香五月综合免费视频百花| 丁香五月性爱| 婷婷婷婷婷婷婷五月丁香| 婷婷激情五月天网站| 欧美日综合| 狠狠干综合| 九九热在线观看6| 婷婷九月丁香| 精品久色| 五月婷婷视频啪啪美女| 五月天自拍网| 5月丁香六月婷婷| 天天干天天爽天天操| 六月五月婷婷| 色色色色色综合| 婷婷五月天亚洲| 五月丁香中文| 97丁香婷婷| 欧美性生交XXXXX无码小说| 一起草aV| www.国产色| 久久色六月| 天天摸天天爽| 国产亚洲精品AAAAAAA片| 亚洲激情综合网| 五月婷婷综合激情| 丁香五月另类色婷婷麻豆| 色爱综合网| 五月丁香六月激情在线| 精品欧美性爱超级爽| www,99热在线观看| 狼人婷婷久久| 天天做天天爰天天爽天天无遮挡| 2025年最新亚洲在线欧美| 日韩爱操视频| 久久婷婷啪啪视频| 国产毛片欧美毛片久久久| 久99久视频精品| 777久久久| 97精品综合久久| 五月天色狠狠| 婷婷五月美女直播| 任你草| 亚洲愉拍99热成人精品| 九九激情视频| 99在线观看视频免费| 色五月五月天| 五月丁香激情四射| 亚洲V国产V欧美V久久久久久| 色婷婷AV久久| 丁香五月亚洲AV| 五月丁婷婷| 日日夜夜天天| 99热热热99精品丁香| 99色免费在线观看| 99热6这里之有精品| 亚洲最大五月六月丁香婷婷| 九九青青草成人| 国产精品第一国产精品| 99毛片| 六月香五月婷| 91人操人人人操人| 免费观看全黄做爰的视频| 久草婷婷视频| 九九家庭影院| 天天天天干| 婷婷综合五月天| 第四色网婷婷| 激情五月丁香激情综合网| 天堂综合久| 99热日本| 香蕉AV777XXX色综合一区| 99精品福利视频| 九九色院| 亚洲乱码日产精品BD| 丁香婷婷色情社区成人小说| WWW99热| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 国产密乳av一区二区三区四区| 九九久久五月天| 91操人人操| www.婷婷五月天.com| 日韩久久色| 热久免费视频9| 色婷婷成人网| 久久天天| 国产精品男人AV不卡| 五月开心婷婷极品激情| 久久性爱视频| 久草A片| 狠狠色中色| 草美女在线观看视频在线播放| 99热99美国在线观看| 欧美三级巜人妻互换| 九九人人操| 五月丁香综合网| 香蕉曰比| 丁香五月天综合网| 97碰碰碰免费公开在线视频| 99久久99九九99九九九| 亚洲亚洲激情| 大香蕉久艹| Caoporn公开| 激情婷婷五月天| 五月婷婷天天| 五月天黄色激情小说| www婷婷| 婷婷五月天天激情| 婷婷在线中文字幕| 久久丁香五月天| 婷婷色色综合| 五月丁香啪| 色色色色五月天| 98色花堂98t.R| 激情综合五月开心狠狠| 国内在线99视频| 色婷婷丁香香香蕉视频| 亚洲99热| 久久视频这里99| 婷婷色五月大香蕉在线| 日本在线噜噜| 激情影院69| 色久激情在线| 9999热免费视频视频| 久久 视频这里只有精总| 亚洲在线免费成人| 激情五月丁香六月婷婷| AV在线免费观看不卡| 九色99视频| 色综合婷婷| 丁香六月激情综合| 99色网站| 国产成人亚洲综合A∨婷婷| 亭亭五月天黑人2014| 婷婷激情蜜桃玖玖丁香| 亚洲激情电影五月天色婷婷丁香一起草 | 91狠狠综合久久| 97久人人| 综合性爱网| 九九久久高清| 婷婷激情社区| 婷婷色中文| 九月丁香婷婷综合| 九九av| 99精品在线| 思思色综合网站| 六月婷婷毛片| 天天操天天操天天操天天操天天操| 日韩综合久| 五月婷婷狠狠干| 色色激情| 中文字幕乱码亚洲精品一区| 天天天天天天天操| 97人妻碰碰碰久久久久-最近国语高清| 婷婷俺去也| 丁香婷婷五月六月久久| 成人va在线播放| 丁香五月婷婷成人综合| 爱狠射| 久久多色| 2023天天日夜夜爽| 亚洲成人中文字幕| 久99热| 综合网激情五月天| 久久久九九九 99| 亚洲综合1024| 五月丁香在线国产 | 开心五月婷婷99| 九色激情网| 涩五月婷婷| 精品,99| 色婷婷a v| 黄网在线播放| 可以直接看的av| 91婷婷丁香五月天免费视频网站| 婷婷丁香无码专区| 五月婷婷狠狠干| 婷婷黄色五月天在线视频| 丁香六月婷婷久久亚洲天堂| 午夜天堂啪啪| 色婷婷丁香五月色综合网| 伊人综合色干| 九九热123| 99热播放| 亚洲欧美另类在线23p| 丁香花色色网| 97碰 在线视频观看| 日本色道视频网站| 婷婷五月天啪啪| 激情五月综合网| 丁香五月激情啪啪啪| 99热这里只有精品3| 99热中文字幕久久| 九九熱最新視頻| 久草网大香视频| 精品一区二区三区四区五区六区| 成功精品影院| 五月婷六月丁香| 色吧综合网| 91综合网| 亚洲中文字幕AV在线| 成人亚洲精品| 天天色综网| 精品无码色| 久久婷婷色综合| 亚洲AV在线免费看| 天天插天天干| 久久色婷婷| 五月婷婷激情久久| 五月的丁香六月的婷婷| 亚洲色情久久| 日本精品干| 久久丁香综合精品综合| 国产精品人成A片一区二区| 久久新地址| 成人五月天视频| 五月丁香六月合| 天天噜天天插| 日韩成人AV在线| 大香蕉狠狠爱主页| 中文字幕人妻一区二区| 成人免费120分钟啪啪| 色欲天天综合| 九九性爱网| 天堂草在线观看| 热99久久这里只有精品| 日本本土色网第一区| 色五月天丁香| 丁香九月婷婷综合| 肏屄色播伊人97婷婷| 久久精品五月| 超碰京东热av男人的天堂| 无码视频国内精品久久久| 五月丁香影视| 婷婷丁香六月| AV性爱在线| 日本超碰在线| 色综合久久综合中文综合网| 国产97色在线 | 日韩| 天天透天天爱| 精品人妻久久久久久| WWW,五月| 天天日天天摸| www.99热这里精品| 五月天激情久久| 五月六月婷| 五月丁香六月在线| 狠狠搞狠狠操| 丁香五月婷婷综合精品素人| 色婷婷精品视频| 先锋资源婷婷| 九热精品| www超碰| 丁香五月成人社区| 啪啪啪综合网| 思思久久99热只有频精品66| 久久er99热精品一区二区| 国产小精品| 91精品激情9| www.婷婷com| 婷婷情色五月| 五月婷婷黄色毛片| 4399在线观看免费高清黄色视频| 狠狠色五月| 丁香五月婷婷色情综合| 久久婷婷五月| 五月丁香婷色| 国产精品A片| 女高怪谈在线观看| 日本美女五月天| 人人97碰| 综合激情五月丁香| 北条麻妃九九九国产精品视频| 91re色综合视频| 国产a视频| 成人电影在线免费试看| 大香蕉久久伊人婷婷五月丁香| 美女五月天婷婷| 五月丁香亭亭天天舔| 激情深爱五月| yellow视频在线观看91| 天天干天天操天天拍| 天天射影院| 九九精品丁香花| 97色啪| 丁香五月婷婷无码AV| 这里只有精品视频看看| 久久99热这里只有精品| 91chinese在线| 欧美成人一区二区三区在线视频 | 色婷婷色五月丁香| 激情综合五月婷婷六月丁香| 五月丁香久久综合| 日本人妻伦在线中文字幕 | 新激情五月天色播| 色婷婷综合影院| 久久人人看| 九九99九九精品视频| 日本不卡中文字幕| 五月激情偷拍婷婷| 成人短视频在线免费观看| 久久久噜噜噜久久人妻| 久9综合| Av九九| 五月开心婷婷| AV网站免费在线| 色五月激情五月| 久久婷婷丁香五月宗合| 久久视频66| 激情六月综合| 日本久久天堂| 婷婷丁香社区| 人妻五月天激情开心网| 天天爽天天爽| 高清资源站日A美A欧亚…| 亚洲精品在线视频| 色五月婷婷视频| 五月丁香激情四射| 久热久69| 久热久色| 99热这里只有精品9| 香蕉久久国产AV一区二区| 丁香五月天天| 五月开心婷婷| 99热精品中文字幕| 超碰永久在线| 色婷婷六月激情| 任你爽精品免费视频6| 久久婷婷综合五月| 99热这里只有精品26| 激情综合五月开心狠狠| www.97视频| 另类小说五月天| www.操.com| 亚洲狠狠色丁香婷婷综合久久| 99ri精品视频在线观看| 五月天久久网站| 无码少妇高潮喷水A片免费| 99在线资源| 丁香六月激情综合啪啪| 亚洲精品视频在线| 丁香激情网| 天天干 夜夜爽| 五月婷婷爽爽爽| 婷婷色女| 五月婷婷AV| 国产色视频网站2| 五月天堂在线| 成人无码精品1区2区3区免费看| 久久婷婷五月综合伊人| 五月婷婷69| 黄色录像网点| 狠色狠色狠色狠色狠色网| 九九热精品| 婷婷五月色影视先锋| 91色情播放| 91蝌蚪窝视频在线| 色五月激情五月丁香五月婷婷啪啪综合| 激情综合无码| 啪啪丁香五月| 婷婷五月天网| 久热在线观看视频9| 丁香五月婷婷欧美成人色图| 无码日本精品XXXXXXXXX | 丁香五月天激情网址| 伊人干综合| 狠狠人妻色综合| 女人被男人吃奶到高潮| www网站在线观看| 亚州性爱99| 久99久视频精品| 99视频精品全部免费观看| 天天插天天射| 亚洲精品乱码久久久久久综合| 这里只有精品1| 97综合在线| 伊人婷婷五月天| 亚洲综合婷婷| 六月丁香激情网| 日本三级黄色大片| 天天日夜夜拍| 色色五月天婷婷| www.五月丁香| 精a品a视a频| 五月婷婷深深爱| 激情5月舔| 九九色热| 日本ww亚洲| 夜夜嗨一区二区三区直播内容 | 天天躁日日躁狠狠躁日日躁2022年5月9日| 色播五月婷婷综合| 亚洲爆乳无码精品AAA片蜜桃| 亚洲熟妇AV综合网五月丁香伊人 | 亚洲啪啪精品| 99热这里只有精品5| 91精品又长又大又粗又爽又猛| 夜夜撸日日操| 91人人操.COM| 夜夜爽天天爽| sisi热国产| 婷婷五月在线影院| www,av好吊操| 五月婷婷黄| 久久久久久久97| 色玖玖| 国产精品久久久久久久久久久久 | 操骚货在线| 色五月婷婷综合| 婷婷色六月| 婷婷五月丁香基| 久久久久久婷| 婷婷免费视频| www.zbzhongsen.com| 亚洲精品无码一区二区| 麻豆五月丁香婷婷| 激情伊人网| 五月天综合视频| 色亭亭五月天网扯| 婷婷五月丁香人妻无码高清| 五月天色色婷婷| 五月婷婷干干干| 国产乱子轮XXX农村| 婷婷五亚洲| 亚洲天堂大香蕉| 任你艹| 五月天激情无码专区| 婷婷五月天激情电影| 丁香六月激情综合| 五月婷婷基地| 激情五婷网| 婷婷开心综合人妻小说网址| 色天使久久综合| 91色噜噜狠狠狠狠色综合| 丁香五月天在线视频| 伊人网色婷婷五月天| 狠狠操天天干| 五月色亭丁香| www,久久久人人| 第五色婷婷| 日本欧美国产| AV在线免费网站| 青草视频在线播放| 五月丁香综合影院| 桃色伊人在线| 91啪啪啪啪| 激情开心五月天| 激情五月久久| 激情婷婷五月天网址| 色吊丝中文字幕| 99这里都是精品| 激情五月婷婷开心网| 色五月丁香五月激情五月激情| 色婷婷91激情小说| 久久六月综合| 直接看的AV| 色色色综合视频| 亚洲超级碰| 欧美性生交A片免费看| 激情久久丁香| 中文aV网| 国产67194| 另类图片五月天激情| 天天干天天爽| 丁香五月婷婷基地| 色婷婷视频| 欧美色色干| 久久91久久精品久久| 九九色精品| 亚洲第一第二网站| 管管補管管紱| 五月激情婷婷综合| 极品五月天| 亚洲精品V天堂中文字幕| 97干欧美| 五月丁香色六月激情干大屄| 六月丁香婷婷亚洲中文玖玖| 999婷婷综合| 9 9 9色色| 婷婷五月丁香综合亚洲| 99热亚洲| 影音先锋噜一噜| se色婷婷视频| 五月激情基地| 97自拍视频网| 久久99激情丁香婷婷小说网| 大香久久综合网| 激情伊人五月天| 97在线干| 性色婷婷| 人妻性操逼中文字幕 国产| 中文AV网站| 久久久久婷婷五月热综合| 99色在线观看| 婷婷六月色情| 99ri精品在线观看| 日本五月婷婷| 亚洲无码yw| 超碰人人在线| 激情深爱婷婷网| 青草视频在线播放| 国产片色| 久xxxx| 无码啪啪| 中文人妻主播久久| 色色网站毛片| 无人精品在线视频| 伊人色综合影院视频| 六月激情网| 五月香蕉综合| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 日操夜操天天操不卡| 国产肥白大熟妇BBBB视频| 色婷婷视频| 欧美色五月| 99热只有| 噜噜噜狠狠色综合| 色情综合网| 狠狠干综合| 婷婷在线视频| 六月丁香五月婷婷| 婷婷丁香五月综合| 五月色综合| 乱精品一区字幕二区| 91日韩在线| 极品人妻VIDEOSSS人妻| 开心激情婷婷| 免费视频WWW在线观看网站| 91操人| 图片区 小说区 区 亚洲五月| 国产精品一区在线观看你懂的| 综合五月天| www.天天干| 香蕉久久av一区二区三区| 日本人妻伦在线中文字幕| 欧美成人精品A片免费一区99| 无码AV久久久久久久久| 欧美性猛交99久久久久99按摩| 三男玩一女三A片| 色色三级视频| 九九热内射| 超91在线视频| 久Se视频在线观看| 激情综合网五月丁香| 超碰在线国产| 狠狠操.com| 五月丁香在线国产 | 玖玖99婷婷| 99色在线视频观看| 日本久久超碰| 丁香婷婷人妻| 人人爽人人爽人人爽人人爽| 九九综合久久| 丁香久月| 99精品视频网| 在线观看免费观看在线9久| 啪啪九九色| 色五月 婷婷, 大香蕉| 可以看的av网站| 婷婷性爱无码视频| 亚洲无码另类| 免费AV在线网址| 97人妻超级碰碰碰碰碰| 五月婷婷天| 五月丁香五月婷婷| 91人妻视频| 开心深爱五月天| 91丨九色丨高潮丰满日本| 美女被操一区二区| WWW.桔色成人.COM| 日本一级一级一级一级| 激情五月丁香亭亭| 丁香五月色情| 五月天婷婷色播综合在线| 色婷| www激情网站| av在线免费播放观看| 人妻丰满精品一区二区A片| 男女99免费视频| 色色热| 五月天婷婷爱| 99久久久国产精品免费蜜乳tv| 激情五月天啪啪视频| aa久久| 亚洲小电影在线观看黄999| 五月婷婷亚洲色图| 99操不停| 六月丁香AV| 婷婷.com| co超碰在线观看| 夜夜嗨一区二区三区直播内容 | 亚洲成人网站在线| 久久九九在线视频| 久热只有这里有精品| 九热视频精品| 久久国产AV| 97操在线资源| 9色在线视频精品观看| 天堂久久久久天堂网| 国产精产国品一二三在观看| 天天爽天天操| 色情五月婷婷| 公的粗大挺进了我的密道| 久久精品性爱| 开心激情站| www.狠狠| 国产毛片精品一区二区色欲黄A片| 开心婷婷五月| 99热这里只有精品9| 久热91| www.超碰在线| 五月婷婷色色| 欧美性色A片免费免费观看的| 丁香久久| 亚洲愉拍99热成人精品| 色色欧美色色色| 午夜AV网| 久久丁香社| 六月婷婷综合久久| 色狠狠色综合久久久绯色AⅤ影视 大香蕉五月天婷婷丁香91 | 色色五月天婷婷丁香| 伊人狠狠色婷婷综合丁香一区| 久re热视频| 五月天堂婷婷| 婷婷欧美激情综合| 丁香五月另类小说在线阅读| 精品九九视频在线观看| 婷婷五月天成人网站| 99爱这里只有精品免费视频| 久久婷婷五月综合色丁香| 天天肏夜夜肏| 国产乱妇无乱码大黄AA片| 极骚大香蕉伊人| 精品导航在线x不卡| 久99热在线观看| 久久综合99| 99热这里精| 99视频在线精品| 99精品在线| 五月日韩中文字幕| 六月婷婷青青青视频| 色色色色综合网| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 五月天色视频| 99综合自拍| 成功精品影院| 亚洲AV成人无码精品| 九热久| 婷婷久久久久久久| 久热网在线视频| 在线看片av| 香蕉人妻AV久久久久天天| 丁香天堂夜| 色之综合网| 婷婷五月天开心激情网| 99操逼| 五月丁香综合精品欧美| 丁香五月最新地址| 婷婷五月天,影院| 激情五月天综合网| 天天插天天插| 激情九色| 五月丁香花伦理电影| 五月天激情小说网| 全部老头和老太XXXXX| 婷婷丁香五月天大香蕉| 777色婷婷爱五月| 色五月在线观看| 色五月播五月| 丁香五月黄色| 狠狠狠人妻| 亚洲综合视频网| 蜜桃婷婷丁香综合久久开心亚洲| 成人电影在线免费试看| 日本性激情色播| 五月天.com| 综合婷| 婷婷成人综合五月| 丁香五月婷婷啪啪| 一区=区操屄高清大全av| 五月丁香久人妻中文| 丁香五月成人社区| 秋霞免费视频| 狠狠香蕉| 天天影视天天爽天天草| 日本精品人妻无码77777| www.婷婷五月| 五月婷婷 激情五月| 成人无码髙潮喷水A片| 日本三级中文字幕| 欧美日韩AAAA| 精品久久久中文字幕大豆网推荐理由| 丁香六月婷婷开心| AV操操操| 激情综合视频| 亚洲第一色色色色| 超碰av在线| 色色九九五月天 | 婷婷久久大香蕉| 日韩黄色电影| 人人看人人摸人人| 疯狂做受XXXX高潮A片动画| 欧美影院婷婷| 99九九热视频| 天堂网色婷婷| 亚洲aV写真天天综合网久久| 亚洲乱码日产精品BD| 综合丁香婷婷五月天| 婷婷午夜激情| 3p久久| 五月天婷婷7米| 玖玖伊人网| 五月精品免费XXX| AAA级久久久精品| 激情综合五月.....| 天天爽天天操| 思思99热这里只有精品| 日本系列_4页_777FP| 九九99在线视频| 99热免费在线| WWW.久久久久久久久久久久久| 九九热视频免费的| 五月丁香婷婷成人网| 色婷婷婷综合五月天| 六月婷婷五月丁香| 美女五月天婷婷| 日日日日日| 色婷婷婷婷成人网| 五月激情影院| 国产va在线视频| ..真实国产乱子伦对白在线_欧| 丁香 婷婷五月| 成人精品一区日本无码网| 日本www五月婷婷| 丁香网五月天| 九九热视频思思| 色婷婷小视频| 五月丁香六月激情在线| www.婷婷,com| 九九色图|