1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * PMIC driver for the StarFive JH7110 SoC
5 * Copyright (C) 2022 changhuang <changhuang.liang@starfivetech.com>
9 #include <linux/init.h>
10 #include <linux/module.h>
11 #include <linux/device.h>
12 #include <soc/starfive/jh7110_pmic.h>
14 static struct pmic_dev *pmic_dev;
16 static int pmic_read_reg(struct pmic_dev *pmic_dev, u8 reg)
18 struct i2c_client *client = pmic_dev->i2c_client;
19 int ret = i2c_smbus_read_byte_data(client, reg);
22 dev_err(&client->dev, "Read Error\n");
27 static int pmic_write_reg(struct pmic_dev *pmic_dev, u8 reg, u8 val)
29 struct i2c_client *client = pmic_dev->i2c_client;
30 int ret = i2c_smbus_write_byte_data(client, reg, val);
33 dev_err(&client->dev, "Write Error\n");
38 static void pmic_set_bit(struct pmic_dev *pmic_dev, u8 reg, u8 mask, u8 val)
42 value = pmic_read_reg(pmic_dev, reg) & ~mask;
45 pmic_write_reg(pmic_dev, reg, val);
48 void pmic_set_domain(u8 reg, u8 domain, u8 on)
50 pmic_set_bit(pmic_dev, reg, BIT(domain), on<<domain);
52 EXPORT_SYMBOL(pmic_set_domain);
54 static int pmic_probe(struct i2c_client *client)
56 struct device *dev = &client->dev;
58 pmic_dev = devm_kzalloc(dev, sizeof(*pmic_dev), GFP_KERNEL);
62 pmic_dev->i2c_client = client;
64 dev_info(dev, "pmic init success!");
69 static int pmic_remove(struct i2c_client *client)
74 static const struct i2c_device_id pmic_id[] = {
78 MODULE_DEVICE_TABLE(i2c, pmic_id);
80 static const struct of_device_id pmic_dt_ids[] = {
81 { .compatible = "starfive,pmic" },
84 MODULE_DEVICE_TABLE(of, pmic_dt_ids);
86 static struct i2c_driver pmic_i2c_driver = {
89 .of_match_table = pmic_dt_ids,
92 .probe_new = pmic_probe,
93 .remove = pmic_remove,
96 static __init int pmic_init(void)
98 return i2c_add_driver(&pmic_i2c_driver);
101 static __exit void pmic_exit(void)
103 i2c_del_driver(&pmic_i2c_driver);
106 fs_initcall(pmic_init);
107 module_exit(pmic_exit);
109 MODULE_AUTHOR("changhuang <changhuang.liang@starfivetech.com>");
110 MODULE_DESCRIPTION("StarFive JH7110 PMIC Device Driver");
111 MODULE_LICENSE("GPL v2");