diff options
author | Jinyoung Park <jinyoungp@nvidia.com> | 2014-04-09 20:13:25 +0900 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2014-06-05 06:16:47 -0700 |
commit | a51ebfdb1264eb31d8bc226f6295d4e8054b12ae (patch) | |
tree | abc208c501b845961e3808b9ca361ccbd71836cb | |
parent | f005bb76fb154f9979cb61bf51c19dcab3eaad3b (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>
-rw-r--r-- | drivers/staging/iio/adc/palmas_gpadc.c | 60 |
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 |