-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
iio: imu: st_lsm6dsx: add i3c basic support for LSM6DSO and LSM6DSR
For today the st_lsm6dsx driver support LSM6DSO and LSM6DSR sensor only in spi and i2c mode. The LSM6DSO and LSM6DSR are also i3c capable so let's give i3c support to them. Signed-off-by: Vitor Soares <vitor.soares@synopsys.com> Acked-by: Lorenzo Bianconi <lorenzo@kernel.org> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
- Loading branch information
Vitor Soares
authored and
Jonathan Cameron
committed
Jul 27, 2019
1 parent
62f5b7c
commit 2660b00
Showing
3 changed files
with
65 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Copyright (c) 2018 Synopsys, Inc. and/or its affiliates. | ||
* | ||
* Author: Vitor Soares <vitor.soares@synopsys.com> | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/i3c/device.h> | ||
#include <linux/i3c/master.h> | ||
#include <linux/slab.h> | ||
#include <linux/of.h> | ||
#include <linux/regmap.h> | ||
|
||
#include "st_lsm6dsx.h" | ||
|
||
static const struct i3c_device_id st_lsm6dsx_i3c_ids[] = { | ||
I3C_DEVICE(0x0104, 0x006C, (void *)ST_LSM6DSO_ID), | ||
I3C_DEVICE(0x0104, 0x006B, (void *)ST_LSM6DSR_ID), | ||
{ /* sentinel */ }, | ||
}; | ||
MODULE_DEVICE_TABLE(i3c, st_lsm6dsx_i3c_ids); | ||
|
||
static int st_lsm6dsx_i3c_probe(struct i3c_device *i3cdev) | ||
{ | ||
struct regmap_config st_lsm6dsx_i3c_regmap_config = { | ||
.reg_bits = 8, | ||
.val_bits = 8, | ||
}; | ||
const struct i3c_device_id *id = i3c_device_match_id(i3cdev, | ||
st_lsm6dsx_i3c_ids); | ||
struct regmap *regmap; | ||
|
||
regmap = devm_regmap_init_i3c(i3cdev, &st_lsm6dsx_i3c_regmap_config); | ||
if (IS_ERR(regmap)) { | ||
dev_err(&i3cdev->dev, "Failed to register i3c regmap %d\n", | ||
(int)PTR_ERR(regmap)); | ||
return PTR_ERR(regmap); | ||
} | ||
|
||
return st_lsm6dsx_probe(&i3cdev->dev, 0, (uintptr_t)id->data, regmap); | ||
} | ||
|
||
static struct i3c_driver st_lsm6dsx_driver = { | ||
.driver = { | ||
.name = "st_lsm6dsx_i3c", | ||
.pm = &st_lsm6dsx_pm_ops, | ||
}, | ||
.probe = st_lsm6dsx_i3c_probe, | ||
.id_table = st_lsm6dsx_i3c_ids, | ||
}; | ||
module_i3c_driver(st_lsm6dsx_driver); | ||
|
||
MODULE_AUTHOR("Vitor Soares <vitor.soares@synopsys.com>"); | ||
MODULE_DESCRIPTION("STMicroelectronics st_lsm6dsx i3c driver"); | ||
MODULE_LICENSE("GPL v2"); |