MTK平台设备和驱动的配置及使用--pmic驱动 pinctrl驱动
第一章 GPIO的设备配置和驱动使用
1、设备树配置
设置节点
robot_stepmotor {compatible = "robot,stepmotor";pinctrl-names = "step_dir_output0","step_dir_output1",pinctrl-0 = <&step_dir_right_output0>;pinctrl-1 = <&step_dir_left_output1>;
};
&pio {step_dir_right_output0: dir_output0 {pins_cmd_dat {pinmux = <PINMUX_GPIO33__FUNC_GPIO33>;slew-rate = <1>;output-low;};};step_dir_left_output1: dir_output1 {pins_cmd_dat {pinmux = <PINMUX_GPIO33__FUNC_GPIO33>;slew-rate = <1>;output-high;};};
};
2、驱动中使用设备树的信息
int my_gpio_set(struct device *dev)
{struct pinctrl* step_pinctr;struct pinctrl_state *dir_output0, *dir_output1;step_pinctr = devm_pinctrl_get(dev);//通过节点找到所有gpio能够设置的状态dir_output0 = pinctrl_lookup_state(step_pinctr, "step_dir_output0");//查找节点中gpio名称“”step_dir_output0“”对应的状态if (IS_ERR(step_dir_output0)) {printk("err:step_dir_output0\n");return -1;}dir_output1 = pinctrl_lookup_state(step_pinctr, "step_dir_output1");if (IS_ERR(step_dir_output1)) {printk("err:step_dir_output1\n");return -1;}ret = pinctrl_select_state(step_pinctr, dir_output0);//将引脚设置成指定状态if(ret < 0){printk("error:%s\n",RIGHT_DIR);}return 0;
}
第二章 pmic的电压输出配置
1、设备树dts的配置
项目的dts配置($(project).dtsi):
robot_stepmotor: robot_stepmotor_ctrl {compatible = "robot,stepmotor";vqmmc-supply = <&mt_pmic_vmc_ldo_reg>;//vmmc-supply = <&mt_pmic_vmch_ldo_reg>;};
pmic中的配置:
&main_pmic {ldo_regulators {mt_pmic_vmc_ldo_reg: ldo_vmc {regulator-name = "vmc";regulator-min-microvolt = <1800000>;regulator-max-microvolt = <3300000>;regulator-enable-ramp-delay = <44>;};mt_pmic_vmch_ldo_reg: ldo_vmch {regulator-name = "vmch";regulator-min-microvolt = <2900000>;regulator-max-microvolt = <3300000>;regulator-enable-ramp-delay = <44>;};};};
主控芯片$(platform)中的声明:
main_pmic: mt-pmic {compatible = "mediatek,mt_pmic";interrupt-controller;};
2、驱动获取dts并设置输出
struct regulator *step_reg=NULL;
struct regulator *pwr_reg=NULL;
int ret;step_reg = regulator_get(&pdev->dev,"vqmmc");//获取dts设备节点if(!step_reg){printk("regulator_get failed!\n");}pwr_reg = regulator_get(&pdev->dev,"vmmc");//获取dts设备节点if(!pwr_reg){printk("regulator_get failed!\n");}ret = regulator_set_voltage(step_reg,3300000,3300000);//设置输出电压if (ret<0) {printk("regulator_set_voltage(ret = %d) failed:3000000!\n", ret);}ret = regulator_set_voltage(pwr_reg,3300000,3300000);//设置输出电压if (ret<0) {printk("regulator_set_voltage(ret = %d) failed:3000000!\n", ret);}ret = regulator_enable(step_reg);//使能PMIC输出电压if(ret < 0){printk("-err:regulator_enable-----ret = %d-----\n",ret);}ret = regulator_disable(step_reg);//关闭PMIC的电压输出if(ret < 0){printk("-err:regulator_disable----ret = %d-----\n",ret);return -1;}
第三章 获取设备树属性
设备树节点:
stepmotor_ic_err: ic_inter {compatible = "robot,stepmotor_ic";mytest = "stepmotor ic err";};
驱动获取dts信息:
const struct of_device_id mt_dts_of_match[] = {{ .compatible = "robot,stepmotor_ic", },};const char * my_string;struct device_node * my_node = NULL;//参数一:填NULL//参数二:const struct of_device_id和设备树匹配compatible//返回值:struct device_node 设备节点my_node= of_find_matching_node(Stepmotor_node, &mt_dts_of_match);ret = of_property_read_string(Stepmotor_node, "mytest", &my_node);if(ret<0){printk("----node = Stepmotor_node-----stepmotor of_property_read_string failed--------\n");}printk("----mytest = %s------\n",my_node);
第四章 获取设备树的中断
1、设备树的配置
stepmotor_ic_err: ic_inter {compatible = "robot,stepmotor_ic";mytest = "stepmotor ic err";};
&stepmotor_ic_err {interrupt-parent = <&pio>;interrupts = <93 IRQ_TYPE_LEVEL_LOW 93 0>;status = "okay";
};
2、驱动获取设备树的配置并设置中断方式
const struct of_device_id mt_dts_of_match[] = {{ .compatible = "robot,stepmotor_ic", },};struct device_node * my_node = NULL;static unsigned int irq_no;//参数一:填NULL//参数二:const struct of_device_id和设备树匹配compatible//返回值:struct device_node 设备节点my_node= of_find_matching_node(Stepmotor_node, &mt_dts_of_match);//获取中断号irq_no= irq_of_parse_and_map(Stepmotor_node, 0);//获取中断号(返回值是中断号)if (!irq_no) {printk("--------\n");ret = -ENODEV;}
第五章 代码驱动例程
参考链接:https://blog.csdn.net/rj_ys/article/details/112827938
MTK平台设备和驱动的配置及使用--pmic驱动 pinctrl驱动相关推荐
- (14)[驱动开发]配置环境 VS2019 + WDK10 写 xp驱动
文章目录 安装SDK和WDK 创建项目 编写程序 其他工具 参考: 参考博客 安装SDK和WDK 我这里用的是VS2019.环境其实是早就配好了,只不过写一下而已.后来VS2019不能被visual ...
- stm32驱动ssd1306配置_STM32F7片上硬件I2C驱动OLED(SSD1306),寄存器配置的。
最近在学习STM32F7的片上I2C硬件,看到原子哥的OLED模块可以用I2C来驱动,于是就试了下.现在将试验结果与大家分享,目前还没有毕业经历过的项目比较少,只是为了抛砖引玉,有什么不合理的地方,请 ...
- 零基础学习MTK平台camera引脚配置
目录 一.MTK平台的GPIO配置 1. MTK平台GPIO驱动程序提供了两个接口: 2.配置dws文件 3.配置dts文件 二.MTK平台camera模块的GPIO配置 一.MTK平台的GPIO配置 ...
- android7 编译配置摄像头,MTK平台新增摄像头指南 -- 已更新android 7.0路径的更改。...
增加驱动及配置到Kernel 层: 增加驱动文件夹到如下目录: mediatek\custom\common\kernel\imgsensor\ mediatek\custom\mt6582[mt81 ...
- ouster-32激光雷达实测:ROS驱动编译使用与设备连接的网络配置
ouster-32激光雷达实测:ROS驱动编译使用与设备连接的网络配置 ouster-32 ROS驱动 驱动安装 依赖 下载 编译 功能包功能 连接到实时传感器 重播录制的包 录制新的包文件 设备连接 ...
- MTK 驱动(67)---深入MTK平台bootloader启动之【 lk -amp;gt; kernel】分析笔记
Pre-loader 运行在ISRAM,待完成 DRAM 的初始化后,再将lk载入DRAM中,最后通过特殊sys call手段实现跳转到lk的执行入口,正式进入lk初始化阶段. 一.lk执行入口: 位 ...
- android MTK平台驱动设置
1. LCD 1.1怎样新建一个LCD驱动 LCD模组主要包括LCD显示屏和驱动IC.比如LF040DNYB16a模组的驱动IC型号为NT35510.要在MT577平台上新建这个lcd的驱动,步骤如下 ...
- MTK平台LED配置
2016年12月16号 MTK平台调试GPIO LED灯 过去没有调试过MTK平台的GPIO,对这个平台的陌生导致了对于驱动的不解.之后经过对说明文档的阅读和思考.找到了以下方法. 首先,在MTK平台 ...
- mtk平台 mt_usb设备以及otg初始过程
注册mt_usb驱动 kernel-3.18/drivers/misc/mediatek/usb20/mt6735/usb20.c static int __init usb20_init(void) ...
- MTK平台TP驱动框架解析
一,TP驱动代码的组成 MTK平台TP驱动主要包括两处文件: 1,kernel-3.18\drivers\input\touchscreen\mediatek\mtk_tpd.c 平台设备驱动,主要为 ...
最新文章
- Python Logging模块实现运行的程序写入 日志
- 迁移学习之VGG16和VGG19
- python怎么安装pandas模块-windows下如何安装Python、pandas
- springboot 接收小程序图片以及参数_常见的SpringBoot面试题一
- Codeforces Round #528 (Div. 2) - D. Minimum Diameter Tree
- oracle体系三大文件,oracle 体系_第三章控制文件
- python 中的pickle库
- ad采样做按键开关_电池应用中的电流采样电阻设计
- maven自定义webapp目录
- Android service Binder用法
- 1688API接口,item_get_app - 获取1688app上原数据
- 云客Drupal源码分析之插件系统(中)
- 正态分布中的半正定矩阵(协方差矩阵)
- uchome登陆机制分析(三)
- 【软件需求工程与建模】13组组队项目选题介绍及项目计划安排
- 仿新浪微博布局学习——妙用TabHost
- 启用NVI的NAT的配置示例
- 《滕王阁序》古文鉴赏
- 传奇世界私服务器端制作,传奇世界单机版一键端带服务器附带安装教程。(可局域网)...
- Kotlin笔记27--使用Intent传递数据
热门文章
- 成功解决 nginx: [emerg] invalid number of arguments in “root“ directive in 问题
- 戴尔DELL OEM Win7SP1简体中文旗舰版原版光盘镜像64位
- 最大数[抽象排序之抽象规则]
- LC振荡电路的工作原理
- Caused by: java.lang.NoSuchMethodError: redis.clients.jedis.JedisPool.init(Lorg/apache/commons/poo
- java获取excel行数_Java如何利用POI读取Excel行数
- Android8.1 framework 微信付款码显示不出来
- 基于Docker部署OpenLDAP,同时集成第三方系统(GitLab、JIRA、Nexus、Harbor)
- java中explain什么意思_Java架构-面试前必须知道的MySQL命令【explain】
- Android外挂开发探索