mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
iio: accel: add support for FXLS8962AF/FXLS8964AF accelerometers
Add basic support for NXP FXLS8962AF/FXLS8964AF Automotive accelerometers. It will allow setting up scale/gain and reading x,y,z axis. Datasheet: https://www.nxp.com/docs/en/data-sheet/FXLS8962AF.pdf Datasheet: https://www.nxp.com/docs/en/data-sheet/FXLS8964AF.pdf Signed-off-by: Sean Nyekjaer <sean@geanix.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
committed by
Jonathan Cameron
parent
f7d5c18a8c
commit
a3e0b51884
@@ -226,6 +226,33 @@ config DMARD10
|
||||
Choosing M will build the driver as a module. If so, the module
|
||||
will be called dmard10.
|
||||
|
||||
config FXLS8962AF
|
||||
tristate
|
||||
|
||||
config FXLS8962AF_I2C
|
||||
tristate "NXP FXLS8962AF/FXLS8964AF Accelerometer I2C Driver"
|
||||
depends on I2C
|
||||
select FXLS8962AF
|
||||
select REGMAP_I2C
|
||||
help
|
||||
Say yes here to build support for the NXP 3-axis automotive
|
||||
accelerometer FXLS8962AF/FXLS8964AF with I2C support.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called fxls8962af_i2c.
|
||||
|
||||
config FXLS8962AF_SPI
|
||||
tristate "NXP FXLS8962AF/FXLS8964AF Accelerometer SPI Driver"
|
||||
depends on SPI
|
||||
select FXLS8962AF
|
||||
select REGMAP_SPI
|
||||
help
|
||||
Say yes here to build support for the NXP 3-axis automotive
|
||||
accelerometer FXLS8962AF/FXLS8964AF with SPI support.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called fxls8962af_spi.
|
||||
|
||||
config HID_SENSOR_ACCEL_3D
|
||||
depends on HID_SENSOR_HUB
|
||||
select IIO_BUFFER
|
||||
|
||||
@@ -27,6 +27,9 @@ obj-$(CONFIG_DA311) += da311.o
|
||||
obj-$(CONFIG_DMARD06) += dmard06.o
|
||||
obj-$(CONFIG_DMARD09) += dmard09.o
|
||||
obj-$(CONFIG_DMARD10) += dmard10.o
|
||||
obj-$(CONFIG_FXLS8962AF) += fxls8962af-core.o
|
||||
obj-$(CONFIG_FXLS8962AF_I2C) += fxls8962af-i2c.o
|
||||
obj-$(CONFIG_FXLS8962AF_SPI) += fxls8962af-spi.o
|
||||
obj-$(CONFIG_HID_SENSOR_ACCEL_3D) += hid-sensor-accel-3d.o
|
||||
obj-$(CONFIG_KXCJK1013) += kxcjk-1013.o
|
||||
obj-$(CONFIG_KXSD9) += kxsd9.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,57 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* NXP FXLS8962AF/FXLS8964AF Accelerometer I2C Driver
|
||||
*
|
||||
* Copyright 2021 Connected Cars A/S
|
||||
*/
|
||||
|
||||
#include <linux/dev_printk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#include "fxls8962af.h"
|
||||
|
||||
static int fxls8962af_probe(struct i2c_client *client)
|
||||
{
|
||||
struct regmap *regmap;
|
||||
|
||||
regmap = devm_regmap_init_i2c(client, &fxls8962af_regmap_conf);
|
||||
if (IS_ERR(regmap)) {
|
||||
dev_err(&client->dev, "Failed to initialize i2c regmap\n");
|
||||
return PTR_ERR(regmap);
|
||||
}
|
||||
|
||||
return fxls8962af_core_probe(&client->dev, regmap, client->irq);
|
||||
}
|
||||
|
||||
static const struct i2c_device_id fxls8962af_id[] = {
|
||||
{ "fxls8962af", fxls8962af },
|
||||
{ "fxls8964af", fxls8964af },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, fxls8962af_id);
|
||||
|
||||
static const struct of_device_id fxls8962af_of_match[] = {
|
||||
{ .compatible = "nxp,fxls8962af" },
|
||||
{ .compatible = "nxp,fxls8964af" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, fxls8962af_of_match);
|
||||
|
||||
static struct i2c_driver fxls8962af_driver = {
|
||||
.driver = {
|
||||
.name = "fxls8962af_i2c",
|
||||
.of_match_table = fxls8962af_of_match,
|
||||
.pm = &fxls8962af_pm_ops,
|
||||
},
|
||||
.probe_new = fxls8962af_probe,
|
||||
.id_table = fxls8962af_id,
|
||||
};
|
||||
module_i2c_driver(fxls8962af_driver);
|
||||
|
||||
MODULE_AUTHOR("Sean Nyekjaer <sean@geanix.com>");
|
||||
MODULE_DESCRIPTION("NXP FXLS8962AF/FXLS8964AF accelerometer i2c driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
@@ -0,0 +1,57 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* NXP FXLS8962AF/FXLS8964AF Accelerometer SPI Driver
|
||||
*
|
||||
* Copyright 2021 Connected Cars A/S
|
||||
*/
|
||||
|
||||
#include <linux/dev_printk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#include "fxls8962af.h"
|
||||
|
||||
static int fxls8962af_probe(struct spi_device *spi)
|
||||
{
|
||||
struct regmap *regmap;
|
||||
|
||||
regmap = devm_regmap_init_spi(spi, &fxls8962af_regmap_conf);
|
||||
if (IS_ERR(regmap)) {
|
||||
dev_err(&spi->dev, "Failed to initialize spi regmap\n");
|
||||
return PTR_ERR(regmap);
|
||||
}
|
||||
|
||||
return fxls8962af_core_probe(&spi->dev, regmap, spi->irq);
|
||||
}
|
||||
|
||||
static const struct of_device_id fxls8962af_spi_of_match[] = {
|
||||
{ .compatible = "nxp,fxls8962af" },
|
||||
{ .compatible = "nxp,fxls8964af" },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, fxls8962af_spi_of_match);
|
||||
|
||||
static const struct spi_device_id fxls8962af_spi_id_table[] = {
|
||||
{ "fxls8962af", fxls8962af },
|
||||
{ "fxls8964af", fxls8964af },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(spi, fxls8962af_spi_id_table);
|
||||
|
||||
static struct spi_driver fxls8962af_driver = {
|
||||
.driver = {
|
||||
.name = "fxls8962af_spi",
|
||||
.pm = &fxls8962af_pm_ops,
|
||||
.of_match_table = fxls8962af_spi_of_match,
|
||||
},
|
||||
.probe = fxls8962af_probe,
|
||||
.id_table = fxls8962af_spi_id_table,
|
||||
};
|
||||
module_spi_driver(fxls8962af_driver);
|
||||
|
||||
MODULE_AUTHOR("Sean Nyekjaer <sean@geanix.com>");
|
||||
MODULE_DESCRIPTION("NXP FXLS8962AF/FXLS8964AF accelerometer spi driver");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
@@ -0,0 +1,22 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright 2021 Connected Cars A/S
|
||||
*/
|
||||
#ifndef _FXLS8962AF_H_
|
||||
#define _FXLS8962AF_H_
|
||||
|
||||
struct regmap;
|
||||
struct device;
|
||||
|
||||
enum {
|
||||
fxls8962af,
|
||||
fxls8964af,
|
||||
};
|
||||
|
||||
int fxls8962af_core_probe(struct device *dev, struct regmap *regmap, int irq);
|
||||
int fxls8962af_core_remove(struct device *dev);
|
||||
|
||||
extern const struct dev_pm_ops fxls8962af_pm_ops;
|
||||
extern const struct regmap_config fxls8962af_regmap_conf;
|
||||
|
||||
#endif /* _FXLS8962AF_H_ */
|
||||
Reference in New Issue
Block a user