From: Jonathan Cameron <jic23-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Martin Kepplinger
<martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>,
knaack.h-Mmb7MZpHnFY@public.gmane.org,
lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org,
pmeerw-jW+XmwGofnusTnJN9+BGXg@public.gmane.org,
mfuzzey-mB3Nsq4MPf1BDgjK7y7TUQ@public.gmane.org,
roberta.dobrescu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
pawel.moll-5wv7dgnIgG8@public.gmane.org,
mark.rutland-5wv7dgnIgG8@public.gmane.org,
ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org,
galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org
Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
christoph.muellner-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org,
Martin Kepplinger
<martin.kepplinger-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org>
Subject: Re: [PATCH 4/6] iio: mma8452: add support for MMA8652FC and MMA8653FC
Date: Sat, 5 Sep 2015 18:05:49 +0100 [thread overview]
Message-ID: <55EB20ED.1080709@kernel.org> (raw)
In-Reply-To: <1441107913-4112-5-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
On 01/09/15 12:45, Martin Kepplinger wrote:
> MMA8652FC and MMA8653FC don't provide the transient interrupt source, so
> the motion interrupt source is used by providing a new iio_chan_spec
> definition, so that other supported devices are not affected by this.
>
> Datasheets for the newly supported devices are available at Freescale's
> website:
>
> http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8652FC.pdf
> http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8653FC.pdf
>
> Signed-off-by: Martin Kepplinger <martin.kepplinger-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org>
> Signed-off-by: Christoph Muellner <christoph.muellner-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org>
One comment inline, but I'm arguing in favour of the approach you have
taken so don't worry about that!
Another nice clean focused patch.
(note I'm marking all of them as to be applied in my email archive so
if no one else chips in they'll probably get picked up next weekend.)
Jonathan
> ---
> .../devicetree/bindings/iio/accel/mma8452.txt | 4 +-
> drivers/iio/accel/Kconfig | 2 +-
> drivers/iio/accel/mma8452.c | 98 ++++++++++++++++++++--
> 3 files changed, 95 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/iio/accel/mma8452.txt b/Documentation/devicetree/bindings/iio/accel/mma8452.txt
> index c3bc272..e3c3746 100644
> --- a/Documentation/devicetree/bindings/iio/accel/mma8452.txt
> +++ b/Documentation/devicetree/bindings/iio/accel/mma8452.txt
> @@ -1,10 +1,12 @@
> -Freescale MMA8452Q or MMA8453Q triaxial accelerometer
> +Freescale MMA8452Q, MMA8453Q, MMA8652FC or MMA8653FC triaxial accelerometer
>
> Required properties:
>
> - compatible: should contain one of
> * "fsl,mma8452"
> * "fsl,mma8453"
> + * "fsl,mma8652"
> + * "fsl,mma8653"
> - reg: the I2C address of the chip
>
> Optional properties:
> diff --git a/drivers/iio/accel/Kconfig b/drivers/iio/accel/Kconfig
> index e4075a0..a37155d 100644
> --- a/drivers/iio/accel/Kconfig
> +++ b/drivers/iio/accel/Kconfig
> @@ -106,7 +106,7 @@ config MMA8452
> select IIO_TRIGGERED_BUFFER
> help
> Say yes here to build support for the following Freescale 3-axis
> - accelerometers: MMA8452Q, MMA8453Q.
> + accelerometers: MMA8452Q, MMA8453Q, MMA8652FC, MMA8653FC.
>
> To compile this driver as a module, choose M here: the module
> will be called mma8452.
> diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
> index 6b1a862..59b4455 100644
> --- a/drivers/iio/accel/mma8452.c
> +++ b/drivers/iio/accel/mma8452.c
> @@ -3,6 +3,8 @@
> *
> * MMA8452Q (12 bit)
> * MMA8453Q (10 bit)
> + * MMA8652FC (12 bit)
> + * MMA8653FC (10 bit)
> *
> * Copyright 2014 Peter Meerwald <pmeerw-jW+XmwGofnusTnJN9+BGXg@public.gmane.org>
> *
> @@ -84,6 +86,8 @@
>
> #define MMA8452_DEVICE_ID 0x2a
> #define MMA8453_DEVICE_ID 0x3a
> +#define MMA8652_DEVICE_ID 0x4a
> +#define MMA8653_DEVICE_ID 0x5a
>
> struct mma8452_data {
> struct i2c_client *client;
> @@ -791,6 +795,26 @@ static struct attribute_group mma8452_event_attribute_group = {
> .num_event_specs = ARRAY_SIZE(mma8452_transient_event), \
> }
>
> +#define MMA8652_CHANNEL(axis, idx, bits) { \
> + .type = IIO_ACCEL, \
> + .modified = 1, \
> + .channel2 = IIO_MOD_##axis, \
> + .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
> + BIT(IIO_CHAN_INFO_CALIBBIAS), \
> + .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
> + BIT(IIO_CHAN_INFO_SCALE), \
> + .scan_index = idx, \
> + .scan_type = { \
> + .sign = 's', \
> + .realbits = (bits), \
> + .storagebits = 16, \
> + .shift = 16 - (bits), \
> + .endianness = IIO_BE, \
> + }, \
> + .event_spec = mma8452_motion_event, \
I suppose you could add another macro def that does everything other than
the event_spec. However I'd argue that it is better to keep it clear like
you have done here.
> + .num_event_specs = ARRAY_SIZE(mma8452_motion_event), \
> +}
> +
> static const struct iio_chan_spec mma8452_channels[] = {
> MMA8452_CHANNEL(X, 0, 12),
> MMA8452_CHANNEL(Y, 1, 12),
> @@ -805,9 +829,25 @@ static const struct iio_chan_spec mma8453_channels[] = {
> IIO_CHAN_SOFT_TIMESTAMP(3),
> };
>
> +static const struct iio_chan_spec mma8652_channels[] = {
> + MMA8652_CHANNEL(X, 0, 12),
> + MMA8652_CHANNEL(Y, 1, 12),
> + MMA8652_CHANNEL(Z, 2, 12),
> + IIO_CHAN_SOFT_TIMESTAMP(3),
> +};
> +
> +static const struct iio_chan_spec mma8653_channels[] = {
> + MMA8652_CHANNEL(X, 0, 10),
> + MMA8652_CHANNEL(Y, 1, 10),
> + MMA8652_CHANNEL(Z, 2, 10),
> + IIO_CHAN_SOFT_TIMESTAMP(3),
> +};
> +
> enum {
> mma8452,
> mma8453,
> + mma8652,
> + mma8653,
> };
>
> static const struct mma_chip_info mma_chip_info_table[] = {
> @@ -850,6 +890,38 @@ static const struct mma_chip_info mma_chip_info_table[] = {
> .ev_ths_mask = MMA8452_TRANSIENT_THS_MASK,
> .ev_count = MMA8452_TRANSIENT_COUNT,
> },
> + [mma8652] = {
> + .chip_id = MMA8652_DEVICE_ID,
> + .channels = mma8652_channels,
> + .num_channels = ARRAY_SIZE(mma8652_channels),
> + .mma_scales = { {0, 9577}, {0, 19154}, {0, 38307} },
> + .ev_cfg = MMA8452_FF_MT_CFG,
> + .ev_cfg_ele = MMA8452_FF_MT_CFG_ELE,
> + .ev_cfg_chan_shift = 3,
> + .ev_src = MMA8452_FF_MT_SRC,
> + .ev_src_xe = MMA8452_FF_MT_SRC_XHE,
> + .ev_src_ye = MMA8452_FF_MT_SRC_YHE,
> + .ev_src_ze = MMA8452_FF_MT_SRC_ZHE,
> + .ev_ths = MMA8452_FF_MT_THS,
> + .ev_ths_mask = MMA8452_FF_MT_THS_MASK,
> + .ev_count = MMA8452_FF_MT_COUNT,
> + },
> + [mma8653] = {
> + .chip_id = MMA8653_DEVICE_ID,
> + .channels = mma8653_channels,
> + .num_channels = ARRAY_SIZE(mma8653_channels),
> + .mma_scales = { {0, 38307}, {0, 76614}, {0, 153228} },
> + .ev_cfg = MMA8452_FF_MT_CFG,
> + .ev_cfg_ele = MMA8452_FF_MT_CFG_ELE,
> + .ev_cfg_chan_shift = 3,
> + .ev_src = MMA8452_FF_MT_SRC,
> + .ev_src_xe = MMA8452_FF_MT_SRC_XHE,
> + .ev_src_ye = MMA8452_FF_MT_SRC_YHE,
> + .ev_src_ze = MMA8452_FF_MT_SRC_ZHE,
> + .ev_ths = MMA8452_FF_MT_THS,
> + .ev_ths_mask = MMA8452_FF_MT_THS_MASK,
> + .ev_count = MMA8452_FF_MT_COUNT,
> + },
> };
>
> static struct attribute *mma8452_attributes[] = {
> @@ -972,6 +1044,8 @@ static int mma8452_reset(struct i2c_client *client)
> static const struct of_device_id mma8452_dt_ids[] = {
> { .compatible = "fsl,mma8452", .data = &mma_chip_info_table[mma8452] },
> { .compatible = "fsl,mma8453", .data = &mma_chip_info_table[mma8453] },
> + { .compatible = "fsl,mma8652", .data = &mma_chip_info_table[mma8652] },
> + { .compatible = "fsl,mma8653", .data = &mma_chip_info_table[mma8653] },
> { }
> };
> MODULE_DEVICE_TABLE(of, mma8452_dt_ids);
> @@ -984,13 +1058,6 @@ static int mma8452_probe(struct i2c_client *client,
> int ret;
> const struct of_device_id *match;
>
> - ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I);
> - if (ret < 0)
> - return ret;
> -
> - if (ret != MMA8452_DEVICE_ID && ret != MMA8453_DEVICE_ID)
> - return -ENODEV;
> -
> match = of_match_device(mma8452_dt_ids, &client->dev);
> if (!match) {
> dev_err(&client->dev, "unknown device model\n");
> @@ -1006,6 +1073,21 @@ static int mma8452_probe(struct i2c_client *client,
> mutex_init(&data->lock);
> data->chip_info = match->data;
>
> + ret = i2c_smbus_read_byte_data(client, MMA8452_WHO_AM_I);
> + if (ret < 0)
> + return ret;
> +
> + switch (ret) {
> + case MMA8452_DEVICE_ID:
> + case MMA8453_DEVICE_ID:
> + case MMA8652_DEVICE_ID:
> + case MMA8653_DEVICE_ID:
> + if (ret == data->chip_info->chip_id)
> + break;
> + default:
> + return -ENODEV;
> + }
> +
> dev_info(&client->dev, "registering %s accelerometer; ID 0x%x\n",
> match->compatible, data->chip_info->chip_id);
>
> @@ -1138,6 +1220,8 @@ static SIMPLE_DEV_PM_OPS(mma8452_pm_ops, mma8452_suspend, mma8452_resume);
> static const struct i2c_device_id mma8452_id[] = {
> { "mma8452", mma8452 },
> { "mma8453", mma8453 },
> + { "mma8652", mma8652 },
> + { "mma8653", mma8653 },
> { }
> };
> MODULE_DEVICE_TABLE(i2c, mma8452_id);
>
next prev parent reply other threads:[~2015-09-05 17:05 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-01 11:45 [PATCHv6 0/6] iio: mma8452: improve driver and support more chips Martin Kepplinger
2015-09-01 11:45 ` [PATCH 1/6] iio: mma8452: refactor for seperating chip specific data Martin Kepplinger
[not found] ` <1441107913-4112-2-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
2015-09-05 16:52 ` Jonathan Cameron
2015-09-12 10:07 ` Jonathan Cameron
2015-09-01 11:45 ` [PATCH 2/6] iio: mma8452: add support for MMA8453Q accelerometer chip Martin Kepplinger
[not found] ` <1441107913-4112-3-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
2015-09-05 16:56 ` Jonathan Cameron
2015-09-12 10:07 ` Jonathan Cameron
2015-09-01 11:45 ` [PATCH 3/6] iio: mma8452: add freefall / motion interrupt source Martin Kepplinger
[not found] ` <1441107913-4112-4-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
2015-09-05 16:58 ` Jonathan Cameron
2015-09-12 10:08 ` Jonathan Cameron
[not found] ` <1441107913-4112-1-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
2015-09-01 11:45 ` [PATCH 4/6] iio: mma8452: add support for MMA8652FC and MMA8653FC Martin Kepplinger
[not found] ` <1441107913-4112-5-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
2015-09-05 17:05 ` Jonathan Cameron [this message]
2015-09-12 10:08 ` Jonathan Cameron
2015-09-01 11:45 ` [PATCH 5/6] iio: mma8452: add copyright notice comment Martin Kepplinger
[not found] ` <1441107913-4112-6-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
2015-09-12 10:09 ` Jonathan Cameron
2015-09-01 11:45 ` [PATCH 6/6] iio: mma8452: leave sysfs namings to the iio core Martin Kepplinger
[not found] ` <1441107913-4112-7-git-send-email-martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org>
2015-09-05 17:07 ` Jonathan Cameron
2015-09-12 10:09 ` Jonathan Cameron
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=55EB20ED.1080709@kernel.org \
--to=jic23-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
--cc=christoph.muellner-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
--cc=knaack.h-Mmb7MZpHnFY@public.gmane.org \
--cc=lars-Qo5EllUWu/uELgA04lAiVw@public.gmane.org \
--cc=linux-iio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=martin.kepplinger-SN7IsUiht6C/RdPyistoZJqQE7yCjDx5@public.gmane.org \
--cc=martink-1KBjaw7Xf1+zQB+pC5nmwQ@public.gmane.org \
--cc=mfuzzey-mB3Nsq4MPf1BDgjK7y7TUQ@public.gmane.org \
--cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
--cc=pmeerw-jW+XmwGofnusTnJN9+BGXg@public.gmane.org \
--cc=roberta.dobrescu-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/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;
as well as URLs for NNTP newsgroup(s).