linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Sebastian Andrzej Siewior
	<bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
Cc: linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Samuel Ortiz <sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
	Jonathan Cameron <jic23-KWPb1pKIrIJaa/9Udqfwiw@public.gmane.org>,
	Dmitry Torokhov
	<dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>,
	Pantelis Antoniou
	<panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
Subject: Re: [PATCH 11/19] iio & mfd: ti_tscadc: Update with IIO map interface & deal with partial activation
Date: Sun, 02 Jun 2013 18:40:27 +0100	[thread overview]
Message-ID: <51AB838B.5060602@kernel.org> (raw)
In-Reply-To: <1369681926-22185-12-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>

On 05/27/2013 08:11 PM, Sebastian Andrzej Siewior wrote:
> From: Pantelis Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
>
> Add an IIO map interface that consumers can use.
>
> While we're here fix the mfd device in the case
> where a subdevice might not be activated.
Any time I read 'while we're here' it rings alarm bells.
Two issues -> Two patches please.

The level of reworking here is rather high. Probably better
to do the structural changes in one patch then follow with the
new functionality in another.

Other comments inline.
>
> Signed-off-by: Pantelis Antoniou <panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
> Signed-off-by: Felipe Balbi <balbi-l0cyMroinI0@public.gmane.org>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
> ---
>  drivers/iio/adc/ti_am335x_adc.c      |   53 +++++++++++++++++++++++++++++-----
>  drivers/mfd/ti_am335x_tscadc.c       |   29 ++++++++++++-------
>  include/linux/mfd/ti_am335x_tscadc.h |    8 ++---
>  3 files changed, 67 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
> index d821d88..cceff09 100644
> --- a/drivers/iio/adc/ti_am335x_adc.c
> +++ b/drivers/iio/adc/ti_am335x_adc.c
> @@ -20,16 +20,19 @@
>  #include <linux/slab.h>
>  #include <linux/interrupt.h>
>  #include <linux/platform_device.h>
> -#include <linux/io.h>
why? Not immediately obvious this has anything to do with the rest of this patch.
>  #include <linux/iio/iio.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
> +#include <linux/iio/machine.h>
> +#include <linux/iio/driver.h>
>
>  #include <linux/mfd/ti_am335x_tscadc.h>
>
>  struct tiadc_device {
>  	struct ti_tscadc_dev *mfd_tscadc;
>  	int channels;
> +	char *buf;
> +	struct iio_map *map;
>  };
>
>  static unsigned int tiadc_readl(struct tiadc_device *adc, unsigned int reg)
> @@ -76,25 +79,59 @@ static void tiadc_step_config(struct tiadc_device *adc_dev)
>  static int tiadc_channel_init(struct iio_dev *indio_dev, int channels)
>  {
>  	struct iio_chan_spec *chan_array;

> -	int i;
> -
> -	indio_dev->num_channels = channels;
> -	chan_array = kcalloc(indio_dev->num_channels,
> -			sizeof(struct iio_chan_spec), GFP_KERNEL);
> +	struct iio_chan_spec *chan;
> +	char *s;
> +	int i, len, size, ret;
>

This is less than beautiful... It'll cost you marginally more to
allocate a separate array for the strings, but will be a lot nicer
to read.  If we are dealing with a relatively small maximum number
then just do it as a static const char * array of all possible
strings.

> +	size = indio_dev->num_channels * (sizeof(struct iio_chan_spec) + 6);
> +	chan_array = kzalloc(size, GFP_KERNEL);
>  	if (chan_array == NULL)
>  		return -ENOMEM;
>
> -	for (i = 0; i < (indio_dev->num_channels); i++) {
> -		struct iio_chan_spec *chan = chan_array + i;
> +	/* buffer space is after the array */
> +	s = (char *)(chan_array + indio_dev->num_channels);
> +	chan = chan_array;
> +	for (i = 0; i < indio_dev->num_channels; i++, chan++, s += len + 1) {
> +
> +		len = sprintf(s, "AIN%d", i);
> +
>  		chan->type = IIO_VOLTAGE;
>  		chan->indexed = 1;
>  		chan->channel = i;
>  		chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
> +		chan->datasheet_name = s;
> +		chan->scan_type.sign = 'u';
> +		chan->scan_type.realbits = 12;
> +		chan->scan_type.storagebits = 32;
> +		chan->scan_type.shift = 0;
>  	}
>
>  	indio_dev->channels = chan_array;
>
> +	size = (indio_dev->num_channels + 1) * sizeof(struct iio_map);
> +	adc_dev->map = kzalloc(size, GFP_KERNEL);
> +	if (adc_dev->map == NULL) {
> +		kfree(chan_array);
> +		return -ENOMEM;
> +	}
> +
> +	for (i = 0; i < indio_dev->num_channels; i++) {
> +		adc_dev->map[i].adc_channel_label =
> +			chan_array[i].datasheet_name;
> +		adc_dev->map[i].consumer_dev_name = "any";
> +		adc_dev->map[i].consumer_channel = chan_array[i].datasheet_name;
> +	}
> +	adc_dev->map[i].adc_channel_label = NULL;
> +	adc_dev->map[i].consumer_dev_name = NULL;
> +	adc_dev->map[i].consumer_channel = NULL;
> +
> +	ret = iio_map_array_register(indio_dev, adc_dev->map);
> +	if (ret != 0) {
> +		kfree(adc_dev->map);
> +		kfree(chan_array);
> +		return -ENOMEM;
> +	}
> +
>  	return indio_dev->num_channels;
>  }
>
> diff --git a/drivers/mfd/ti_am335x_tscadc.c b/drivers/mfd/ti_am335x_tscadc.c
> index 5b324e5..bd127bd 100644
> --- a/drivers/mfd/ti_am335x_tscadc.c
> +++ b/drivers/mfd/ti_am335x_tscadc.c
> @@ -175,26 +175,35 @@ static	int ti_tscadc_probe(struct platform_device *pdev)
>  	ctrl |= CNTRLREG_TSCSSENB;
>  	tscadc_writel(tscadc, REG_CTRL, ctrl);
>
> +	tscadc->used_cells = 0;
> +	tscadc->tsc_cell = -1;
> +	tscadc->adc_cell = -1;
> +
>  	/* TSC Cell */
> -	cell = &tscadc->cells[TSC_CELL];
> -	cell->name = "tsc";
> -	cell->platform_data = tscadc;
> -	cell->pdata_size = sizeof(*tscadc);
> +	if (tsc_wires > 0) {
> +		tscadc->tsc_cell = tscadc->used_cells;
> +		cell = &tscadc->cells[tscadc->used_cells++];
> +		cell->name = "tsc";
> +		cell->platform_data = tscadc;
> +		cell->pdata_size = sizeof(*tscadc);
> +	}
>
>  	/* ADC Cell */
> -	cell = &tscadc->cells[ADC_CELL];
> -	cell->name = "tiadc";
> -	cell->platform_data = tscadc;
> -	cell->pdata_size = sizeof(*tscadc);
> +	if (adc_channels > 0) {
> +		tscadc->adc_cell = tscadc->used_cells;
> +		cell = &tscadc->cells[tscadc->used_cells++];
> +		cell->name = "tiadc";
> +		cell->platform_data = tscadc;
> +		cell->pdata_size = sizeof(*tscadc);
> +	}
>
>  	err = mfd_add_devices(&pdev->dev, pdev->id, tscadc->cells,
> -			TSCADC_CELLS, NULL, 0, NULL);
> +			tscadc->used_cells, NULL, 0, NULL);
>  	if (err < 0)
>  		goto err_disable_clk;
>
>  	device_init_wakeup(&pdev->dev, true);
>  	platform_set_drvdata(pdev, tscadc);
> -
>  	return 0;
>
>  err_disable_clk:
> diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
> index 9624fea..50a245f 100644
> --- a/include/linux/mfd/ti_am335x_tscadc.h
> +++ b/include/linux/mfd/ti_am335x_tscadc.h
> @@ -128,11 +128,6 @@
>
>  #define TSCADC_CELLS		2
>
> -enum tscadc_cells {
> -	TSC_CELL,
> -	ADC_CELL,
> -};
> -
>  struct mfd_tscadc_board {
>  	struct tsc_data *tsc_init;
>  	struct adc_data *adc_init;
> @@ -143,6 +138,9 @@ struct ti_tscadc_dev {
>  	struct regmap *regmap_tscadc;
>  	void __iomem *tscadc_base;
>  	int irq;
> +	int used_cells;	/* 0-2 */
> +	int tsc_cell;	/* -1 if not used */
> +	int adc_cell;	/* -1 if not used */
>  	struct mfd_cell cells[TSCADC_CELLS];
>
>  	/* tsc device */
>

  parent reply	other threads:[~2013-06-02 17:40 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-27 19:11 am335x: touch & adc patches Sebastian Andrzej Siewior
2013-05-27 19:11 ` [PATCH 02/19] input: touchscreen: am335x: Order of TSC wires, made configurable Sebastian Andrzej Siewior
2013-05-27 19:11 ` [PATCH 06/19] input/ti_am33x_tsc: remove platform_data support Sebastian Andrzej Siewior
     [not found]   ` <1369681926-22185-7-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-04 16:44     ` Dmitry Torokhov
2013-05-27 19:11 ` [PATCH 07/19] iio: adc: am335x: Add DT support Sebastian Andrzej Siewior
     [not found]   ` <1369681926-22185-8-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-02 16:58     ` Jonathan Cameron
     [not found]       ` <51AB79CE.2000001-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-04 10:12         ` Sebastian Andrzej Siewior
     [not found]           ` <20130604101202.GA1151-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-04 16:57             ` Dmitry Torokhov
     [not found] ` <1369681926-22185-1-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-05-27 19:11   ` [PATCH 01/19] input: touchscreen: am335x: Step enable bits made configurable Sebastian Andrzej Siewior
2013-05-27 19:11   ` [PATCH 03/19] input: touchscreen: am335x: remove unwanted fifo flush Sebastian Andrzej Siewior
2013-05-27 19:11   ` [PATCH 04/19] input: touchscreen: am335x: Add DT support Sebastian Andrzej Siewior
2013-05-27 19:11   ` [PATCH 05/19] input: ti_am335x_tsc: Add variance filters Sebastian Andrzej Siewior
2013-06-04 16:43     ` Dmitry Torokhov
2013-06-04 16:54       ` Sebastian Andrzej Siewior
2013-05-27 19:11   ` [PATCH 08/19] iio/ti_am335x_adc: remove platform_data support Sebastian Andrzej Siewior
     [not found]     ` <1369681926-22185-9-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-02 17:22       ` Jonathan Cameron
2013-05-27 19:11   ` [PATCH 09/19] mfd: ti_am335x_tscadc: Add DT support Sebastian Andrzej Siewior
2013-05-27 19:11   ` [PATCH 10/19] mfd/ti_am335x_tscadc: remove platform_data support Sebastian Andrzej Siewior
2013-05-27 19:11   ` [PATCH 11/19] iio & mfd: ti_tscadc: Update with IIO map interface & deal with partial activation Sebastian Andrzej Siewior
     [not found]     ` <1369681926-22185-12-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-02 17:40       ` Jonathan Cameron [this message]
     [not found]         ` <51AB838B.5060602-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-04 10:19           ` Sebastian Andrzej Siewior
2013-05-27 19:12   ` [PATCH 14/19] Documentation/DT bindings: add info for TI TSC ADC Sebastian Andrzej Siewior
     [not found]     ` <1369681926-22185-15-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-02 17:48       ` Jonathan Cameron
     [not found]         ` <51AB8568.9050104-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-04 10:24           ` Sebastian Andrzej Siewior
2013-05-27 19:12   ` [PATCH 15/19] input/ti_am335x_tsc: tiny cleanup Sebastian Andrzej Siewior
2013-06-02 17:49     ` Jonathan Cameron
2013-06-04 10:27       ` Sebastian Andrzej Siewior
2013-06-04 16:49     ` Dmitry Torokhov
2013-05-27 19:12   ` [PATCH 18/19] mfd/ti_am335x_tscadc: add a module alias for modprobe Sebastian Andrzej Siewior
2013-05-27 19:11 ` [PATCH 12/19] iio & mfd & input: ti_tscadc: Match mfd sub devices to regmap interface Sebastian Andrzej Siewior
2013-06-02 17:46   ` Jonathan Cameron
     [not found]     ` <51AB84F5.2030405-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-04 10:23       ` Sebastian Andrzej Siewior
     [not found]         ` <20130604102318.GC1151-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-04 10:25           ` Pantelis Antoniou
     [not found]             ` <F58DCC19-20B7-4385-B323-C1A2E5F22641-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@public.gmane.org>
2013-06-04 10:52               ` Sebastian Andrzej Siewior
     [not found]                 ` <20130604105210.GI1151-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-04 10:54                   ` Pantelis Antoniou
2013-06-04 11:05                     ` Sebastian Andrzej Siewior
     [not found]                       ` <20130604110532.GJ1151-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-04 11:10                         ` Pantelis Antoniou
2013-05-27 19:12 ` [PATCH 13/19] arm: dts: am33xx: add TSC/ADC mfd device support Sebastian Andrzej Siewior
2013-05-27 19:12 ` [PATCH 16/19] mfd / input: ti_am335x_tsc: rename device from tsc to TI-tsc Sebastian Andrzej Siewior
     [not found]   ` <1369681926-22185-17-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-04 16:50     ` Dmitry Torokhov
     [not found]       ` <20130604165035.GE26400-WlK9ik9hQGAhIp7JRqBPierSzoNAToWh@public.gmane.org>
2013-06-04 17:29         ` Sebastian Andrzej Siewior
2013-05-27 19:12 ` [PATCH 17/19] mfd / iio: ti_am335x_adc: rename device from tiadc to TI-adc Sebastian Andrzej Siewior
     [not found]   ` <1369681926-22185-18-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-06-02 17:50     ` Jonathan Cameron
     [not found]       ` <51AB85DB.2000305-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-04 10:28         ` Sebastian Andrzej Siewior
2013-05-27 19:12 ` [PATCH 19/19] mfd/ti_am335x_tscadc: add private lock/unlock function for regmap read/write Sebastian Andrzej Siewior
     [not found]   ` <1369681926-22185-20-git-send-email-bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-05-29  8:46     ` [PATCH 19/19 v2] " Sebastian Andrzej Siewior
     [not found]       ` <20130529084642.GA18273-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
2013-05-29 11:12         ` Mark Brown
     [not found]           ` <20130529111253.GR3660-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-05-29 11:25             ` Lars-Peter Clausen
     [not found]               ` <51A5E5B3.80201-Qo5EllUWu/uELgA04lAiVw@public.gmane.org>
2013-05-29 14:31                 ` Sebastian Andrzej Siewior

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=51AB838B.5060602@kernel.org \
    --to=jic23-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=balbi-l0cyMroinI0@public.gmane.org \
    --cc=bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
    --cc=dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@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=panto-wVdstyuyKrO8r51toPun2/C9HSW9iNxf@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).