83 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * RSB driver for the X-Powers' Power Management ICs4 *5 * AXP20x typically comprises an adaptive USB-Compatible PWM charger, BUCK DC-DC6 * converters, LDOs, multiple 12-bit ADCs of voltage, current and temperature7 * as well as configurable GPIOs.8 *9 * This driver supports the RSB variants.10 *11 * Copyright (C) 2015 Chen-Yu Tsai12 *13 * Author: Chen-Yu Tsai <wens@csie.org>14 */15 16#include <linux/acpi.h>17#include <linux/err.h>18#include <linux/mfd/axp20x.h>19#include <linux/module.h>20#include <linux/of.h>21#include <linux/regmap.h>22#include <linux/slab.h>23#include <linux/sunxi-rsb.h>24 25static int axp20x_rsb_probe(struct sunxi_rsb_device *rdev)26{27 struct axp20x_dev *axp20x;28 int ret;29 30 axp20x = devm_kzalloc(&rdev->dev, sizeof(*axp20x), GFP_KERNEL);31 if (!axp20x)32 return -ENOMEM;33 34 axp20x->dev = &rdev->dev;35 axp20x->irq = rdev->irq;36 dev_set_drvdata(&rdev->dev, axp20x);37 38 ret = axp20x_match_device(axp20x);39 if (ret)40 return ret;41 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);46 return ret;47 }48 49 return axp20x_device_probe(axp20x);50}51 52static void axp20x_rsb_remove(struct sunxi_rsb_device *rdev)53{54 struct axp20x_dev *axp20x = sunxi_rsb_device_get_drvdata(rdev);55 56 axp20x_device_remove(axp20x);57}58 59static const struct of_device_id axp20x_rsb_of_match[] = {60 { .compatible = "x-powers,axp223", .data = (void *)AXP223_ID },61 { .compatible = "x-powers,axp717", .data = (void *)AXP717_ID },62 { .compatible = "x-powers,axp803", .data = (void *)AXP803_ID },63 { .compatible = "x-powers,axp806", .data = (void *)AXP806_ID },64 { .compatible = "x-powers,axp809", .data = (void *)AXP809_ID },65 { .compatible = "x-powers,axp813", .data = (void *)AXP813_ID },66 { },67};68MODULE_DEVICE_TABLE(of, axp20x_rsb_of_match);69 70static struct sunxi_rsb_driver axp20x_rsb_driver = {71 .driver = {72 .name = "axp20x-rsb",73 .of_match_table = of_match_ptr(axp20x_rsb_of_match),74 },75 .probe = axp20x_rsb_probe,76 .remove = axp20x_rsb_remove,77};78module_sunxi_rsb_driver(axp20x_rsb_driver);79 80MODULE_DESCRIPTION("PMIC MFD sunXi RSB driver for AXP20X");81MODULE_AUTHOR("Chen-Yu Tsai <wens@csie.org>");82MODULE_LICENSE("GPL v2");83