Project 2 - Design and develop the web based Temperature control system using Beagle Bone Black.
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/platform_device.h>
#define MCP9808_DEVICE_NAME "mcp9808"
struct mcp9808_data {
struct i2c_client *client;
int temperature;
};
static int mcp9808_probe(struct platform_device *pdev) {
struct i2c_client *client = pdev->dev.platform_data;
struct mcp9808_data *data;
int ret;
data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
if (!data) {
ret = -ENOMEM;
goto out;
}
data->client = client;
ret = i2c_read(client, &data->temperature, 2);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to read temperature: %dn", ret);
goto out;
}
dev_info(&pdev->dev, "Temperature: %dn", data->temperature);
platform_set_drvdata(pdev, data);
return 0;
out:
devm_kfree(&pdev->dev, data);
return ret;
}
static int mcp9808_remove(struct platform_device *pdev) {
struct mcp9808_data *data = platform_get_drvdata(pdev);
devm_kfree(&pdev->dev, data);
return 0;
}
static struct platform_driver mcp9808_driver = {
.driver = {
.name = MCP9808_DEVICE_NAME,
},
.probe = mcp9808_probe,
.remove = mcp9808_remove,
};
module_platform_driver(mcp9808_driver);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Bard
");
MODULE_DESCRIPTION("MCP9808 Temperature Sensor Driver");