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