当前位置: 首页 > news >正文

全志T507平台GPIO 控制(二)

五. 软件API控制

5.1 IO驱动解析

longan/device/config/chips/t507/configs/evb2/board.dts

//从左到右

1st: &gpio表示引用哪个gpio;

2nd: PE表示第E组gpio;

3rd:13表示gpio号.gpio_num = of_get_named_gpio_flags()        //解析gpio number

4rd: 1表示gpio_function=0即输出、1即输入;

5th:上下拉0xf即reserved默认不拉

6th:驱动能力0xf即level3;

7th:输出电平(只有配置output才生效)1:拉高、0:拉低

longan/kernel/linux-4.9/drivers/unis_pinctrl/unis_gpio.c

gpio:0x4即gpio number;

mul_sel:0x0即输入、0x1即输出、0x7即IO disable(default)

pull:0x0即disable不拉(default)、0x01即pull up、0x2即pull down

drv_level:0x0即level0、 0x1即level1(default)、0x2即level2、0x2即leve2、0x3即level3

data:0即拉低、1即拉高

5.2 AHD GPIO控制

PE13:控制输出5V; PE16:控制输出12V;

实现打开相机时拉高PE13, PE16、退出相机时拉低PE13、PE16;

diff --git a/longan/device/config/chips/t507/configs/evb2/board.dts b/longan/device/config/chips/t507/configs/evb2/board.dts
index 0bbfec30ea..7747885175 100644
--- a/longan/device/config/chips/t507/configs/evb2/board.dts
+++ b/longan/device/config/chips/t507/configs/evb2/board.dts
@@ -103,11 +103,12 @@gpio_num = <&pio PE 10 1 0xffffffff 0xffffffff 1>;gpio_function = <0>;            //0:output 1:input};
-		
+	/*	OUTPUT1 {gpio_num = <&pio PE 16 1 0xffffffff 0xffffffff 1>;gpio_function = <0>;            //0:output 1:input};
+	*/OUTPUT2 {gpio_num = <&pio PE 17 1 0xffffffff 0xffffffff 1>;
@@ -128,11 +129,12 @@gpio_num = <&pio PE 11 1 0xffffffff 0xffffffff 1>;gpio_function = <0>;            //0:output 1:input};
-		
+	/*	AHD_EN {gpio_num = <&pio PE 13 1 0xffffffff 0xffffffff 1>;gpio_function = <0>;            //0:output 1:input};
+	*/VCC_det {gpio_num = <&pio PE 20 1 0xffffffff 0xffffffff 1>;
@@ -932,8 +934,8 @@ vinc(x)_sensor_list: use sensor listsensor0_avdd_vol = <1200000>;sensor0_dvdd-supply = <&reg_bldo5>;sensor0_dvdd_vol = <1200000>;
-				//sensor0_power_en = <&pio PE 13 1 0 1 0>;
-				sensor0_power_en = <>;
+				sensor0_power_en = <&pio PE 13 1 0 1 0>;
+				sensor0_vahd_en = <&pio PE 16 1 0 1 0>;sensor0_reset = <&pio PI 15 1 0 1 0>;sensor0_pwdn = <>;sensor0_sm_vs = <>;
diff --git a/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/rn6854m_mipi.c b/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/rn6854m_mipi.c
index d3af0eda31..cada28b846 100644
--- a/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/rn6854m_mipi.c
+++ b/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/rn6854m_mipi.c
@@ -443,13 +443,19 @@ static int sensor_power(struct v4l2_subdev *sd, int on)cci_lock(sd);vin_gpio_set_status(sd, RESET, 1);vin_gpio_set_status(sd, PWDN, 1);
+		vin_gpio_set_status(sd, POWER_EN, 1);
+		vin_gpio_set_status(sd, VAHD_EN, 1);vin_set_mclk_freq(sd, MCLK);vin_set_mclk(sd, ON);usleep_range(1000, 1200);
+		vin_gpio_write(sd, POWER_EN, CSI_GPIO_HIGH);
+		usleep_range(1000, 1200);
+		vin_gpio_write(sd, VAHD_EN, CSI_GPIO_HIGH);vin_set_pmu_channel(sd, CAMERAVDD, ON);vin_set_pmu_channel(sd, IOVDD, ON);vin_set_pmu_channel(sd, DVDD, ON);vin_set_pmu_channel(sd, AVDD, ON);
+		usleep_range(1000, 1200);vin_gpio_write(sd, RESET, CSI_GPIO_LOW);vin_gpio_write(sd, PWDN, CSI_GPIO_HIGH);
@@ -468,6 +474,8 @@ static int sensor_power(struct v4l2_subdev *sd, int on)vin_gpio_set_status(sd, RESET, 1);vin_gpio_write(sd, RESET, CSI_GPIO_HIGH);vin_gpio_write(sd, RESET, CSI_GPIO_LOW);
+		vin_gpio_write(sd, POWER_EN, CSI_GPIO_LOW);
+		vin_gpio_write(sd, VAHD_EN, CSI_GPIO_LOW);vin_set_pmu_channel(sd, IOVDD, OFF);vin_set_pmu_channel(sd, DVDD, OFF);vin_set_pmu_channel(sd, AVDD, OFF);
diff --git a/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/config.c b/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/config.c
index 9074767715..45fe8f1d6c 100644
--- a/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/config.c
+++ b/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/config.c
@@ -487,6 +487,13 @@ static int get_power_en(struct device_node *np, const char *name,{return get_gpio_info(np, name, &sc->gpio[POWER_EN]);}
+
+static int get_vahd_en(struct device_node *np, const char *name,
+			struct sensor_list *sc)
+{
+	return get_gpio_info(np, name, &sc->gpio[VAHD_EN]);
+}
+static int get_reset(struct device_node *np, const char *name,struct sensor_list *sc){
@@ -594,6 +601,7 @@ static struct FetchFunArr fetch_camera[] = {{"dvdd", 1, get_dvdd,},{"dvdd_vol", 1, get_dvdd_vol,},{"power_en", 1, get_power_en,},
+	{"vahd_en", 1, get_vahd_en,},{"reset", 1, get_reset,},{"pwdn", 1, get_pwdn,},{"sm_hs", 1, get_sm_hs,},
@@ -650,6 +658,7 @@ int parse_modules_from_device_tree(struct vin_md *vind)[RESET] = {GPIOE(14), 1, 0, 1, 0,},[PWDN] = {GPIOE(15), 1, 0, 1, 0,},[POWER_EN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},
+			 [VAHD_EN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},[FLASH_EN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},[FLASH_MODE] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},[AF_PWDN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},
@@ -687,6 +696,7 @@ int parse_modules_from_device_tree(struct vin_md *vind)[RESET] = {GPIOE(14), 1, 0, 1, 0,},[PWDN] = {GPIOE(15), 1, 0, 1, 0,},[POWER_EN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},
+			 [VAHD_EN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},[FLASH_EN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},[FLASH_MODE] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},[AF_PWDN] = {GPIO_INDEX_INVALID, 0, 0, 0, 0,},
diff --git a/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/vin_supply.h b/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/vin_supply.h
index a75f34c9ed..2e9b071910 100644
--- a/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/vin_supply.h
+++ b/longan/kernel/linux-4.9/drivers/media/platform/sunxi-vin/utility/vin_supply.h
@@ -26,6 +26,7 @@ enum pmic_channel {enum gpio_type {POWER_EN = 0,
+	VAHD_EN,PWDN,RESET,SM_HS,

http://www.dtcms.com/a/305018.html

相关文章:

  • OpenCV图像算数运算可莉版
  • bash命令创建新conda环境
  • Kubernetes自动扩容方案
  • 力扣-104. 二叉树的最大深度
  • Linux系统的虚拟控制台介绍(桌面卡死的拯救方案)
  • 深入探索爬虫与自动化脚本:释放效率的利器
  • 手写简易Spring框架
  • 万字详解——OSI七层模型:网络通信的完整架构解析
  • mysql 之多表
  • others-Facebook落地页自建归因逻辑
  • 如何快速把Clickhouse数据同步到Mysql
  • 解决百度网盘双击没反应打不开的问题
  • Element Plus常见基础组件(二)
  • 16大工程项目管理系统对比:开源与付费版本
  • 科研小tip3|Windows中的CompressAi下载与使用
  • leaflet中绘制轨迹线的大量轨迹点,解决大量 marker 绑定 tooltip 同时显示导致的性能问题
  • 机器学习-十大算法之一线性回归算法
  • 通用算法与深度学习基础
  • 机器学习课程介绍
  • 机器学习线性回归:从基础到实践的入门指南
  • 机器学习——线性回归(LinearRegression)
  • 出现错误,Microsoft store初始化失败。请尝试刷新或稍后返回。
  • 深入理解异或运算(XOR)及应用
  • 【变更性别】
  • Webpack基本概念及核心流程
  • Docker初学者需要了解的几个知识点(一):传统虚拟机 VS容器
  • vscode开发微信小程序
  • Shader开发(四)计算机图形学中的颜色定义
  • pthread库和thread库
  • 42、鸿蒙HarmonyOS Next开发:应用上下文Context