Messages in this thread Patch in this message | | | Date | Tue, 15 Jul 2014 14:39:04 -0700 | From | Srinivas Pandruvada <> | Subject | Re: [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], | |