mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Jonathan Cameron <jic23@kernel.org>,
	linux-iio@vger.kernel.org,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Sascha Weisenberger <sascha.weisenberger@siemens.com>
Subject: Re: [PATCH] iio: adc: Add support for TI ADC1x8s102
Date: Tue, 25 Apr 2017 07:44:21 +0200	[thread overview]
Message-ID: <38f562f3-69d2-67d0-ecc2-4b44d67286e2@siemens.com> (raw)
In-Reply-To: <CAHp75VfzH922Z5FfGQ7gS-+FLR7H_Q3mKm_58xmchZn5KEjiqQ@mail.gmail.com>

On 2017-04-24 23:25, Andy Shevchenko wrote:
> On Mon, Apr 24, 2017 at 11:32 PM, Jan Kiszka <jan.kiszka@siemens.com> wrote:
>> On 2017-04-24 22:05, Andy Shevchenko wrote:
>>> On Mon, 2017-04-24 at 21:28 +0200, Jan Kiszka wrote:
>>>> This is an upstream port of an IIO driver for the TI ADC108S102 and
>>>> ADC128S102. The former can be found on the Intel Galileo Gen2 and the
>>>> Siemens SIMATIC IOT2000. For those boards, ACPI-based enumeration is
>>>> included.
> 
>>>> +#ifdef CONFIG_ACPI
>>>> +typedef int (*acpi_setup_handler)(struct spi_device *,
>>>> +                              const struct
>>>> adc1x8s102_platform_data **);
>>>> +
>>>> +static const struct adc1x8s102_platform_data int3495_platform_data =
>>>> {
>>>> +    .ext_vin = 5000,        /* 5 V */
>>>> +};
>>>> +
>>>
>>>> +/* Galileo Gen 2 SPI setup */
>>>> +static int
>>>> +adc1x8s102_setup_int3495(struct spi_device *spi,
>>>> +                     const struct adc1x8s102_platform_data
>>>> **pdata)
>>>> +{
>>>
>>>> +    struct pxa2xx_spi_chip *chip_data;
>>>
>>> This one is too big to waste memory on one member.
>>>
>>>> +
>>>> +    chip_data = devm_kzalloc(&spi->dev, sizeof(*chip_data),
>>>> GFP_KERNEL);
>>>> +    if (!chip_data)
>>>> +            return -ENOMEM;
>>>> +
>>>> +    chip_data->gpio_cs = ADC1x8S102_GALILEO2_CS;
>>>> +    spi->controller_data = chip_data;
>>>> +    dev_info(&spi->dev, "setting GPIO CS value to %d\n",
>>>> +             chip_data->gpio_cs);
>>>> +    spi_setup(spi);
>>>> +
>>>> +    *pdata = &int3495_platform_data;
>>>> +
>>>> +    return 0;
>>>> +}
>>>
>>> This is weird approach.
>>
>> Let me dig deeper if are allowed to pass a static struct here as well.
>> But the struct is driver-defined.
> 
> We have _DSD for ACPI, that's why I sent another email where I was
> asking for DSDT excerpt and if it's already in the wild.

I don't find any traces of "_DSD" in those DSDTs.

> 
>>
>>> Moreover, please do not use platform data at all.
>>
>> That is just following pre-existing pattern, just look around in the
>> iio/adc folder, not to speak of others. But I'm open to learn about any
>> newer pattern there is.
> 
> Unified Device Properties API is your friend. It makes driver to
> consume resources in agnostic way.

Is that ACPI-only or a generic solution? Where is a good example? Sorry,
I still don't see how to make code out of your comments.

> 
>>>> +static const struct acpi_device_id adc1x8s102_acpi_ids[] = {
>>>> +    { "INT3495",  (kernel_ulong_t)&adc1x8s102_setup_int3495 },
>>>> +    { }
>>>> +};
>>>> +MODULE_DEVICE_TABLE(acpi, adc1x8s102_acpi_ids);
>>>> +#endif
>>>> +
>>>> +static int adc1x8s102_probe(struct spi_device *spi)
>>>> +{
>>>> +    const struct adc1x8s102_platform_data *pdata = spi-
>>>>> dev.platform_data;
>>>> +    struct adc1x8s102_state *st;
>>>> +    struct iio_dev *indio_dev;
>>>> +    int ret;
>>>> +
>>>
>>>> +#ifdef CONFIG_ACPI
>>>
>>> No.
>>
>> ...because?
> 
> Because in correctly written ->probe() all ACPI functions have stubs
> for !CONFIG_ACPI case. Just no need.

OK, will give that a try. I just don't want to leave much dead code
behind for !CONFIG_ACPI.

> 
>>>> +            setup_handler = (acpi_setup_handler)id->driver_data;
>>>> +            if (setup_handler) {
>>>> +                    ret = setup_handler(spi, &pdata);
>>>> +                    if (ret)
>>>> +                            return ret;
>>>> +            }
>>>
>>> No way.
>>
>> Constructive feedback, please.
> 
> See above. We have nowadays mechanisms to provide device properties natively.
> Without seeing DSDT I can't tell more.

You've seen it, please tell me more now.

> 
>>>> +++ b/include/linux/platform_data/adc1x8s102.h
>>>
>>> It must be no such file at all!
>>> Please, remove it completely.
>>
>> Not without explaining what the new style is. As I said, the existing
>> driver use that as well.
> 
> See above.
> 
>> The fact that there is no OF binding yet
>> exploiting this should be no excuse IMHO.
> 
> ...and I'm not talking about it at all.
> 

But I am: ACPI is not the center of the world (luckily), and this driver
shall not be designed to only work with that way of defining resources.
Therefore, I'm trying to follow driver which include OF support.

Jan

-- 
Siemens AG, Corporate Technology, CT RDA ITP SES-DE
Corporate Competence Center Embedded Linux

  reply	other threads:[~2017-04-25  5:44 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-24 19:28 Jan Kiszka
2017-04-24 20:05 ` Andy Shevchenko
2017-04-24 20:10   ` Andy Shevchenko
2017-04-24 20:37     ` Jan Kiszka
2017-04-24 20:32   ` Jan Kiszka
2017-04-24 21:25     ` Andy Shevchenko
2017-04-25  5:44       ` Jan Kiszka [this message]
2017-04-25  9:42         ` Andy Shevchenko
2017-04-25 10:53           ` Jan Kiszka
2017-04-25 11:27             ` Andy Shevchenko
2017-04-25 11:35               ` Mika Westerberg
2017-04-25 12:17                 ` Jan Kiszka
2017-04-25 12:30                   ` Mika Westerberg
2017-04-25 13:47                     ` Jan Kiszka
2017-04-25 16:12                       ` Jan Kiszka
2017-04-26  9:01                         ` Mika Westerberg
2017-04-27  6:01                           ` Jonathan Cameron
2017-04-27  6:04                             ` Jonathan Cameron
2017-05-19 16:01                             ` Mark Brown
2017-05-20 16:26                               ` Jonathan Cameron
2017-05-22 10:06                                 ` Mark Brown
2017-04-25  6:06   ` Jan Kiszka
2017-04-25  7:31 ` Peter Meerwald-Stadler
2017-04-25  9:20   ` Andy Shevchenko
2017-04-25  9:32   ` Jan Kiszka
2017-04-25 11:23     ` Andy Shevchenko
2017-04-25 12:20       ` Mika Westerberg
2017-04-26  5:37   ` Jan Kiszka
2017-04-26 10:21     ` Andy Shevchenko
2017-04-27  6:14 ` 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=38f562f3-69d2-67d0-ecc2-4b44d67286e2@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sascha.weisenberger@siemens.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome