示例#1
0
static int adp1653_probe(struct i2c_client *client,
			 const struct i2c_device_id *devid)
{
	struct adp1653_flash *flash = &adp1653;
	int rval;

	if (i2c_get_clientdata(client))
		return -EBUSY;

	flash->platform_data = client->dev.platform_data;

	if (flash->platform_data == NULL)
		return -ENODEV;

	flash->v4l2_int_device = &adp1653_int_device;

	flash->i2c_client = client;
	i2c_set_clientdata(client, flash);

	rval = v4l2_int_device_register(flash->v4l2_int_device);
	if (rval)
		i2c_set_clientdata(client, NULL);

	return rval;
}
示例#2
0
文件: rt8515.c 项目: ARMP/ARM-Project
static int rt8515_probe(struct platform_device *pdev)
{
	struct rt8515_platform_data *pdata = pdev->dev.platform_data;

	if (!pdata) {
		printk(KERN_ERR "rt8515 platform data not supplied\n");
		return -ENOENT;
	}

	rt8515_dev.pdata = pdata;

	if (v4l2_int_device_register(&rt8515_int_device)) {
		printk(KERN_ERR "Could not register "
					" rt8515 as v4l2_int_device\n");
		return -ENOENT;
	}

	printk(KERN_ERR "rt8515_probe success\n");
	return pdata->init();
}
示例#3
0
static int omap24xxcam_probe(struct platform_device *pdev)
{
	struct omap24xxcam_device *cam;
	struct resource *mem;
	int irq;

	cam = kzalloc(sizeof(*cam), GFP_KERNEL);
	if (!cam) {
		dev_err(&pdev->dev, "could not allocate memory\n");
		goto err;
	}

	platform_set_drvdata(pdev, cam);

	cam->dev = &pdev->dev;

	if (v4l2_device_register(&pdev->dev, &cam->v4l2_dev)) {
		dev_err(&pdev->dev, "v4l2_device_register failed\n");
		goto err;
	}

	/*
	 * Impose a lower limit on the amount of memory allocated for
	 * capture. We require at least enough memory to double-buffer
	 * QVGA (300KB).
	 */
	if (capture_mem < 320 * 240 * 2 * 2)
		capture_mem = 320 * 240 * 2 * 2;
	cam->capture_mem = capture_mem;

	/* request the mem region for the camera registers */
	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!mem) {
		dev_err(cam->dev, "no mem resource?\n");
		goto err;
	}
	if (!request_mem_region(mem->start, resource_size(mem), pdev->name)) {
		dev_err(cam->dev,
			"cannot reserve camera register I/O region\n");
		goto err;
	}
	cam->mmio_base_phys = mem->start;
	cam->mmio_size = resource_size(mem);

	/* map the region */
	cam->mmio_base = ioremap_nocache(cam->mmio_base_phys, cam->mmio_size);
	if (!cam->mmio_base) {
		dev_err(cam->dev, "cannot map camera register I/O region\n");
		goto err;
	}

	irq = platform_get_irq(pdev, 0);
	if (irq <= 0) {
		dev_err(cam->dev, "no irq for camera?\n");
		goto err;
	}

	/* install the interrupt service routine */
	if (request_irq(irq, omap24xxcam_isr, 0, CAM_NAME, cam)) {
		dev_err(cam->dev,
			"could not install interrupt service routine\n");
		goto err;
	}
	cam->irq = irq;

	if (omap24xxcam_clock_get(cam))
		goto err;

	INIT_WORK(&cam->sensor_reset_work, omap24xxcam_sensor_reset_work);

	mutex_init(&cam->mutex);
	spin_lock_init(&cam->core_enable_disable_lock);

	omap24xxcam_sgdma_init(&cam->sgdma,
			       cam->mmio_base + CAMDMA_REG_OFFSET,
			       omap24xxcam_stalled_dma_reset,
			       (unsigned long)cam);

	omap24xxcam.priv = cam;

	if (v4l2_int_device_register(&omap24xxcam))
		goto err;

	return 0;

err:
	omap24xxcam_remove(pdev);
	return -ENODEV;
}
示例#4
0
static int adv7610_video_probe(struct i2c_client *client,
			const struct i2c_device_id *id)
{
	struct sensor *sens = &adv7610_data;
	struct device *dev = &client->dev;
	int ret;

	dev_dbg(dev, "%s\n", __func__);

	init_waitqueue_head(&i2c_wait);

	/* Set initial values for the sensor struct. */
	memset(sens, 0, sizeof(adv7610_data));
	sens->sen.streamcap.timeperframe.denominator = 0;
	sens->sen.streamcap.timeperframe.numerator = 0;
	sens->sen.pix.width = 0;
	sens->sen.pix.height = 0;
#ifdef USE_16BIT
	sens->sen.pix.pixelformat = V4L2_PIX_FMT_YUYV;
#else
	sens->sen.pix.pixelformat = V4L2_PIX_FMT_UYVY;  /* YUV422 */
#endif
	pr_err("******** pixelformat=%d ************\n",sens->sen.pix.pixelformat);

	sens->sen.on = true;

        /* request reset pin */
        rst_gpio = of_get_named_gpio(dev->of_node, "reset-gpio", 0);
        if (!gpio_is_valid(rst_gpio)) {
                dev_warn(dev, "no sensor reset pin available");
                return -EINVAL;
        }
        ret = devm_gpio_request_one(dev, rst_gpio, GPIOF_OUT_INIT_HIGH,
                                        "adv7610_reset");
        if (ret < 0)
                return ret;

	ret = of_property_read_u32(dev->of_node, "csi_id",
				   &(sens->sen.csi));
	if (ret) {
		dev_err(dev, "csi_id invalid\n");
		return ret;
	}

	dev_dbg(dev, "IPU1_CSI%d\n", sens->sen.csi);
	dev_dbg(dev, "type is %d (expect %d)\n",
		 adv7610_int_device.type, v4l2_int_type_slave);
	dev_dbg(dev, "num ioctls is %d\n",
		 adv7610_int_device.u.slave->num_ioctls);

	//Attempt to connect to the device
	ret = adv7610_hw_init(client);
	if(ret == -ENODEV)
		return ret;

    /* This function attaches this structure to the /dev/video<n> device */
    adv7610_int_device.priv = sens;
    ret = v4l2_int_device_register(&adv7610_int_device);

	return ret;
}