File Index
Files and directories
Sign in
FILE

st_lsm6dsx_spi.c

File preview with syntax highlighting.

linux-6.19.14/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_spi.c C
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * STMicroelectronics st_lsm6dsx spi driver
  4 *
  5 * Copyright 2016 STMicroelectronics Inc.
  6 *
  7 * Lorenzo Bianconi <lorenzo.bianconi@st.com>
  8 * Denis Ciocca <denis.ciocca@st.com>
  9 */
 10
 11#include <linux/kernel.h>
 12#include <linux/module.h>
 13#include <linux/spi/spi.h>
 14#include <linux/slab.h>
 15#include <linux/regmap.h>
 16
 17#include "st_lsm6dsx.h"
 18
 19static const struct regmap_config st_lsm6dsx_spi_regmap_config = {
 20	.reg_bits = 8,
 21	.val_bits = 8,
 22};
 23
 24static int st_lsm6dsx_spi_probe(struct spi_device *spi)
 25{
 26	const struct spi_device_id *id = spi_get_device_id(spi);
 27	int hw_id = id->driver_data;
 28	struct regmap *regmap;
 29
 30	regmap = devm_regmap_init_spi(spi, &st_lsm6dsx_spi_regmap_config);
 31	if (IS_ERR(regmap)) {
 32		dev_err(&spi->dev, "Failed to register spi regmap %ld\n", PTR_ERR(regmap));
 33		return PTR_ERR(regmap);
 34	}
 35
 36	return st_lsm6dsx_probe(&spi->dev, spi->irq, hw_id, regmap);
 37}
 38
 39static const struct of_device_id st_lsm6dsx_spi_of_match[] = {
 40	{
 41		.compatible = "st,lsm6ds3",
 42		.data = (void *)ST_LSM6DS3_ID,
 43	},
 44	{
 45		.compatible = "st,lsm6ds3h",
 46		.data = (void *)ST_LSM6DS3H_ID,
 47	},
 48	{
 49		.compatible = "st,lsm6dsl",
 50		.data = (void *)ST_LSM6DSL_ID,
 51	},
 52	{
 53		.compatible = "st,lsm6dsm",
 54		.data = (void *)ST_LSM6DSM_ID,
 55	},
 56	{
 57		.compatible = "st,ism330dlc",
 58		.data = (void *)ST_ISM330DLC_ID,
 59	},
 60	{
 61		.compatible = "st,lsm6dso",
 62		.data = (void *)ST_LSM6DSO_ID,
 63	},
 64	{
 65		.compatible = "st,asm330lhh",
 66		.data = (void *)ST_ASM330LHH_ID,
 67	},
 68	{
 69		.compatible = "st,lsm6dsox",
 70		.data = (void *)ST_LSM6DSOX_ID,
 71	},
 72	{
 73		.compatible = "st,lsm6dsr",
 74		.data = (void *)ST_LSM6DSR_ID,
 75	},
 76	{
 77		.compatible = "st,lsm6ds3tr-c",
 78		.data = (void *)ST_LSM6DS3TRC_ID,
 79	},
 80	{
 81		.compatible = "st,ism330dhcx",
 82		.data = (void *)ST_ISM330DHCX_ID,
 83	},
 84	{
 85		.compatible = "st,lsm9ds1-imu",
 86		.data = (void *)ST_LSM9DS1_ID,
 87	},
 88	{
 89		.compatible = "st,lsm6ds0",
 90		.data = (void *)ST_LSM6DS0_ID,
 91	},
 92	{
 93		.compatible = "st,lsm6dsrx",
 94		.data = (void *)ST_LSM6DSRX_ID,
 95	},
 96	{
 97		.compatible = "st,lsm6dst",
 98		.data = (void *)ST_LSM6DST_ID,
 99	},
100	{
101		.compatible = "st,lsm6dsop",
102		.data = (void *)ST_LSM6DSOP_ID,
103	},
104	{
105		.compatible = "st,asm330lhhx",
106		.data = (void *)ST_ASM330LHHX_ID,
107	},
108	{
109		.compatible = "st,lsm6dstx",
110		.data = (void *)ST_LSM6DSTX_ID,
111	},
112	{
113		.compatible = "st,lsm6dsv",
114		.data = (void *)ST_LSM6DSV_ID,
115	},
116	{
117		.compatible = "st,lsm6dsv16x",
118		.data = (void *)ST_LSM6DSV16X_ID,
119	},
120	{
121		.compatible = "st,lsm6dso16is",
122		.data = (void *)ST_LSM6DSO16IS_ID,
123	},
124	{
125		.compatible = "st,ism330is",
126		.data = (void *)ST_ISM330IS_ID,
127	},
128	{
129		.compatible = "st,asm330lhb",
130		.data = (void *)ST_ASM330LHB_ID,
131	},
132	{
133		.compatible = "st,asm330lhhxg1",
134		.data = (void *)ST_ASM330LHHXG1_ID,
135	},
136	{ }
137};
138MODULE_DEVICE_TABLE(of, st_lsm6dsx_spi_of_match);
139
140static const struct spi_device_id st_lsm6dsx_spi_id_table[] = {
141	{ ST_LSM6DS3_DEV_NAME, ST_LSM6DS3_ID },
142	{ ST_LSM6DS3H_DEV_NAME, ST_LSM6DS3H_ID },
143	{ ST_LSM6DSL_DEV_NAME, ST_LSM6DSL_ID },
144	{ ST_LSM6DSM_DEV_NAME, ST_LSM6DSM_ID },
145	{ ST_ISM330DLC_DEV_NAME, ST_ISM330DLC_ID },
146	{ ST_LSM6DSO_DEV_NAME, ST_LSM6DSO_ID },
147	{ ST_ASM330LHH_DEV_NAME, ST_ASM330LHH_ID },
148	{ ST_LSM6DSOX_DEV_NAME, ST_LSM6DSOX_ID },
149	{ ST_LSM6DSR_DEV_NAME, ST_LSM6DSR_ID },
150	{ ST_LSM6DS3TRC_DEV_NAME, ST_LSM6DS3TRC_ID },
151	{ ST_ISM330DHCX_DEV_NAME, ST_ISM330DHCX_ID },
152	{ ST_LSM9DS1_DEV_NAME, ST_LSM9DS1_ID },
153	{ ST_LSM6DS0_DEV_NAME, ST_LSM6DS0_ID },
154	{ ST_LSM6DSRX_DEV_NAME, ST_LSM6DSRX_ID },
155	{ ST_LSM6DST_DEV_NAME, ST_LSM6DST_ID },
156	{ ST_LSM6DSOP_DEV_NAME, ST_LSM6DSOP_ID },
157	{ ST_ASM330LHHX_DEV_NAME, ST_ASM330LHHX_ID },
158	{ ST_LSM6DSTX_DEV_NAME, ST_LSM6DSTX_ID },
159	{ ST_LSM6DSV_DEV_NAME, ST_LSM6DSV_ID },
160	{ ST_LSM6DSV16X_DEV_NAME, ST_LSM6DSV16X_ID },
161	{ ST_LSM6DSO16IS_DEV_NAME, ST_LSM6DSO16IS_ID },
162	{ ST_ISM330IS_DEV_NAME, ST_ISM330IS_ID },
163	{ ST_ASM330LHB_DEV_NAME, ST_ASM330LHB_ID },
164	{ ST_ASM330LHHXG1_DEV_NAME, ST_ASM330LHHXG1_ID },
165	{ }
166};
167MODULE_DEVICE_TABLE(spi, st_lsm6dsx_spi_id_table);
168
169static struct spi_driver st_lsm6dsx_driver = {
170	.driver = {
171		.name = "st_lsm6dsx_spi",
172		.pm = pm_sleep_ptr(&st_lsm6dsx_pm_ops),
173		.of_match_table = st_lsm6dsx_spi_of_match,
174	},
175	.probe = st_lsm6dsx_spi_probe,
176	.id_table = st_lsm6dsx_spi_id_table,
177};
178module_spi_driver(st_lsm6dsx_driver);
179
180MODULE_AUTHOR("Lorenzo Bianconi <lorenzo.bianconi@st.com>");
181MODULE_AUTHOR("Denis Ciocca <denis.ciocca@st.com>");
182MODULE_DESCRIPTION("STMicroelectronics st_lsm6dsx spi driver");
183MODULE_LICENSE("GPL v2");
184MODULE_IMPORT_NS("IIO_LSM6DSX");
~/ Read-only file preview.