18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Freescale MPL115A2 pressure/temperature sensor 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) 2014 Peter Meerwald <pmeerw@pmeerw.net> 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * (7-bit I2C slave address 0x60) 88c2ecf20Sopenharmony_ci * 98c2ecf20Sopenharmony_ci * Datasheet: http://www.nxp.com/files/sensors/doc/data_sheet/MPL115A2.pdf 108c2ecf20Sopenharmony_ci */ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/module.h> 138c2ecf20Sopenharmony_ci#include <linux/i2c.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include "mpl115.h" 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cistatic int mpl115_i2c_init(struct device *dev) 188c2ecf20Sopenharmony_ci{ 198c2ecf20Sopenharmony_ci return 0; 208c2ecf20Sopenharmony_ci} 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistatic int mpl115_i2c_read(struct device *dev, u8 address) 238c2ecf20Sopenharmony_ci{ 248c2ecf20Sopenharmony_ci return i2c_smbus_read_word_swapped(to_i2c_client(dev), address); 258c2ecf20Sopenharmony_ci} 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_cistatic int mpl115_i2c_write(struct device *dev, u8 address, u8 value) 288c2ecf20Sopenharmony_ci{ 298c2ecf20Sopenharmony_ci return i2c_smbus_write_byte_data(to_i2c_client(dev), address, value); 308c2ecf20Sopenharmony_ci} 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_cistatic const struct mpl115_ops mpl115_i2c_ops = { 338c2ecf20Sopenharmony_ci .init = mpl115_i2c_init, 348c2ecf20Sopenharmony_ci .read = mpl115_i2c_read, 358c2ecf20Sopenharmony_ci .write = mpl115_i2c_write, 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistatic int mpl115_i2c_probe(struct i2c_client *client, 398c2ecf20Sopenharmony_ci const struct i2c_device_id *id) 408c2ecf20Sopenharmony_ci{ 418c2ecf20Sopenharmony_ci if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) 428c2ecf20Sopenharmony_ci return -EOPNOTSUPP; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci return mpl115_probe(&client->dev, id->name, &mpl115_i2c_ops); 458c2ecf20Sopenharmony_ci} 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistatic const struct i2c_device_id mpl115_i2c_id[] = { 488c2ecf20Sopenharmony_ci { "mpl115", 0 }, 498c2ecf20Sopenharmony_ci { } 508c2ecf20Sopenharmony_ci}; 518c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(i2c, mpl115_i2c_id); 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cistatic struct i2c_driver mpl115_i2c_driver = { 548c2ecf20Sopenharmony_ci .driver = { 558c2ecf20Sopenharmony_ci .name = "mpl115", 568c2ecf20Sopenharmony_ci }, 578c2ecf20Sopenharmony_ci .probe = mpl115_i2c_probe, 588c2ecf20Sopenharmony_ci .id_table = mpl115_i2c_id, 598c2ecf20Sopenharmony_ci}; 608c2ecf20Sopenharmony_cimodule_i2c_driver(mpl115_i2c_driver); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ciMODULE_AUTHOR("Peter Meerwald <pmeerw@pmeerw.net>"); 638c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("Freescale MPL115A2 pressure/temperature driver"); 648c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 65