RK3568平台(音频篇)耳机插拔检测

news2024/11/16 7:30:08

一.硬件原理图

耳机输出硬件原理图:

耳机实物图:

耳机插入硬件原理:

耳机插入后HP_DET_L会连接耳机的GND,从而实现HP_DET_L叫从高到低的状态。

耳机插入软件原理:

软件需要在驱动里面定时的读取gpio的状态,实现实时检测耳机插入拔出的热插拔功能。

二.设备树DTS修改

目前需求在功放驱动里面添加耳机的插入检测, 功放为ad82584.

插入检测HP_DET_L(GPIO1_D2).

设备树DTS配置:

ad82584f_stereo: ad82584f-stereo@31 {
	compatible = "ad82584f";
	#sound-dai-cells = <0>;
	reg = <0x31>;
	spk-con-gpio = <&gpio0 RK_PD5 GPIO_ACTIVE_HIGH>;
  + earphone-det-gpio = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>;
	set_state_enable = <1>;
	pinctrl-names = "default";
	pinctrl-0 = <&earphone_det>;
	status = "okay";
};

三.代码修改

在probe函数里面读取gpio:

ad82584f_probe:

data->earphone_det_gpio = devm_gpiod_get_optional(&client->dev,
						     "earphone-det",
						     GPIOD_IN);
if (IS_ERR(data->earphone_det_gpio)) {
	dev_warn(dev, "get earphone_det_gpio failed\n");
	return PTR_ERR(data->earphone_det_gpio);
}

在ad82584f_codec_probe添加定时检测gpio状态函数:

检测函数为:ad82584f_earphone_check_work。

INIT_DELAYED_WORK(&ad82584f->earphone_check_work, ad82584f_earphone_check_work);
schedule_delayed_work(&ad82584f->earphone_check_work,msecs_to_jiffies(5000));

static void ad82584f_earphone_check_work(struct work_struct *work)
{
	struct ad82584f_data *ad82584f = container_of(work, struct ad82584f_data,
			earphone_check_work.work);
	if (ad82584f->earphone_det_gpio) {
		bool curEarphone_plug_in = (gpiod_get_value(ad82584f->earphone_det_gpio)  > 0) ? false:true; //检测耳机插入状态
		if(curEarphone_plug_in != ad82584f->preEarphone_plug_in){
			if(curEarphone_plug_in){
				dev_info(ad82584f->dev, "%s: earphone plug in\n", __func__);
				if(of_property_read_bool(ad82584f->dev->of_node, "set_state_enable")){  //使能耳机功能
					extcon_set_state_sync(ad82584f->extcon, EXTCON_JACK_HEADPHONE, true);  
					extcon_set_state_sync(ad82584f->extcon, EXTCON_JACK_MICROPHONE, true);
				}
				ad82584f_enable_spk(ad82584f,0);
				}else{
				dev_info(ad82584f->dev, "%s: earphone plug out\n", __func__);
				if(of_property_read_bool(ad82584f->dev->of_node, "set_state_enable")){
					extcon_set_state_sync(ad82584f->extcon, EXTCON_JACK_HEADPHONE, false);
					extcon_set_state_sync(ad82584f->extcon, EXTCON_JACK_MICROPHONE, false);
				}
				ad82584f_enable_spk(ad82584f,1);
			    //gpiod_set_value(ad82584f->spk_ctl_gpio, 0);
			}
			ad82584f->preEarphone_plug_in = curEarphone_plug_in;
		}
	}
	schedule_delayed_work(&ad82584f->earphone_check_work,
			      msecs_to_jiffies(1000));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024期权交易佣金手续费最低是多少?期权交易有哪些成本?

显性成本 期权交易的显性成本包含期权交易的佣金和交易所费用&#xff0c;分别支付给券商和交易所&#xff0c;统一由券商代收。 佣金 期权佣金是期权交易时支付给券商的费用&#xff0c;佣金通常以交易金额的一定比例计算&#xff0c;可以是固定费用&#xff0c;也可以是滑…

尽管与 ChatGPT 达成了合作,但据报道苹果仍在与 Meta 进行人工智能谈判

苹果最近宣布计划将人工智能纳入 iOS 18 以及新的 iPhone 16 和 iPhone 16 Pro 机型中&#xff0c;并开始与潜在的生成式人工智能合作伙伴 Meta 进行讨论。 据《华尔街日报》报道&#xff0c;苹果已与 Meta 就将其跨平台使用的生成式人工智能模型整合到 Apple Intelligence 中…

avi格式视频提示无法播放错误,怎么解决?

AVI视频属于一种无损质量的视频格式&#xff0c;一般来说是兼容Windows系统播放的。播不了可能是由以下原因导致的&#xff1a; 1.文件损坏&#xff1a;可能是原文件在转码压缩的过程中操作不当&#xff0c;导致数据丢失、文件损坏。 2.播放器格式不支持&#xff1a;可能系统的…

计算机图形学入门16:阴影映射

1.前言 前面几篇关于光栅化的文章中介绍了如何计算物体表面的光照&#xff0c;但是着色并不会进行阴影的计算&#xff0c;阴影需要单独进行处理&#xff0c;目前最常用的阴影计算技术之一就是Shadow Mapping技术&#xff0c;也就是俗称的阴影映射技术。 2.阴影映射 Shadow Map…

使用Tauri+vite+koa2+mysql开发了一款待办效率应用

&#x1f389;使用Taurivitekoa2mysql开发了一款待办效率应用 &#x1f4dd;项目概述 这是一个基于taurivite的应用&#xff0c;它采用了一些最新的前端技术&#xff0c;包括 Tauri、Vue3、Vite5、koa2 和 mysql。它提供了丰富的效率管理工具。 应用地址&#xff1a;https:/…

excel字符串列的文本合并

excel表有两列&#xff0c;第一列是“姓名”&#xff0c;第二列是“诊断”&#xff0c;有高血压、糖尿病等。我想出一个统计表&#xff0c;统计“姓名”&#xff0c;把某一个姓名的诊断不重复的用、拼接起来&#xff0c;比如“张三”的诊断为“点高血压”、糖尿病。我们可以用T…

轻量级SEO分析工具网站源码去授权

轻量级SEO分析工具网站全新去授权发布&#xff0c;这款工具将助您轻松生成直观、简洁、易于理解的SEO报告&#xff0c;为您的网页排名和表现提供有力支持。 测试环境&#xff1a; Apache PHP 8.0 MySQL 5.7 更新日志 v12.0 – 2024年2月20日 新增功能&#xff1a; 正常运行…

LabVIEW在核磁共振实验室的应用

​核磁共振&#xff08;NMR&#xff09;实验室在进行复杂的核磁共振实验时&#xff0c;需要一个高效、灵活且易于操作的实验控制和数据采集系统。传统的NMR实验系统往往使用专门的硬件和软件&#xff0c;存在系统封闭、扩展性差、维护成本高等问题。为了解决这些问题&#xff0…

【JavaEE】Spring Boot 统一功能处理

一.拦截器使用. 1.什么是拦截器? 拦截器是Spring框架提供的核心功能之⼀, 主要用来拦截用户的请求, 在指定方法前后, 根据业务需要执行预先设定的代码 也就是说, 允许开发人员提前预定义一些逻辑, 在用户的请求响应前后执行. 也可以在用户请求前阻止其执行. 在拦截器当中&am…

Flutter 像素编辑器#05 | 缩放与平移

theme: cyanosis 本系列&#xff0c;将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】。在前三篇中&#xff0c;我们已经完成了一个简易的图像编辑器&#xff0c;并且简单引入了图层的概念&#xff0c;支持切换图层显示不同的像素画面。 《Flutt…

Web服务器与Apache(LAMP架构+搭建论坛)

一、Web基础 1.HTML概述 HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语音,用于创建和组织Web页面的结构和内容&#xff0c;HTML是构建Web页面的基础&#xff0c;定义了页面的结构和内容&#xff0c;通过标记和元素来实现 2.HTML文件结构 <html>…

抖音电商618国货数据:洗护、服饰等受欢迎,活力28环比增长40%

发布 | 大力财经 6月21日&#xff0c;抖音电商发布“抖音商城618好物节”消费数据报告&#xff08;下称“报告”&#xff09;&#xff0c;披露618期间平台全域经营情况及大众消费趋势&#xff0c;其中国货表现亮眼。 本次大促恰逢传统节日端午节&#xff0c;报告显示&#xf…

实验08 软件设计模式及应用

目录 实验目的实验内容一、能播放各种声音的软件产品Sound.javaDog.javaViolin.javaSimulator.javaApplication.java运行结果 二、简单工厂模式--女娲造人。Human.javaWhiteHuman.javaYellowHuman.javaBlackHuman.javaHumanFactory.javaNvWa.java运行结果 三、工厂方法模式--女…

React 扩展

文章目录 PureComponent1. 使用 React.Component&#xff0c;不会进行浅比较2. 使用 shouldComponentUpdate 生命周期钩子&#xff0c;手动比较3. 使用 React.PureComponent&#xff0c;自动进行浅比较 Render Props1. 使用 Children props&#xff08;通过组件标签体传入结构&…

nginx负载均衡案例,缓存知识----补充

负载均衡案例 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near great all on wordpress.* to wp172.16.1.% indentified by 1 at line 1 MariaDB [(none)]>…

iptables(5)常用扩展模块iprange、string、time、connlimit、limit

简介 之前我们已经介绍过扩展模块的简单使用,比如使用-m tcp/udp ,-m multiport参数通过--dports,--sports可以设置连续和非连续的端口范围。那么我们如何匹配其他的一些参数呢,比如源地址范围,目的地址范围,时间范围等,这就是我们这篇文章介绍的内容。 iprange扩展模块…

Jmeter插件管理器,websocket协议,Jmeter连接数据库,测试报告的查看

目录 1、Jmeter插件管理器 1、Jmeter插件管理器用处&#xff1a;Jmeter发展并产生大量优秀的插件&#xff0c;比如取样器、性能监控的插件工具等。但要安装这些优秀的插件&#xff0c;需要先安装插件管理器。 2、插件的下载&#xff0c;从Availabale Plugins中选择&#xff…

服务器(Linux系统的使用)——自学习梳理

root表示用户名 后是机器的名字 ~表示文件夹&#xff0c;刚上来是默认的用户目录 ls -a 可以显示出隐藏的文件 蓝色的表示文件夹 白色的是文件 ll -a 查看详细信息 total表示所占磁盘总大小 一般以KB为单位 d开头表示文件夹 -代表文件 后面得三组rwx分别对应管理员用户-组…

VSCode创建并运行html页面(使用Live Server插件)

目录 一、参考博客二、安装Live Server插件三、新建html页面3.1 选择文件夹3.2 新建html文件3.3 快速生成html骨架 四、运行html页面 一、参考博客 https://blog.csdn.net/zhuiqiuzhuoyue583/article/details/126610162 https://blog.csdn.net/m0_74014525/article/details/13…

设计模式5-策略模式(Strategy)

设计模式5-策略模式 简介目的定义结构策略模式的结构要点 举例说明1. 策略接口2. 具体策略类3. 上下文类4. 客户端代码 策略模式的反例没有使用策略模式的代码 对比分析 简介 策略模式也是属于组件协作模式一种。现代软件专业分工之后的第一个结果是框架语音应用程序的划分。组…