2019-05-29 16:57:44 -07:00
// SPDX-License-Identifier: GPL-2.0-only
2017-03-04 16:31:26 +08:00
/*
* ADXL345 3 - Axis Digital Accelerometer SPI driver
*
* Copyright ( c ) 2017 Eva Rachel Retuya < eraretuya @ gmail . com >
*/
# include <linux/module.h>
# include <linux/regmap.h>
# include <linux/spi/spi.h>
# include "adxl345.h"
# define ADXL345_MAX_SPI_FREQ_HZ 5000000
static const struct regmap_config adxl345_spi_regmap_config = {
. reg_bits = 8 ,
. val_bits = 8 ,
/* Setting bits 7 and 6 enables multiple-byte read */
. read_flag_mask = BIT ( 7 ) | BIT ( 6 ) ,
} ;
static int adxl345_spi_probe ( struct spi_device * spi )
{
struct regmap * regmap ;
/* Bail out if max_speed_hz exceeds 5 MHz */
2022-02-22 11:00:02 +02:00
if ( spi - > max_speed_hz > ADXL345_MAX_SPI_FREQ_HZ )
return dev_err_probe ( & spi - > dev , - EINVAL , " SPI CLK, %d Hz exceeds 5 MHz \n " ,
spi - > max_speed_hz ) ;
2017-03-04 16:31:26 +08:00
regmap = devm_regmap_init_spi ( spi , & adxl345_spi_regmap_config ) ;
2022-02-22 11:00:02 +02:00
if ( IS_ERR ( regmap ) )
return dev_err_probe ( & spi - > dev , PTR_ERR ( regmap ) , " Error initializing regmap \n " ) ;
2017-03-04 16:31:26 +08:00
2022-02-22 11:00:05 +02:00
return adxl345_core_probe ( & spi - > dev , regmap ) ;
2017-03-04 16:31:26 +08:00
}
static const struct spi_device_id adxl345_spi_id [ ] = {
2018-07-13 14:50:44 +03:00
{ " adxl345 " , ADXL345 } ,
{ " adxl375 " , ADXL375 } ,
2017-03-04 16:31:26 +08:00
{ }
} ;
MODULE_DEVICE_TABLE ( spi , adxl345_spi_id ) ;
static const struct of_device_id adxl345_of_match [ ] = {
2022-02-22 11:00:03 +02:00
{ . compatible = " adi,adxl345 " , . data = ( const void * ) ADXL345 } ,
{ . compatible = " adi,adxl375 " , . data = ( const void * ) ADXL375 } ,
2022-02-22 11:00:08 +02:00
{ }
2017-03-04 16:31:26 +08:00
} ;
MODULE_DEVICE_TABLE ( of , adxl345_of_match ) ;
2022-02-22 11:00:06 +02:00
static const struct acpi_device_id adxl345_acpi_match [ ] = {
{ " ADS0345 " , ADXL345 } ,
{ }
} ;
MODULE_DEVICE_TABLE ( acpi , adxl345_acpi_match ) ;
2017-03-04 16:31:26 +08:00
static struct spi_driver adxl345_spi_driver = {
. driver = {
. name = " adxl345_spi " ,
. of_match_table = adxl345_of_match ,
2022-02-22 11:00:06 +02:00
. acpi_match_table = adxl345_acpi_match ,
2017-03-04 16:31:26 +08:00
} ,
. probe = adxl345_spi_probe ,
. id_table = adxl345_spi_id ,
} ;
module_spi_driver ( adxl345_spi_driver ) ;
MODULE_AUTHOR ( " Eva Rachel Retuya <eraretuya@gmail.com> " ) ;
MODULE_DESCRIPTION ( " ADXL345 3-Axis Digital Accelerometer SPI driver " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;
2022-01-16 18:05:28 +00:00
MODULE_IMPORT_NS ( IIO_ADXL345 ) ;