RK3288 控制usb摄像头补光GPIO
正常可以通过添加dts配置,再从设备树中读取gpio号,在这里为了简单,直接使用GPIO号,先通过终端测试gpio,
系统自带GPIO控制驱动:
内核已经自带了通用GPIO驱动,可以直接在用户空间操作.
路径: /sys/class/gpio
root@rk3288:/sys/class/gpio # ls
export
gpiochip0
gpiochip120
gpiochip152
gpiochip184
gpiochip216
gpiochip24
gpiochip248
gpiochip280
gpiochip56
gpiochip88
unexport
比如我要操作GPIO8_A6作为高电平输出有效, 那么有以下问题:
1. 对应的gpio number是多少呢?
2. 如何设置成输出
3. 如何输出高电平
问题1:
可以通过/sys/kernel/debug/gpio查询信息:
root@rk3288:/sys/kernel/debug # cat gpio
//snip
GPIOs 184-215, platform/ff770000.pinctrl, gpio6:
gpio-193 (? ) in hi
gpio-194 (? ) in hi
GPIOs 216-247, platform/ff770000.pinctrl, gpio7:
gpio-218 (enable ) out hi
gpio-219 (lcd_en ) in hi
gpio-220 (lcd_cs ) in hi
gpio-221 (gslX680 wake pin ) out hi
gpio-222 (gslX680 irq pin ) out lo
gpio-223 (headset_gpio ) in hi
gpio-233 (? ) in hi
gpio-234 (? ) in hi
GPIOs 248-279, platform/ff770000.pinctrl, gpio8:
GPIOs 280-311, platform/ff770000.pinctrl, gpio15:
可以看到gpio8是以nubmer为248开始, 那么GPIO8_A6就是 248 + 6 = 254
接下来就可以导出gpio了
root@rk3288:/sys/class/gpio # echo 254 > export
root@rk3288:/sys/class/gpio # ls
export
gpio254
......
问题2
root@rk3288:/sys/class/gpio/gpio254 # echo out > direction
root@rk3288:/sys/class/gpio/gpio254 # cat direction
out
问题3:
root@rk3288:/sys/class/gpio/gpio254 # echo 1 > value
root@rk3288:/sys/class/gpio/gpio254 # cat value
1
打开后置摄像头时打开led补光
初始化led补光GPIO口,在注册后置usb摄像头时申请gpio
/work/rk3288/firefly-rk3288_android5.1_git_20180126/kernel/drivers/media/usb/uvc/uvc_driver.c
/* carroll add led gpio start */
#define FILL_LIGHT_GPIO 233
/* carroll add led gpio end */ static int uvc_register_video(struct uvc_device *dev,
struct uvc_streaming *stream)
{
/* carroll add led gpio start */
static bool led_init_flag = true;
/* carroll add led gpio end */ ................ stream->vdev = vdev;
video_set_drvdata(vdev, stream); /* carroll add usb deice num start */
vdev->portnum = dev->udev->portnum;
/* carroll add usb deice num end */ ................ /* carroll add led gpio start */
if(vdev->portnum == && led_init_flag == true)
{
printk("carroll led-camera-2 gpio init\n");
ret = gpio_request(FILL_LIGHT_GPIO, "led-camera-2");
if (ret != ) {
printk("%s request led-camera_2_gpio error", __func__);
return ret;
}
gpio_direction_output(FILL_LIGHT_GPIO, );
led_init_flag = false;
}
/* carroll add led gpio end */
打开后置usb摄像头和关闭摄像头时修改gpio值
/work/rk3288/firefly-rk3288_android5.1_git_20180126/kernel/drivers/media/usb/uvc/uvc_v4l2.c
/* carroll add led gpio start */
#define FILL_LIGHT_GPIO 233
/* carroll add led gpio end */
static int uvc_v4l2_open(struct file *file)
{
...........
/* carroll add led gpio start */
if(stream->dev->udev->portnum == )
{
gpio_set_value(FILL_LIGHT_GPIO, );
printk("carroll led on \n");
}
/* carroll add led gpio end */ return ;
} static int uvc_v4l2_release(struct file *file)
{
...........
/* carroll add led gpio start */
if(stream->dev->udev->portnum == )
{
gpio_set_value(FILL_LIGHT_GPIO, );
printk("carroll led off \n");
}
/* carroll add led gpio end */ return ;
}
参考:
https://blog.csdn.net/kris_fei/article/details/69553422
RK3288 控制usb摄像头补光GPIO的更多相关文章
- VFP调用API来控制USB摄像头,实现拍照或录像
*--前提:VFP7.0以上;Windows 2K及以上*--控件:AVICAP32.DLL *--定义:一般放到主程序或表单(集)的Load事件中Public WM_CAP_DRIVER_DISCO ...
- RK3288 USB触摸屏与USB摄像头同时使用时触摸卡顿
CPU:RK3288 系统:Android 5.1 当USB触摸屏与USB摄像头同时使用时,有时会出现触摸卡顿,看似按键按下没有弹起. getevent 查看触摸屏上报,只有 DOWN,没有 UP,正 ...
- Jetson TX2(3)opencv3 打开usb摄像头
ubuntu2604 opencv3.4.0 https://blog.csdn.net/ultimate1212/article/details/80936175?utm_source=blogxg ...
- 利用opencv从USB摄像头获取图片
由于opencv自带的VideoCapture函数直接从usb摄像头获取视频数据,所以用这个来作为实时的图像来源用于实体检测识别是很方便的. 1. 安装opencv 安装的步骤可以按照之前这个文章操作 ...
- 安卓 USB摄像头 开源库 UVCCamera 教程
https://github.com/saki4510t/UVCCamera UVCCamera 听名字就知道使用UVC( USB VEDIO CLASS) 协议的通用类库.linux原生支持,基本支 ...
- 2.6 USB摄像头驱动之USB描述符
学习目标:分析USB摄像头驱动的描述符: 一.USB设备描述符 在usb设备驱动分析那一节,也用到了usb描述符. usb描述符可分为: USB设备描述符(usb_device_descriptor) ...
- 2.5 USB摄像头驱动程序框架
学习目标:根据vivi驱动架构和linux-2.6.31/linux-2.6.31.14/drivers/media/video/uvc/Uvc_driver.c驱动源码,分析usb摄像头驱动程序框架 ...
- 【智能无线小车系列十】通过USB摄像头实现网络监控功能
如果仅有静态图像可能还不足以满足我们的需求,我们可能会需要用到实时的监控功能.这里介绍一款小应用:motion.motion的功能可强大了,不仅可以将监控的画面通过视频传输,实时展现,更为强大的是,m ...
- USB摄像头驱动框架分析(五)
一.USB摄像头驱动框架如下所示:1.构造一个usb_driver2.设置 probe: 2.1. 分配video_device:video_device_alloc ...
随机推荐
- Win32 API 多线程编程——一个简单实例(含消息参数传递)
Win32 API进行程序设计具有很多优点:应用程序执行代码小,运行效率高,但是他要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源,要求程序员对Windows系统内核有一定的了解,会占用程 ...
- 创建Uboot 环境变量 bin 文件
As we know, the bootloader stores its configuration into an area of the flash called the environment ...
- HDU-4003 Find Metal Mineral 树形DP (好题)
题意:给出n个点的一棵树,有k个机器人,机器人从根节点rt出发,问访问完整棵树(每个点至少访问一次)的最小代价(即所有机器人路程总和),机器人可以在任何点停下. 解法:这道题还是比较明显的能看出来是树 ...
- package.json和package-lock.json的区别
参考:https://blog.csdn.net/c2311156c/article/details/80320046 package.json: 主要用来定义项目中需要依赖的包 package-lo ...
- css 多行省略号兼容移动端
浏览器兼容css样式 -webkit-line-clamp: ; display: -webkit-box; overflow: hidden; text-overflow: ellipsis; te ...
- codeblocks编译调试C语言二级指针小记
夜已深,暂时附上一个截图,后面慢慢道来. 下图时用codeblocks调试C语言的界面,codeblocks版本是17.12nosetup版,也为继承mingw,我用的编程器是tdm-gcc-5.1. ...
- enumerate()(Python)
>>> E=enumerate('spam') >>> E <enumerate object at 0x1021ceca8> >>> ...
- 【leetcode】946. Validate Stack Sequences
题目如下: Given two sequences pushed and popped with distinct values, return true if and only if this co ...
- mac 安装Navicat_Premium 破解版带汉化
因为近期要用mongodb,本想着下载一个Navicat for mongodb 但是一直没有给力带帖子,所以就靠着百度自己找,功夫不负有心人. 下面附上百度网盘,里面有一个txt文档,在安装前一定要 ...
- Vue.js(六)
路由(用 Vue.js + Vue Router 创建单页应用) <script src="https://unpkg.com/vue-router/dist/vue-router.j ...