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; 2612ed2786SPuranjay Mohan 2712ed2786SPuranjay Mohan regmap = devm_regmap_init_i2c(client, &adxl355_i2c_regmap_config); 2812ed2786SPuranjay Mohan if (IS_ERR(regmap)) { 2912ed2786SPuranjay Mohan dev_err(&client->dev, "Error initializing i2c regmap: %ld\n", 3012ed2786SPuranjay Mohan PTR_ERR(regmap)); 3112ed2786SPuranjay Mohan 3212ed2786SPuranjay Mohan return PTR_ERR(regmap); 3312ed2786SPuranjay Mohan } 3412ed2786SPuranjay Mohan 3512ed2786SPuranjay Mohan return adxl355_core_probe(&client->dev, regmap, client->name); 3612ed2786SPuranjay Mohan } 3712ed2786SPuranjay Mohan 3812ed2786SPuranjay Mohan static const struct i2c_device_id adxl355_i2c_id[] = { 3912ed2786SPuranjay Mohan { "adxl355", 0 }, 4012ed2786SPuranjay Mohan { } 4112ed2786SPuranjay Mohan }; 4212ed2786SPuranjay Mohan MODULE_DEVICE_TABLE(i2c, adxl355_i2c_id); 4312ed2786SPuranjay Mohan 4412ed2786SPuranjay Mohan static const struct of_device_id adxl355_of_match[] = { 4512ed2786SPuranjay Mohan { .compatible = "adi,adxl355" }, 4612ed2786SPuranjay Mohan { } 4712ed2786SPuranjay Mohan }; 4812ed2786SPuranjay Mohan MODULE_DEVICE_TABLE(of, adxl355_of_match); 4912ed2786SPuranjay Mohan 5012ed2786SPuranjay Mohan static struct i2c_driver adxl355_i2c_driver = { 5112ed2786SPuranjay Mohan .driver = { 5212ed2786SPuranjay Mohan .name = "adxl355_i2c", 5312ed2786SPuranjay Mohan .of_match_table = adxl355_of_match, 5412ed2786SPuranjay Mohan }, 5512ed2786SPuranjay Mohan .probe_new = adxl355_i2c_probe, 5612ed2786SPuranjay Mohan .id_table = adxl355_i2c_id, 5712ed2786SPuranjay Mohan }; 5812ed2786SPuranjay Mohan module_i2c_driver(adxl355_i2c_driver); 5912ed2786SPuranjay Mohan 6012ed2786SPuranjay Mohan MODULE_AUTHOR("Puranjay Mohan <puranjay12@gmail.com>"); 6112ed2786SPuranjay Mohan MODULE_DESCRIPTION("ADXL355 3-Axis Digital Accelerometer I2C driver"); 6212ed2786SPuranjay Mohan MODULE_LICENSE("GPL v2"); 63*fe2fe330SJonathan Cameron MODULE_IMPORT_NS(IIO_ADXL355); 64