xref: /linux/drivers/i2c/busses/i2c-rtl9300.c (revision aac31903329ba73ef24674df78252b6610cc9d60)
1 // SPDX-License-Identifier: GPL-2.0-only
2 
3 #include <linux/bits.h>
4 #include <linux/i2c.h>
5 #include <linux/i2c-mux.h>
6 #include <linux/mod_devicetable.h>
7 #include <linux/mfd/syscon.h>
8 #include <linux/mutex.h>
9 #include <linux/platform_device.h>
10 #include <linux/regmap.h>
11 #include <linux/unaligned.h>
12 
13 enum rtl9300_bus_freq {
14 	RTL9300_I2C_STD_FREQ,
15 	RTL9300_I2C_FAST_FREQ,
16 };
17 
18 struct rtl9300_i2c;
19 
20 struct rtl9300_i2c_chan {
21 	struct i2c_adapter adap;
22 	struct rtl9300_i2c *i2c;
23 	enum rtl9300_bus_freq bus_freq;
24 	u8 sda_num;
25 };
26 
27 enum rtl9300_i2c_reg_scope {
28 	REG_SCOPE_GLOBAL,
29 	REG_SCOPE_MASTER,
30 };
31 
32 struct rtl9300_i2c_reg_field {
33 	struct reg_field field;
34 	enum rtl9300_i2c_reg_scope scope;
35 };
36 
37 enum rtl9300_i2c_reg_fields {
38 	F_DATA_WIDTH = 0,
39 	F_DEV_ADDR,
40 	F_I2C_FAIL,
41 	F_I2C_TRIG,
42 	F_MEM_ADDR,
43 	F_MEM_ADDR_WIDTH,
44 	F_RD_MODE,
45 	F_RWOP,
46 	F_SCL_FREQ,
47 	F_SCL_SEL,
48 	F_SDA_OUT_SEL,
49 	F_SDA_SEL,
50 
51 	/* keep last */
52 	F_NUM_FIELDS
53 };
54 
55 struct rtl9300_i2c_drv_data {
56 	struct rtl9300_i2c_reg_field field_desc[F_NUM_FIELDS];
57 	int (*select_scl)(struct rtl9300_i2c *i2c, u8 scl);
58 	u32 data_reg;
59 	u8 max_nchan;
60 };
61 
62 #define RTL9300_I2C_MUX_NCHAN	8
63 #define RTL9310_I2C_MUX_NCHAN	12
64 
65 struct rtl9300_i2c {
66 	struct regmap *regmap;
67 	struct device *dev;
68 	struct rtl9300_i2c_chan chans[RTL9310_I2C_MUX_NCHAN];
69 	struct regmap_field *fields[F_NUM_FIELDS];
70 	u32 reg_base;
71 	u32 data_reg;
72 	u8 scl_num;
73 	u8 sda_num;
74 	struct mutex lock;
75 };
76 
77 DEFINE_GUARD(rtl9300_i2c, struct rtl9300_i2c *, mutex_lock(&_T->lock), mutex_unlock(&_T->lock))
78 
79 enum rtl9300_i2c_xfer_type {
80 	RTL9300_I2C_XFER_BYTE,
81 	RTL9300_I2C_XFER_WORD,
82 	RTL9300_I2C_XFER_BLOCK,
83 };
84 
85 struct rtl9300_i2c_xfer {
86 	enum rtl9300_i2c_xfer_type type;
87 	u16 dev_addr;
88 	u8 reg_addr;
89 	u8 reg_addr_len;
90 	u8 *data;
91 	u8 data_len;
92 	bool write;
93 };
94 
95 #define RTL9300_I2C_MST_CTRL1				0x0
96 #define RTL9300_I2C_MST_CTRL2				0x4
97 #define RTL9300_I2C_MST_DATA_WORD0			0x8
98 #define RTL9300_I2C_MST_DATA_WORD1			0xc
99 #define RTL9300_I2C_MST_DATA_WORD2			0x10
100 #define RTL9300_I2C_MST_DATA_WORD3			0x14
101 #define RTL9300_I2C_MST_GLB_CTRL			0x384
102 
103 #define RTL9310_I2C_MST_IF_CTRL				0x1004
104 #define RTL9310_I2C_MST_IF_SEL				0x1008
105 #define RTL9310_I2C_MST_CTRL				0x0
106 #define RTL9310_I2C_MST_MEMADDR_CTRL			0x4
107 #define RTL9310_I2C_MST_DATA_CTRL			0x8
108 
rtl9300_i2c_reg_addr_set(struct rtl9300_i2c * i2c,u32 reg,u16 len)109 static int rtl9300_i2c_reg_addr_set(struct rtl9300_i2c *i2c, u32 reg, u16 len)
110 {
111 	int ret;
112 
113 	ret = regmap_field_write(i2c->fields[F_MEM_ADDR_WIDTH], len);
114 	if (ret)
115 		return ret;
116 
117 	return regmap_field_write(i2c->fields[F_MEM_ADDR], reg);
118 }
119 
rtl9300_i2c_select_scl(struct rtl9300_i2c * i2c,u8 scl)120 static int rtl9300_i2c_select_scl(struct rtl9300_i2c *i2c, u8 scl)
121 {
122 	return regmap_field_write(i2c->fields[F_SCL_SEL], 1);
123 }
124 
rtl9310_i2c_select_scl(struct rtl9300_i2c * i2c,u8 scl)125 static int rtl9310_i2c_select_scl(struct rtl9300_i2c *i2c, u8 scl)
126 {
127 	return regmap_field_update_bits(i2c->fields[F_SCL_SEL], BIT(scl), BIT(scl));
128 }
129 
rtl9300_i2c_config_chan(struct rtl9300_i2c * i2c,struct rtl9300_i2c_chan * chan)130 static int rtl9300_i2c_config_chan(struct rtl9300_i2c *i2c, struct rtl9300_i2c_chan *chan)
131 {
132 	struct rtl9300_i2c_drv_data *drv_data;
133 	int ret;
134 
135 	if (i2c->sda_num == chan->sda_num)
136 		return 0;
137 
138 	ret = regmap_field_write(i2c->fields[F_SCL_FREQ], chan->bus_freq);
139 	if (ret)
140 		return ret;
141 
142 	drv_data = (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->dev);
143 	ret = drv_data->select_scl(i2c, i2c->scl_num);
144 	if (ret)
145 		return ret;
146 
147 	ret = regmap_field_update_bits(i2c->fields[F_SDA_SEL], BIT(chan->sda_num),
148 				       BIT(chan->sda_num));
149 	if (ret)
150 		return ret;
151 
152 	ret = regmap_field_write(i2c->fields[F_SDA_OUT_SEL], chan->sda_num);
153 	if (ret)
154 		return ret;
155 
156 	i2c->sda_num = chan->sda_num;
157 	return 0;
158 }
159 
rtl9300_i2c_read(struct rtl9300_i2c * i2c,u8 * buf,u8 len)160 static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8 *buf, u8 len)
161 {
162 	u32 vals[4] = {};
163 	int i, ret;
164 
165 	if (len > 16)
166 		return -EIO;
167 
168 	ret = regmap_bulk_read(i2c->regmap, i2c->data_reg, vals, ARRAY_SIZE(vals));
169 	if (ret)
170 		return ret;
171 
172 	for (i = 0; i < len; i++) {
173 		buf[i] = vals[i/4] & 0xff;
174 		vals[i/4] >>= 8;
175 	}
176 
177 	return 0;
178 }
179 
rtl9300_i2c_write(struct rtl9300_i2c * i2c,u8 * buf,u8 len)180 static int rtl9300_i2c_write(struct rtl9300_i2c *i2c, u8 *buf, u8 len)
181 {
182 	u32 vals[4] = {};
183 	int i;
184 
185 	if (len > 16)
186 		return -EIO;
187 
188 	for (i = 0; i < len; i++) {
189 		unsigned int shift = (i % 4) * 8;
190 		unsigned int reg = i / 4;
191 
192 		vals[reg] |= buf[i] << shift;
193 	}
194 
195 	return regmap_bulk_write(i2c->regmap, i2c->data_reg, vals, ARRAY_SIZE(vals));
196 }
197 
rtl9300_i2c_writel(struct rtl9300_i2c * i2c,u32 data)198 static int rtl9300_i2c_writel(struct rtl9300_i2c *i2c, u32 data)
199 {
200 	return regmap_write(i2c->regmap, i2c->data_reg, data);
201 }
202 
rtl9300_i2c_prepare_xfer(struct rtl9300_i2c * i2c,struct rtl9300_i2c_xfer * xfer)203 static int rtl9300_i2c_prepare_xfer(struct rtl9300_i2c *i2c, struct rtl9300_i2c_xfer *xfer)
204 {
205 	int ret;
206 
207 	if (xfer->data_len < 1 || xfer->data_len > 16)
208 		return -EINVAL;
209 
210 	ret = regmap_field_write(i2c->fields[F_DEV_ADDR], xfer->dev_addr);
211 	if (ret)
212 		return ret;
213 
214 	ret = rtl9300_i2c_reg_addr_set(i2c, xfer->reg_addr, xfer->reg_addr_len);
215 	if (ret)
216 		return ret;
217 
218 	ret = regmap_field_write(i2c->fields[F_RWOP], xfer->write);
219 	if (ret)
220 		return ret;
221 
222 	ret = regmap_field_write(i2c->fields[F_DATA_WIDTH], (xfer->data_len - 1) & 0xf);
223 	if (ret)
224 		return ret;
225 
226 	if (xfer->write) {
227 		switch (xfer->type) {
228 		case RTL9300_I2C_XFER_BYTE:
229 			ret = rtl9300_i2c_writel(i2c, *xfer->data);
230 			break;
231 		case RTL9300_I2C_XFER_WORD:
232 			ret = rtl9300_i2c_writel(i2c, get_unaligned((const u16 *)xfer->data));
233 			break;
234 		default:
235 			ret = rtl9300_i2c_write(i2c, xfer->data, xfer->data_len);
236 			break;
237 		}
238 	}
239 
240 	return ret;
241 }
242 
rtl9300_i2c_do_xfer(struct rtl9300_i2c * i2c,struct rtl9300_i2c_xfer * xfer)243 static int rtl9300_i2c_do_xfer(struct rtl9300_i2c *i2c, struct rtl9300_i2c_xfer *xfer)
244 {
245 	u32 val;
246 	int ret;
247 
248 	ret = regmap_field_write(i2c->fields[F_I2C_TRIG], 1);
249 	if (ret)
250 		return ret;
251 
252 	ret = regmap_field_read_poll_timeout(i2c->fields[F_I2C_TRIG], val, !val, 100, 100000);
253 	if (ret)
254 		return ret;
255 
256 	ret = regmap_field_read(i2c->fields[F_I2C_FAIL], &val);
257 	if (ret)
258 		return ret;
259 	if (val)
260 		return -EIO;
261 
262 	if (!xfer->write) {
263 		switch (xfer->type) {
264 		case RTL9300_I2C_XFER_BYTE:
265 			ret = regmap_read(i2c->regmap, i2c->data_reg, &val);
266 			if (ret)
267 				return ret;
268 
269 			*xfer->data = val & 0xff;
270 			break;
271 		case RTL9300_I2C_XFER_WORD:
272 			ret = regmap_read(i2c->regmap, i2c->data_reg, &val);
273 			if (ret)
274 				return ret;
275 
276 			put_unaligned(val & 0xffff, (u16*)xfer->data);
277 			break;
278 		default:
279 			ret = rtl9300_i2c_read(i2c, xfer->data, xfer->data_len);
280 			if (ret)
281 				return ret;
282 			break;
283 		}
284 	}
285 
286 	return 0;
287 }
288 
rtl9300_i2c_smbus_xfer(struct i2c_adapter * adap,u16 addr,unsigned short flags,char read_write,u8 command,int size,union i2c_smbus_data * data)289 static int rtl9300_i2c_smbus_xfer(struct i2c_adapter *adap, u16 addr, unsigned short flags,
290 				  char read_write, u8 command, int size,
291 				  union i2c_smbus_data *data)
292 {
293 	struct rtl9300_i2c_chan *chan = i2c_get_adapdata(adap);
294 	struct rtl9300_i2c *i2c = chan->i2c;
295 	struct rtl9300_i2c_xfer xfer = {0};
296 	int ret;
297 
298 	if (addr > 0x7f)
299 		return -EINVAL;
300 
301 	guard(rtl9300_i2c)(i2c);
302 
303 	ret = rtl9300_i2c_config_chan(i2c, chan);
304 	if (ret)
305 		return ret;
306 
307 	xfer.dev_addr = addr & 0x7f;
308 	xfer.write = (read_write == I2C_SMBUS_WRITE);
309 	xfer.reg_addr = command;
310 	xfer.reg_addr_len = 1;
311 
312 	switch (size) {
313 	case I2C_SMBUS_BYTE:
314 		xfer.data = (read_write == I2C_SMBUS_READ) ? &data->byte : &command;
315 		xfer.data_len = 1;
316 		xfer.reg_addr = 0;
317 		xfer.reg_addr_len = 0;
318 		xfer.type = RTL9300_I2C_XFER_BYTE;
319 		break;
320 	case I2C_SMBUS_BYTE_DATA:
321 		xfer.data = &data->byte;
322 		xfer.data_len = 1;
323 		xfer.type = RTL9300_I2C_XFER_BYTE;
324 		break;
325 	case I2C_SMBUS_WORD_DATA:
326 		xfer.data = (u8 *)&data->word;
327 		xfer.data_len = 2;
328 		xfer.type = RTL9300_I2C_XFER_WORD;
329 		break;
330 	case I2C_SMBUS_BLOCK_DATA:
331 		xfer.data = &data->block[0];
332 		xfer.data_len = data->block[0] + 1;
333 		xfer.type = RTL9300_I2C_XFER_BLOCK;
334 		break;
335 	case I2C_SMBUS_I2C_BLOCK_DATA:
336 		xfer.data = &data->block[1];
337 		xfer.data_len = data->block[0];
338 		xfer.type = RTL9300_I2C_XFER_BLOCK;
339 		break;
340 	default:
341 		dev_err(&adap->dev, "Unsupported transaction %d\n", size);
342 		return -EOPNOTSUPP;
343 	}
344 
345 	ret = rtl9300_i2c_prepare_xfer(i2c, &xfer);
346 	if (ret)
347 		return ret;
348 
349 	return rtl9300_i2c_do_xfer(i2c, &xfer);
350 }
351 
rtl9300_i2c_func(struct i2c_adapter * a)352 static u32 rtl9300_i2c_func(struct i2c_adapter *a)
353 {
354 	return I2C_FUNC_SMBUS_BYTE | I2C_FUNC_SMBUS_BYTE_DATA |
355 	       I2C_FUNC_SMBUS_WORD_DATA | I2C_FUNC_SMBUS_BLOCK_DATA |
356 	       I2C_FUNC_SMBUS_I2C_BLOCK;
357 }
358 
359 static const struct i2c_algorithm rtl9300_i2c_algo = {
360 	.smbus_xfer	= rtl9300_i2c_smbus_xfer,
361 	.functionality	= rtl9300_i2c_func,
362 };
363 
364 static struct i2c_adapter_quirks rtl9300_i2c_quirks = {
365 	.flags		= I2C_AQ_NO_CLK_STRETCH | I2C_AQ_NO_ZERO_LEN,
366 	.max_read_len	= 16,
367 	.max_write_len	= 16,
368 };
369 
rtl9300_i2c_probe(struct platform_device * pdev)370 static int rtl9300_i2c_probe(struct platform_device *pdev)
371 {
372 	struct device *dev = &pdev->dev;
373 	struct rtl9300_i2c *i2c;
374 	struct fwnode_handle *child;
375 	struct rtl9300_i2c_drv_data *drv_data;
376 	struct reg_field fields[F_NUM_FIELDS];
377 	u32 clock_freq, scl_num, sda_num;
378 	int ret, i = 0;
379 
380 	i2c = devm_kzalloc(dev, sizeof(*i2c), GFP_KERNEL);
381 	if (!i2c)
382 		return -ENOMEM;
383 
384 	i2c->regmap = syscon_node_to_regmap(dev->parent->of_node);
385 	if (IS_ERR(i2c->regmap))
386 		return PTR_ERR(i2c->regmap);
387 	i2c->dev = dev;
388 
389 	mutex_init(&i2c->lock);
390 
391 	ret = device_property_read_u32(dev, "reg", &i2c->reg_base);
392 	if (ret)
393 		return ret;
394 
395 	ret = device_property_read_u32(dev, "realtek,scl", &scl_num);
396 	if (ret || scl_num != 1)
397 		scl_num = 0;
398 	i2c->scl_num = (u8)scl_num;
399 
400 	platform_set_drvdata(pdev, i2c);
401 
402 	drv_data = (struct rtl9300_i2c_drv_data *)device_get_match_data(i2c->dev);
403 	if (device_get_child_node_count(dev) > drv_data->max_nchan)
404 		return dev_err_probe(dev, -EINVAL, "Too many channels\n");
405 
406 	i2c->data_reg = i2c->reg_base + drv_data->data_reg;
407 	for (i = 0; i < F_NUM_FIELDS; i++) {
408 		fields[i] = drv_data->field_desc[i].field;
409 		if (drv_data->field_desc[i].scope == REG_SCOPE_MASTER)
410 			fields[i].reg += i2c->reg_base;
411 	}
412 	ret = devm_regmap_field_bulk_alloc(dev, i2c->regmap, i2c->fields,
413 					   fields, F_NUM_FIELDS);
414 	if (ret)
415 		return ret;
416 
417 	i = 0;
418 	device_for_each_child_node(dev, child) {
419 		struct rtl9300_i2c_chan *chan = &i2c->chans[i];
420 		struct i2c_adapter *adap = &chan->adap;
421 
422 		ret = fwnode_property_read_u32(child, "reg", &sda_num);
423 		if (ret)
424 			return ret;
425 
426 		ret = fwnode_property_read_u32(child, "clock-frequency", &clock_freq);
427 		if (ret)
428 			clock_freq = I2C_MAX_STANDARD_MODE_FREQ;
429 
430 		switch (clock_freq) {
431 		case I2C_MAX_STANDARD_MODE_FREQ:
432 			chan->bus_freq = RTL9300_I2C_STD_FREQ;
433 			break;
434 		case I2C_MAX_FAST_MODE_FREQ:
435 			chan->bus_freq = RTL9300_I2C_FAST_FREQ;
436 			break;
437 		default:
438 			dev_warn(i2c->dev, "SDA%d clock-frequency %d not supported using default\n",
439 				 sda_num, clock_freq);
440 			break;
441 		}
442 
443 		chan->sda_num = sda_num;
444 		chan->i2c = i2c;
445 		adap = &i2c->chans[i].adap;
446 		adap->owner = THIS_MODULE;
447 		adap->algo = &rtl9300_i2c_algo;
448 		adap->quirks = &rtl9300_i2c_quirks;
449 		adap->retries = 3;
450 		adap->dev.parent = dev;
451 		i2c_set_adapdata(adap, chan);
452 		adap->dev.of_node = to_of_node(child);
453 		snprintf(adap->name, sizeof(adap->name), "%s SDA%d\n", dev_name(dev), sda_num);
454 		i++;
455 
456 		ret = devm_i2c_add_adapter(dev, adap);
457 		if (ret)
458 			return ret;
459 	}
460 	i2c->sda_num = 0xff;
461 
462 	/* only use standard read format */
463 	ret = regmap_field_write(i2c->fields[F_RD_MODE], 0);
464 	if (ret)
465 		return ret;
466 
467 	return 0;
468 }
469 
470 #define GLB_REG_FIELD(reg, msb, lsb)    \
471 	{ .field = REG_FIELD(reg, msb, lsb), .scope = REG_SCOPE_GLOBAL }
472 #define MST_REG_FIELD(reg, msb, lsb)    \
473 	{ .field = REG_FIELD(reg, msb, lsb), .scope = REG_SCOPE_MASTER }
474 
475 static const struct rtl9300_i2c_drv_data rtl9300_i2c_drv_data = {
476 	.field_desc = {
477 		[F_MEM_ADDR]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 8, 31),
478 		[F_SDA_OUT_SEL]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 4, 6),
479 		[F_SCL_SEL]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 3, 3),
480 		[F_RWOP]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 2, 2),
481 		[F_I2C_FAIL]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 1, 1),
482 		[F_I2C_TRIG]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL1, 0, 0),
483 		[F_RD_MODE]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 15, 15),
484 		[F_DEV_ADDR]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 8, 14),
485 		[F_DATA_WIDTH]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 4, 7),
486 		[F_MEM_ADDR_WIDTH]	= MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 2, 3),
487 		[F_SCL_FREQ]		= MST_REG_FIELD(RTL9300_I2C_MST_CTRL2, 0, 1),
488 		[F_SDA_SEL]		= GLB_REG_FIELD(RTL9300_I2C_MST_GLB_CTRL, 0, 7),
489 	},
490 	.select_scl = rtl9300_i2c_select_scl,
491 	.data_reg = RTL9300_I2C_MST_DATA_WORD0,
492 	.max_nchan = RTL9300_I2C_MUX_NCHAN,
493 };
494 
495 static const struct rtl9300_i2c_drv_data rtl9310_i2c_drv_data = {
496 	.field_desc = {
497 		[F_SCL_SEL]		= GLB_REG_FIELD(RTL9310_I2C_MST_IF_SEL, 12, 13),
498 		[F_SDA_SEL]		= GLB_REG_FIELD(RTL9310_I2C_MST_IF_SEL, 0, 11),
499 		[F_SCL_FREQ]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 30, 31),
500 		[F_DEV_ADDR]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 11, 17),
501 		[F_SDA_OUT_SEL]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 18, 21),
502 		[F_MEM_ADDR_WIDTH]	= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 9, 10),
503 		[F_DATA_WIDTH]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 5, 8),
504 		[F_RD_MODE]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 4, 4),
505 		[F_RWOP]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 2, 2),
506 		[F_I2C_FAIL]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 1, 1),
507 		[F_I2C_TRIG]		= MST_REG_FIELD(RTL9310_I2C_MST_CTRL, 0, 0),
508 		[F_MEM_ADDR]		= MST_REG_FIELD(RTL9310_I2C_MST_MEMADDR_CTRL, 0, 23),
509 	},
510 	.select_scl = rtl9310_i2c_select_scl,
511 	.data_reg = RTL9310_I2C_MST_DATA_CTRL,
512 	.max_nchan = RTL9310_I2C_MUX_NCHAN,
513 };
514 
515 static const struct of_device_id i2c_rtl9300_dt_ids[] = {
516 	{ .compatible = "realtek,rtl9301-i2c", .data = (void *) &rtl9300_i2c_drv_data },
517 	{ .compatible = "realtek,rtl9302b-i2c", .data = (void *) &rtl9300_i2c_drv_data },
518 	{ .compatible = "realtek,rtl9302c-i2c", .data = (void *) &rtl9300_i2c_drv_data },
519 	{ .compatible = "realtek,rtl9303-i2c", .data = (void *) &rtl9300_i2c_drv_data },
520 	{ .compatible = "realtek,rtl9310-i2c", .data = (void *) &rtl9310_i2c_drv_data },
521 	{ .compatible = "realtek,rtl9311-i2c", .data = (void *) &rtl9310_i2c_drv_data },
522 	{ .compatible = "realtek,rtl9312-i2c", .data = (void *) &rtl9310_i2c_drv_data },
523 	{ .compatible = "realtek,rtl9313-i2c", .data = (void *) &rtl9310_i2c_drv_data },
524 	{}
525 };
526 MODULE_DEVICE_TABLE(of, i2c_rtl9300_dt_ids);
527 
528 static struct platform_driver rtl9300_i2c_driver = {
529 	.probe = rtl9300_i2c_probe,
530 	.driver = {
531 		.name = "i2c-rtl9300",
532 		.of_match_table = i2c_rtl9300_dt_ids,
533 	},
534 };
535 
536 module_platform_driver(rtl9300_i2c_driver);
537 
538 MODULE_DESCRIPTION("RTL9300 I2C controller driver");
539 MODULE_LICENSE("GPL");
540