예제 #1
0
파일: ad7606_par.c 프로젝트: 3null/linux
static int ad7606_par_probe(struct platform_device *pdev)
{
	struct resource *res;
	struct iio_dev *indio_dev;
	void __iomem *addr;
	resource_size_t remap_size;
	int irq;

	irq = platform_get_irq(pdev, 0);
	if (irq < 0) {
		dev_err(&pdev->dev, "no irq\n");
		return -ENODEV;
	}

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	addr = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(addr))
		return PTR_ERR(addr);

	remap_size = resource_size(res);

	indio_dev = ad7606_probe(&pdev->dev, irq, addr,
			  platform_get_device_id(pdev)->driver_data,
			  remap_size > 1 ? &ad7606_par16_bops :
			  &ad7606_par8_bops);

	if (IS_ERR(indio_dev))
		return PTR_ERR(indio_dev);

	platform_set_drvdata(pdev, indio_dev);

	return 0;
}
예제 #2
0
파일: ad7606_spi.c 프로젝트: avagin/linux
static int ad7606_spi_probe(struct spi_device *spi)
{
	const struct spi_device_id *id = spi_get_device_id(spi);

	return ad7606_probe(&spi->dev, spi->irq, NULL,
			    id->name, id->driver_data,
			    &ad7606_spi_bops);
}
예제 #3
0
static int __devinit ad7606_par_probe(struct platform_device *pdev)
{
	struct resource *res;
	struct iio_dev *indio_dev;
	void __iomem *addr;
	resource_size_t remap_size;
	int ret, irq;

	irq = platform_get_irq(pdev, 0);
	if (irq < 0) {
		dev_err(&pdev->dev, "no irq\n");
		return -ENODEV;
	}

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res)
		return -ENODEV;

	remap_size = resource_size(res);

	/* Request the regions */
	if (!request_mem_region(res->start, remap_size, "iio-ad7606")) {
		ret = -EBUSY;
		goto out1;
	}
	addr = ioremap(res->start, remap_size);
	if (!addr) {
		ret = -ENOMEM;
		goto out1;
	}

	indio_dev = ad7606_probe(&pdev->dev, irq, addr,
			  platform_get_device_id(pdev)->driver_data,
			  remap_size > 1 ? &ad7606_par16_bops :
			  &ad7606_par8_bops);

	if (IS_ERR(indio_dev))  {
		ret = PTR_ERR(indio_dev);
		goto out2;
	}

	platform_set_drvdata(pdev, indio_dev);

	return 0;

out2:
	iounmap(addr);
out1:
	release_mem_region(res->start, remap_size);

	return ret;
}
예제 #4
0
파일: ad7606_spi.c 프로젝트: 3null/linux
static int ad7606_spi_probe(struct spi_device *spi)
{
	struct iio_dev *indio_dev;

	indio_dev = ad7606_probe(&spi->dev, spi->irq, NULL,
			   spi_get_device_id(spi)->driver_data,
			   &ad7606_spi_bops);

	if (IS_ERR(indio_dev))
		return PTR_ERR(indio_dev);

	spi_set_drvdata(spi, indio_dev);

	return 0;
}