2-6q环视之采集,6q的pcie控制器


1.硬件
先看pcie有哪些引脚
这个是X1的


这个是X16的


即差分数据+差分时钟


2.协议
pcie spec

精解PCI Express---基础篇
精解PCI Express---物理结构篇
精解PCI Express---系统架构篇


3.驱动
board-mx6q_sabresd.c中定义平台设备私有数据,并注册平台设备
static const struct imx_pcie_platform_data mx6_sabresd_pcie_data __initconst = {
	.pcie_pwr_en	= SABRESD_PCIE_PWR_EN,
	.pcie_rst	= SABRESD_PCIE_RST_B_REVB,
	.pcie_wake_up	= SABRESD_PCIE_WAKE_B,
	//.pcie_dis	= SABRESD_PCIE_DIS_B,//ljsong for led
#ifdef CONFIG_IMX_PCIE_EP_MODE_IN_EP_RC_SYS
	.type_ep	= 1,
#else
	.type_ep	= 0,
#endif
};
	imx6q_add_pcie(&mx6_sabresd_pcie_data);
此函数最终调用下面函数,完成平台设备的注册
imx_add_platform_device("imx-pcie", -1,res, ARRAY_SIZE(res),

平台驱动文件位于arch/arm/mach-mx6/pcie.c
在初始化时会注册平台驱动
static int __init imx_pcie_drv_init(void)
{
	return platform_driver_register(&imx_pcie_pltfm_driver);
}









1.在drivers/media/video/tw68-core.c里面有一个 module_init(TW68_init)
此处注册pci设备
static int TW68_init(void)
 {
 	INIT_LIST_HEAD(&TW686v_devlist);
 	printk(KERN_INFO "TW6868_: v4l2 driver version %d.%d.%d loaded\n", 2, 0, 1);
 
 	return pci_register_driver(&TW68_pci_driver);
 }
 

pci的最重要的结构体

 static struct pci_driver TW68_pci_driver = {
 	.name     = "TW6868",
 	.id_table = TW68_pci_tbl,
 	.probe    = TW68_initdev,
 	.remove   = __devexit_p(TW68_finidev),
 
 //#ifdef CONFIG_PM
 //	.suspend  = TW6868_suspend,
 //	.resume   = TW6868_resume
 //#endif
 };

其中probe函数是在pcie控制器检测到pcie设备时回调
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值