android7.1 msm8953通过寄存器拉高gpio电平

说明

如果驱动中使用了gpio,通过echo方式拉高gpio是不行的,只能写寄存器的方式拉高电平

操作步骤

在fm驱动中写寄存器的方式修改gpio电平

From f36cb20e53ab9aa48d4b8d34888cc698183c6e27 Mon Sep 17 00:00:00 2001
From: zhoujinyan <zhoujy@ibumobile.com>
Date: Fri, 15 May 2020 22:26:55 +0800
Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3FM=E8=AE=BE=E5=A4=87=E8=8A=82?=
 =?UTF-8?q?=E7=82=B9=E6=B2=A1=E6=9C=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 kernel/msm-3.18/sound/i2c/rdafm_drv.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/kernel/msm-3.18/sound/i2c/rdafm_drv.c b/kernel/msm-3.18/sound/i2c/rdafm_drv.c
index c1e4171..9cd2a0f 100644
--- a/kernel/msm-3.18/sound/i2c/rdafm_drv.c
+++ b/kernel/msm-3.18/sound/i2c/rdafm_drv.c
@@ -15,6 +15,8 @@
 #include <linux/delay.h>
 #include <linux/slab.h>
 
+#include "../../drivers/pinctrl/qcom/pinctrl-msm.h"
+
 //#include <linux/fm.h>
 #define FM_RX_BAND            1
 //flag
@@ -1223,11 +1225,21 @@ static int fm_ops_release(struct inode *inode, struct file *filp)
     return err;
 }
 
+extern void __iomem *base_iomem(void);
 static int fm_init(struct i2c_client *client)
 {
     int err;
     struct fm *fm = NULL;
     int ret = -1;
+    
+    void __iomem *regs;
+    regs = base_iomem();
+    writel(0x201, regs + 0x8a000);//gpio138--->0x8a
+    writel(0x03, regs + 0x8a004);//gpio138--->0x8a
+    writel(0x201, regs + 0x00000);//gpio0--->0x8a
+    writel(0x03, regs + 0x00004);//gpio0--->0x8a
+    FM_ALERT("fm_init,powerup......\n");
+    msleep(50);
 
     FM_DEBUG("%s\n", __func__);
     if (!(fm = kzalloc(sizeof(struct fm), GFP_KERNEL)))
@@ -1348,7 +1360,16 @@ static int fm_powerup(struct fm *fm, struct fm_tune_parm *parm)
     int ret = -1;
 
     struct i2c_client *client = fm->i2c_client;
-
+    
+    void __iomem *regs;
+    regs = base_iomem();
+    writel(0x201, regs + 0x8a000);//gpio138--->0x8a
+    writel(0x03, regs + 0x8a004);//gpio138--->0x8a
+    writel(0x201, regs + 0x00000);//gpio0--->0x8a
+    writel(0x03, regs + 0x00004);//gpio0--->0x8a
+    FM_ALERT("fm_powerup......\n");
+    msleep(100);
+    
     if (fm->powerup)
     {
         parm->err = FM_BADSTATUS;
--
2.7.4

FM收音机驱动源码

注:如果是读gpio138的值是如下方法:

int value = readl(regs + 0x8a004);//gpio138

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值