lkml.org 
[lkml]   [2014]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH v5 0/4] iio: Add support for rotation from north
Hi,

Since you have only one attribute, it is working for you.
There is a dereference error in *channels.

Check the attached diff, which will fix this.

Thanks,
Srinivas

On 07/09/2014 03:12 PM, Reyad Attiyat wrote:
> Hey Srinivas,
>
> I did look into the panic you sent. I wasn't sure exactly what caused
> the NULL pointer.
> I tested it with out applying the last rotation from north patch, so
> no hid usages are found, my device only has rotation_from_north, and
> hid_parse_report() would return -EINVAL.
> I added another check to make sure a iio channel were set up, and
> return -EINVAL if not, but couldn't think of anything else.
>
> Could you test this version with dynamic debugging and see if it is
> finding any hid usage attributes.
> Any ideas what could cause this? I think I'm handling errors properly
> by returning what parse_report returns (-EINVAL or -ENOMEM) in probe
>
> Thanks,
> Reyad Attiyat
>
> On Wed, Jul 9, 2014 at 2:45 PM, Srinivas Pandruvada
> <srinivas.pandruvada@linux.intel.com> wrote:
>> On 07/09/2014 12:30 PM, Reyad Attiyat wrote:
>>> This series of patches modifies magn-3d driver to handle the rotation
>>> from north usage. This is done by scanning the report and then building
>>> the iio arrays (vals and channels) dynamically.
>>>
>>> Changes from V4
>>> I use the address field of struct iio_chan_spec to hold the array index
>>> of the usage attribute. The scan_index field is generated when creating
>>> an iio channel.
>>>
>>> Reyad Attiyat (4):
>>> iio: Documentation: Add documentation for rotation from north sensor
>>> usage attributes
>>> iio: types: Added support for rotation from north usage attributes
>>> iio: hid-sensor-magn-3d: Scan for usage attributes before setting up
>>> iio channels
>>> iio: hid-sensor-magn-3d: Add support for rotation from north
>>>
>>> Documentation/ABI/testing/sysfs-bus-iio | 82 +++++++++++
>>> drivers/iio/industrialio-core.c | 4 +
>>> drivers/iio/magnetometer/hid-sensor-magn-3d.c | 199
>>> ++++++++++++++++++++------
>>> include/linux/iio/types.h | 4 +
>>> 4 files changed, 245 insertions(+), 44 deletions(-)
>>>
>> Did you get chance to look at the cause of panic?
>>
>> Thanks,
>> Srinivas

diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
index 070d20e..63f23af 100644
--- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c
+++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
@@ -271,6 +271,7 @@ static int magn_3d_parse_report(struct platform_device *pdev,
int ret = 0;
int i;
int attr_count = 0;
+ struct iio_chan_spec *_channels;

/* Scan for each usage attribute supported */
for (i = 0; i < MAGN_3D_CHANNEL_MAX; i++) {
@@ -300,10 +301,10 @@ static int magn_3d_parse_report(struct platform_device *pdev,
return -EINVAL;

/* Setup IIO channel array */
- *channels = devm_kcalloc(&pdev->dev, attr_count,
+ _channels = devm_kcalloc(&pdev->dev, attr_count,
sizeof(struct iio_chan_spec),
GFP_KERNEL);
- if (!*channels) {
+ if (!_channels) {
dev_err(&pdev->dev, "failed to allocate space for iio channels\n");
return -ENOMEM;
}
@@ -322,14 +323,16 @@ static int magn_3d_parse_report(struct platform_device *pdev,
{
if (st->magn[i].index >= 0) {
/* Setup IIO channel struct */
- *channels[*chan_count] = magn_3d_channels[i];
+ _channels[*chan_count] = magn_3d_channels[i];

st->magn_val_addr[i] = &(st->iio_val[*chan_count]);
- magn_3d_adjust_channel_bit_mask(*channels, *chan_count, st->magn[i].size);
+ magn_3d_adjust_channel_bit_mask(_channels, *chan_count, st->magn[i].size);
(*chan_count)++;
}
}

+ *channels = _channels;
+
st->scale_precision = hid_sensor_format_scale(
HID_USAGE_SENSOR_COMPASS_3D,
&st->magn[CHANNEL_SCAN_INDEX_X],
\
 
 \ /
  Last update: 2014-07-18 12:41    [W:0.052 / U:0.916 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site