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), 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), 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(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) 42 return -EOPNOTSUPP; 43 44 return mpl115_probe(&client->dev, id->name, &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