2 * Broadcom BCM590xx PMU
4 * Copyright 2014 Linaro Limited
5 * Author: Matt Porter <mporter@linaro.org>
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
13 #include <linux/err.h>
14 #include <linux/i2c.h>
15 #include <linux/init.h>
16 #include <linux/mfd/bcm590xx.h>
17 #include <linux/mfd/core.h>
18 #include <linux/module.h>
19 #include <linux/moduleparam.h>
21 #include <linux/of_device.h>
22 #include <linux/regmap.h>
23 #include <linux/slab.h>
25 static const struct mfd_cell bcm590xx_devs
[] = {
27 .name
= "bcm590xx-vregs",
31 static const struct regmap_config bcm590xx_regmap_config
= {
34 .max_register
= BCM590XX_MAX_REGISTER
,
35 .cache_type
= REGCACHE_RBTREE
,
38 static int bcm590xx_i2c_probe(struct i2c_client
*i2c
,
39 const struct i2c_device_id
*id
)
41 struct bcm590xx
*bcm590xx
;
44 bcm590xx
= devm_kzalloc(&i2c
->dev
, sizeof(*bcm590xx
), GFP_KERNEL
);
48 i2c_set_clientdata(i2c
, bcm590xx
);
49 bcm590xx
->dev
= &i2c
->dev
;
50 bcm590xx
->i2c_client
= i2c
;
52 bcm590xx
->regmap
= devm_regmap_init_i2c(i2c
, &bcm590xx_regmap_config
);
53 if (IS_ERR(bcm590xx
->regmap
)) {
54 ret
= PTR_ERR(bcm590xx
->regmap
);
55 dev_err(&i2c
->dev
, "regmap initialization failed: %d\n", ret
);
59 ret
= mfd_add_devices(&i2c
->dev
, -1, bcm590xx_devs
,
60 ARRAY_SIZE(bcm590xx_devs
), NULL
, 0, NULL
);
62 dev_err(&i2c
->dev
, "failed to add sub-devices: %d\n", ret
);
67 static const struct of_device_id bcm590xx_of_match
[] = {
68 { .compatible
= "brcm,bcm59056" },
71 MODULE_DEVICE_TABLE(of
, bcm590xx_of_match
);
73 static const struct i2c_device_id bcm590xx_i2c_id
[] = {
77 MODULE_DEVICE_TABLE(i2c
, bcm590xx_i2c_id
);
79 static struct i2c_driver bcm590xx_i2c_driver
= {
83 .of_match_table
= of_match_ptr(bcm590xx_of_match
),
85 .probe
= bcm590xx_i2c_probe
,
86 .id_table
= bcm590xx_i2c_id
,
88 module_i2c_driver(bcm590xx_i2c_driver
);
90 MODULE_AUTHOR("Matt Porter <mporter@linaro.org>");
91 MODULE_DESCRIPTION("BCM590xx multi-function driver");
92 MODULE_LICENSE("GPL v2");
93 MODULE_ALIAS("platform:bcm590xx");