All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Stephan Gerhold <stephan@gerhold.net>
Cc: Nick Reitemeyer <nick.reitemeyer@web.de>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
	linux-iio@vger.kernel.org,
	Linus Walleij <linus.walleij@linaro.org>,
	devicetree@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>
Subject: Re: [PATCH 3/3] iio: magnetometer: ak8974: add Alps hscdtd008a
Date: Sun, 12 Apr 2020 14:35:24 +0100	[thread overview]
Message-ID: <20200412143524.377d2c16@archlinux> (raw)
In-Reply-To: <20200406143113.GA126707@gerhold.net>

On Mon, 6 Apr 2020 16:31:13 +0200
Stephan Gerhold <stephan@gerhold.net> wrote:

> On Mon, Apr 06, 2020 at 04:13:53PM +0200, Nick Reitemeyer wrote:
> > The hscdtd008a is similar to the AK8974:
> > Only the whoami value and some registers are different.
> > 
> > Signed-off-by: Nick Reitemeyer <nick.reitemeyer@web.de>  
> 
> Thanks a lot for sending this patch upstream!
> 
> I checked this with the datasheet available here:
> https://tech.alpsalpine.com/prod/c/pdf/sensor/geomagnetic/hscd/hscdtd008a_data.pdf
> 
> Reviewed-by: Stephan Gerhold <stephan@gerhold.net>
> 
> ... and it seems to produce reasonable values on samsung-golden:
> 
> Tested-by: Stephan Gerhold <stephan@gerhold.net>
> 
> Linus Walleij might want to test this on his samsung-skomer :)

Looks good to me, but I'll need a review on the binding (particularly
the vendor prefix as it's in a generic file). 

Thanks,

Jonathan

> 
> Thanks,
> Stephan
> 
> > ---
> >  drivers/iio/magnetometer/ak8974.c | 38 ++++++++++++++++++++++++-------
> >  1 file changed, 30 insertions(+), 8 deletions(-)
> > 
> > diff --git a/drivers/iio/magnetometer/ak8974.c b/drivers/iio/magnetometer/ak8974.c
> > index d32996702110..ade4ed8f67d2 100644
> > --- a/drivers/iio/magnetometer/ak8974.c
> > +++ b/drivers/iio/magnetometer/ak8974.c
> > @@ -49,6 +49,7 @@
> >  #define AK8974_WHOAMI_VALUE_AMI306 0x46
> >  #define AK8974_WHOAMI_VALUE_AMI305 0x47
> >  #define AK8974_WHOAMI_VALUE_AK8974 0x48
> > +#define AK8974_WHOAMI_VALUE_HSCDTD008A 0x49
> > 
> >  #define AK8974_DATA_X		0x10
> >  #define AK8974_DATA_Y		0x12
> > @@ -140,6 +141,12 @@
> >  #define AK8974_INT_CTRL_PULSE	BIT(1) /* 0 = latched; 1 = pulse (50 usec) */
> >  #define AK8974_INT_CTRL_RESDEF	(AK8974_INT_CTRL_XYZEN | AK8974_INT_CTRL_POL)
> > 
> > +/* HSCDTD008A-specific control register */
> > +#define HSCDTD008A_CTRL4	0x1E
> > +#define HSCDTD008A_CTRL4_MMD	BIT(7)	/* must be set to 1 */
> > +#define HSCDTD008A_CTRL4_RANGE	BIT(4)	/* 0 = 14-bit output; 1 = 15-bit output */
> > +#define HSCDTD008A_CTRL4_RESDEF	(HSCDTD008A_CTRL4_MMD | HSCDTD008A_CTRL4_RANGE)
> > +
> >  /* The AMI305 has elaborate FW version and serial number registers */
> >  #define AMI305_VER		0xE8
> >  #define AMI305_SN		0xEA
> > @@ -241,10 +248,17 @@ static int ak8974_reset(struct ak8974 *ak8974)
> >  	ret = regmap_write(ak8974->map, AK8974_CTRL3, AK8974_CTRL3_RESDEF);
> >  	if (ret)
> >  		return ret;
> > -	ret = regmap_write(ak8974->map, AK8974_INT_CTRL,
> > -			   AK8974_INT_CTRL_RESDEF);
> > -	if (ret)
> > -		return ret;
> > +	if (ak8974->variant != AK8974_WHOAMI_VALUE_HSCDTD008A) {
> > +		ret = regmap_write(ak8974->map, AK8974_INT_CTRL,
> > +				   AK8974_INT_CTRL_RESDEF);
> > +		if (ret)
> > +			return ret;
> > +	} else {
> > +		ret = regmap_write(ak8974->map, HSCDTD008A_CTRL4,
> > +				   HSCDTD008A_CTRL4_RESDEF);
> > +		if (ret)
> > +			return ret;
> > +	}
> > 
> >  	/* After reset, power off is default state */
> >  	return ak8974_set_power(ak8974, AK8974_PWR_OFF);
> > @@ -267,6 +281,8 @@ static int ak8974_configure(struct ak8974 *ak8974)
> >  		if (ret)
> >  			return ret;
> >  	}
> > +	if (ak8974->variant == AK8974_WHOAMI_VALUE_HSCDTD008A)
> > +		return 0;
> >  	ret = regmap_write(ak8974->map, AK8974_INT_CTRL, AK8974_INT_CTRL_POL);
> >  	if (ret)
> >  		return ret;
> > @@ -495,6 +511,10 @@ static int ak8974_detect(struct ak8974 *ak8974)
> >  		name = "ak8974";
> >  		dev_info(&ak8974->i2c->dev, "detected AK8974\n");
> >  		break;
> > +	case AK8974_WHOAMI_VALUE_HSCDTD008A:
> > +		name = "hscdtd008a";
> > +		dev_info(&ak8974->i2c->dev, "detected hscdtd008a\n");
> > +		break;
> >  	default:
> >  		dev_err(&ak8974->i2c->dev, "unsupported device (%02x) ",
> >  			whoami);
> > @@ -674,18 +694,18 @@ static bool ak8974_writeable_reg(struct device *dev, unsigned int reg)
> >  	case AK8974_INT_CTRL:
> >  	case AK8974_INT_THRES:
> >  	case AK8974_INT_THRES + 1:
> > +		return true;
> >  	case AK8974_PRESET:
> >  	case AK8974_PRESET + 1:
> > -		return true;
> > +		return ak8974->variant != AK8974_WHOAMI_VALUE_HSCDTD008A;
> >  	case AK8974_OFFSET_X:
> >  	case AK8974_OFFSET_X + 1:
> >  	case AK8974_OFFSET_Y:
> >  	case AK8974_OFFSET_Y + 1:
> >  	case AK8974_OFFSET_Z:
> >  	case AK8974_OFFSET_Z + 1:
> > -		if (ak8974->variant == AK8974_WHOAMI_VALUE_AK8974)
> > -			return true;
> > -		return false;
> > +		return ak8974->variant == AK8974_WHOAMI_VALUE_AK8974 ||
> > +		       ak8974->variant == AK8974_WHOAMI_VALUE_HSCDTD008A;
> >  	case AMI305_OFFSET_X:
> >  	case AMI305_OFFSET_X + 1:
> >  	case AMI305_OFFSET_Y:
> > @@ -926,12 +946,14 @@ static const struct i2c_device_id ak8974_id[] = {
> >  	{"ami305", 0 },
> >  	{"ami306", 0 },
> >  	{"ak8974", 0 },
> > +	{"hscdtd008a", 0 },
> >  	{}
> >  };
> >  MODULE_DEVICE_TABLE(i2c, ak8974_id);
> > 
> >  static const struct of_device_id ak8974_of_match[] = {
> >  	{ .compatible = "asahi-kasei,ak8974", },
> > +	{ .compatible = "alps,hscdtd008a", },
> >  	{}
> >  };
> >  MODULE_DEVICE_TABLE(of, ak8974_of_match);
> > --
> > 2.26.0
> >   


  reply	other threads:[~2020-04-12 13:35 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-06 14:13 [PATCH 1/3] dt-bindings: vendor-prefixes: Add Alps Nick Reitemeyer
2020-04-06 14:13 ` [PATCH 2/3] dt-bindings: magnetometer: ak8974: Add Alps hscdtd008a Nick Reitemeyer
2020-04-13 22:23   ` Linus Walleij
2020-04-15  0:09   ` Rob Herring
2020-04-25 17:38     ` Jonathan Cameron
2020-04-06 14:13 ` [PATCH 3/3] iio: magnetometer: ak8974: add " Nick Reitemeyer
2020-04-06 14:31   ` Stephan Gerhold
2020-04-12 13:35     ` Jonathan Cameron [this message]
2020-04-25 17:48       ` Jonathan Cameron
2020-04-13 22:25   ` Linus Walleij
2020-04-13 22:23 ` [PATCH 1/3] dt-bindings: vendor-prefixes: Add Alps Linus Walleij
2020-04-15  0:09 ` Rob Herring

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=20200412143524.377d2c16@archlinux \
    --to=jic23@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linus.walleij@linaro.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=nick.reitemeyer@web.de \
    --cc=pmeerw@pmeerw.net \
    --cc=robh+dt@kernel.org \
    --cc=stephan@gerhold.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.