brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · 059656f Raw
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