summaryrefslogtreecommitdiff
path: root/drivers/staging
diff options
context:
space:
mode:
authorJinyoung Park <jinyoungp@nvidia.com>2014-04-09 20:13:25 +0900
committerMandar Padmawar <mpadmawar@nvidia.com>2014-06-05 06:16:47 -0700
commita51ebfdb1264eb31d8bc226f6295d4e8054b12ae (patch)
treeabc208c501b845961e3808b9ca361ccbd71836cb /drivers/staging
parentf005bb76fb154f9979cb61bf51c19dcab3eaad3b (diff)
stating: iio: adc: palmas: Add debugfs for auto_conv reading
Added a debugfs for auto_conv value reading. Bug 1514756 Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com> Reviewed-on: http://git-master/r/414751 (cherry picked from commit a7cc5553eb36afa799ae580d2e4c06f399e5bd8f) Change-Id: Ia7fb91dab51972235885d7a087a84ce4aabd690b Signed-off-by: Jinyoung Park <jinyoungp@nvidia.com> Reviewed-on: http://git-master/r/418393 Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/iio/adc/palmas_gpadc.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/drivers/staging/iio/adc/palmas_gpadc.c b/drivers/staging/iio/adc/palmas_gpadc.c
index 92129bf550cf..8236b0e043d9 100644
--- a/drivers/staging/iio/adc/palmas_gpadc.c
+++ b/drivers/staging/iio/adc/palmas_gpadc.c
@@ -691,6 +691,62 @@ out:
}
#ifdef CONFIG_DEBUG_FS
+static int palams_gpadc_get_auto_conv_val(struct palmas_gpadc *adc,
+ int auto_conv_ch)
+{
+ unsigned int reg;
+ unsigned int val;
+ int ret;
+
+ if (auto_conv_ch == 0) {
+ reg = PALMAS_GPADC_AUTO_CONV0_LSB;
+ } else if (auto_conv_ch == 1) {
+ reg = PALMAS_GPADC_AUTO_CONV1_LSB;
+ } else {
+ dev_err(adc->dev, "%s: Invalid auto conv channel %d\n\n",
+ __func__, auto_conv_ch);
+ return -EINVAL;
+ }
+
+ ret = palmas_bulk_read(adc->palmas, PALMAS_GPADC_BASE, reg, &val, 2);
+ if (ret < 0) {
+ dev_err(adc->dev, "%s: Auto conv%d data read failed: %d\n",
+ __func__, auto_conv_ch, ret);
+ return ret;
+ }
+
+ return (val & 0xFFF);
+}
+
+static ssize_t auto_conv_val_read(struct file *file,
+ char __user *user_buf, size_t count, loff_t *ppos)
+{
+ struct palmas_gpadc *adc = file->private_data;
+ unsigned char *d_iname;
+ char buf[64] = { 0, };
+ ssize_t ret = 0;
+ int auto_conv_ch = -1;
+
+ d_iname = file->f_path.dentry->d_iname;
+
+ if (!strcmp("auto_conv0_val", d_iname))
+ auto_conv_ch = 0;
+ else if (!strcmp("auto_conv1_val", d_iname))
+ auto_conv_ch = 1;
+
+ ret = palams_gpadc_get_auto_conv_val(adc, auto_conv_ch);
+ if (ret < 0)
+ return ret;
+
+ ret = snprintf(buf, sizeof(buf), "%d\n", ret);
+ return simple_read_from_buffer(user_buf, count, ppos, buf, ret);
+}
+
+static const struct file_operations auto_conv_val_fops = {
+ .open = simple_open,
+ .read = auto_conv_val_read,
+};
+
static int auto_conv_period_get(void *data, u64 *val)
{
struct palmas_gpadc *adc = (struct palmas_gpadc *)data;
@@ -836,6 +892,8 @@ static void palmas_gpadc_debugfs_init(struct palmas_gpadc *adc)
adc->dentry, adc, &auto_conv_data_fops);
debugfs_create_file("auto_conv0_shutdown", 0644,
adc->dentry, adc, &auto_conv_data_fops);
+ debugfs_create_file("auto_conv0_val", 0444,
+ adc->dentry, adc, &auto_conv_val_fops);
}
if (adc->auto_conv1_enable) {
@@ -847,6 +905,8 @@ static void palmas_gpadc_debugfs_init(struct palmas_gpadc *adc)
adc->dentry, adc, &auto_conv_data_fops);
debugfs_create_file("auto_conv1_shutdown", 0644,
adc->dentry, adc, &auto_conv_data_fops);
+ debugfs_create_file("auto_conv1_val", 0444,
+ adc->dentry, adc, &auto_conv_val_fops);
}
}
#else