Blame view

drivers/mfd/tps68470.c 2.11 KB
37c089d1f   Rajmohan Mani   mfd: Update to SP...
1
  // SPDX-License-Identifier: GPL-2.0
9bbf6a15c   Rajmohan Mani   mfd: Add support ...
2
3
4
5
6
7
8
9
10
11
  /*
   * TPS68470 chip Parent driver
   *
   * Copyright (C) 2017 Intel Corporation
   *
   * Authors:
   *	Rajmohan Mani <rajmohan.mani@intel.com>
   *	Tianshu Qiu <tian.shu.qiu@intel.com>
   *	Jian Xu Zheng <jian.xu.zheng@intel.com>
   *	Yuning Pu <yuning.pu@intel.com>
9bbf6a15c   Rajmohan Mani   mfd: Add support ...
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
   */
  
  #include <linux/acpi.h>
  #include <linux/delay.h>
  #include <linux/i2c.h>
  #include <linux/init.h>
  #include <linux/mfd/core.h>
  #include <linux/mfd/tps68470.h>
  #include <linux/regmap.h>
  
  static const struct mfd_cell tps68470s[] = {
  	{ .name = "tps68470-gpio" },
  	{ .name = "tps68470_pmic_opregion" },
  };
  
  static const struct regmap_config tps68470_regmap_config = {
  	.reg_bits = 8,
  	.val_bits = 8,
  	.max_register = TPS68470_REG_MAX,
  };
  
  static int tps68470_chip_init(struct device *dev, struct regmap *regmap)
  {
  	unsigned int version;
  	int ret;
  
  	/* Force software reset */
  	ret = regmap_write(regmap, TPS68470_REG_RESET, TPS68470_REG_RESET_MASK);
  	if (ret)
  		return ret;
  
  	ret = regmap_read(regmap, TPS68470_REG_REVID, &version);
  	if (ret) {
  		dev_err(dev, "Failed to read revision register: %d
  ", ret);
  		return ret;
  	}
  
  	dev_info(dev, "TPS68470 REVID: 0x%x
  ", version);
  
  	return 0;
  }
  
  static int tps68470_probe(struct i2c_client *client)
  {
  	struct device *dev = &client->dev;
  	struct regmap *regmap;
  	int ret;
  
  	regmap = devm_regmap_init_i2c(client, &tps68470_regmap_config);
  	if (IS_ERR(regmap)) {
  		dev_err(dev, "devm_regmap_init_i2c Error %ld
  ",
  			PTR_ERR(regmap));
  		return PTR_ERR(regmap);
  	}
  
  	i2c_set_clientdata(client, regmap);
  
  	ret = tps68470_chip_init(dev, regmap);
  	if (ret < 0) {
  		dev_err(dev, "TPS68470 Init Error %d
  ", ret);
  		return ret;
  	}
  
  	ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, tps68470s,
  			      ARRAY_SIZE(tps68470s), NULL, 0, NULL);
  	if (ret < 0) {
  		dev_err(dev, "devm_mfd_add_devices failed: %d
  ", ret);
  		return ret;
  	}
  
  	return 0;
  }
  
  static const struct acpi_device_id tps68470_acpi_ids[] = {
  	{"INT3472"},
  	{},
  };
9bbf6a15c   Rajmohan Mani   mfd: Add support ...
94
95
96
97
98
99
100
101
102
  
  static struct i2c_driver tps68470_driver = {
  	.driver = {
  		   .name = "tps68470",
  		   .acpi_match_table = tps68470_acpi_ids,
  	},
  	.probe_new = tps68470_probe,
  };
  builtin_i2c_driver(tps68470_driver);