2 * RSB driver for the X-Powers' Power Management ICs
4 * AXP20x typically comprises an adaptive USB-Compatible PWM charger, BUCK DC-DC
5 * converters, LDOs, multiple 12-bit ADCs of voltage, current and temperature
6 * as well as configurable GPIOs.
8 * This driver supports the RSB variants.
10 * Copyright (C) 2015 Chen-Yu Tsai
12 * Author: Chen-Yu Tsai <wens@csie.org>
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
19 #include <linux/acpi.h>
20 #include <linux/err.h>
21 #include <linux/mfd/axp20x.h>
22 #include <linux/module.h>
24 #include <linux/regmap.h>
25 #include <linux/slab.h>
26 #include <linux/sunxi-rsb.h>
28 static int axp20x_rsb_probe(struct sunxi_rsb_device
*rdev
)
30 struct axp20x_dev
*axp20x
;
33 axp20x
= devm_kzalloc(&rdev
->dev
, sizeof(*axp20x
), GFP_KERNEL
);
37 axp20x
->dev
= &rdev
->dev
;
38 axp20x
->irq
= rdev
->irq
;
39 dev_set_drvdata(&rdev
->dev
, axp20x
);
41 ret
= axp20x_match_device(axp20x
);
45 axp20x
->regmap
= devm_regmap_init_sunxi_rsb(rdev
, axp20x
->regmap_cfg
);
46 if (IS_ERR(axp20x
->regmap
)) {
47 ret
= PTR_ERR(axp20x
->regmap
);
48 dev_err(&rdev
->dev
, "regmap init failed: %d\n", ret
);
52 return axp20x_device_probe(axp20x
);
55 static int axp20x_rsb_remove(struct sunxi_rsb_device
*rdev
)
57 struct axp20x_dev
*axp20x
= sunxi_rsb_device_get_drvdata(rdev
);
59 return axp20x_device_remove(axp20x
);
62 static const struct of_device_id axp20x_rsb_of_match
[] = {
63 { .compatible
= "x-powers,axp223", .data
= (void *)AXP223_ID
},
64 { .compatible
= "x-powers,axp803", .data
= (void *)AXP803_ID
},
65 { .compatible
= "x-powers,axp806", .data
= (void *)AXP806_ID
},
66 { .compatible
= "x-powers,axp809", .data
= (void *)AXP809_ID
},
67 { .compatible
= "x-powers,axp813", .data
= (void *)AXP813_ID
},
70 MODULE_DEVICE_TABLE(of
, axp20x_rsb_of_match
);
72 static struct sunxi_rsb_driver axp20x_rsb_driver
= {
75 .of_match_table
= of_match_ptr(axp20x_rsb_of_match
),
77 .probe
= axp20x_rsb_probe
,
78 .remove
= axp20x_rsb_remove
,
80 module_sunxi_rsb_driver(axp20x_rsb_driver
);
82 MODULE_DESCRIPTION("PMIC MFD sunXi RSB driver for AXP20X");
83 MODULE_AUTHOR("Chen-Yu Tsai <wens@csie.org>");
84 MODULE_LICENSE("GPL v2");