[PATCH] staging:iio:adc: Add SPEAr ADC driver
Viresh Kumar
viresh.kumar at st.com
Thu Apr 12 16:12:02 EST 2012
On 4/11/2012 6:49 PM, Stefan Roese wrote:
> +static int __devinit spear_adc_probe(struct platform_device *pdev)
> +{
> + struct device_node *np = pdev->dev.of_node;
> + struct spear_adc_info *info;
> + struct resource *res;
> + int retval = -ENODEV;
> + struct iio_dev *iodev = NULL;
> + int irq;
> +
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (!res) {
> + dev_err(&pdev->dev, "failed to get platform I/O memory\n");
> + retval = -EBUSY;
> + goto errout1;
> + }
> +
> + iodev = iio_allocate_device(sizeof(struct spear_adc_info));
> + if (!iodev) {
> + dev_err(&pdev->dev, "failed allocating iio device\n");
> + retval = -ENOMEM;
> + goto errout1;
> + }
> +
> + info = iio_priv(iodev);
> + info->np = np;
> +
> + /*
> + * SPEAr600 has a different register layout than other SPEAr SoC's
> + * (e.g. SPEAr3xx). Let's provide two register base addresses
> + * to support multi-arch kernels.
> + */
> + info->adc_base_spear6xx = ioremap(res->start, resource_size(res));
> + if (!info->adc_base_spear6xx) {
> + dev_err(&pdev->dev, "failed mapping memory\n");
> + retval = -EBUSY;
> + goto errout2;
> + }
This must be a DT only driver and so you can use of_iomap() instead of
ioremap() and platform_get_resource()
> + info->adc_base_spear3xx =
> + (struct adc_regs_spear3xx *)info->adc_base_spear6xx;
> +
> + info->clk = clk_get(&pdev->dev, NULL);
> + if (IS_ERR(info->clk)) {
> + dev_err(&pdev->dev, "failed getting clock\n");
> + goto errout3;
> + }
patch for devm_* variant of clk is also there.
> + clk_enable(info->clk);
clk_prepare() is required now, before enable.
> +
> + irq = platform_get_irq(pdev, 0);
> + if ((irq < 0) || (irq >= NR_IRQS)) {
> + dev_err(&pdev->dev, "failed getting interrupt resource\n");
> + retval = -EINVAL;
> + goto errout4;
> + }
> +
> + retval = request_irq(irq, spear_adc_isr, 0, MOD_NAME, info);
> + if (retval < 0) {
> + dev_err(&pdev->dev, "failed requesting interrupt\n");
> + goto errout4;
> + }
> +
can use devm_* variants wherever possible.
--
viresh
More information about the devicetree-discuss
mailing list