1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2022 ROHM Semiconductors
5 * ROHM/KIONIX accelerometer driver
9 #include <linux/interrupt.h>
10 #include <linux/module.h>
11 #include <linux/regmap.h>
13 #include "kionix-kx022a.h"
15 static int kx022a_i2c_probe(struct i2c_client
*i2c
)
17 struct device
*dev
= &i2c
->dev
;
18 const struct kx022a_chip_info
*chip_info
;
19 struct regmap
*regmap
;
22 dev_err(dev
, "No IRQ configured\n");
26 chip_info
= i2c_get_match_data(i2c
);
30 regmap
= devm_regmap_init_i2c(i2c
, chip_info
->regmap_config
);
32 return dev_err_probe(dev
, PTR_ERR(regmap
),
33 "Failed to initialize Regmap\n");
35 return kx022a_probe_internal(dev
, chip_info
);
38 static const struct i2c_device_id kx022a_i2c_id
[] = {
39 { .name
= "kx022a", .driver_data
= (kernel_ulong_t
)&kx022a_chip_info
},
40 { .name
= "kx132-1211", .driver_data
= (kernel_ulong_t
)&kx132_chip_info
},
41 { .name
= "kx132acr-lbz", .driver_data
= (kernel_ulong_t
)&kx132acr_chip_info
},
44 MODULE_DEVICE_TABLE(i2c
, kx022a_i2c_id
);
46 static const struct of_device_id kx022a_of_match
[] = {
47 { .compatible
= "kionix,kx022a", .data
= &kx022a_chip_info
},
48 { .compatible
= "kionix,kx132-1211", .data
= &kx132_chip_info
},
49 { .compatible
= "rohm,kx132acr-lbz", .data
= &kx132acr_chip_info
},
52 MODULE_DEVICE_TABLE(of
, kx022a_of_match
);
54 static struct i2c_driver kx022a_i2c_driver
= {
57 .of_match_table
= kx022a_of_match
,
58 .probe_type
= PROBE_PREFER_ASYNCHRONOUS
,
60 .probe
= kx022a_i2c_probe
,
61 .id_table
= kx022a_i2c_id
,
63 module_i2c_driver(kx022a_i2c_driver
);
65 MODULE_DESCRIPTION("ROHM/Kionix KX022A accelerometer driver");
66 MODULE_AUTHOR("Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>");
67 MODULE_LICENSE("GPL");
68 MODULE_IMPORT_NS("IIO_KX022A");