mtk平台typec模擬耳機補丁

2021-10-13 15:35:36 字數 3484 閱讀 7998

typec模擬耳機在某些高階手機上已經很常見了,但拿到的**預設不支援typec模擬耳機(在某些平台上預設就是typec模擬耳機),那只能自己修改了。

這裡用的版本為android11,kernel4.19。

由於預設的耳機檢測驅動mt6357-accdet.c已換成ko的形式(非ko方式可忽略該修改),導致無法呼叫該驅動裡的函式,先把該驅動編譯進核心。

defconfig加入config_snd_soc_mt6357_accdet=y

boardconfig.mk

@@ -53,8 +53,7 @@ board_flash_block_size := 4096

kernel_out ?= $(out_dir)/target/project/$(target_device)/obj/kernel_obj

# in-tree kernel modules installed to vendor

# for common

-board_vendor_kernel_modules += $(kernel_out)/sound/soc/codecs/mt6357-accdet.ko \

-                   $(kernel_out)/kernel/trace/trace_mmstat.ko \

+board_vendor_kernel_modules += $(kernel_out)/kernel/trace/trace_mmstat.ko \

然後將cc腳檢測到的耳機訊號發出來 

--- a/kernel-4.19/drivers/misc/mediatek/typec/tcpc/rt_pd_manager.c

+++ b/kernel-4.19/drivers/misc/mediatek/typec/tcpc/rt_pd_manager.c

@@ -52,7 +52,7 @@ void __attribute__((weak)) usb_dpdm_pulldown(bool enable) -

+extern void typec_headphone_irq_handler(int state);

static int pd_tcp_notifier_call(struct notifier_block *nb,

unsigned long event, void *data)

else if (noti->typec_state.old_state == typec_attached_audio

&& noti->typec_state.new_state == typec_unattached)

break;

在mt6357-accdet.c加入如下修改 

+void typec_headphone_irq_handler(int state)

+ else

+ queue_work(accdet->eint_workqueue, &accdet->eint_work);

+}+export_symbol(typec_headphone_irq_handler);

但檢測到都是3段耳機,理論上正插和反插有一次是對的,不需要進行mic和gnd的切換。

這時測量micbias電壓(有將micbias關閉的地方遮蔽),妥妥的0v。

跟mtk溝通,說要遮蔽住這裡

ret = of_property_read_u32(node,

"headset-eint-num", &tmp);

if (ret)

tmp = 0;

if (tmp == 0)

accdet->data->caps |= accdet_pmic_eint0;

else if (tmp == 1)

accdet->data->caps |= accdet_pmic_eint1;

else if (tmp == 2)

accdet->data->caps |= accdet_pmic_bi_eint;

同時加入如下修改

遮蔽後,正插能識別到4段耳機,反插識別為3段耳機。猜測pmic_eint的作用是accdet中斷來了,才能開啟micbias,但由於觸發不了accdet中斷,導致micbias無法開啟。

如果像小公尺一樣採用自動切換mic和gnd的ic fsa4480(這裡的工作已經是完成了。

但這裡採用切換ic是需要手工識別的,還需判斷mic引腳的電壓,如果電壓偏低,需要進行切換。

用dct工具配置切換ic的引腳為普通gpio模式,同時確認該引腳沒有被占用

+&pmic_accdet;

+&pio ;

+ };

+ mic_state2:mic_state2;

+ };

+};

在probe中加入如下函式mic_gpio_get(pdev);

這裡的600對應0.6v,實際該值改為0.4v,應該也是可以的。

MTK平台搭建

mtk平台搭建 最近公司的專案差不多都做完了,趁新專案還沒來的時候學學東西。從朋友那裡搞來一套 mtk的源 學學 mtk的開發。選擇 mtk是因為,它跟我的工作所用的平台相似,學起來方便一點,另外一點是它可以在 pc上跑,不用自己去買硬體,成本不高。呵呵,從朋友那裡搞來的源 不用硬體,成本就只有時間...

MTK平台入門

mtk平台入門 通過 new,update,remake,clean all,clean modules,codegen.來動作生成bin file 二進字檔案 類如 假設專案是gsm專案,專案名稱為m720,則有這些命令 make custom m720 gsm resgen 修改了資源時用這個命...

MTK 平台搭建

首先要安裝編譯器ads v1.2,安裝目錄為c program files arm,版本應該是842以上版,如果版本不夠,需要將公升級的軟體包解壓,拷貝到c program files arm adsv1 2的目錄下,注意壓縮的7z工具要安裝442版本。然後需要安裝perl的編譯器,推薦安裝acti...