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

2023-12-13 16:04

本文主要是介绍基于高通MSM8953平台的android系统SGM41511充电IC驱动开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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;

+};

+

这篇关于基于高通MSM8953平台的android系统SGM41511充电IC驱动开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489066

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块