1 // SPDX-License-Identifier: GPL-2.0-only
3 * RSB driver for the X-Powers' Power Management ICs
5 * AXP20x typically comprises an adaptive USB-Compatible PWM charger, BUCK DC-DC
6 * converters, LDOs, multiple 12-bit ADCs of voltage, current and temperature
7 * as well as configurable GPIOs.
9 * This driver supports the RSB variants.
11 * Copyright (C) 2015 Chen-Yu Tsai
13 * Author: Chen-Yu Tsai <wens@csie.org>
16 #include <linux/acpi.h>
17 #include <linux/err.h>
18 #include <linux/mfd/axp20x.h>
19 #include <linux/module.h>
21 #include <linux/regmap.h>
22 #include <linux/slab.h>
23 #include <linux/sunxi-rsb.h>
25 static int axp20x_rsb_probe(struct sunxi_rsb_device
*rdev
)
27 struct axp20x_dev
*axp20x
;
30 axp20x
= devm_kzalloc(&rdev
->dev
, sizeof(*axp20x
), GFP_KERNEL
);
34 axp20x
->dev
= &rdev
->dev
;
35 axp20x
->irq
= rdev
->irq
;
36 dev_set_drvdata(&rdev
->dev
, axp20x
);
38 ret
= axp20x_match_device(axp20x
);
42 axp20x
->regmap
= devm_regmap_init_sunxi_rsb(rdev
, axp20x
->regmap_cfg
);
43 if (IS_ERR(axp20x
->regmap
)) {
44 ret
= PTR_ERR(axp20x
->regmap
);
45 dev_err(&rdev
->dev
, "regmap init failed: %d\n", ret
);
49 return axp20x_device_probe(axp20x
);
52 static int axp20x_rsb_remove(struct sunxi_rsb_device
*rdev
)
54 struct axp20x_dev
*axp20x
= sunxi_rsb_device_get_drvdata(rdev
);
56 return axp20x_device_remove(axp20x
);
59 static const struct of_device_id axp20x_rsb_of_match
[] = {
60 { .compatible
= "x-powers,axp223", .data
= (void *)AXP223_ID
},
61 { .compatible
= "x-powers,axp803", .data
= (void *)AXP803_ID
},
62 { .compatible
= "x-powers,axp806", .data
= (void *)AXP806_ID
},
63 { .compatible
= "x-powers,axp809", .data
= (void *)AXP809_ID
},
64 { .compatible
= "x-powers,axp813", .data
= (void *)AXP813_ID
},
67 MODULE_DEVICE_TABLE(of
, axp20x_rsb_of_match
);
69 static struct sunxi_rsb_driver axp20x_rsb_driver
= {
72 .of_match_table
= of_match_ptr(axp20x_rsb_of_match
),
74 .probe
= axp20x_rsb_probe
,
75 .remove
= axp20x_rsb_remove
,
77 module_sunxi_rsb_driver(axp20x_rsb_driver
);
79 MODULE_DESCRIPTION("PMIC MFD sunXi RSB driver for AXP20X");
80 MODULE_AUTHOR("Chen-Yu Tsai <wens@csie.org>");
81 MODULE_LICENSE("GPL v2");