mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-28 23:24:50 +00:00
iio: imu: lsm6dsx: Support SMO8B30 ACPI ID for LSM6DS3TR-C
ID seen in the wild and it is a valid ST micro ID. An offset of 1 for the device ID enum is needed when adding support for retrieving the ID from device_get_match_data() to allow detection of NULL pointer and fallback to i2c_device_id table. DSDT chunk cropped for relevant parts. Scope (_SB.PCI0.I2C5) { Device (DEV) { Name (_HID, EisaId ("SMO8B30")) // _HID: Hardware ID Name (_CID, EisaId ("SMO8B30")) // _CID: Compatible ID Name (_UID, Zero) // _UID: Unique ID Method (_CRS, 0, NotSerialized) // _CRS: Current Resource Settings { Name (RBUF, ResourceTemplate () { I2cSerialBusV2 (0x006A, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "\\_SB.PCI0.I2C5", 0x00, ResourceConsumer, , Exclusive, ) }) Return (RBUF) /* \_SB_.PCI0.I2C5.DEV_._CRS.RBUF */ } Method (ROTM, 0, NotSerialized) { Name (RBUF, Package (0x03) { "0 -1 0", "1 0 0", "0 0 1" }) Return (RBUF) /* \_SB_.PCI0.I2C5.DEV_.ROTM.RBUF */ } ... Link: https://lore.kernel.org/all/20230129182441.082f29d0@jic23-huawei/ Reported-by: Darrell Kavanagh <darrell.kavanagh@gmail.com> Tested-by: Darrell Kavanagh <darrell.kavanagh@gmail.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Link: https://lore.kernel.org/r/20230130201018.981024-2-jic23@kernel.org
This commit is contained in:
parent
fba51482b6
commit
bd66b6acd2
2 changed files with 15 additions and 3 deletions
|
@ -40,7 +40,7 @@
|
|||
#define ST_ASM330LHB_DEV_NAME "asm330lhb"
|
||||
|
||||
enum st_lsm6dsx_hw_id {
|
||||
ST_LSM6DS3_ID,
|
||||
ST_LSM6DS3_ID = 1,
|
||||
ST_LSM6DS3H_ID,
|
||||
ST_LSM6DSL_ID,
|
||||
ST_LSM6DSM_ID,
|
||||
|
|
|
@ -23,10 +23,15 @@ static const struct regmap_config st_lsm6dsx_i2c_regmap_config = {
|
|||
|
||||
static int st_lsm6dsx_i2c_probe(struct i2c_client *client)
|
||||
{
|
||||
const struct i2c_device_id *id = i2c_client_get_device_id(client);
|
||||
int hw_id = id->driver_data;
|
||||
int hw_id;
|
||||
struct regmap *regmap;
|
||||
|
||||
hw_id = (kernel_ulong_t)device_get_match_data(&client->dev);
|
||||
if (!hw_id)
|
||||
hw_id = i2c_client_get_device_id(client)->driver_data;
|
||||
if (!hw_id)
|
||||
return -EINVAL;
|
||||
|
||||
regmap = devm_regmap_init_i2c(client, &st_lsm6dsx_i2c_regmap_config);
|
||||
if (IS_ERR(regmap)) {
|
||||
dev_err(&client->dev, "Failed to register i2c regmap %ld\n", PTR_ERR(regmap));
|
||||
|
@ -133,6 +138,12 @@ static const struct of_device_id st_lsm6dsx_i2c_of_match[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(of, st_lsm6dsx_i2c_of_match);
|
||||
|
||||
static const struct acpi_device_id st_lsm6dsx_i2c_acpi_match[] = {
|
||||
{ "SMO8B30", ST_LSM6DS3TRC_ID, },
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, st_lsm6dsx_i2c_acpi_match);
|
||||
|
||||
static const struct i2c_device_id st_lsm6dsx_i2c_id_table[] = {
|
||||
{ ST_LSM6DS3_DEV_NAME, ST_LSM6DS3_ID },
|
||||
{ ST_LSM6DS3H_DEV_NAME, ST_LSM6DS3H_ID },
|
||||
|
@ -166,6 +177,7 @@ static struct i2c_driver st_lsm6dsx_driver = {
|
|||
.name = "st_lsm6dsx_i2c",
|
||||
.pm = pm_sleep_ptr(&st_lsm6dsx_pm_ops),
|
||||
.of_match_table = st_lsm6dsx_i2c_of_match,
|
||||
.acpi_match_table = st_lsm6dsx_i2c_acpi_match,
|
||||
},
|
||||
.probe_new = st_lsm6dsx_i2c_probe,
|
||||
.id_table = st_lsm6dsx_i2c_id_table,
|
||||
|
|
Loading…
Reference in a new issue