Blame view
drivers/mfd/arizona-i2c.c
2.64 KB
d2912cb15 treewide: Replace... |
1 |
// SPDX-License-Identifier: GPL-2.0-only |
c6f756223 mfd: arizona: I2C... |
2 3 4 5 6 7 |
/* * Arizona-i2c.c -- Arizona I2C bus interface * * Copyright 2012 Wolfson Microelectronics plc * * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> |
c6f756223 mfd: arizona: I2C... |
8 9 10 11 12 13 14 15 16 |
*/ #include <linux/err.h> #include <linux/i2c.h> #include <linux/module.h> #include <linux/pm_runtime.h> #include <linux/regmap.h> #include <linux/regulator/consumer.h> #include <linux/slab.h> |
3d6d1d1cd mfd: arizona: Inc... |
17 |
#include <linux/of.h> |
c6f756223 mfd: arizona: I2C... |
18 19 20 21 |
#include <linux/mfd/arizona/core.h> #include "arizona.h" |
f791be492 mfd: remove use o... |
22 |
static int arizona_i2c_probe(struct i2c_client *i2c, |
942786e6e mfd: arizona: Rid... |
23 |
const struct i2c_device_id *id) |
c6f756223 mfd: arizona: I2C... |
24 25 |
{ struct arizona *arizona; |
b61c1ec05 mfd: arizona: Rem... |
26 |
const struct regmap_config *regmap_config = NULL; |
942786e6e mfd: arizona: Rid... |
27 28 |
unsigned long type; int ret; |
c6f756223 mfd: arizona: I2C... |
29 |
|
d781009ca mfd: Add device t... |
30 31 32 33 34 35 |
if (i2c->dev.of_node) type = arizona_of_get_type(&i2c->dev); else type = id->driver_data; switch (type) { |
c6f756223 mfd: arizona: I2C... |
36 |
case WM5102: |
b61c1ec05 mfd: arizona: Rem... |
37 38 |
if (IS_ENABLED(CONFIG_MFD_WM5102)) regmap_config = &wm5102_i2c_regmap; |
c6f756223 mfd: arizona: I2C... |
39 |
break; |
e102befe7 mfd: Initial supp... |
40 |
case WM5110: |
e5d4ef0d7 mfd: arizona: Add... |
41 |
case WM8280: |
b61c1ec05 mfd: arizona: Rem... |
42 43 |
if (IS_ENABLED(CONFIG_MFD_WM5110)) regmap_config = &wm5110_i2c_regmap; |
e102befe7 mfd: Initial supp... |
44 |
break; |
dc7d48635 mfd: arizona: Int... |
45 |
case WM8997: |
b61c1ec05 mfd: arizona: Rem... |
46 47 |
if (IS_ENABLED(CONFIG_MFD_WM8997)) regmap_config = &wm8997_i2c_regmap; |
dc7d48635 mfd: arizona: Int... |
48 |
break; |
6887b042c mfd: arizona: Add... |
49 50 |
case WM8998: case WM1814: |
b61c1ec05 mfd: arizona: Rem... |
51 52 |
if (IS_ENABLED(CONFIG_MFD_WM8998)) regmap_config = &wm8998_i2c_regmap; |
6887b042c mfd: arizona: Add... |
53 |
break; |
c6f756223 mfd: arizona: I2C... |
54 |
default: |
2e44e28ad mfd: arizona: Use... |
55 56 |
dev_err(&i2c->dev, "Unknown device type %ld ", type); |
c6f756223 mfd: arizona: I2C... |
57 58 |
return -EINVAL; } |
b61c1ec05 mfd: arizona: Rem... |
59 60 61 62 63 64 |
if (!regmap_config) { dev_err(&i2c->dev, "No kernel support for device type %ld ", type); return -EINVAL; } |
c6f756223 mfd: arizona: I2C... |
65 66 67 68 69 70 71 72 73 74 75 76 |
arizona = devm_kzalloc(&i2c->dev, sizeof(*arizona), GFP_KERNEL); if (arizona == NULL) return -ENOMEM; arizona->regmap = devm_regmap_init_i2c(i2c, regmap_config); if (IS_ERR(arizona->regmap)) { ret = PTR_ERR(arizona->regmap); dev_err(&i2c->dev, "Failed to allocate register map: %d ", ret); return ret; } |
2e44e28ad mfd: arizona: Use... |
77 |
arizona->type = type; |
c6f756223 mfd: arizona: I2C... |
78 79 80 81 82 |
arizona->dev = &i2c->dev; arizona->irq = i2c->irq; return arizona_dev_init(arizona); } |
4740f73fe mfd: remove use o... |
83 |
static int arizona_i2c_remove(struct i2c_client *i2c) |
c6f756223 mfd: arizona: I2C... |
84 85 |
{ struct arizona *arizona = dev_get_drvdata(&i2c->dev); |
9f6e872a7 mfd: arizona-i2c:... |
86 |
|
c6f756223 mfd: arizona: I2C... |
87 |
arizona_dev_exit(arizona); |
9f6e872a7 mfd: arizona-i2c:... |
88 |
|
c6f756223 mfd: arizona: I2C... |
89 90 91 92 93 |
return 0; } static const struct i2c_device_id arizona_i2c_id[] = { { "wm5102", WM5102 }, |
e102befe7 mfd: Initial supp... |
94 |
{ "wm5110", WM5110 }, |
e5d4ef0d7 mfd: arizona: Add... |
95 |
{ "wm8280", WM8280 }, |
dc7d48635 mfd: arizona: Int... |
96 |
{ "wm8997", WM8997 }, |
6887b042c mfd: arizona: Add... |
97 98 |
{ "wm8998", WM8998 }, { "wm1814", WM1814 }, |
c6f756223 mfd: arizona: I2C... |
99 100 101 102 103 104 105 |
{ } }; MODULE_DEVICE_TABLE(i2c, arizona_i2c_id); static struct i2c_driver arizona_i2c_driver = { .driver = { .name = "arizona", |
c6f756223 mfd: arizona: I2C... |
106 |
.pm = &arizona_pm_ops, |
d781009ca mfd: Add device t... |
107 |
.of_match_table = of_match_ptr(arizona_of_match), |
c6f756223 mfd: arizona: I2C... |
108 109 |
}, .probe = arizona_i2c_probe, |
84449216b mfd: remove use o... |
110 |
.remove = arizona_i2c_remove, |
c6f756223 mfd: arizona: I2C... |
111 112 113 114 115 116 117 118 |
.id_table = arizona_i2c_id, }; module_i2c_driver(arizona_i2c_driver); MODULE_DESCRIPTION("Arizona I2C bus interface"); MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>"); MODULE_LICENSE("GPL"); |