2011-9-18 14:31:20
总线和总线驱动
static struct platform_driver goldfish_pdev_bus_driver = {
.probe = goldfish_pdev_bus_probe,
.remove = __devexit_p(goldfish_pdev_bus_remove),
.driver = {
.name = "goldfish_pdev_bus"
}
};
这个平台驱动有自己的probe和remove方法
注册了这样一个驱动
static int platform_match(struct device *dev, struct device_driver *drv)
{
struct platform_device *pdev;
pdev = container_of(dev, struct platform_device, dev);
return (strcmp(pdev->name, drv->name) == 0);
}
比较名字是否相等
driver的方法和bus的方法不能冲突
如果读得是偏移0x地址是
PDEV_BUS_OP_ADD_DEV
static int __devinit goldfish_pdev_bus_probe(struct platform_device *pdev)
{
int ret;
struct resource *r;
r = platform_get_resource(pdev, IORESOURCE_IO, 0);
if(r == NULL)
return -EINVAL;
pdev_bus_base = IO_ADDRESS(r->start);
r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if(r == NULL)
return -EINVAL;
pdev_bus_irq = r->start;
ret = request_irq(pdev_bus_irq, goldfish_pdev_bus_interrupt, IRQF_SHARED, "goldfish_pdev_bus", pdev);
if(ret)
goto err_request_irq_failed;
writel(PDEV_BUS_OP_INIT, pdev_bus_base + PDEV_BUS_OP);
err_request_irq_failed:
return ret;
}
设备增删都是emulator通知的。。。。
还有一个 machine info
MACHINE_START(GOLDFISH, "Goldfish")
.phys_io = IO_START,
.io_pg_offst = ((IO_BASE) >> 18) & 0xfffc,
.boot_params = 0x00000100,
.map_io = goldfish_map_io,
.init_irq = goldfish_init_irq,
.init_machine = goldfish_init,
.timer = &goldfish_timer,
MACHINE_END
这个在setup的时候使用
现在看一下这个视频采集设备在不在
名字相同就应该会出来