基于高通MSM8953平台的android系统SGM41511充电IC驱动开发

news/2024/12/22 23:54:46/

4.1、修改msm8953-no-pmi.dts:

修改/kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8953-no-pmi.dts,增加:

+&tlmm {

+ sgm41511_int_active: sgm41511_int_active {

+ mux {

+ pins = "gpio42";

+ function = "gpio";

+ };

+

+ config {

+ pins = "gpio42";

+ drive-strength = <2>;

+ bias-pull-up;

+ };

+ };

+};

+

+&i2c_3 {

+ status = "ok";

+ sgm41511@6b {

+ compatible = "sgm41511";

+ reg = <0x6b>;

+ sgm,charge-enable-gpio = <&tlmm 44 0x00>;

+ sgm,interrupt-gpio = <&tlmm 42 0x00>;

+ pinctrl-names = "default";

+ pinctrl-0 = <&sgm41511_int_active>;

+ };

+};

4.2、修改sdm450-no-pmi.dts:

修改/kernel/msm-4.9/arch/arm64/boot/dts/qcom/sdm450-no-pmi.dts,增加:

+&tlmm {

+ sgm41511_int_active: sgm41511_int_active {

+ mux {

+ pins = "gpio42";

+ function = "gpio";

+ };

+

+ config {

+ pins = "gpio42";

+ drive-strength = <2>;

+ bias-pull-up;

+ };

+ };

+};

+

+&i2c_3 {

+ status = "ok";

+ qcom,clk-freq-out = <100000>;

+ sgm41511@6b {

+ compatible = "sgm41511";

+ reg = <0x6b>;

+ sgm,charge-enable-gpio = <&tlmm 44 0x00>;

+ sgm,interrupt-gpio = <&tlmm 42 0x00>;

+ pinctrl-names = "default";

+ pinctrl-0 = <&sgm41511_int_active>;

+ };

+};

4.3、修改Makefile:

修改/kernel/msm-4.9/drivers/power/supply/Makefile,增加:

+obj-y += sgm41511_charger.o

4.4、创建文件sgm41511_charger.c:

创建/kernel/msm-4.9/drivers/power/supply/sgm41511_charger.c

+#define pr_fmt(fmt) "%s: " fmt, __func__

+

+#include <linux/version.h>

+#include <linux/gpio.h>

+#include <linux/i2c.h>

+#include <linux/init.h>

+#include <linux/interrupt.h>

+#include <linux/module.h>

+#include <linux/power_supply.h>

+#include <linux/slab.h>

+#include <linux/kernel.h>

+#include <linux/delay.h>

+#include <linux/of_gpio.h>

+#include <linux/of.h>

+#include <linux/err.h>

+#include <linux/extcon.h>

+#include <linux/gpio.h>

+#include <linux/workqueue.h>

+

+#define SGM41511_REG_00               0x00

+#define SGM41511_REG_01               0x01

+#define SGM41511_REG_02               0x02

+#define SGM41511_REG_03               0x03

+#define SGM41511_REG_04               0x04

+#define SGM41511_REG_05               0x05

+#define SGM41511_REG_06               0x06

+#define SGM41511_REG_07               0x07

+#define SGM41511_REG_0B               0x0B

+

+#define SGM41511_WDT_MASK             0x30

+#define SGM41511_WDT_SHIFT            4

+#define SGM41511_WDT_DISABLE          0

+

+#define SGM41511_CHG_CONFIG_MASK      0x10

+#define SGM41511_CHG_CONFIG_SHIFT     4

+#define SGM41511_CHG_ENABLE           1

+#define SGM41511_CHG_DISABLE          0

+

+#define SGM41511_OTG_CONFIG_MASK      0x20

+#define SGM41511_OTG_CONFIG_SHIFT     5

+#define SGM41511_OTG_ENABLE           1

+#define SGM41511_OTG_DISABLE          0

+

+#define SGM41511_PN_MASK              0x78

+#define SGM41511_PN_SHIFT             3

+

+#define SGM41511_WDT_RESET_MASK       0x40

+#define SGM41511_WDT_RESET_SHIFT      6

+#define SGM41511_WDT_RESET            1

+

+#define SGM41511_FORCE_IINDPM_MASK    0x80

+#define SGM41511_FORCE_IINDPM_SHIFT   7

+#define SGM41511_FORCE_IINDPM_ENABLE  1

+#define SGM41511_FORCE_IINDPM_DISABLE 0

+

+#define SGM41511_VINDPM_MASK          0x0F

+#define SGM41511_VINDPM_SHIFT         0

+#define SGM41511_VINDPM_BASE          3900

+#define SGM41511_VINDPM_LSB           100

+

+#define SGM41511_IINLIM_MASK   0x1F

+#define SGM41511_IINLIM_SHIFT   0

+#define SGM41511_IINLIM_BASE          100

+#define SGM41511_IINLIM_LSB           100

+

+#define SGM41511_VREG_MASK            0xF1

+#define SGM41511_VREG_SHIFT           3

+#define SGM41511_VREG_BASE            3856

+#define SGM41511_VREG_LSB             32

+

+#define SGM41511_ICHG_MASK            0x3F

+#define SGM41511_ICHG_SHIFT           0

+#define SGM41511_ICHG_BASE            0

+#define SGM41511_ICHG_LSB             60

+

+#define SGM41511_ITERM_MASK           0x0F

+#define SGM41511_ITERM_SHIFT          0

+#define SGM41511_ITERM_BASE           60

+#define SGM41511_ITERM_LSB            60

+

+struct sgm41511 {

+ int part_no;

+ int usb_vbus_gpio;

+ int usb_vbus_irq;

+ int enable_gpio;

+ int charge_online;

+ bool otg_enabled;

+ bool charge_enabled;

+

+ struct device *dev;

+ struct i2c_client *client;

+ struct mutex i2c_rw_lock;

+ struct extcon_dev *extcon_dev;

+ struct notifier_block id_nb;

+ struct delayed_work otg_work;

+ struct delayed_work irq_work;

+ struct power_supply *usb_psy;

+};

+


http://www.ppmy.cn/news/1267763.html

相关文章

【Gradle】mac环境安装Gradle及配置

官网安装说明&#xff1a;Gradle | Installation 由于Gradle运行依赖jvm&#xff0c;所以事先需要安装jdk&#xff0c;并确认你的jdk版本和gradle版本要求的对应关系&#xff0c;这个官网上有说明&#xff0c;但是我试了一下不太准确&#xff0c;供参考&#xff0c;链接如下&a…

第三十四课 电商控制台商品订单详情的整合

增删改查四个接口统一的规范 有5个接口 Add增 Delete 删除 Update 更新 查 按id查某个商品 findOne 查询所有 findAll 实现类实现5个接口 反射技术&#xff0c;反射到java bean当中的每一个属性。 Class.forName() 获取属性方法:getDeclaredFields() 构建增 删 查…

linux查看程序是否安装

linux查看程序是否安装 在Linux中&#xff0c;你可以使用不同的命令来查看某个程序是否安装。以下是一些常见的方法&#xff1a; 1&#xff09;使用which命令&#xff1a;which命令可以用于查找可执行程序的路径。例如&#xff0c;要查看nginx是否安装&#xff0c;可以运行以下…

陵园殡仪馆网站建设的效果如何

陵园墓地的需求度众多周知非常高&#xff0c;无论墓地坑位咨询还是事项/环境展示、资料预览等都是常见事项&#xff0c;由于行业的特殊性&#xff0c;对正常客户来说&#xff0c;并不会知悉各个事项、价格、服务、流程等内容。 而对企业来说&#xff0c;也有获客、品牌扩张等需…

HTML---基础

文章目录 目录 文章目录 前言 一.HTML概述 二.HTML相关概念 HTML作用域 HTML标签 HTML转译字符 总结 前言 一.HTML概述 HTML&#xff08;超文本标记语言&#xff09;是一种用于创建网络页面的标记语言。它以标记的形式编写&#xff0c;该标记描述了文档的结构和内容。HTML…

C# WPF上位机开发(内嵌虚拟机的软件开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习过halcon的同学都知道&#xff0c;它不仅有很多的图像算子可以使用&#xff0c;而且调试很方便。每一步骤的调试结果&#xff0c;都可以看到对…

22集团再度荣获“CNNIC年度最佳安全保障、五星级域名注册服务机构、数字化行动优秀支持单位”三项奖

2023年12月12日&#xff0c;由中国互联网络信息中心主办&#xff0c;中国科学院计算机网络信息中心、中国工业互联网研究院、中国互联网协会主办的2023&#xff08;第四届&#xff09;中国互联网基础资源在北京新青海喜来登酒店顺利召开&#xff0c;大会主题为“深耕网络基础 共…

深入了解—C++11特性

目录 一、 C11简介 二、初始化列表 2.1 C98中{}的初始化问题 2.2 内置类型的列表初始化 2.3 自定义类型的列表初始化 2.3.1. 标准库支持单个对象的列表初始化 2.3.2. 多个对象的列表初始化 三、变量类型推导 3.1 为什么需要类型推导 3.2 decltype类型推导 3.2.1. 推…