From: Martin Kepplinger <martink@posteo.de>
To: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
Cc: jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de,
christoph.muellner@theobroma-systems.com, mfuzzey@parkeon.com,
linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
Martin Kepplinger <martin.kepplinger@theobroma-systems.com>
Subject: Re: [PATCH v4] iio: mma8452: add freefall detection for Freescale's accelerometers
Date: Wed, 13 Jan 2016 17:17:10 +0100 [thread overview]
Message-ID: <56967886.1000601@posteo.de> (raw)
In-Reply-To: <alpine.DEB.2.02.1601131448290.21762@pmeerw.net>
Am 2016-01-13 um 14:53 schrieb Peter Meerwald-Stadler:
> Hello,
>
>> This adds freefall event detection to the supported devices. It adds
>> the in_accel_x&y&z_mag_falling_en iio event attribute, which activates
>> freefall mode.
>>
>> In freefall mode, the current acceleration magnitude (AND combination
>> of all axis values) is compared to the specified threshold.
>> If it falls under the threshold (in_accel_mag_falling_value),
>> the appropriate IIO event code is generated.
>>
>> This is what the sysfs "events" directory for these devices looks
>> like after this change:
>>
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_mag_falling_period
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_mag_falling_value
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_mag_rising_period
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_mag_rising_value
>> -r--r--r-- 4096 Oct 23 08:45 in_accel_scale
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_x&y&z_mag_falling_en
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_x_mag_rising_en
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_y_mag_rising_en
>> -rw-r--r-- 4096 Oct 23 08:45 in_accel_z_mag_rising_en
>
> I think it is a very good idea to have this for review, thanks!
>
> minor comments below
>
>> Signed-off-by: Martin Kepplinger <martin.kepplinger@theobroma-systems.com>
>> Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
>> ---
>> revision history
>> ----------------
>> v1:
>> initial post
>> v2:
>> build all from correct event and channel spec structs
>> v3:
>> rising and falling are treated as equal now. Until last time, I had
>> misunderstood the iio events' user API definition. This works and
>> values always reflect the current state of operation.
>> v4:
>> fix error that caused a build warning
>>
>> drivers/iio/accel/mma8452.c | 156 +++++++++++++++++++++++++++++++++++++++-----
>> 1 file changed, 139 insertions(+), 17 deletions(-)
>>
>> diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
>> index ccc632a..9534c3a 100644
>> --- a/drivers/iio/accel/mma8452.c
>> +++ b/drivers/iio/accel/mma8452.c
>> @@ -15,7 +15,7 @@
>> *
>> * 7-bit I2C slave address 0x1c/0x1d (pin selectable)
>> *
>> - * TODO: orientation / freefall events, autosleep
>> + * TODO: orientation events, autosleep
>> */
>>
>> #include <linux/module.h>
>> @@ -416,6 +416,46 @@ fail:
>> return ret;
>> }
>>
>> +static int mma8452_freefall_mode_enabled(struct mma8452_data *data)
>> +{
>> + int val;
>> + const struct mma_chip_info *chip = data->chip_info;
>> +
>> + val = i2c_smbus_read_byte_data(data->client, chip->ev_cfg);
>> + if (val < 0)
>> + return val;
>> +
>> + return !(val & MMA8452_FF_MT_CFG_OAE);
>
> I'd appreciate a comment what the possible return values of this function
> are and their purpose
>
would it also be clearer if the return value would be bool?
>> +}
>> +
>> +static int mma8452_set_freefall_mode(struct mma8452_data *data, u8 state)
>
> state seems to be used as a bool, maybe it should be bool
>
You're right. I'll change this.
>> +{
>> + int val, ret;
>
> strictly, only one of the two variable is necessary
>
true.
>> + const struct mma_chip_info *chip = data->chip_info;
>> +
>> + val = i2c_smbus_read_byte_data(data->client, chip->ev_cfg);
>> + if (val < 0)
>> + return val;
>> +
>> + if (state && !(mma8452_freefall_mode_enabled(data))) {
>> + val |= BIT(idx_x + chip->ev_cfg_chan_shift);
>> + val |= BIT(idx_y + chip->ev_cfg_chan_shift);
>> + val |= BIT(idx_z + chip->ev_cfg_chan_shift);
>> + val &= ~MMA8452_FF_MT_CFG_OAE;
>> + } else if (!state && mma8452_freefall_mode_enabled(data)) {
>> + val &= ~BIT(idx_x + chip->ev_cfg_chan_shift);
>> + val &= ~BIT(idx_y + chip->ev_cfg_chan_shift);
>> + val &= ~BIT(idx_z + chip->ev_cfg_chan_shift);
>> + val |= MMA8452_FF_MT_CFG_OAE;
>> + }
>> +
>> + ret = mma8452_change_config(data, chip->ev_cfg, val);
>> + if (ret)
>> + return ret;
>> +
>> + return 0;
>> +}
>> +
>> static int mma8452_set_hp_filter_frequency(struct mma8452_data *data,
>> int val, int val2)
>> {
>> @@ -609,12 +649,22 @@ static int mma8452_read_event_config(struct iio_dev *indio_dev,
>
> I find the return values of this functions difficult to understand,
> comment would be good
This is part of struct iio_info so shouldn't it be documented elsewhere,
not in a driver?
thanks for reviewing!
martin
prev parent reply other threads:[~2016-01-13 16:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-13 11:54 Martin Kepplinger
2016-01-13 13:53 ` Peter Meerwald-Stadler
2016-01-13 16:17 ` Martin Kepplinger [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56967886.1000601@posteo.de \
--to=martink@posteo.de \
--cc=christoph.muellner@theobroma-systems.com \
--cc=jic23@kernel.org \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.kepplinger@theobroma-systems.com \
--cc=mfuzzey@parkeon.com \
--cc=pmeerw@pmeerw.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome