All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-samsung-soc@vger.kernel.org, dianders@chromium.org,
	gregkh@linuxfoundation.org, naveenkrishna.ch@gmail.com
Subject: Re: [PATCH] iio: adc: add exynos5 adc driver under iio framwork
Date: Wed, 23 Jan 2013 13:52:58 +0100	[thread overview]
Message-ID: <50FFDD2A.9040102@metafoo.de> (raw)
In-Reply-To: <1358917086-4148-1-git-send-email-ch.naveen@samsung.com>

On 01/23/2013 05:58 AM, Naveen Krishna Chatradhi wrote:
> This patch add an ADC IP found on EXYNOS5 series socs from Samsung.
> Also adds the Documentation for device tree bindings.
> 
> Signed-off-by: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
> ---
> Changes since v1:
> 
> 1. Fixed comments from Lars
> 2. Added support for ADC on EXYNOS5410
> 
> Changes since v2:
> 
> 1. Changed the instance name for (struct iio_dev *) to indio_dev
> 2. Changed devm_request_irq to request_irq
> 
> Few doubts regarding the mappings and child device handling.
> Kindly, suggest me better methods.
> 

Hi,

The patch looks mostly good now. As for the mappings, the problem is that we
currently do not have any device tree bindings for IIO. So a proper solution
would be to add dt bindings for IIO.

[...]
> diff --git a/drivers/iio/adc/exynos5_adc.c b/drivers/iio/adc/exynos5_adc.c
> new file mode 100644
> index 0000000..8982675
> --- /dev/null
> +++ b/drivers/iio/adc/exynos5_adc.c
[...]
> +
> +/** ADC core in EXYNOS5410 has 10 channels,
> + * ADC core in EXYNOS5250 has 8 channels
> +*/

Minor nitpick, according to Documentation/Codingsytle multi-line comments
should look like this:

/*
 * Text
 * Text
 */

[...]
> +static int exynos5_adc_probe(struct platform_device *pdev)
> +{
> +	struct exynos5_adc *info = NULL;
> +	struct device_node *np = pdev->dev.of_node;
> +	struct iio_dev *indio_dev = NULL;
> +	struct resource	*mem;
> +	int ret = -ENODEV;
> +	int irq;
> +
> +	if (!np)
> +		return ret;
> +
> +	indio_dev = iio_device_alloc(sizeof(struct exynos5_adc));
> +	if (!indio_dev) {
> +		dev_err(&pdev->dev, "failed allocating iio device\n");
> +		return -ENOMEM;
> +	}
> +
> +	info = iio_priv(indio_dev);
> +
> +	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +
> +	info->regs = devm_request_and_ioremap(&pdev->dev, mem);

While devm_request_and_ioremap takes care of the printing and error you
still need to check whether regs is non NULL.

> +
> +	irq = platform_get_irq(pdev, 0);
> +	if (irq < 0) {
> +		dev_err(&pdev->dev, "no irq resource?\n");
> +		ret = irq;
> +		goto err_iio;
> +	}
> +
> +	info->irq = irq;
> +
> +	ret = request_irq(info->irq, exynos5_adc_isr,
> +					0, dev_name(&pdev->dev), info);
> +	if (ret < 0) {
> +		dev_err(&pdev->dev, "failed requesting irq, irq = %d\n",
> +							info->irq);
> +		goto err_iio;
> +	}
> +
> +	info->clk = devm_clk_get(&pdev->dev, "adc");
> +	if (IS_ERR(info->clk)) {
> +		dev_err(&pdev->dev, "failed getting clock, err = %ld\n",
> +							PTR_ERR(info->clk));
> +		ret = PTR_ERR(info->clk);
> +		goto err_irq;
> +	}
> +
> +	info->vdd = devm_regulator_get(&pdev->dev, "vdd");
> +	if (IS_ERR(info->vdd)) {
> +		dev_err(&pdev->dev, "failed getting regulator, err = %ld\n",
> +							PTR_ERR(info->vdd));
> +		ret = PTR_ERR(info->vdd);
> +		goto err_irq;
> +	}
> +
> +	info->version = exynos5_adc_get_version(pdev);
> +
> +	platform_set_drvdata(pdev, indio_dev);
> +
> +	init_completion(&info->completion);

Since the completion is used in the IRQ handler it should be initialized
before the IRQ is requested.

> +
> +	indio_dev->name = dev_name(&pdev->dev);
> +	indio_dev->dev.parent = &pdev->dev;
> +	indio_dev->dev.of_node = pdev->dev.of_node;
> +	indio_dev->info = &exynos5_adc_iio_info;
> +	indio_dev->modes = INDIO_DIRECT_MODE;
> +	indio_dev->channels = exynos5_adc_iio_channels;
> +	indio_dev->num_channels = ARRAY_SIZE(exynos5_adc_iio_channels);

Shouldn't the number of channels depend on the ADC version? E.g. 8 for v1
and 10 for v2?

> +
> +	info->map = exynos5_adc_iio_maps;
> +
> +	ret = iio_map_array_register(indio_dev, info->map);
> +	if (ret) {
> +		dev_err(&indio_dev->dev, "failed mapping iio, err: %d\n", ret);
> +		goto err_irq;
> +	}
> +
> +	ret = iio_device_register(indio_dev);
> +	if (ret)
> +		goto err_map;
> +
> +	ret = regulator_enable(info->vdd);
> +	if (ret)
> +		goto err_iio_dev;

You never disable the regulator again. I think you need to do that before it
is freed.

> +
> +	clk_prepare_enable(info->clk);
> +
> +	exynos5_adc_hw_init(info);
> +
> +	ret = of_platform_populate(np, exynos5_adc_match, NULL, &pdev->dev);
> +	if (ret < 0) {
> +		dev_err(&pdev->dev, "failed adding child nodes\n");
> +		goto err_of_populate;
> +	}
> +
> +	return 0;
> +
> +err_of_populate:
> +	device_for_each_child(&pdev->dev, NULL, exynos5_adc_remove_devices);
> +err_iio_dev:
> +	iio_device_unregister(indio_dev);
> +err_map:
> +	iio_map_array_unregister(indio_dev, info->map);
> +err_irq:
> +	free_irq(info->irq, info);
> +err_iio:
> +	iio_device_free(indio_dev);
> +	return ret;
> +}
> +
[..]

  reply	other threads:[~2013-01-23 12:52 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-21 13:37 [PATCH] iio: adc: add exynos5 adc driver under iio framwork Naveen Krishna Chatradhi
2013-01-21 13:37 ` Naveen Krishna Chatradhi
2013-01-22  9:44 ` Lars-Peter Clausen
2013-01-22  9:44   ` Lars-Peter Clausen
2013-01-22 14:03   ` Naveen Krishna Ch
2013-01-22 14:03     ` Naveen Krishna Ch
2013-01-22 14:27 ` Naveen Krishna Chatradhi
2013-01-23  4:58 ` Naveen Krishna Chatradhi
2013-01-23 12:52   ` Lars-Peter Clausen [this message]
2013-01-24  0:42     ` Doug Anderson
2013-01-24  0:42       ` Doug Anderson
2013-01-24  9:54       ` Lars-Peter Clausen
2013-01-24  9:54         ` Lars-Peter Clausen
2013-01-24 14:20         ` Naveen Krishna Ch
2013-01-24 14:20           ` Naveen Krishna Ch
2013-01-24 18:11           ` Lars-Peter Clausen
2013-01-24 16:12         ` Doug Anderson
2013-01-24 18:19           ` Lars-Peter Clausen
2013-01-24 18:19             ` Lars-Peter Clausen
2013-01-24 19:15             ` Tomasz Figa
2013-01-24 19:15               ` Tomasz Figa
2013-01-24 19:30               ` Lars-Peter Clausen
2013-02-12 21:07   ` Guenter Roeck
2013-02-13  2:48     ` Naveen Krishna Ch
2013-02-13  2:48       ` Naveen Krishna Ch
2013-02-13 11:05       ` Naveen Krishna Ch
2013-02-13 11:05         ` Naveen Krishna Ch
2013-02-13 13:16       ` Naveen Krishna Ch
2013-02-13 13:30         ` Lars-Peter Clausen
2013-02-13 13:53           ` Naveen Krishna Ch
2013-02-13 13:53             ` Naveen Krishna Ch
2013-02-13 14:05             ` Lars-Peter Clausen
2013-02-13 15:51         ` Guenter Roeck
2013-02-13 15:51           ` Guenter Roeck
2013-01-24  4:58 ` [PATCH] " Naveen Krishna Chatradhi
2013-01-24  4:58   ` Naveen Krishna Chatradhi
2013-01-26 10:57   ` Jonathan Cameron
2013-01-26 10:57     ` Jonathan Cameron
2013-01-30  6:02     ` Naveen Krishna Ch
2013-01-24  5:05 ` Naveen Krishna Chatradhi
2013-02-12  1:22   ` Olof Johansson
2013-02-14 12:11 ` [PATCH v6] iio: adc: add exynos " Naveen Krishna Chatradhi
2013-02-14 12:11   ` Naveen Krishna Chatradhi
2013-02-14 20:55   ` Lars-Peter Clausen
2013-02-14 20:55     ` Lars-Peter Clausen
2013-02-15  6:56   ` [PATCH v7] " Naveen Krishna Chatradhi
2013-02-15 13:13     ` Lars-Peter Clausen
2013-02-15 13:17       ` Naveen Krishna Ch
2013-02-15 13:17         ` Naveen Krishna Ch
2013-02-15 13:26         ` Lars-Peter Clausen
2013-02-15 13:35           ` Naveen Krishna Ch
2013-03-03 12:16             ` Jonathan Cameron
2013-03-03 12:16               ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50FFDD2A.9040102@metafoo.de \
    --to=lars@metafoo.de \
    --cc=ch.naveen@samsung.com \
    --cc=dianders@chromium.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=naveenkrishna.ch@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.