From: Lars-Peter Clausen <lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
To: "Patil, Rachna" <rachna-l0cyMroinI0@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Samuel Ortiz <sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Dmitry Torokhov
<dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Dmitry Torokhov <dtor-JGs/UdohzUI@public.gmane.org>,
Jonathan Cameron <jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>
Subject: Re: [PATCH v3 4/5] IIO : ADC: tiadc: Add support of TI's ADC driver
Date: Thu, 13 Sep 2012 14:51:19 +0200 [thread overview]
Message-ID: <5051D6C7.2010700@metafoo.de> (raw)
In-Reply-To: <1347532819-505-5-git-send-email-rachna-l0cyMroinI0@public.gmane.org>
On 09/13/2012 12:40 PM, Patil, Rachna wrote:
> This patch adds support for TI's ADC driver.
> This is a multifunctional device.
> Analog input lines are provided on which
> voltage measurements can be carried out.
> You can have upto 8 input lines.
>
Hi,
couple of minor issues inline.
> Signed-off-by: Patil, Rachna <rachna-l0cyMroinI0@public.gmane.org>
> ---
> Changes in v2:
> Addressed review comments from Matthias Kaehlcke
>
> Changes in v3:
> Addressed review comments from Jonathan Cameron.
> Added comments, new line appropriately.
>
> drivers/iio/adc/Kconfig | 7 +
> drivers/iio/adc/Makefile | 1 +
> drivers/iio/adc/ti_adc.c | 223 ++++++++++++++++++++++++++++++++++
> drivers/mfd/ti_tscadc.c | 18 +++-
> include/linux/mfd/ti_tscadc.h | 9 ++-
> include/linux/platform_data/ti_adc.h | 14 ++
> 6 files changed, 270 insertions(+), 2 deletions(-)
> create mode 100644 drivers/iio/adc/ti_adc.c
> create mode 100644 include/linux/platform_data/ti_adc.h
>
[...]
> +
> +struct adc_device {
Not really an issue, but I'd use a consistent function/struct prefix.
Currently you use both "adc" and "tiadc"
> + struct ti_tscadc_dev *mfd_tscadc;
> + struct iio_dev *idev;
idev is used only once in the remove callback. But you can get a pointer to
it easily using platform_get_drvdata. So I'd remove it from the adc_device
struct.
> + int channels;
> +};
> +
> +static unsigned int adc_readl(struct adc_device *adc, unsigned int reg)
> +{
> + return readl(adc->mfd_tscadc->tscadc_base + reg);
> +}
> +
> +static void adc_writel(struct adc_device *adc, unsigned int reg,
> + unsigned int val)
> +{
> + writel(val, adc->mfd_tscadc->tscadc_base + reg);
> +}
> +
> +static void adc_step_config(struct adc_device *adc_dev)
> +{
> + unsigned int stepconfig;
extra whitespace
> + int i, channels = 0, steps;
> +
> + /*
> + * There are 16 configurable steps and 8 analog input
> + * lines available which are shared between Touchscreen and ADC.
> + *
> + * Steps backwards i.e. from 16 towards 0 are used by ADC
> + * depending on number of input lines needed.
> + * Channel would represent which analog input
> + * needs to be given to ADC to digitalize data.
> + */
> +
> + steps = TOTAL_STEPS - adc_dev->channels;
> + channels = TOTAL_CHANNELS - adc_dev->channels;
> +
> + stepconfig = STEPCONFIG_AVG_16 | STEPCONFIG_FIFO1;
> +
> + for (i = (steps + 1); i <= TOTAL_STEPS; i++) {
> + adc_writel(adc_dev, REG_STEPCONFIG(i),
> + stepconfig | STEPCONFIG_INP(channels));
> + adc_writel(adc_dev, REG_STEPDELAY(i),
> + STEPCONFIG_OPENDLY);
> + channels++;
> + }
> + adc_writel(adc_dev, REG_SE, STPENB_STEPENB);
> +}
> +
> [...]
> +
> +static const struct iio_info tiadc_info = {
> + .read_raw = &tiadc_read_raw,
.driver_module = THIS_MODULE,
> +};
> +
> +static int __devinit tiadc_probe(struct platform_device *pdev)
> +{
> + struct iio_dev *idev;
For consistency with other drivers please rename idev to indio_dev
throughout the driver.
> + int err;
> + struct adc_device *adc_dev;
> + struct ti_tscadc_dev *tscadc_dev = pdev->dev.platform_data;
> + struct mfd_tscadc_board *pdata;
> +
> + pdata = (struct mfd_tscadc_board *)tscadc_dev->dev->platform_data;
The cast should not be necessary.
> + if (!pdata || !pdata->adc_init) {
> + dev_err(tscadc_dev->dev, "Could not find platform data\n");
I'd still use pdev->dev for the device parameter here. Seeing a message
printed by this driver for another device might be confusing.
> + return -EINVAL;
> + }
> +
> + idev = iio_device_alloc(sizeof(struct adc_device));
> + if (idev == NULL) {
> + dev_err(&pdev->dev, "failed to allocate iio device.\n");
> + err = -ENOMEM;
> + goto err_ret;
> + }
> + adc_dev = iio_priv(idev);
> +
> + tscadc_dev->adc = adc_dev;
This there any reason why you need to store a pointer to the adc struct in
the mfd struct? Is it going to be used outside of the adc driver? Currently
it is, as far as I can see, only used in the remove callback and
suspend/resume handlers. But there you can use iio_priv just as easily to
get the pointer to the adc device struct and it certainly will be also be
cleaner to do it that way.
> + adc_dev->mfd_tscadc = tscadc_dev;
> + adc_dev->idev = idev;
> + adc_dev->channels = pdata->adc_init->adc_channels;
> +
> + idev->dev.parent = &pdev->dev;
> + idev->name = dev_name(&pdev->dev);
> + idev->modes = INDIO_DIRECT_MODE;
> + idev->info = &tiadc_info;
> +
> + adc_step_config(adc_dev);
> +
> + err = tiadc_channel_init(idev, adc_dev->channels);
> + if (err < 0)
> + goto err_free_device;
> +
> + err = iio_device_register(idev);
> + if (err)
> + goto err_free_channels;
> +
> + dev_info(&pdev->dev, "attached adc driver\n");
I'd remove that line, it's just noise.
> + platform_set_drvdata(pdev, idev);
> +
> + return 0;
> +
> +err_free_channels:
> + tiadc_channels_remove(idev);
> +err_free_device:
> + iio_device_free(idev);
> +err_ret:
> + return err;
> +}
> +
[...]
> diff --git a/include/linux/platform_data/ti_adc.h b/include/linux/platform_data/ti_adc.h
> new file mode 100644
> index 0000000..5a89f1d
> --- /dev/null
> +++ b/include/linux/platform_data/ti_adc.h
> @@ -0,0 +1,14 @@
> +#ifndef __LINUX_TI_ADC_H
> +#define __LINUX_TI_ADC_H
> +
> +/**
> + * struct adc_data ADC Input information
> + * @adc_channels: Number of analog inputs
> + * available for ADC.
> + */
> +
> +struct adc_data {
The struct name might be a bit to generic.
> + int adc_channels;
It does not really matter, but considering that there hardly ever going to
be a negative number of channels I'd make this unsigned.
> +};
> +
> +#endif
WARNING: multiple messages have this Message-ID (diff)
From: Lars-Peter Clausen <lars@metafoo.de>
To: "Patil, Rachna" <rachna@ti.com>
Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org,
linux-iio@vger.kernel.org, Samuel Ortiz <sameo@linux.intel.com>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Dmitry Torokhov <dtor@mail.ru>,
Jonathan Cameron <jic23@cam.ac.uk>
Subject: Re: [PATCH v3 4/5] IIO : ADC: tiadc: Add support of TI's ADC driver
Date: Thu, 13 Sep 2012 14:51:19 +0200 [thread overview]
Message-ID: <5051D6C7.2010700@metafoo.de> (raw)
In-Reply-To: <1347532819-505-5-git-send-email-rachna@ti.com>
On 09/13/2012 12:40 PM, Patil, Rachna wrote:
> This patch adds support for TI's ADC driver.
> This is a multifunctional device.
> Analog input lines are provided on which
> voltage measurements can be carried out.
> You can have upto 8 input lines.
>
Hi,
couple of minor issues inline.
> Signed-off-by: Patil, Rachna <rachna@ti.com>
> ---
> Changes in v2:
> Addressed review comments from Matthias Kaehlcke
>
> Changes in v3:
> Addressed review comments from Jonathan Cameron.
> Added comments, new line appropriately.
>
> drivers/iio/adc/Kconfig | 7 +
> drivers/iio/adc/Makefile | 1 +
> drivers/iio/adc/ti_adc.c | 223 ++++++++++++++++++++++++++++++++++
> drivers/mfd/ti_tscadc.c | 18 +++-
> include/linux/mfd/ti_tscadc.h | 9 ++-
> include/linux/platform_data/ti_adc.h | 14 ++
> 6 files changed, 270 insertions(+), 2 deletions(-)
> create mode 100644 drivers/iio/adc/ti_adc.c
> create mode 100644 include/linux/platform_data/ti_adc.h
>
[...]
> +
> +struct adc_device {
Not really an issue, but I'd use a consistent function/struct prefix.
Currently you use both "adc" and "tiadc"
> + struct ti_tscadc_dev *mfd_tscadc;
> + struct iio_dev *idev;
idev is used only once in the remove callback. But you can get a pointer to
it easily using platform_get_drvdata. So I'd remove it from the adc_device
struct.
> + int channels;
> +};
> +
> +static unsigned int adc_readl(struct adc_device *adc, unsigned int reg)
> +{
> + return readl(adc->mfd_tscadc->tscadc_base + reg);
> +}
> +
> +static void adc_writel(struct adc_device *adc, unsigned int reg,
> + unsigned int val)
> +{
> + writel(val, adc->mfd_tscadc->tscadc_base + reg);
> +}
> +
> +static void adc_step_config(struct adc_device *adc_dev)
> +{
> + unsigned int stepconfig;
extra whitespace
> + int i, channels = 0, steps;
> +
> + /*
> + * There are 16 configurable steps and 8 analog input
> + * lines available which are shared between Touchscreen and ADC.
> + *
> + * Steps backwards i.e. from 16 towards 0 are used by ADC
> + * depending on number of input lines needed.
> + * Channel would represent which analog input
> + * needs to be given to ADC to digitalize data.
> + */
> +
> + steps = TOTAL_STEPS - adc_dev->channels;
> + channels = TOTAL_CHANNELS - adc_dev->channels;
> +
> + stepconfig = STEPCONFIG_AVG_16 | STEPCONFIG_FIFO1;
> +
> + for (i = (steps + 1); i <= TOTAL_STEPS; i++) {
> + adc_writel(adc_dev, REG_STEPCONFIG(i),
> + stepconfig | STEPCONFIG_INP(channels));
> + adc_writel(adc_dev, REG_STEPDELAY(i),
> + STEPCONFIG_OPENDLY);
> + channels++;
> + }
> + adc_writel(adc_dev, REG_SE, STPENB_STEPENB);
> +}
> +
> [...]
> +
> +static const struct iio_info tiadc_info = {
> + .read_raw = &tiadc_read_raw,
.driver_module = THIS_MODULE,
> +};
> +
> +static int __devinit tiadc_probe(struct platform_device *pdev)
> +{
> + struct iio_dev *idev;
For consistency with other drivers please rename idev to indio_dev
throughout the driver.
> + int err;
> + struct adc_device *adc_dev;
> + struct ti_tscadc_dev *tscadc_dev = pdev->dev.platform_data;
> + struct mfd_tscadc_board *pdata;
> +
> + pdata = (struct mfd_tscadc_board *)tscadc_dev->dev->platform_data;
The cast should not be necessary.
> + if (!pdata || !pdata->adc_init) {
> + dev_err(tscadc_dev->dev, "Could not find platform data\n");
I'd still use pdev->dev for the device parameter here. Seeing a message
printed by this driver for another device might be confusing.
> + return -EINVAL;
> + }
> +
> + idev = iio_device_alloc(sizeof(struct adc_device));
> + if (idev == NULL) {
> + dev_err(&pdev->dev, "failed to allocate iio device.\n");
> + err = -ENOMEM;
> + goto err_ret;
> + }
> + adc_dev = iio_priv(idev);
> +
> + tscadc_dev->adc = adc_dev;
This there any reason why you need to store a pointer to the adc struct in
the mfd struct? Is it going to be used outside of the adc driver? Currently
it is, as far as I can see, only used in the remove callback and
suspend/resume handlers. But there you can use iio_priv just as easily to
get the pointer to the adc device struct and it certainly will be also be
cleaner to do it that way.
> + adc_dev->mfd_tscadc = tscadc_dev;
> + adc_dev->idev = idev;
> + adc_dev->channels = pdata->adc_init->adc_channels;
> +
> + idev->dev.parent = &pdev->dev;
> + idev->name = dev_name(&pdev->dev);
> + idev->modes = INDIO_DIRECT_MODE;
> + idev->info = &tiadc_info;
> +
> + adc_step_config(adc_dev);
> +
> + err = tiadc_channel_init(idev, adc_dev->channels);
> + if (err < 0)
> + goto err_free_device;
> +
> + err = iio_device_register(idev);
> + if (err)
> + goto err_free_channels;
> +
> + dev_info(&pdev->dev, "attached adc driver\n");
I'd remove that line, it's just noise.
> + platform_set_drvdata(pdev, idev);
> +
> + return 0;
> +
> +err_free_channels:
> + tiadc_channels_remove(idev);
> +err_free_device:
> + iio_device_free(idev);
> +err_ret:
> + return err;
> +}
> +
[...]
> diff --git a/include/linux/platform_data/ti_adc.h b/include/linux/platform_data/ti_adc.h
> new file mode 100644
> index 0000000..5a89f1d
> --- /dev/null
> +++ b/include/linux/platform_data/ti_adc.h
> @@ -0,0 +1,14 @@
> +#ifndef __LINUX_TI_ADC_H
> +#define __LINUX_TI_ADC_H
> +
> +/**
> + * struct adc_data ADC Input information
> + * @adc_channels: Number of analog inputs
> + * available for ADC.
> + */
> +
> +struct adc_data {
The struct name might be a bit to generic.
> + int adc_channels;
It does not really matter, but considering that there hardly ever going to
be a negative number of channels I'd make this unsigned.
> +};
> +
> +#endif
next prev parent reply other threads:[~2012-09-13 12:51 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-13 10:40 [PATCH v3 0/5] Support for TSC/ADC MFD driver Patil, Rachna
2012-09-13 10:40 ` Patil, Rachna
2012-09-13 10:40 ` [PATCH v3 1/5] input: TSC: ti_tscadc: Rename the existing touchscreen driver Patil, Rachna
2012-09-13 10:40 ` Patil, Rachna
2012-09-13 10:40 ` [PATCH v3 2/5] MFD: ti_tscadc: Add support for TI's TSC/ADC MFDevice Patil, Rachna
2012-09-13 10:40 ` Patil, Rachna
[not found] ` <1347532819-505-1-git-send-email-rachna-l0cyMroinI0@public.gmane.org>
2012-09-13 10:40 ` [PATCH v3 3/5] input: TSC: ti_tsc: Convert TSC into a MFDevice Patil, Rachna
2012-09-13 10:40 ` Patil, Rachna
2012-09-13 10:40 ` [PATCH v3 4/5] IIO : ADC: tiadc: Add support of TI's ADC driver Patil, Rachna
2012-09-13 10:40 ` Patil, Rachna
2012-09-13 12:13 ` Jonathan Cameron
[not found] ` <5051CDEA.5080200-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-09-13 16:58 ` Dmitry Torokhov
2012-09-13 16:58 ` Dmitry Torokhov
2012-09-14 6:00 ` Patil, Rachna
2012-09-14 6:00 ` Patil, Rachna
[not found] ` <4CE347531D4CA947960AF71FF095B9323E953D32-Er742YJ7I/eIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2012-09-14 8:20 ` Jonathan Cameron
2012-09-14 8:20 ` Jonathan Cameron
[not found] ` <5052E8E9.4030206-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-09-17 6:11 ` Patil, Rachna
2012-09-17 6:11 ` Patil, Rachna
[not found] ` <1347532819-505-5-git-send-email-rachna-l0cyMroinI0@public.gmane.org>
2012-09-13 12:51 ` Lars-Peter Clausen [this message]
2012-09-13 12:51 ` Lars-Peter Clausen
2012-09-14 6:11 ` Patil, Rachna
2012-09-13 10:40 ` [PATCH v3 5/5] MFD: ti_tscadc: add suspend/resume functionality Patil, Rachna
2012-09-13 10:40 ` Patil, Rachna
[not found] ` <1347532819-505-6-git-send-email-rachna-l0cyMroinI0@public.gmane.org>
2012-09-13 13:01 ` Lars-Peter Clausen
2012-09-13 13:01 ` Lars-Peter Clausen
[not found] ` <5051D92F.1090309-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2012-09-14 4:59 ` Patil, Rachna
2012-09-14 4:59 ` Patil, Rachna
[not found] ` <4CE347531D4CA947960AF71FF095B9323E953CC3-Er742YJ7I/eIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2012-09-14 5:09 ` Venu Byravarasu
2012-09-14 5:09 ` Venu Byravarasu
2012-09-14 5:16 ` Patil, Rachna
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=5051D6C7.2010700@metafoo.de \
--to=lars-qo5elluwu/uelga04laivw@public.gmane.org \
--cc=dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=dtor-JGs/UdohzUI@public.gmane.org \
--cc=jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org \
--cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rachna-l0cyMroinI0@public.gmane.org \
--cc=sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
/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.