brintos

brintos / linux-shallow public Read only

0
0
Text · 4.4 KiB · c122c88 Raw
185 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * STMicroelectronics st_lsm6dsx spi driver4 *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);185