Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp2646161imm; Fri, 24 Aug 2018 02:55:35 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZqaLOcuSq1fpJBWqLcovZh/jIEywUxqXno9H23St8lSI1pTQfojdRiwXQ4dXO7f5jx9YOv X-Received: by 2002:a17:902:280b:: with SMTP id e11-v6mr1003981plb.298.1535104535464; Fri, 24 Aug 2018 02:55:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535104535; cv=none; d=google.com; s=arc-20160816; b=ArVJb4FWmjR082Zd9YRtH5/+617+Bon/jW+zmqmCEt5S0QCOwVlCk3i1qWRc4Ug8F9 FTtioFZiucAlDWuB4kGaaieUo1uZP1bgV+aBu+eCVfNkponr7Mrv/61Ww6xzHDZ42JJO UWRjTQREBpMNdLElJi+IUMJMtQC9NRrPtI+LYKuS9hkSJqlcjSR7prtj+1Cd5mKHgL4w I2Ea8RBzDLY6CWC2qSCFZ/NsSOUgPdlM3K7T/HUHqn9LGjRZ9plSj5I9hVHhDctkADbl 06XrfTsdo01CIa19qiIomM6wIb3GTI+8aQErGRIxo3Bwf8Af/WvM9KDloFS+9rCWOrfE X2cA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=BmPn3Ui+wn7l8U/+D7YYbAknqK83axwm9I6WGgXVU6I=; b=p6JFjBe1DgZ5HvOaZe9oxB1BrmdbRWamVp3iDYWQ+jdjI6eI5JMioWFAzDDpjl+AUB oDyn+Fc+5b9DDojaKFmA9azzPTn2oS039HGNhldNnRp1yLo2/g+mIWchslkGVjAPSGW4 Lw4CqtlYKBitp2vnJpPbC2/Ikic7FvFbOyOeG7wdMgAMqVF8vpsZSmEhP2Ek9ovvuX1c GDcMiA+wL+DVucjlZGDOTwCrdtklps+S/AwPgky7Hu9eBVc/u80bvfXUPFMeLo7ZYxsn RWDn0XhZ5NDUev4KF6wCIO3ooRMS2yrFmbnNumli+4TH37RGCzgGSYuTgYhIjWScE3+H yKMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=JZ885sKY; 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 cb1-v6si6586179plb.128.2018.08.24.02.55.18; Fri, 24 Aug 2018 02:55:35 -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=JZ885sKY; 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 S1727059AbeHXN2G (ORCPT + 99 others); Fri, 24 Aug 2018 09:28:06 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:41088 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726622AbeHXN2G (ORCPT ); Fri, 24 Aug 2018 09:28:06 -0400 Received: by mail-pl1-f195.google.com with SMTP id p4-v6so886128pll.8 for ; Fri, 24 Aug 2018 02:54:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=BmPn3Ui+wn7l8U/+D7YYbAknqK83axwm9I6WGgXVU6I=; b=JZ885sKYI54pJRtQk/y1J7Z5BdCO4wDXqTuv+FBR68A+ipytK4NvpGN69GLWG+Hy+H Tbk5hTHgFoMyt24wMAozLYRPR/5A10VmfhQQ/tNWqA1ypkNtYc2/OyPyiAksYb5gJb5Z mtf0hAmiExkqMfVH/Anhehfzrm+m1FeSVnVCo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=BmPn3Ui+wn7l8U/+D7YYbAknqK83axwm9I6WGgXVU6I=; b=uLsIaBg9B0w0Css47mskC4CL210ggQbzxqgXoeLJG3cWek5oiu3T+aej4czWBUkdYp FVwyPHrAeGOHrOov71+3pdjWpzQpojwww/l59YvwarGtPGTK4ucQzn6RyYrt3v5EtCEA i2aJGVs3bFWexqLI3yv2UXUZzy4hGavktMTu/CUgcqLYoUIsmFv6KU4C3bhd59V9f21K 1MaoGFOC9z0xfVDJWRlE5QDFZN9zaf7oRSGdYWm/Ep06gqCgy5saxlS2z/pPNbpXMI6i sGUscnDxTYuK4JMGHYs0aLUtnjMOPapt80f8gXbgPLJJbOASmAN3qPFhix2XG87x4mP2 K0dA== X-Gm-Message-State: APzg51DBopjM3QCuT1z2K5FLSAJQCjpKjnqfkReKrS6kc0LmdT1W9G0A tVXvC4DwGLWHNcA7bYkiHJpuHA== X-Received: by 2002:a17:902:28eb:: with SMTP id f98-v6mr970754plb.149.1535104452763; Fri, 24 Aug 2018 02:54:12 -0700 (PDT) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id j16-v6sm22046560pfk.125.2018.08.24.02.54.09 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 24 Aug 2018 02:54:12 -0700 (PDT) From: Baolin Wang To: jic23@kernel.org, robh+dt@kernel.org, mark.rutland@arm.com Cc: knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, freeman.liu@spreadtrum.com, broonie@kernel.org, baolin.wang@linaro.org, devicetree@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] iio: adc: sc27xx: Add raw data support Date: Fri, 24 Aug 2018 17:53:15 +0800 Message-Id: <4a7e33457617e6f0f7c9627fe20ddd3039e4fe82.1535103920.git.baolin.wang@linaro.org> X-Mailer: git-send-email 1.7.9.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. 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) -- 1.7.9.5