162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Freescale MPL115A2 pressure/temperature sensor 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2014 Peter Meerwald <pmeerw@pmeerw.net> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * (7-bit I2C slave address 0x60) 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Datasheet: http://www.nxp.com/files/sensors/doc/data_sheet/MPL115A2.pdf 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/module.h> 1362306a36Sopenharmony_ci#include <linux/i2c.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include "mpl115.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistatic int mpl115_i2c_init(struct device *dev) 1862306a36Sopenharmony_ci{ 1962306a36Sopenharmony_ci return 0; 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistatic int mpl115_i2c_read(struct device *dev, u8 address) 2362306a36Sopenharmony_ci{ 2462306a36Sopenharmony_ci return i2c_smbus_read_word_swapped(to_i2c_client(dev), address); 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistatic int mpl115_i2c_write(struct device *dev, u8 address, u8 value) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci return i2c_smbus_write_byte_data(to_i2c_client(dev), address, value); 3062306a36Sopenharmony_ci} 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistatic const struct mpl115_ops mpl115_i2c_ops = { 3362306a36Sopenharmony_ci .init = mpl115_i2c_init, 3462306a36Sopenharmony_ci .read = mpl115_i2c_read, 3562306a36Sopenharmony_ci .write = mpl115_i2c_write, 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistatic int mpl115_i2c_probe(struct i2c_client *client) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci const struct i2c_device_id *id = i2c_client_get_device_id(client); 4162306a36Sopenharmony_ci if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) 4262306a36Sopenharmony_ci return -EOPNOTSUPP; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci return mpl115_probe(&client->dev, id->name, &mpl115_i2c_ops); 4562306a36Sopenharmony_ci} 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistatic const struct i2c_device_id mpl115_i2c_id[] = { 4862306a36Sopenharmony_ci { "mpl115", 0 }, 4962306a36Sopenharmony_ci { } 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ciMODULE_DEVICE_TABLE(i2c, mpl115_i2c_id); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistatic struct i2c_driver mpl115_i2c_driver = { 5462306a36Sopenharmony_ci .driver = { 5562306a36Sopenharmony_ci .name = "mpl115", 5662306a36Sopenharmony_ci .pm = pm_ptr(&mpl115_dev_pm_ops), 5762306a36Sopenharmony_ci }, 5862306a36Sopenharmony_ci .probe = mpl115_i2c_probe, 5962306a36Sopenharmony_ci .id_table = mpl115_i2c_id, 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_cimodule_i2c_driver(mpl115_i2c_driver); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciMODULE_AUTHOR("Peter Meerwald <pmeerw@pmeerw.net>"); 6462306a36Sopenharmony_ciMODULE_DESCRIPTION("Freescale MPL115A2 pressure/temperature driver"); 6562306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 6662306a36Sopenharmony_ciMODULE_IMPORT_NS(IIO_MPL115); 67