1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Freescale MPL115A2 pressure/temperature sensor |
4 | * |
5 | * Copyright (c) 2014 Peter Meerwald <pmeerw@pmeerw.net> |
6 | * |
7 | * (7-bit I2C slave address 0x60) |
8 | * |
9 | * Datasheet: http://www.nxp.com/files/sensors/doc/data_sheet/MPL115A2.pdf |
10 | */ |
11 | |
12 | #include <linux/module.h> |
13 | #include <linux/i2c.h> |
14 | |
15 | #include "mpl115.h" |
16 | |
17 | static int mpl115_i2c_init(struct device *dev) |
18 | { |
19 | return 0; |
20 | } |
21 | |
22 | static int mpl115_i2c_read(struct device *dev, u8 address) |
23 | { |
24 | return i2c_smbus_read_word_swapped(to_i2c_client(dev), command: address); |
25 | } |
26 | |
27 | static int mpl115_i2c_write(struct device *dev, u8 address, u8 value) |
28 | { |
29 | return i2c_smbus_write_byte_data(to_i2c_client(dev), command: address, value); |
30 | } |
31 | |
32 | static const struct mpl115_ops mpl115_i2c_ops = { |
33 | .init = mpl115_i2c_init, |
34 | .read = mpl115_i2c_read, |
35 | .write = mpl115_i2c_write, |
36 | }; |
37 | |
38 | static int mpl115_i2c_probe(struct i2c_client *client) |
39 | { |
40 | const struct i2c_device_id *id = i2c_client_get_device_id(client); |
41 | if (!i2c_check_functionality(adap: client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) |
42 | return -EOPNOTSUPP; |
43 | |
44 | return mpl115_probe(dev: &client->dev, name: id->name, ops: &mpl115_i2c_ops); |
45 | } |
46 | |
47 | static const struct i2c_device_id mpl115_i2c_id[] = { |
48 | { "mpl115" , 0 }, |
49 | { } |
50 | }; |
51 | MODULE_DEVICE_TABLE(i2c, mpl115_i2c_id); |
52 | |
53 | static struct i2c_driver mpl115_i2c_driver = { |
54 | .driver = { |
55 | .name = "mpl115" , |
56 | .pm = pm_ptr(&mpl115_dev_pm_ops), |
57 | }, |
58 | .probe = mpl115_i2c_probe, |
59 | .id_table = mpl115_i2c_id, |
60 | }; |
61 | module_i2c_driver(mpl115_i2c_driver); |
62 | |
63 | MODULE_AUTHOR("Peter Meerwald <pmeerw@pmeerw.net>" ); |
64 | MODULE_DESCRIPTION("Freescale MPL115A2 pressure/temperature driver" ); |
65 | MODULE_LICENSE("GPL" ); |
66 | MODULE_IMPORT_NS(IIO_MPL115); |
67 | |