#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/pm.h>
#include <linux/pm_runtime.h>
#include <linux/bma150.h>
#define ABSMAX_ACC_VAL …
#define ABSMIN_ACC_VAL …
#define BMA150_XYZ_DATA_SIZE …
#define BMA150_POLL_INTERVAL …
#define BMA150_POLL_MAX …
#define BMA150_POLL_MIN …
#define BMA150_MODE_NORMAL …
#define BMA150_MODE_SLEEP …
#define BMA150_MODE_WAKE_UP …
#define BMA150_DATA_0_REG …
#define BMA150_DATA_1_REG …
#define BMA150_DATA_2_REG …
#define BMA150_CTRL_0_REG …
#define BMA150_CTRL_1_REG …
#define BMA150_CTRL_2_REG …
#define BMA150_CTRL_3_REG …
#define BMA150_CFG_0_REG …
#define BMA150_CFG_1_REG …
#define BMA150_CFG_2_REG …
#define BMA150_CFG_3_REG …
#define BMA150_CFG_4_REG …
#define BMA150_CFG_5_REG …
#define BMA150_CHIP_ID …
#define BMA150_CHIP_ID_REG …
#define BMA150_ACC_X_LSB_REG …
#define BMA150_SLEEP_POS …
#define BMA150_SLEEP_MSK …
#define BMA150_SLEEP_REG …
#define BMA150_BANDWIDTH_POS …
#define BMA150_BANDWIDTH_MSK …
#define BMA150_BANDWIDTH_REG …
#define BMA150_RANGE_POS …
#define BMA150_RANGE_MSK …
#define BMA150_RANGE_REG …
#define BMA150_WAKE_UP_POS …
#define BMA150_WAKE_UP_MSK …
#define BMA150_WAKE_UP_REG …
#define BMA150_SW_RES_POS …
#define BMA150_SW_RES_MSK …
#define BMA150_SW_RES_REG …
#define BMA150_ANY_MOTION_EN_POS …
#define BMA150_ANY_MOTION_EN_MSK …
#define BMA150_ANY_MOTION_EN_REG …
#define BMA150_ANY_MOTION_DUR_POS …
#define BMA150_ANY_MOTION_DUR_MSK …
#define BMA150_ANY_MOTION_DUR_REG …
#define BMA150_ANY_MOTION_THRES_REG …
#define BMA150_ADV_INT_EN_POS …
#define BMA150_ADV_INT_EN_MSK …
#define BMA150_ADV_INT_EN_REG …
#define BMA150_HIGH_G_EN_POS …
#define BMA150_HIGH_G_EN_MSK …
#define BMA150_HIGH_G_EN_REG …
#define BMA150_HIGH_G_HYST_POS …
#define BMA150_HIGH_G_HYST_MSK …
#define BMA150_HIGH_G_HYST_REG …
#define BMA150_HIGH_G_DUR_REG …
#define BMA150_HIGH_G_THRES_REG …
#define BMA150_LOW_G_EN_POS …
#define BMA150_LOW_G_EN_MSK …
#define BMA150_LOW_G_EN_REG …
#define BMA150_LOW_G_HYST_POS …
#define BMA150_LOW_G_HYST_MSK …
#define BMA150_LOW_G_HYST_REG …
#define BMA150_LOW_G_DUR_REG …
#define BMA150_LOW_G_THRES_REG …
struct bma150_data { … };
static const struct bma150_cfg default_cfg = …;
static int bma150_write_byte(struct i2c_client *client, u8 reg, u8 val)
{ … }
static int bma150_set_reg_bits(struct i2c_client *client,
int val, int shift, u8 mask, u8 reg)
{ … }
static int bma150_set_mode(struct bma150_data *bma150, u8 mode)
{ … }
static int bma150_soft_reset(struct bma150_data *bma150)
{ … }
static int bma150_set_range(struct bma150_data *bma150, u8 range)
{ … }
static int bma150_set_bandwidth(struct bma150_data *bma150, u8 bw)
{ … }
static int bma150_set_low_g_interrupt(struct bma150_data *bma150,
u8 enable, u8 hyst, u8 dur, u8 thres)
{ … }
static int bma150_set_high_g_interrupt(struct bma150_data *bma150,
u8 enable, u8 hyst, u8 dur, u8 thres)
{ … }
static int bma150_set_any_motion_interrupt(struct bma150_data *bma150,
u8 enable, u8 dur, u8 thres)
{ … }
static void bma150_report_xyz(struct bma150_data *bma150)
{ … }
static irqreturn_t bma150_irq_thread(int irq, void *dev)
{ … }
static void bma150_poll(struct input_dev *input)
{ … }
static int bma150_open(struct input_dev *input)
{ … }
static void bma150_close(struct input_dev *input)
{ … }
static int bma150_initialize(struct bma150_data *bma150,
const struct bma150_cfg *cfg)
{ … }
static int bma150_probe(struct i2c_client *client)
{ … }
static void bma150_remove(struct i2c_client *client)
{ … }
static int __maybe_unused bma150_suspend(struct device *dev)
{ … }
static int __maybe_unused bma150_resume(struct device *dev)
{ … }
static UNIVERSAL_DEV_PM_OPS(bma150_pm, bma150_suspend, bma150_resume, NULL);
static const struct i2c_device_id bma150_id[] = …;
MODULE_DEVICE_TABLE(i2c, bma150_id);
static struct i2c_driver bma150_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;