xref: /openbmc/linux/drivers/mfd/bd9571mwv.c (revision 9816d859)
1bfb26be7SYoshihiro Shimoda // SPDX-License-Identifier: GPL-2.0-only
2d3ea2127SMarek Vasut /*
3b2548da6SKhiem Nguyen  * ROHM BD9571MWV-M and BD9574MVF-M core driver
4d3ea2127SMarek Vasut  *
5d3ea2127SMarek Vasut  * Copyright (C) 2017 Marek Vasut <marek.vasut+renesas@gmail.com>
6f16e1fd1SKhiem Nguyen  * Copyright (C) 2020 Renesas Electronics Corporation
7d3ea2127SMarek Vasut  *
8d3ea2127SMarek Vasut  * Based on the TPS65086 driver
9d3ea2127SMarek Vasut  */
10d3ea2127SMarek Vasut 
11d3ea2127SMarek Vasut #include <linux/i2c.h>
12d3ea2127SMarek Vasut #include <linux/interrupt.h>
13d3ea2127SMarek Vasut #include <linux/mfd/core.h>
14b2548da6SKhiem Nguyen #include <linux/mfd/rohm-generic.h>
15d3ea2127SMarek Vasut #include <linux/module.h>
16d3ea2127SMarek Vasut 
17d3ea2127SMarek Vasut #include <linux/mfd/bd9571mwv.h>
18d3ea2127SMarek Vasut 
19d3ea2127SMarek Vasut static const struct mfd_cell bd9571mwv_cells[] = {
20d3ea2127SMarek Vasut 	{ .name = "bd9571mwv-regulator", },
21d3ea2127SMarek Vasut 	{ .name = "bd9571mwv-gpio", },
22d3ea2127SMarek Vasut };
23d3ea2127SMarek Vasut 
24d3ea2127SMarek Vasut static const struct regmap_range bd9571mwv_readable_yes_ranges[] = {
25d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_VENDOR_CODE, BD9571MWV_PRODUCT_REVISION),
267b569bcbSGeert Uytterhoeven 	regmap_reg_range(BD9571MWV_BKUP_MODE_CNT, BD9571MWV_BKUP_MODE_CNT),
27d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_AVS_SET_MONI, BD9571MWV_AVS_DVFS_VID(3)),
28d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_VD18_VID, BD9571MWV_VD33_VID),
29d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_DVFS_VINIT, BD9571MWV_DVFS_VINIT),
30d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_DVFS_SETVMAX, BD9571MWV_DVFS_MONIVDAC),
31d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_GPIO_IN, BD9571MWV_GPIO_IN),
32d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_GPIO_INT, BD9571MWV_GPIO_INTMASK),
33d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_INT_INTREQ, BD9571MWV_INT_INTMASK),
34d3ea2127SMarek Vasut };
35d3ea2127SMarek Vasut 
36d3ea2127SMarek Vasut static const struct regmap_access_table bd9571mwv_readable_table = {
37d3ea2127SMarek Vasut 	.yes_ranges	= bd9571mwv_readable_yes_ranges,
38d3ea2127SMarek Vasut 	.n_yes_ranges	= ARRAY_SIZE(bd9571mwv_readable_yes_ranges),
39d3ea2127SMarek Vasut };
40d3ea2127SMarek Vasut 
41d3ea2127SMarek Vasut static const struct regmap_range bd9571mwv_writable_yes_ranges[] = {
427b569bcbSGeert Uytterhoeven 	regmap_reg_range(BD9571MWV_BKUP_MODE_CNT, BD9571MWV_BKUP_MODE_CNT),
43d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_AVS_VD09_VID(0), BD9571MWV_AVS_VD09_VID(3)),
44d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_DVFS_SETVID, BD9571MWV_DVFS_SETVID),
45d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_GPIO_DIR, BD9571MWV_GPIO_OUT),
46d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_GPIO_INT_SET, BD9571MWV_GPIO_INTMASK),
47d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_INT_INTREQ, BD9571MWV_INT_INTMASK),
48d3ea2127SMarek Vasut };
49d3ea2127SMarek Vasut 
50d3ea2127SMarek Vasut static const struct regmap_access_table bd9571mwv_writable_table = {
51d3ea2127SMarek Vasut 	.yes_ranges	= bd9571mwv_writable_yes_ranges,
52d3ea2127SMarek Vasut 	.n_yes_ranges	= ARRAY_SIZE(bd9571mwv_writable_yes_ranges),
53d3ea2127SMarek Vasut };
54d3ea2127SMarek Vasut 
55d3ea2127SMarek Vasut static const struct regmap_range bd9571mwv_volatile_yes_ranges[] = {
56b0aff01eSDien Pham 	regmap_reg_range(BD9571MWV_DVFS_MONIVDAC, BD9571MWV_DVFS_MONIVDAC),
57d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_GPIO_IN, BD9571MWV_GPIO_IN),
58d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_GPIO_INT, BD9571MWV_GPIO_INT),
59d3ea2127SMarek Vasut 	regmap_reg_range(BD9571MWV_INT_INTREQ, BD9571MWV_INT_INTREQ),
60d3ea2127SMarek Vasut };
61d3ea2127SMarek Vasut 
62d3ea2127SMarek Vasut static const struct regmap_access_table bd9571mwv_volatile_table = {
63d3ea2127SMarek Vasut 	.yes_ranges	= bd9571mwv_volatile_yes_ranges,
64d3ea2127SMarek Vasut 	.n_yes_ranges	= ARRAY_SIZE(bd9571mwv_volatile_yes_ranges),
65d3ea2127SMarek Vasut };
66d3ea2127SMarek Vasut 
67d3ea2127SMarek Vasut static const struct regmap_config bd9571mwv_regmap_config = {
68d3ea2127SMarek Vasut 	.reg_bits	= 8,
69d3ea2127SMarek Vasut 	.val_bits	= 8,
70d3ea2127SMarek Vasut 	.cache_type	= REGCACHE_RBTREE,
71d3ea2127SMarek Vasut 	.rd_table	= &bd9571mwv_readable_table,
72d3ea2127SMarek Vasut 	.wr_table	= &bd9571mwv_writable_table,
73d3ea2127SMarek Vasut 	.volatile_table	= &bd9571mwv_volatile_table,
74d3ea2127SMarek Vasut 	.max_register	= 0xff,
75d3ea2127SMarek Vasut };
76d3ea2127SMarek Vasut 
77d3ea2127SMarek Vasut static const struct regmap_irq bd9571mwv_irqs[] = {
78d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_MD1, 0,
79d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_MD1_INT),
80d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_MD2_E1, 0,
81d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_MD2_E1_INT),
82d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_MD2_E2, 0,
83d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_MD2_E2_INT),
84d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_PROT_ERR, 0,
85d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_PROT_ERR_INT),
86d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_GP, 0,
87d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_GP_INT),
88d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_128H_OF, 0,
89d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_128H_OF_INT),
90d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_WDT_OF, 0,
91d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_WDT_OF_INT),
92d3ea2127SMarek Vasut 	REGMAP_IRQ_REG(BD9571MWV_IRQ_BKUP_TRG, 0,
93d3ea2127SMarek Vasut 		       BD9571MWV_INT_INTREQ_BKUP_TRG_INT),
94d3ea2127SMarek Vasut };
95d3ea2127SMarek Vasut 
96d3ea2127SMarek Vasut static struct regmap_irq_chip bd9571mwv_irq_chip = {
97d3ea2127SMarek Vasut 	.name		= "bd9571mwv",
98d3ea2127SMarek Vasut 	.status_base	= BD9571MWV_INT_INTREQ,
99d3ea2127SMarek Vasut 	.mask_base	= BD9571MWV_INT_INTMASK,
100d3ea2127SMarek Vasut 	.ack_base	= BD9571MWV_INT_INTREQ,
101d3ea2127SMarek Vasut 	.init_ack_masked = true,
102d3ea2127SMarek Vasut 	.num_regs	= 1,
103d3ea2127SMarek Vasut 	.irqs		= bd9571mwv_irqs,
104d3ea2127SMarek Vasut 	.num_irqs	= ARRAY_SIZE(bd9571mwv_irqs),
105d3ea2127SMarek Vasut };
106d3ea2127SMarek Vasut 
107b2548da6SKhiem Nguyen static const struct mfd_cell bd9574mwf_cells[] = {
108b2548da6SKhiem Nguyen 	{ .name = "bd9574mwf-regulator", },
109b2548da6SKhiem Nguyen 	{ .name = "bd9574mwf-gpio", },
110b2548da6SKhiem Nguyen };
111b2548da6SKhiem Nguyen 
112b2548da6SKhiem Nguyen static const struct regmap_range bd9574mwf_readable_yes_ranges[] = {
113b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_VENDOR_CODE, BD9571MWV_PRODUCT_REVISION),
114b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_BKUP_MODE_CNT, BD9571MWV_BKUP_MODE_CNT),
115b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_DVFS_VINIT, BD9571MWV_DVFS_SETVMAX),
116b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_DVFS_SETVID, BD9571MWV_DVFS_MONIVDAC),
117b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_GPIO_IN, BD9571MWV_GPIO_IN),
118b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_GPIO_INT, BD9571MWV_GPIO_INTMASK),
119b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_INT_INTREQ, BD9571MWV_INT_INTMASK),
120b2548da6SKhiem Nguyen };
121b2548da6SKhiem Nguyen 
122b2548da6SKhiem Nguyen static const struct regmap_access_table bd9574mwf_readable_table = {
123b2548da6SKhiem Nguyen 	.yes_ranges	= bd9574mwf_readable_yes_ranges,
124b2548da6SKhiem Nguyen 	.n_yes_ranges	= ARRAY_SIZE(bd9574mwf_readable_yes_ranges),
125b2548da6SKhiem Nguyen };
126b2548da6SKhiem Nguyen 
127b2548da6SKhiem Nguyen static const struct regmap_range bd9574mwf_writable_yes_ranges[] = {
128b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_BKUP_MODE_CNT, BD9571MWV_BKUP_MODE_CNT),
129b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_DVFS_SETVID, BD9571MWV_DVFS_SETVID),
130b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_GPIO_DIR, BD9571MWV_GPIO_OUT),
131b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_GPIO_INT_SET, BD9571MWV_GPIO_INTMASK),
132b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_INT_INTREQ, BD9571MWV_INT_INTMASK),
133b2548da6SKhiem Nguyen };
134b2548da6SKhiem Nguyen 
135b2548da6SKhiem Nguyen static const struct regmap_access_table bd9574mwf_writable_table = {
136b2548da6SKhiem Nguyen 	.yes_ranges	= bd9574mwf_writable_yes_ranges,
137b2548da6SKhiem Nguyen 	.n_yes_ranges	= ARRAY_SIZE(bd9574mwf_writable_yes_ranges),
138b2548da6SKhiem Nguyen };
139b2548da6SKhiem Nguyen 
140b2548da6SKhiem Nguyen static const struct regmap_range bd9574mwf_volatile_yes_ranges[] = {
141b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_DVFS_MONIVDAC, BD9571MWV_DVFS_MONIVDAC),
142b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_GPIO_IN, BD9571MWV_GPIO_IN),
143b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_GPIO_INT, BD9571MWV_GPIO_INT),
144b2548da6SKhiem Nguyen 	regmap_reg_range(BD9571MWV_INT_INTREQ, BD9571MWV_INT_INTREQ),
145b2548da6SKhiem Nguyen };
146b2548da6SKhiem Nguyen 
147b2548da6SKhiem Nguyen static const struct regmap_access_table bd9574mwf_volatile_table = {
148b2548da6SKhiem Nguyen 	.yes_ranges	= bd9574mwf_volatile_yes_ranges,
149b2548da6SKhiem Nguyen 	.n_yes_ranges	= ARRAY_SIZE(bd9574mwf_volatile_yes_ranges),
150b2548da6SKhiem Nguyen };
151b2548da6SKhiem Nguyen 
152b2548da6SKhiem Nguyen static const struct regmap_config bd9574mwf_regmap_config = {
153b2548da6SKhiem Nguyen 	.reg_bits	= 8,
154b2548da6SKhiem Nguyen 	.val_bits	= 8,
155b2548da6SKhiem Nguyen 	.cache_type	= REGCACHE_RBTREE,
156b2548da6SKhiem Nguyen 	.rd_table	= &bd9574mwf_readable_table,
157b2548da6SKhiem Nguyen 	.wr_table	= &bd9574mwf_writable_table,
158b2548da6SKhiem Nguyen 	.volatile_table	= &bd9574mwf_volatile_table,
159b2548da6SKhiem Nguyen 	.max_register	= 0xff,
160b2548da6SKhiem Nguyen };
161b2548da6SKhiem Nguyen 
162b2548da6SKhiem Nguyen static struct regmap_irq_chip bd9574mwf_irq_chip = {
163b2548da6SKhiem Nguyen 	.name		= "bd9574mwf",
164b2548da6SKhiem Nguyen 	.status_base	= BD9571MWV_INT_INTREQ,
165b2548da6SKhiem Nguyen 	.mask_base	= BD9571MWV_INT_INTMASK,
166b2548da6SKhiem Nguyen 	.ack_base	= BD9571MWV_INT_INTREQ,
167b2548da6SKhiem Nguyen 	.init_ack_masked = true,
168b2548da6SKhiem Nguyen 	.num_regs	= 1,
169b2548da6SKhiem Nguyen 	.irqs		= bd9571mwv_irqs,
170b2548da6SKhiem Nguyen 	.num_irqs	= ARRAY_SIZE(bd9571mwv_irqs),
171b2548da6SKhiem Nguyen };
172b2548da6SKhiem Nguyen 
bd957x_identify(struct device * dev,struct regmap * regmap)173f16e1fd1SKhiem Nguyen static int bd957x_identify(struct device *dev, struct regmap *regmap)
174d3ea2127SMarek Vasut {
175d3ea2127SMarek Vasut 	unsigned int value;
176d3ea2127SMarek Vasut 	int ret;
177d3ea2127SMarek Vasut 
178f16e1fd1SKhiem Nguyen 	ret = regmap_read(regmap, BD9571MWV_VENDOR_CODE, &value);
179d3ea2127SMarek Vasut 	if (ret) {
180d3ea2127SMarek Vasut 		dev_err(dev, "Failed to read vendor code register (ret=%i)\n",
181d3ea2127SMarek Vasut 			ret);
182d3ea2127SMarek Vasut 		return ret;
183d3ea2127SMarek Vasut 	}
184d3ea2127SMarek Vasut 
185d3ea2127SMarek Vasut 	if (value != BD9571MWV_VENDOR_CODE_VAL) {
186d3ea2127SMarek Vasut 		dev_err(dev, "Invalid vendor code ID %02x (expected %02x)\n",
187d3ea2127SMarek Vasut 			value, BD9571MWV_VENDOR_CODE_VAL);
188d3ea2127SMarek Vasut 		return -EINVAL;
189d3ea2127SMarek Vasut 	}
190d3ea2127SMarek Vasut 
191f16e1fd1SKhiem Nguyen 	ret = regmap_read(regmap, BD9571MWV_PRODUCT_CODE, &value);
192d3ea2127SMarek Vasut 	if (ret) {
193d3ea2127SMarek Vasut 		dev_err(dev, "Failed to read product code register (ret=%i)\n",
194d3ea2127SMarek Vasut 			ret);
195d3ea2127SMarek Vasut 		return ret;
196d3ea2127SMarek Vasut 	}
197f16e1fd1SKhiem Nguyen 	ret = regmap_read(regmap, BD9571MWV_PRODUCT_REVISION, &value);
198d3ea2127SMarek Vasut 	if (ret) {
199d3ea2127SMarek Vasut 		dev_err(dev, "Failed to read revision register (ret=%i)\n",
200d3ea2127SMarek Vasut 			ret);
201d3ea2127SMarek Vasut 		return ret;
202d3ea2127SMarek Vasut 	}
203d3ea2127SMarek Vasut 
204d3ea2127SMarek Vasut 	return 0;
205d3ea2127SMarek Vasut }
206d3ea2127SMarek Vasut 
bd9571mwv_probe(struct i2c_client * client)2074c023a6eSUwe Kleine-König static int bd9571mwv_probe(struct i2c_client *client)
208d3ea2127SMarek Vasut {
209f16e1fd1SKhiem Nguyen 	const struct regmap_config *regmap_config;
210f16e1fd1SKhiem Nguyen 	const struct regmap_irq_chip *irq_chip;
211f16e1fd1SKhiem Nguyen 	const struct mfd_cell *cells;
212f16e1fd1SKhiem Nguyen 	struct device *dev = &client->dev;
213f16e1fd1SKhiem Nguyen 	struct regmap *regmap;
214f16e1fd1SKhiem Nguyen 	struct regmap_irq_chip_data *irq_data;
215f16e1fd1SKhiem Nguyen 	int ret, num_cells, irq = client->irq;
216d3ea2127SMarek Vasut 
217f16e1fd1SKhiem Nguyen 	/* Read the PMIC product code */
218f16e1fd1SKhiem Nguyen 	ret = i2c_smbus_read_byte_data(client, BD9571MWV_PRODUCT_CODE);
219f16e1fd1SKhiem Nguyen 	if (ret < 0) {
220f16e1fd1SKhiem Nguyen 		dev_err(dev, "Failed to read product code\n");
221f16e1fd1SKhiem Nguyen 		return ret;
222d3ea2127SMarek Vasut 	}
223d3ea2127SMarek Vasut 
224f16e1fd1SKhiem Nguyen 	switch (ret) {
225f16e1fd1SKhiem Nguyen 	case BD9571MWV_PRODUCT_CODE_BD9571MWV:
226f16e1fd1SKhiem Nguyen 		regmap_config = &bd9571mwv_regmap_config;
227f16e1fd1SKhiem Nguyen 		irq_chip = &bd9571mwv_irq_chip;
228f16e1fd1SKhiem Nguyen 		cells = bd9571mwv_cells;
229f16e1fd1SKhiem Nguyen 		num_cells = ARRAY_SIZE(bd9571mwv_cells);
230f16e1fd1SKhiem Nguyen 		break;
231b2548da6SKhiem Nguyen 	case BD9571MWV_PRODUCT_CODE_BD9574MWF:
232b2548da6SKhiem Nguyen 		regmap_config = &bd9574mwf_regmap_config;
233b2548da6SKhiem Nguyen 		irq_chip = &bd9574mwf_irq_chip;
234b2548da6SKhiem Nguyen 		cells = bd9574mwf_cells;
235b2548da6SKhiem Nguyen 		num_cells = ARRAY_SIZE(bd9574mwf_cells);
236b2548da6SKhiem Nguyen 		break;
237f16e1fd1SKhiem Nguyen 	default:
238f16e1fd1SKhiem Nguyen 		dev_err(dev, "Unsupported device 0x%x\n", ret);
239f16e1fd1SKhiem Nguyen 		return -ENODEV;
240f16e1fd1SKhiem Nguyen 	}
241f16e1fd1SKhiem Nguyen 
242f16e1fd1SKhiem Nguyen 	regmap = devm_regmap_init_i2c(client, regmap_config);
243f16e1fd1SKhiem Nguyen 	if (IS_ERR(regmap)) {
244f16e1fd1SKhiem Nguyen 		dev_err(dev, "Failed to initialize register map\n");
245f16e1fd1SKhiem Nguyen 		return PTR_ERR(regmap);
246f16e1fd1SKhiem Nguyen 	}
247f16e1fd1SKhiem Nguyen 
248f16e1fd1SKhiem Nguyen 	ret = bd957x_identify(dev, regmap);
249d3ea2127SMarek Vasut 	if (ret)
250d3ea2127SMarek Vasut 		return ret;
251d3ea2127SMarek Vasut 
252f16e1fd1SKhiem Nguyen 	ret = devm_regmap_add_irq_chip(dev, regmap, irq, IRQF_ONESHOT, 0,
253f16e1fd1SKhiem Nguyen 				       irq_chip, &irq_data);
254d3ea2127SMarek Vasut 	if (ret) {
255f16e1fd1SKhiem Nguyen 		dev_err(dev, "Failed to register IRQ chip\n");
256d3ea2127SMarek Vasut 		return ret;
257d3ea2127SMarek Vasut 	}
258d3ea2127SMarek Vasut 
259f16e1fd1SKhiem Nguyen 	return devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO, cells, num_cells,
260f16e1fd1SKhiem Nguyen 				    NULL, 0, regmap_irq_get_domain(irq_data));
261d3ea2127SMarek Vasut }
262d3ea2127SMarek Vasut 
263d3ea2127SMarek Vasut static const struct of_device_id bd9571mwv_of_match_table[] = {
264d3ea2127SMarek Vasut 	{ .compatible = "rohm,bd9571mwv", },
265b2548da6SKhiem Nguyen 	{ .compatible = "rohm,bd9574mwf", },
266d3ea2127SMarek Vasut 	{ /* sentinel */ }
267d3ea2127SMarek Vasut };
268d3ea2127SMarek Vasut MODULE_DEVICE_TABLE(of, bd9571mwv_of_match_table);
269d3ea2127SMarek Vasut 
270d3ea2127SMarek Vasut static const struct i2c_device_id bd9571mwv_id_table[] = {
271d3ea2127SMarek Vasut 	{ "bd9571mwv", 0 },
272d3ea2127SMarek Vasut 	{ /* sentinel */ }
273d3ea2127SMarek Vasut };
274d3ea2127SMarek Vasut MODULE_DEVICE_TABLE(i2c, bd9571mwv_id_table);
275d3ea2127SMarek Vasut 
276d3ea2127SMarek Vasut static struct i2c_driver bd9571mwv_driver = {
277d3ea2127SMarek Vasut 	.driver		= {
278d3ea2127SMarek Vasut 		.name	= "bd9571mwv",
279d3ea2127SMarek Vasut 		.of_match_table = bd9571mwv_of_match_table,
280d3ea2127SMarek Vasut 	},
281*9816d859SUwe Kleine-König 	.probe		= bd9571mwv_probe,
282d3ea2127SMarek Vasut 	.id_table       = bd9571mwv_id_table,
283d3ea2127SMarek Vasut };
284d3ea2127SMarek Vasut module_i2c_driver(bd9571mwv_driver);
285d3ea2127SMarek Vasut 
286d3ea2127SMarek Vasut MODULE_AUTHOR("Marek Vasut <marek.vasut+renesas@gmail.com>");
287d3ea2127SMarek Vasut MODULE_DESCRIPTION("BD9571MWV PMIC Driver");
288d3ea2127SMarek Vasut MODULE_LICENSE("GPL v2");
289