第一章 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驱动相关推荐

  1. (14)[驱动开发]配置环境 VS2019 + WDK10 写 xp驱动

    文章目录 安装SDK和WDK 创建项目 编写程序 其他工具 参考: 参考博客 安装SDK和WDK 我这里用的是VS2019.环境其实是早就配好了,只不过写一下而已.后来VS2019不能被visual ...

  2. stm32驱动ssd1306配置_STM32F7片上硬件I2C驱动OLED(SSD1306),寄存器配置的。

    最近在学习STM32F7的片上I2C硬件,看到原子哥的OLED模块可以用I2C来驱动,于是就试了下.现在将试验结果与大家分享,目前还没有毕业经历过的项目比较少,只是为了抛砖引玉,有什么不合理的地方,请 ...

  3. 零基础学习MTK平台camera引脚配置

    目录 一.MTK平台的GPIO配置 1. MTK平台GPIO驱动程序提供了两个接口: 2.配置dws文件 3.配置dts文件 二.MTK平台camera模块的GPIO配置 一.MTK平台的GPIO配置 ...

  4. android7 编译配置摄像头,MTK平台新增摄像头指南 -- 已更新android 7.0路径的更改。...

    增加驱动及配置到Kernel 层: 增加驱动文件夹到如下目录: mediatek\custom\common\kernel\imgsensor\ mediatek\custom\mt6582[mt81 ...

  5. ouster-32激光雷达实测:ROS驱动编译使用与设备连接的网络配置

    ouster-32激光雷达实测:ROS驱动编译使用与设备连接的网络配置 ouster-32 ROS驱动 驱动安装 依赖 下载 编译 功能包功能 连接到实时传感器 重播录制的包 录制新的包文件 设备连接 ...

  6. MTK 驱动(67)---深入MTK平台bootloader启动之【 lk -amp;gt; kernel】分析笔记

    Pre-loader 运行在ISRAM,待完成 DRAM 的初始化后,再将lk载入DRAM中,最后通过特殊sys call手段实现跳转到lk的执行入口,正式进入lk初始化阶段. 一.lk执行入口: 位 ...

  7. android MTK平台驱动设置

    1. LCD 1.1怎样新建一个LCD驱动 LCD模组主要包括LCD显示屏和驱动IC.比如LF040DNYB16a模组的驱动IC型号为NT35510.要在MT577平台上新建这个lcd的驱动,步骤如下 ...

  8. MTK平台LED配置

    2016年12月16号 MTK平台调试GPIO LED灯 过去没有调试过MTK平台的GPIO,对这个平台的陌生导致了对于驱动的不解.之后经过对说明文档的阅读和思考.找到了以下方法. 首先,在MTK平台 ...

  9. mtk平台 mt_usb设备以及otg初始过程

    注册mt_usb驱动 kernel-3.18/drivers/misc/mediatek/usb20/mt6735/usb20.c static int __init usb20_init(void) ...

  10. MTK平台TP驱动框架解析

    一,TP驱动代码的组成 MTK平台TP驱动主要包括两处文件: 1,kernel-3.18\drivers\input\touchscreen\mediatek\mtk_tpd.c 平台设备驱动,主要为 ...

最新文章

  1. Python Logging模块实现运行的程序写入 日志
  2. 迁移学习之VGG16和VGG19
  3. python怎么安装pandas模块-windows下如何安装Python、pandas
  4. springboot 接收小程序图片以及参数_常见的SpringBoot面试题一
  5. Codeforces Round #528 (Div. 2) - D. Minimum Diameter Tree
  6. oracle体系三大文件,oracle 体系_第三章控制文件
  7. python 中的pickle库
  8. ad采样做按键开关_电池应用中的电流采样电阻设计
  9. maven自定义webapp目录
  10. Android service Binder用法
  11. 1688API接口,item_get_app - 获取1688app上原数据
  12. 云客Drupal源码分析之插件系统(中)
  13. 正态分布中的半正定矩阵(协方差矩阵)
  14. uchome登陆机制分析(三)
  15. 【软件需求工程与建模】13组组队项目选题介绍及项目计划安排
  16. 仿新浪微博布局学习——妙用TabHost
  17. 启用NVI的NAT的配置示例
  18. 《滕王阁序》古文鉴赏
  19. 传奇世界私服务器端制作,传奇世界单机版一键端带服务器附带安装教程。(可局域网)...
  20. Kotlin笔记27--使用Intent传递数据

热门文章

  1. 成功解决 nginx: [emerg] invalid number of arguments in “root“ directive in 问题
  2. 戴尔DELL OEM Win7SP1简体中文旗舰版原版光盘镜像64位
  3. 最大数[抽象排序之抽象规则]
  4. LC振荡电路的工作原理
  5. Caused by: java.lang.NoSuchMethodError: redis.clients.jedis.JedisPool.init(Lorg/apache/commons/poo
  6. java获取excel行数_Java如何利用POI读取Excel行数
  7. Android8.1 framework 微信付款码显示不出来
  8. 基于Docker部署OpenLDAP,同时集成第三方系统(GitLab、JIRA、Nexus、Harbor)
  9. java中explain什么意思_Java架构-面试前必须知道的MySQL命令【explain】
  10. Android外挂开发探索