基于高通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的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构