Blame view

drivers/mfd/wm8350-i2c.c 1.51 KB
2874c5fd2   Thomas Gleixner   treewide: Replace...
1
  // SPDX-License-Identifier: GPL-2.0-or-later
c661a0b92   Mark Brown   mfd: Add I2C cont...
2
3
4
  /*
   * wm8350-i2c.c  --  Generic I2C driver for Wolfson WM8350 PMIC
   *
c661a0b92   Mark Brown   mfd: Add I2C cont...
5
6
7
8
   * Copyright 2007, 2008 Wolfson Microelectronics PLC.
   *
   * Author: Liam Girdwood
   *         linux@wolfsonmicro.com
c661a0b92   Mark Brown   mfd: Add I2C cont...
9
   */
b7b142d9f   Mark Brown   mfd: Convert wm83...
10
  #include <linux/err.h>
c661a0b92   Mark Brown   mfd: Add I2C cont...
11
12
13
14
  #include <linux/init.h>
  #include <linux/i2c.h>
  #include <linux/platform_device.h>
  #include <linux/mfd/wm8350/core.h>
b7b142d9f   Mark Brown   mfd: Convert wm83...
15
  #include <linux/regmap.h>
5a0e3ad6a   Tejun Heo   include cleanup: ...
16
  #include <linux/slab.h>
c661a0b92   Mark Brown   mfd: Add I2C cont...
17

c661a0b92   Mark Brown   mfd: Add I2C cont...
18
19
20
21
  static int wm8350_i2c_probe(struct i2c_client *i2c,
  			    const struct i2c_device_id *id)
  {
  	struct wm8350 *wm8350;
334a41ce9   Jingoo Han   mfd: Use dev_get_...
22
  	struct wm8350_platform_data *pdata = dev_get_platdata(&i2c->dev);
c661a0b92   Mark Brown   mfd: Add I2C cont...
23
  	int ret = 0;
55ee29d5f   Mark Brown   mfd: Convert WM83...
24
  	wm8350 = devm_kzalloc(&i2c->dev, sizeof(struct wm8350), GFP_KERNEL);
e47a3bbe4   Rabin Vincent   mfd: Remove incor...
25
  	if (wm8350 == NULL)
c661a0b92   Mark Brown   mfd: Add I2C cont...
26
  		return -ENOMEM;
c661a0b92   Mark Brown   mfd: Add I2C cont...
27

b7b142d9f   Mark Brown   mfd: Convert wm83...
28
29
30
31
32
33
34
35
  	wm8350->regmap = devm_regmap_init_i2c(i2c, &wm8350_regmap);
  	if (IS_ERR(wm8350->regmap)) {
  		ret = PTR_ERR(wm8350->regmap);
  		dev_err(&i2c->dev, "Failed to allocate register map: %d
  ",
  			ret);
  		return ret;
  	}
c661a0b92   Mark Brown   mfd: Add I2C cont...
36
37
  	i2c_set_clientdata(i2c, wm8350);
  	wm8350->dev = &i2c->dev;
c661a0b92   Mark Brown   mfd: Add I2C cont...
38

334a41ce9   Jingoo Han   mfd: Use dev_get_...
39
  	return wm8350_device_init(wm8350, i2c->irq, pdata);
c661a0b92   Mark Brown   mfd: Add I2C cont...
40
  }
c661a0b92   Mark Brown   mfd: Add I2C cont...
41
  static const struct i2c_device_id wm8350_i2c_id[] = {
6db1c9ba9   Lee Jones   mfd: wm8350-i2c: ...
42
43
44
45
  	{ "wm8350", 0 },
  	{ "wm8351", 0 },
  	{ "wm8352", 0 },
  	{ }
c661a0b92   Mark Brown   mfd: Add I2C cont...
46
  };
c661a0b92   Mark Brown   mfd: Add I2C cont...
47
48
49
50
  
  static struct i2c_driver wm8350_i2c_driver = {
  	.driver = {
  		   .name = "wm8350",
fc6430661   Paul Gortmaker   mfd: wm8350-i2c: ...
51
  		   .suppress_bind_attrs = true,
c661a0b92   Mark Brown   mfd: Add I2C cont...
52
53
  	},
  	.probe = wm8350_i2c_probe,
c661a0b92   Mark Brown   mfd: Add I2C cont...
54
55
56
57
58
59
60
61
62
  	.id_table = wm8350_i2c_id,
  };
  
  static int __init wm8350_i2c_init(void)
  {
  	return i2c_add_driver(&wm8350_i2c_driver);
  }
  /* init early so consumer devices can complete system boot */
  subsys_initcall(wm8350_i2c_init);