1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* |
3 | * Device driver for regulators in HISI PMIC IC |
4 | * |
5 | * Copyright (c) 2013 Linaro Ltd. |
6 | * Copyright (c) 2011 Hisilicon. |
7 | * Copyright (c) 2020-2021 Huawei Technologies Co., Ltd. |
8 | */ |
9 | |
10 | #include <linux/mfd/core.h> |
11 | #include <linux/module.h> |
12 | #include <linux/platform_device.h> |
13 | #include <linux/regmap.h> |
14 | #include <linux/slab.h> |
15 | #include <linux/spmi.h> |
16 | |
17 | static const struct mfd_cell hi6421v600_devs[] = { |
18 | { .name = "hi6421v600-irq" , }, |
19 | { .name = "hi6421v600-regulator" , }, |
20 | }; |
21 | |
22 | static const struct regmap_config regmap_config = { |
23 | .reg_bits = 16, |
24 | .val_bits = BITS_PER_BYTE, |
25 | .max_register = 0xffff, |
26 | .fast_io = true |
27 | }; |
28 | |
29 | static int hi6421_spmi_pmic_probe(struct spmi_device *sdev) |
30 | { |
31 | struct device *dev = &sdev->dev; |
32 | struct regmap *regmap; |
33 | int ret; |
34 | |
35 | regmap = devm_regmap_init_spmi_ext(sdev, ®map_config); |
36 | if (IS_ERR(ptr: regmap)) |
37 | return PTR_ERR(ptr: regmap); |
38 | |
39 | dev_set_drvdata(dev: &sdev->dev, data: regmap); |
40 | |
41 | ret = devm_mfd_add_devices(dev: &sdev->dev, PLATFORM_DEVID_NONE, |
42 | cells: hi6421v600_devs, ARRAY_SIZE(hi6421v600_devs), |
43 | NULL, irq_base: 0, NULL); |
44 | if (ret < 0) |
45 | dev_err(dev, "Failed to add child devices: %d\n" , ret); |
46 | |
47 | return ret; |
48 | } |
49 | |
50 | static const struct of_device_id pmic_spmi_id_table[] = { |
51 | { .compatible = "hisilicon,hi6421-spmi" }, |
52 | { } |
53 | }; |
54 | MODULE_DEVICE_TABLE(of, pmic_spmi_id_table); |
55 | |
56 | static struct spmi_driver hi6421_spmi_pmic_driver = { |
57 | .driver = { |
58 | .name = "hi6421-spmi-pmic" , |
59 | .of_match_table = pmic_spmi_id_table, |
60 | }, |
61 | .probe = hi6421_spmi_pmic_probe, |
62 | }; |
63 | module_spmi_driver(hi6421_spmi_pmic_driver); |
64 | |
65 | MODULE_DESCRIPTION("HiSilicon Hi6421v600 SPMI PMIC driver" ); |
66 | MODULE_LICENSE("GPL v2" ); |
67 | |