112ed2786SPuranjay Mohan // SPDX-License-Identifier: GPL-2.0-only 212ed2786SPuranjay Mohan /* 312ed2786SPuranjay Mohan * ADXL355 3-Axis Digital Accelerometer I2C driver 412ed2786SPuranjay Mohan * 512ed2786SPuranjay Mohan * Copyright (c) 2021 Puranjay Mohan <puranjay12@gmail.com> 612ed2786SPuranjay Mohan */ 712ed2786SPuranjay Mohan 812ed2786SPuranjay Mohan #include <linux/i2c.h> 912ed2786SPuranjay Mohan #include <linux/module.h> 1012ed2786SPuranjay Mohan #include <linux/mod_devicetable.h> 1112ed2786SPuranjay Mohan #include <linux/regmap.h> 1212ed2786SPuranjay Mohan 1312ed2786SPuranjay Mohan #include "adxl355.h" 1412ed2786SPuranjay Mohan 1512ed2786SPuranjay Mohan static const struct regmap_config adxl355_i2c_regmap_config = { 1612ed2786SPuranjay Mohan .reg_bits = 8, 1712ed2786SPuranjay Mohan .val_bits = 8, 1812ed2786SPuranjay Mohan .max_register = 0x2F, 1912ed2786SPuranjay Mohan .rd_table = &adxl355_readable_regs_tbl, 2012ed2786SPuranjay Mohan .wr_table = &adxl355_writeable_regs_tbl, 2112ed2786SPuranjay Mohan }; 2212ed2786SPuranjay Mohan 2312ed2786SPuranjay Mohan static int adxl355_i2c_probe(struct i2c_client *client) 2412ed2786SPuranjay Mohan { 2512ed2786SPuranjay Mohan struct regmap *regmap; 26d3532d69SRamona Bolboaca const struct adxl355_chip_info *chip_data; 27d3532d69SRamona Bolboaca 28*ad25fc28SBiju Das chip_data = i2c_get_match_data(client); 29d3532d69SRamona Bolboaca if (!chip_data) 30*ad25fc28SBiju Das return -ENODEV; 3112ed2786SPuranjay Mohan 3212ed2786SPuranjay Mohan regmap = devm_regmap_init_i2c(client, &adxl355_i2c_regmap_config); 3312ed2786SPuranjay Mohan if (IS_ERR(regmap)) { 3412ed2786SPuranjay Mohan dev_err(&client->dev, "Error initializing i2c regmap: %ld\n", 3512ed2786SPuranjay Mohan PTR_ERR(regmap)); 3612ed2786SPuranjay Mohan 3712ed2786SPuranjay Mohan return PTR_ERR(regmap); 3812ed2786SPuranjay Mohan } 3912ed2786SPuranjay Mohan 40d3532d69SRamona Bolboaca return adxl355_core_probe(&client->dev, regmap, chip_data); 4112ed2786SPuranjay Mohan } 4212ed2786SPuranjay Mohan 4312ed2786SPuranjay Mohan static const struct i2c_device_id adxl355_i2c_id[] = { 44d3532d69SRamona Bolboaca { "adxl355", (kernel_ulong_t)&adxl35x_chip_info[ADXL355] }, 45d3532d69SRamona Bolboaca { "adxl359", (kernel_ulong_t)&adxl35x_chip_info[ADXL359] }, 4612ed2786SPuranjay Mohan { } 4712ed2786SPuranjay Mohan }; 4812ed2786SPuranjay Mohan MODULE_DEVICE_TABLE(i2c, adxl355_i2c_id); 4912ed2786SPuranjay Mohan 5012ed2786SPuranjay Mohan static const struct of_device_id adxl355_of_match[] = { 51d3532d69SRamona Bolboaca { .compatible = "adi,adxl355", .data = &adxl35x_chip_info[ADXL355] }, 52d3532d69SRamona Bolboaca { .compatible = "adi,adxl359", .data = &adxl35x_chip_info[ADXL359] }, 5312ed2786SPuranjay Mohan { } 5412ed2786SPuranjay Mohan }; 5512ed2786SPuranjay Mohan MODULE_DEVICE_TABLE(of, adxl355_of_match); 5612ed2786SPuranjay Mohan 5712ed2786SPuranjay Mohan static struct i2c_driver adxl355_i2c_driver = { 5812ed2786SPuranjay Mohan .driver = { 5912ed2786SPuranjay Mohan .name = "adxl355_i2c", 6012ed2786SPuranjay Mohan .of_match_table = adxl355_of_match, 6112ed2786SPuranjay Mohan }, 627cf15f42SUwe Kleine-König .probe = adxl355_i2c_probe, 6312ed2786SPuranjay Mohan .id_table = adxl355_i2c_id, 6412ed2786SPuranjay Mohan }; 6512ed2786SPuranjay Mohan module_i2c_driver(adxl355_i2c_driver); 6612ed2786SPuranjay Mohan 6712ed2786SPuranjay Mohan MODULE_AUTHOR("Puranjay Mohan <puranjay12@gmail.com>"); 6812ed2786SPuranjay Mohan MODULE_DESCRIPTION("ADXL355 3-Axis Digital Accelerometer I2C driver"); 6912ed2786SPuranjay Mohan MODULE_LICENSE("GPL v2"); 70fe2fe330SJonathan Cameron MODULE_IMPORT_NS(IIO_ADXL355); 71