1. 驱动初始化
    在drivers/media/video/sp0a19.c中
    device_initcall_sync(sp0a_mod_init);
    static struct i2c_driver sp0a_i2c_driver = {
    .driver = {
    .name = SP0A_NAME_STRING(),
    },
    .probe = sp0a_probe,
    .remove = sp0a_remove,
    .id_table = sp0a_id,
    };

static int __init sp0a_mod_init(void)
{
return i2c_add_driver(&sp0a_i2c_driver);
}
在probe函数中
static int sp0a_probe(struct i2c_client *client, const struct i2c_device_id *did)
{
struct sp0a *sp0a;
struct soc_camera_device *icd = client->dev.platform_data;
struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
struct soc_camera_link *icl;

icl = to_soc_camera_link(icd);
sp0a = kzalloc(sizeof(struct sp0a), GFP_KERNEL);
v4l2_i2c_subdev_init(&sp0a->subdev, client, &sp0a_subdev_ops);
icd->ops        = &sp0a_ops;
sp0a->info_priv.fmt = sp0a_colour_fmts[0];
sp0a_video_probe(icd, client);
return ret;

}
函数指针的注册过程
v4l2_i2c_subdev_init(&sp0a->subdev, client, &sp0a_subdev_ops);
static struct v4l2_subdev_core_ops sp0a_subdev_core_ops = {
.init = sp0a_init,
.g_ctrl = sp0a_g_control,
.s_ctrl = sp0a_s_control,
.g_ext_ctrls = sp0a_g_ext_controls,
.s_ext_ctrls = sp0a_s_ext_controls,
.g_chip_ident = sp0a_g_chip_ident,
.ioctl = sp0a_ioctl,
};

static struct v4l2_subdev_video_ops sp0a_subdev_video_ops = {
.s_mbus_fmt = sp0a_s_fmt,
.g_mbus_fmt = sp0a_g_fmt,
.try_mbus_fmt = sp0a_try_fmt,
.enum_mbus_fmt = sp0a_enum_fmt,
};

static struct v4l2_subdev_ops sp0a_subdev_ops = {
.core = &sp0a_subdev_core_ops,
.video = &sp0a_subdev_video_ops,
};

icd->ops = &sp0a_ops;
static struct soc_camera_ops sp0a_ops =
{
.suspend = sp0a_suspend,
.resume = sp0a_resume,
.set_bus_param = sp0a_set_bus_param,
.query_bus_param = sp0a_query_bus_param,
.controls = sp0a_controls,
.menus = sp0a_menus,
.num_controls = ARRAY_SIZE(sp0a_controls),
.num_menus = ARRAY_SIZE(sp0a_menus),
};
static int sp0a_video_probe(struct soc_camera_device *icd, struct i2c_client *client)
{
char pid = 0;
int ret;
struct sp0a *sp0a = to_sp0a(client);
if ( g_bIsAtvStart )
{
return 0;
}
//.add power.sheng 2012.09.04

/* We must have a parent by now. And it cannot be a wrong one.* So this entire test is completely redundant. */
if (!icd->dev.parent ||to_soc_camera_host(icd->dev.parent)->nr != icd->iface)return -ENODEV;if (sp0a_ioctrl(icd, Sensor_PowerDown, 0) < 0) {ret = -ENODEV;goto sp0a_video_probe_err;
}/* soft reset */

/* ret = sp0a_write(client, 0x12, 0x80);
if (ret != 0)
{
SP0A_TR(“soft reset %s failed\n”,SP0A_NAME_STRING());
return -ENODEV;
}
mdelay(50); *///delay 5 microseconds

/* check if it is an sp0a sp0a */
ret = sp0a_read(client, 0x02, &pid);
if (ret != 0) {SP0A_TR("%s read chip id high byte failed\n",SP0A_NAME_STRING());ret = -ENODEV;goto sp0a_video_probe_err;
}SP0A_DG("\n %s pid = 0x%x\n", SP0A_NAME_STRING(), pid);
if (pid == SP0A_ID) {sp0a->model = SP0A_V4L2_IDENT;
} else {SP0A_TR("error: %s mismatched pid = 0x%x\n", SP0A_NAME_STRING(), pid);ret = -ENODEV;goto sp0a_video_probe_err;
}return 0;

sp0a_video_probe_err:

return ret;

}

rk3188--8.android camera驱动分析相关推荐

  1. Android Camera驱动分析

    文章目录 一.Camera的硬件接口 二.代码路径 三.Camera代码分析 1.硬件接口设置 2.Camera设备驱动 3.模组驱动代码 一.Camera的硬件接口 引脚 名称及作用 VCAMA 就 ...

  2. 一牛网:Android camera驱动培训班,不可错过的学习机会

    Android camera驱动培训: 学员要求: 1.要有C语言基础 2.有android.linux.或其他嵌入式系统基础 3.对这块有强烈兴趣者. 师资团队: 主讲:一牛网_Jacky 老师(驱 ...

  3. 免费分享:5本安卓开发经典书籍,Android 7编程入门经典(第4版),Android底层驱动分析和移植,底层驱动分析和移植

    1.Android 7编程入门经典(第4版) 使用Android Studio 2  PDF 下载 下载地址: http://www.askwinds.com/r-c/down-info-02/579 ...

  4. 第1讲 Android Camera性能分析 课程组织安排

    本讲是Android Camera性能分析专题的第1讲,我们介绍课程组织安排,包括如下内容: 课程详细内容 课程配套源码和资料 视频在线观看: 极客笔记:极客笔记在线课程 加入知识星球与更多Camer ...

  5. S5PV210 camera 驱动分析(android)

    一.Camera 工作原理介绍 1. 结构 . 一般来说,camera 主要是由 lens 和 sensor IC 两部分组成,其中有的 sensor IC 集成 了 DSP,有的没有集成,但也需要外 ...

  6. MTK6580(Android6.0)-camera 驱动分析

    一.MTK6580 平台 Camera 驱动整体框架 mtk平台三大件调试中,camera的调试难度最大,问题也就最多,为此特地分析了一下整个camera驱动部分 实现过程,以下为camera驱动框架 ...

  7. android camera fragment,Android Camera 模块分析(三)

    第三部分 Camera的主要实现分析 3.1 JAVA程序部分 在packages/apps/Camera/src/com/android/camera/ 目录的Camera.java文件中,包含了对 ...

  8. Android Camera驱动开发入门必备知识

    camera驱动开发所需要具备基础知识,如果你还没有了解过camera模块,那么这些基础必备的知识,将会对你比较有用,俗话说"磨刀不误砍柴工",基本功配置好了,相信你在做camer ...

  9. android 触摸屏驱动分析,Android 触摸屏驱动代码分析(ADC 类型触摸屏 CPU:s3c

    Android 2.1 farsight version for s5pc100 File Name: s3c-ts.c 1           简介 1.1          本例基于s5pc100 ...

最新文章

  1. Go 分布式学习利器(20)-- Go并发编程之多路选择和超时控制,channel的关闭和广播
  2. Java多线程面试题通关手册!
  3. 职场协同办公如何使用硬技能,助推团队协作更流畅?
  4. python回归建模_Python实现回归预测及模型优化
  5. linux查找被杀死的进程,linux查找进程和杀死进程
  6. 挖人技术哪家强!快看看2014年北京互联网人都去哪里了~
  7. 浅谈StringBuilder
  8. 信息学奥赛一本通(1037:计算2的幂)
  9. Struts2 多方法的Action
  10. 孙鑫VC学习笔记:第十三讲 (一) 用CArchive类读取与保存文件
  11. 软件测试优先级策略,软件测试策略基础(转载)
  12. Redis设计思路学习与总结
  13. Java Json xml 格式之间转换(一)
  14. 头文件<ctype.h>
  15. Beyond Compare不能打开*.te文件解决方案
  16. python爬虫训练:多肉植物图爬取
  17. SmartBI入门(一)介绍和安装
  18. 最新版2020.11版本Anaconda百度网盘提取下载
  19. 【Linux】 基础入门 全解
  20. 三分钟学会网络地址相关计算

热门文章

  1. python 解压zip密码正确但解压失败,Python实现加密的ZIP文件解压(密码已知
  2. 02-Java后端框架-SSM简单总结
  3. PLC实时数据采集如何实现?
  4. PLC编程与应用培训课程_PLC系统认知
  5. 微信小程序开发入门与实战(组件的使用)
  6. Linux日志和时间同步
  7. C# 压缩Excel中的图片
  8. 软件需求工程-需求工程概述
  9. 小羊驼和你一起学习cocos2d-x之八(tinyXml android cocos2d-x 2.x)
  10. 通过线路输入功能快速创建吉他谱