+#include <linux/switch.h>
+struct switch_dev ih_headset_switch;
+static ssize_t h2w_print_name(struct switch_dev *sdev, char *buf)
+{
+ return sprintf(buf, "Headset\n");
+}
+ ih_headset_switch.name = "h2w";
+ ih_headset_switch.print_name = h2w_print_name; //zougui
+ switch_dev_register(&ih_headset_switch);
switch_set_state(&ih_headset_switch,hp_irq_flag);
2: 左右声道录音:
先是根据codec kernel 配置好通道, 从RLCLK ADCDATA 确认是否从codec 芯片输出来的是双通道录音.LRCLK的一小半周期为左声道,另一半为右声道.
3:调节音量功率大小
例子ES8316 的驱动, 根据驱动的里面:
/* DAC Digital controls */
SOC_DOUBLE_R_TLV("DAC Playback Volume", ES8316_DAC_VOLL_REG33, ES8316_DAC_VOLR_REG34, 0,0xC0, 1,dac_vol_tlv),
//DAC 数据转模拟.可以看出是喇叭功率调节, 后面两个左右声道的寄存器, 0xC0便是该寄存器的最大值
static constDECLARE_TLV_DB_SCALE(dac_vol_tlv, -9600, 50, 1); //后面的9600:表示最大的功率,50表示每次增加的值,9600/50=196. 也就是0xC0, 表示对应寄存器的读写.
使用adb :amix
3 MIXER 0 0 0 2 rw R INT32 DAC Playback Volume: 96 96 { 0-96 }
adb 手工调节喇叭输出功率: amix 0 80
对应驱动程序会调用到codec->write 函数.
所以后面可以直接在系统初始化的时候调用codec->write 给对应寄存器写入合适的值即可
对应ES8316 相对应的寄存器:
添加USB 声卡: