61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* rk806-i2c.c -- I2C access for Rockchip RK806
|
|
*
|
|
* Copyright (c) 2023 Rockchip Electronics Co., Ltd.
|
|
*
|
|
* Author: Xu Shengfei <xsf@rock-chips.com>
|
|
*/
|
|
|
|
#include <linux/i2c.h>
|
|
#include <linux/mfd/rk806.h>
|
|
#include <linux/regmap.h>
|
|
|
|
static int rk806_i2c_probe(struct i2c_client *client,
|
|
const struct i2c_device_id *id)
|
|
{
|
|
struct rk806 *rk806;
|
|
|
|
rk806 = devm_kzalloc(&client->dev, sizeof(*rk806), GFP_KERNEL);
|
|
if (!rk806)
|
|
return -ENOMEM;
|
|
|
|
i2c_set_clientdata(client, rk806);
|
|
rk806->dev = &client->dev;
|
|
rk806->irq = client->irq;
|
|
|
|
if (!client->irq) {
|
|
dev_err(&client->dev, "No interrupt support, no core IRQ\n");
|
|
return -EINVAL;
|
|
}
|
|
|
|
rk806->regmap = devm_regmap_init_i2c(client, &rk806_regmap_config);
|
|
if (IS_ERR(rk806->regmap)) {
|
|
dev_err(&client->dev, "regmap initialization failed\n");
|
|
return PTR_ERR(rk806->regmap);
|
|
}
|
|
|
|
return rk806_device_init(rk806);
|
|
}
|
|
|
|
static void rk806_remove(struct i2c_client *client)
|
|
{
|
|
struct rk806 *rk806 = i2c_get_clientdata(client);
|
|
|
|
rk806_device_exit(rk806);
|
|
}
|
|
|
|
static struct i2c_driver rk806_i2c_driver = {
|
|
.driver = {
|
|
.name = "rk806",
|
|
.of_match_table = of_match_ptr(rk806_of_match),
|
|
},
|
|
.probe = rk806_i2c_probe,
|
|
.remove = rk806_remove,
|
|
};
|
|
module_i2c_driver(rk806_i2c_driver);
|
|
|
|
MODULE_AUTHOR("Xu Shengfei <xsf@rock-chips.com>");
|
|
MODULE_DESCRIPTION("RK806 I2C Interface Driver");
|
|
MODULE_LICENSE("GPL");
|