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