1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2022 ROHM Semiconductors
5 * ROHM/KIONIX accelerometer driver
8 #include <linux/interrupt.h>
9 #include <linux/module.h>
10 #include <linux/regmap.h>
11 #include <linux/spi/spi.h>
13 #include "kionix-kx022a.h"
15 static int kx022a_spi_probe(struct spi_device
*spi
)
17 struct device
*dev
= &spi
->dev
;
18 const struct kx022a_chip_info
*chip_info
;
19 struct regmap
*regmap
;
22 dev_err(dev
, "No IRQ configured\n");
26 chip_info
= spi_get_device_match_data(spi
);
30 regmap
= devm_regmap_init_spi(spi
, 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 spi_device_id kx022a_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(spi
, kx022a_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 spi_driver kx022a_spi_driver
= {
57 .of_match_table
= kx022a_of_match
,
58 .probe_type
= PROBE_PREFER_ASYNCHRONOUS
,
60 .probe
= kx022a_spi_probe
,
61 .id_table
= kx022a_id
,
63 module_spi_driver(kx022a_spi_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");