Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp6604772imm; Mon, 27 Aug 2018 20:15:41 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdb2Att+DJaOv5foFem3teyGNqPa9V+VHE4XN2nmq01k3fuAMYCihquCbJ+ijwF4ozWcY3AQ X-Received: by 2002:a63:6501:: with SMTP id z1-v6mr14469844pgb.419.1535426141865; Mon, 27 Aug 2018 20:15:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535426141; cv=none; d=google.com; s=arc-20160816; b=TW4Qa2O5rqekyrJZ+Is8DN08dUE1g8eYQGEZiVVZW8in30ktuSSSQMuzCaFovI7i+E 4EeORLQgS8hlVpBxpueP/TxuUp4QnkSoOSYLUuON3k6wjeOy9sHwvWsE0NXjSSIrSwHe hLjEN3hECNu/TqQO6A0be67AalLPwXbyNNvZBUnlvG3Z2zDJ5n4XmfmLavuu4rUOZHDo m3VTdjLIQ4yreX00SszWaxtt+q7bTgkY2xCfS1uswfdc0FWgQb1qwQ53imbX2GAKxTTs uz/uG4AseGCVkAJT2FKb0tT4xIPkvaGvjc4XJmHAF6y8y+0p9tTvk49NBa3sEqFV0s+J fY+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=LW6wZj0eMcyZEpEPq3ZHe1Rwr7EK6b/x2V0toy2Rqjs=; b=Ew3EUYBFDG1Va5tVUlX0xJKML7u1zvxoAqpX4iE3ndqi46mtFsjkD09fphE8+AG/aD SjyLl/GoDKW1OdAUC3/q4wBKLti0TOKEgp/ceCy6RUwrORVHpgwdL72GXIH2GUdRrn8q Qbbg8rdoMQTnv/WkJoFe2Uv+T2lIMNEefCeiU6J9rb7ani6TzN3Cgd3dcv1DzXNvfFOj at52zkVLqHUHIjccsslkeBM7MiYjVpXuax4v8Ht5+uIdp9GSrS0xnVD2wqmXtlzTgiZ8 dfRcoPRJMbUUiDNp9BAKrPCA4VCD1k6P1U1AzdTEHMceMRUfSIkhHP/XXl05jbD7pqpx +r3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=AnlkNqBH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 138-v6si1067462pga.188.2018.08.27.20.15.23; Mon, 27 Aug 2018 20:15:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=AnlkNqBH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726909AbeH1HDl (ORCPT + 99 others); Tue, 28 Aug 2018 03:03:41 -0400 Received: from mail-oi0-f68.google.com ([209.85.218.68]:39882 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726181AbeH1HDl (ORCPT ); Tue, 28 Aug 2018 03:03:41 -0400 Received: by mail-oi0-f68.google.com with SMTP id c190-v6so267476oig.6 for ; Mon, 27 Aug 2018 20:14:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=LW6wZj0eMcyZEpEPq3ZHe1Rwr7EK6b/x2V0toy2Rqjs=; b=AnlkNqBH9Ou2pZsSjW+GOTiZVDc4XxJihukUiOgTM3rPE5bgdv+Y+9suemNjhBCYro BpP9i4bR8qz7RqjEcQym0A29DCSps7okuyEo0HBabb1F0xVgNIdxVjJiVhVQiBDJz3lx pj6iIUQiK9rBwSeNilsB/Shj16vD/QU8i6zks= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=LW6wZj0eMcyZEpEPq3ZHe1Rwr7EK6b/x2V0toy2Rqjs=; b=d1BSCBN7M9Odm4mUMyhdgaKZBeHOvFB9PJ3kYnxhaaw2Qbh7kU/tmVqpiHMjinS49K yOcHE904zzKTvE1f1c+4xvp9OGtqZMvOoIDigVaRlIxT5RslXAY1rJSpdTTnwO/GnY5R CJ9WRh8Sy1N6DR1b+xOi5No+4O6r64phvAIq4kdvuYXygP8aDMmKbcKI6SUV4t1Wli9H p5+dqDudLVjwR7SW15hUopKGwRGgSyHOvBJfoxt38qDBDxrIaSzUd4GTe10mCbJqVw3S qgSvFN2SRIGBNAgDsJbHf288iK6iva5Un6+n8hMJZv4eJSXNCgVueLfBIzstARsE+FXU 7ReQ== X-Gm-Message-State: APzg51BByZUZhCRnmpIoLr/wZeYubuZPvzuW+mEtn5GvDwIvrVSBHNTy hyF57P38Srcpnwl0LdHW+xPO2IcbI5bjs6r3x5MiQA== X-Received: by 2002:aca:be56:: with SMTP id o83-v6mr1319265oif.301.1535426049993; Mon, 27 Aug 2018 20:14:09 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a9d:29:0:0:0:0:0 with HTTP; Mon, 27 Aug 2018 20:14:09 -0700 (PDT) In-Reply-To: <20180825093841.72a5d099@archlinux> References: <4a7e33457617e6f0f7c9627fe20ddd3039e4fe82.1535103920.git.baolin.wang@linaro.org> <20180825093841.72a5d099@archlinux> From: Baolin Wang Date: Tue, 28 Aug 2018 11:14:09 +0800 Message-ID: Subject: Re: [PATCH 1/2] iio: adc: sc27xx: Add raw data support To: Jonathan Cameron Cc: Rob Herring , Mark Rutland , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald-Stadler , freeman.liu@spreadtrum.com, Mark Brown , DTML , linux-iio@vger.kernel.org, LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jonathan, On 25 August 2018 at 16:38, Jonathan Cameron wrote: > On Fri, 24 Aug 2018 17:53:15 +0800 > Baolin Wang wrote: > >> The headset device will use channel 20 of ADC controller to detect events, >> but it needs the raw ADC data to do conversion according to its own formula. >> >> Thus we should configure the channel mask separately and configure channel >> 20 as IIO_CHAN_INFO_RAW, as well as adding raw data read support. > > So is this a general thing, i.e. that channel is 'meant' to be used for the > headset, or just a one off for a particular board? > If it is a general thing, than I'm fine with this (unlikely we'll break any > other users), but if not we need to find a nicer way to do it. Yes, it is a general thing. Now channel 20 is always used for the headset. > I am a little unclear on how a channel would provide the voltage on it's pin > but that could be wrong when used for a different purpose? > If it's just a matter of unusual loading characteristics then perhaps that > is valid, but I'd like to understand this a little. On our platform, the headset will use this voltage value reading from ADC to check the headset events: headset buttons, headset plugin and so on. >> >> Signed-off-by: Baolin Wang >> --- >> drivers/iio/adc/sc27xx_adc.c | 80 ++++++++++++++++++++++++------------------ >> 1 file changed, 45 insertions(+), 35 deletions(-) >> >> diff --git a/drivers/iio/adc/sc27xx_adc.c b/drivers/iio/adc/sc27xx_adc.c >> index 2b60efe..153c311 100644 >> --- a/drivers/iio/adc/sc27xx_adc.c >> +++ b/drivers/iio/adc/sc27xx_adc.c >> @@ -273,6 +273,17 @@ static int sc27xx_adc_read_raw(struct iio_dev *indio_dev, >> int ret, tmp; >> >> switch (mask) { >> + case IIO_CHAN_INFO_RAW: >> + mutex_lock(&indio_dev->mlock); >> + ret = sc27xx_adc_read(data, chan->channel, scale, &tmp); >> + mutex_unlock(&indio_dev->mlock); >> + >> + if (ret) >> + return ret; >> + >> + *val = tmp; >> + return IIO_VAL_INT; >> + >> case IIO_CHAN_INFO_PROCESSED: >> mutex_lock(&indio_dev->mlock); >> ret = sc27xx_adc_read_processed(data, chan->channel, scale, >> @@ -315,48 +326,47 @@ static int sc27xx_adc_write_raw(struct iio_dev *indio_dev, >> .write_raw = &sc27xx_adc_write_raw, >> }; >> >> -#define SC27XX_ADC_CHANNEL(index) { \ >> +#define SC27XX_ADC_CHANNEL(index, mask) { \ >> .type = IIO_VOLTAGE, \ >> .channel = index, \ >> - .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) | \ >> - BIT(IIO_CHAN_INFO_SCALE), \ >> + .info_mask_separate = mask | BIT(IIO_CHAN_INFO_SCALE), \ >> .datasheet_name = "CH##index", \ >> .indexed = 1, \ >> } >> >> static const struct iio_chan_spec sc27xx_channels[] = { >> - SC27XX_ADC_CHANNEL(0), >> - SC27XX_ADC_CHANNEL(1), >> - SC27XX_ADC_CHANNEL(2), >> - SC27XX_ADC_CHANNEL(3), >> - SC27XX_ADC_CHANNEL(4), >> - SC27XX_ADC_CHANNEL(5), >> - SC27XX_ADC_CHANNEL(6), >> - SC27XX_ADC_CHANNEL(7), >> - SC27XX_ADC_CHANNEL(8), >> - SC27XX_ADC_CHANNEL(9), >> - SC27XX_ADC_CHANNEL(10), >> - SC27XX_ADC_CHANNEL(11), >> - SC27XX_ADC_CHANNEL(12), >> - SC27XX_ADC_CHANNEL(13), >> - SC27XX_ADC_CHANNEL(14), >> - SC27XX_ADC_CHANNEL(15), >> - SC27XX_ADC_CHANNEL(16), >> - SC27XX_ADC_CHANNEL(17), >> - SC27XX_ADC_CHANNEL(18), >> - SC27XX_ADC_CHANNEL(19), >> - SC27XX_ADC_CHANNEL(20), >> - SC27XX_ADC_CHANNEL(21), >> - SC27XX_ADC_CHANNEL(22), >> - SC27XX_ADC_CHANNEL(23), >> - SC27XX_ADC_CHANNEL(24), >> - SC27XX_ADC_CHANNEL(25), >> - SC27XX_ADC_CHANNEL(26), >> - SC27XX_ADC_CHANNEL(27), >> - SC27XX_ADC_CHANNEL(28), >> - SC27XX_ADC_CHANNEL(29), >> - SC27XX_ADC_CHANNEL(30), >> - SC27XX_ADC_CHANNEL(31), >> + SC27XX_ADC_CHANNEL(0, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(1, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(2, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(3, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(4, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(5, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(6, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(7, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(8, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(9, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(10, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(11, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(12, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(13, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(14, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(15, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(16, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(17, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(18, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(19, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(20, BIT(IIO_CHAN_INFO_RAW)), >> + SC27XX_ADC_CHANNEL(21, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(22, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(23, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(24, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(25, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(26, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(27, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(28, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(29, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(30, BIT(IIO_CHAN_INFO_PROCESSED)), >> + SC27XX_ADC_CHANNEL(31, BIT(IIO_CHAN_INFO_PROCESSED)), >> }; >> >> static int sc27xx_adc_enable(struct sc27xx_adc_data *data) > -- Baolin Wang Best Regards