1
2
3
4
5
6
7
8
9#include <linux/acpi.h>
10#include <linux/bitops.h>
11#include <linux/capability.h>
12#include <linux/delay.h>
13#include <linux/i2c.h>
14#include <linux/init.h>
15#include <linux/jiffies.h>
16#include <linux/kernel.h>
17#include <linux/mod_devicetable.h>
18#include <linux/module.h>
19#include <linux/mutex.h>
20#include <linux/nvmem-provider.h>
21#include <linux/of_device.h>
22#include <linux/pm_runtime.h>
23#include <linux/property.h>
24#include <linux/regmap.h>
25#include <linux/regulator/consumer.h>
26#include <linux/slab.h>
27
28
29#define AT24_FLAG_ADDR16 BIT(7)
30
31#define AT24_FLAG_READONLY BIT(6)
32
33#define AT24_FLAG_IRUGO BIT(5)
34
35#define AT24_FLAG_TAKE8ADDR BIT(4)
36
37#define AT24_FLAG_SERIAL BIT(3)
38
39#define AT24_FLAG_MAC BIT(2)
40
41#define AT24_FLAG_NO_RDROL BIT(1)
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
71struct at24_client {
72 struct i2c_client *client;
73 struct regmap *regmap;
74};
75
76struct at24_data {
77
78
79
80
81 struct mutex lock;
82
83 unsigned int write_max;
84 unsigned int num_addresses;
85 unsigned int offset_adj;
86
87 u32 byte_len;
88 u16 page_size;
89 u8 flags;
90
91 struct nvmem_device *nvmem;
92 struct regulator *vcc_reg;
93 void (*read_post)(unsigned int off, char *buf, size_t count);
94
95
96
97
98
99 struct at24_client client[];
100};
101
102
103
104
105
106
107
108
109
110
111static unsigned int at24_io_limit = 128;
112module_param_named(io_limit, at24_io_limit, uint, 0);
113MODULE_PARM_DESC(at24_io_limit, "Maximum bytes per I/O (default 128)");
114
115
116
117
118
119static unsigned int at24_write_timeout = 25;
120module_param_named(write_timeout, at24_write_timeout, uint, 0);
121MODULE_PARM_DESC(at24_write_timeout, "Time (in ms) to try writes (default 25)");
122
123struct at24_chip_data {
124 u32 byte_len;
125 u8 flags;
126 void (*read_post)(unsigned int off, char *buf, size_t count);
127};
128
129#define AT24_CHIP_DATA(_name, _len, _flags) \
130 static const struct at24_chip_data _name = { \
131 .byte_len = _len, .flags = _flags, \
132 }
133
134#define AT24_CHIP_DATA_CB(_name, _len, _flags, _read_post) \
135 static const struct at24_chip_data _name = { \
136 .byte_len = _len, .flags = _flags, \
137 .read_post = _read_post, \
138 }
139
140static void at24_read_post_vaio(unsigned int off, char *buf, size_t count)
141{
142 int i;
143
144 if (capable(CAP_SYS_ADMIN))
145 return;
146
147
148
149
150
151
152
153 for (i = 0; i < count; i++) {
154 if ((off + i <= 0x1f) ||
155 (off + i >= 0xc0 && off + i <= 0xdf))
156 buf[i] = 0;
157 }
158}
159
160
161AT24_CHIP_DATA(at24_data_24c00, 128 / 8, AT24_FLAG_TAKE8ADDR);
162
163AT24_CHIP_DATA(at24_data_24c01, 1024 / 8, 0);
164AT24_CHIP_DATA(at24_data_24cs01, 16,
165 AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
166AT24_CHIP_DATA(at24_data_24c02, 2048 / 8, 0);
167AT24_CHIP_DATA(at24_data_24cs02, 16,
168 AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
169AT24_CHIP_DATA(at24_data_24mac402, 48 / 8,
170 AT24_FLAG_MAC | AT24_FLAG_READONLY);
171AT24_CHIP_DATA(at24_data_24mac602, 64 / 8,
172 AT24_FLAG_MAC | AT24_FLAG_READONLY);
173
174AT24_CHIP_DATA(at24_data_spd, 2048 / 8,
175 AT24_FLAG_READONLY | AT24_FLAG_IRUGO);
176
177AT24_CHIP_DATA_CB(at24_data_24c02_vaio, 2048 / 8,
178 AT24_FLAG_READONLY | AT24_FLAG_IRUGO,
179 at24_read_post_vaio);
180AT24_CHIP_DATA(at24_data_24c04, 4096 / 8, 0);
181AT24_CHIP_DATA(at24_data_24cs04, 16,
182 AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
183
184AT24_CHIP_DATA(at24_data_24c08, 8192 / 8, 0);
185AT24_CHIP_DATA(at24_data_24cs08, 16,
186 AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
187AT24_CHIP_DATA(at24_data_24c16, 16384 / 8, 0);
188AT24_CHIP_DATA(at24_data_24cs16, 16,
189 AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
190AT24_CHIP_DATA(at24_data_24c32, 32768 / 8, AT24_FLAG_ADDR16);
191AT24_CHIP_DATA(at24_data_24cs32, 16,
192 AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
193AT24_CHIP_DATA(at24_data_24c64, 65536 / 8, AT24_FLAG_ADDR16);
194AT24_CHIP_DATA(at24_data_24cs64, 16,
195 AT24_FLAG_ADDR16 | AT24_FLAG_SERIAL | AT24_FLAG_READONLY);
196AT24_CHIP_DATA(at24_data_24c128, 131072 / 8, AT24_FLAG_ADDR16);
197AT24_CHIP_DATA(at24_data_24c256, 262144 / 8, AT24_FLAG_ADDR16);
198AT24_CHIP_DATA(at24_data_24c512, 524288 / 8, AT24_FLAG_ADDR16);
199AT24_CHIP_DATA(at24_data_24c1024, 1048576 / 8, AT24_FLAG_ADDR16);
200AT24_CHIP_DATA(at24_data_24c2048, 2097152 / 8, AT24_FLAG_ADDR16);
201
202AT24_CHIP_DATA(at24_data_INT3499, 8192 / 8, 0);
203
204static const struct i2c_device_id at24_ids[] = {
205 { "24c00", (kernel_ulong_t)&at24_data_24c00 },
206 { "24c01", (kernel_ulong_t)&at24_data_24c01 },
207 { "24cs01", (kernel_ulong_t)&at24_data_24cs01 },
208 { "24c02", (kernel_ulong_t)&at24_data_24c02 },
209 { "24cs02", (kernel_ulong_t)&at24_data_24cs02 },
210 { "24mac402", (kernel_ulong_t)&at24_data_24mac402 },
211 { "24mac602", (kernel_ulong_t)&at24_data_24mac602 },
212 { "spd", (kernel_ulong_t)&at24_data_spd },
213 { "24c02-vaio", (kernel_ulong_t)&at24_data_24c02_vaio },
214 { "24c04", (kernel_ulong_t)&at24_data_24c04 },
215 { "24cs04", (kernel_ulong_t)&at24_data_24cs04 },
216 { "24c08", (kernel_ulong_t)&at24_data_24c08 },
217 { "24cs08", (kernel_ulong_t)&at24_data_24cs08 },
218 { "24c16", (kernel_ulong_t)&at24_data_24c16 },
219 { "24cs16", (kernel_ulong_t)&at24_data_24cs16 },
220 { "24c32", (kernel_ulong_t)&at24_data_24c32 },
221 { "24cs32", (kernel_ulong_t)&at24_data_24cs32 },
222 { "24c64", (kernel_ulong_t)&at24_data_24c64 },
223 { "24cs64", (kernel_ulong_t)&at24_data_24cs64 },
224 { "24c128", (kernel_ulong_t)&at24_data_24c128 },
225 { "24c256", (kernel_ulong_t)&at24_data_24c256 },
226 { "24c512", (kernel_ulong_t)&at24_data_24c512 },
227 { "24c1024", (kernel_ulong_t)&at24_data_24c1024 },
228 { "24c2048", (kernel_ulong_t)&at24_data_24c2048 },
229 { "at24", 0 },
230 { }
231};
232MODULE_DEVICE_TABLE(i2c, at24_ids);
233
234static const struct of_device_id at24_of_match[] = {
235 { .compatible = "atmel,24c00", .data = &at24_data_24c00 },
236 { .compatible = "atmel,24c01", .data = &at24_data_24c01 },
237 { .compatible = "atmel,24cs01", .data = &at24_data_24cs01 },
238 { .compatible = "atmel,24c02", .data = &at24_data_24c02 },
239 { .compatible = "atmel,24cs02", .data = &at24_data_24cs02 },
240 { .compatible = "atmel,24mac402", .data = &at24_data_24mac402 },
241 { .compatible = "atmel,24mac602", .data = &at24_data_24mac602 },
242 { .compatible = "atmel,spd", .data = &at24_data_spd },
243 { .compatible = "atmel,24c04", .data = &at24_data_24c04 },
244 { .compatible = "atmel,24cs04", .data = &at24_data_24cs04 },
245 { .compatible = "atmel,24c08", .data = &at24_data_24c08 },
246 { .compatible = "atmel,24cs08", .data = &at24_data_24cs08 },
247 { .compatible = "atmel,24c16", .data = &at24_data_24c16 },
248 { .compatible = "atmel,24cs16", .data = &at24_data_24cs16 },
249 { .compatible = "atmel,24c32", .data = &at24_data_24c32 },
250 { .compatible = "atmel,24cs32", .data = &at24_data_24cs32 },
251 { .compatible = "atmel,24c64", .data = &at24_data_24c64 },
252 { .compatible = "atmel,24cs64", .data = &at24_data_24cs64 },
253 { .compatible = "atmel,24c128", .data = &at24_data_24c128 },
254 { .compatible = "atmel,24c256", .data = &at24_data_24c256 },
255 { .compatible = "atmel,24c512", .data = &at24_data_24c512 },
256 { .compatible = "atmel,24c1024", .data = &at24_data_24c1024 },
257 { .compatible = "atmel,24c2048", .data = &at24_data_24c2048 },
258 { },
259};
260MODULE_DEVICE_TABLE(of, at24_of_match);
261
262static const struct acpi_device_id __maybe_unused at24_acpi_ids[] = {
263 { "INT3499", (kernel_ulong_t)&at24_data_INT3499 },
264 { "TPF0001", (kernel_ulong_t)&at24_data_24c1024 },
265 { }
266};
267MODULE_DEVICE_TABLE(acpi, at24_acpi_ids);
268
269
270
271
272
273
274
275
276
277
278static struct at24_client *at24_translate_offset(struct at24_data *at24,
279 unsigned int *offset)
280{
281 unsigned int i;
282
283 if (at24->flags & AT24_FLAG_ADDR16) {
284 i = *offset >> 16;
285 *offset &= 0xffff;
286 } else {
287 i = *offset >> 8;
288 *offset &= 0xff;
289 }
290
291 return &at24->client[i];
292}
293
294static struct device *at24_base_client_dev(struct at24_data *at24)
295{
296 return &at24->client[0].client->dev;
297}
298
299static size_t at24_adjust_read_count(struct at24_data *at24,
300 unsigned int offset, size_t count)
301{
302 unsigned int bits;
303 size_t remainder;
304
305
306
307
308
309
310 if (at24->flags & AT24_FLAG_NO_RDROL) {
311 bits = (at24->flags & AT24_FLAG_ADDR16) ? 16 : 8;
312 remainder = BIT(bits) - offset;
313 if (count > remainder)
314 count = remainder;
315 }
316
317 if (count > at24_io_limit)
318 count = at24_io_limit;
319
320 return count;
321}
322
323static ssize_t at24_regmap_read(struct at24_data *at24, char *buf,
324 unsigned int offset, size_t count)
325{
326 unsigned long timeout, read_time;
327 struct at24_client *at24_client;
328 struct i2c_client *client;
329 struct regmap *regmap;
330 int ret;
331
332 at24_client = at24_translate_offset(at24, &offset);
333 regmap = at24_client->regmap;
334 client = at24_client->client;
335 count = at24_adjust_read_count(at24, offset, count);
336
337
338 offset += at24->offset_adj;
339
340 timeout = jiffies + msecs_to_jiffies(at24_write_timeout);
341 do {
342
343
344
345
346 read_time = jiffies;
347
348 ret = regmap_bulk_read(regmap, offset, buf, count);
349 dev_dbg(&client->dev, "read %zu@%d --> %d (%ld)\n",
350 count, offset, ret, jiffies);
351 if (!ret)
352 return count;
353
354 usleep_range(1000, 1500);
355 } while (time_before(read_time, timeout));
356
357 return -ETIMEDOUT;
358}
359
360
361
362
363
364
365
366
367
368
369static size_t at24_adjust_write_count(struct at24_data *at24,
370 unsigned int offset, size_t count)
371{
372 unsigned int next_page;
373
374
375 if (count > at24->write_max)
376 count = at24->write_max;
377
378
379 next_page = roundup(offset + 1, at24->page_size);
380 if (offset + count > next_page)
381 count = next_page - offset;
382
383 return count;
384}
385
386static ssize_t at24_regmap_write(struct at24_data *at24, const char *buf,
387 unsigned int offset, size_t count)
388{
389 unsigned long timeout, write_time;
390 struct at24_client *at24_client;
391 struct i2c_client *client;
392 struct regmap *regmap;
393 int ret;
394
395 at24_client = at24_translate_offset(at24, &offset);
396 regmap = at24_client->regmap;
397 client = at24_client->client;
398 count = at24_adjust_write_count(at24, offset, count);
399 timeout = jiffies + msecs_to_jiffies(at24_write_timeout);
400
401 do {
402
403
404
405
406 write_time = jiffies;
407
408 ret = regmap_bulk_write(regmap, offset, buf, count);
409 dev_dbg(&client->dev, "write %zu@%d --> %d (%ld)\n",
410 count, offset, ret, jiffies);
411 if (!ret)
412 return count;
413
414 usleep_range(1000, 1500);
415 } while (time_before(write_time, timeout));
416
417 return -ETIMEDOUT;
418}
419
420static int at24_read(void *priv, unsigned int off, void *val, size_t count)
421{
422 struct at24_data *at24;
423 struct device *dev;
424 char *buf = val;
425 int i, ret;
426
427 at24 = priv;
428 dev = at24_base_client_dev(at24);
429
430 if (unlikely(!count))
431 return count;
432
433 if (off + count > at24->byte_len)
434 return -EINVAL;
435
436 ret = pm_runtime_get_sync(dev);
437 if (ret < 0) {
438 pm_runtime_put_noidle(dev);
439 return ret;
440 }
441
442
443
444
445
446 mutex_lock(&at24->lock);
447
448 for (i = 0; count; i += ret, count -= ret) {
449 ret = at24_regmap_read(at24, buf + i, off + i, count);
450 if (ret < 0) {
451 mutex_unlock(&at24->lock);
452 pm_runtime_put(dev);
453 return ret;
454 }
455 }
456
457 mutex_unlock(&at24->lock);
458
459 pm_runtime_put(dev);
460
461 if (unlikely(at24->read_post))
462 at24->read_post(off, buf, i);
463
464 return 0;
465}
466
467static int at24_write(void *priv, unsigned int off, void *val, size_t count)
468{
469 struct at24_data *at24;
470 struct device *dev;
471 char *buf = val;
472 int ret;
473
474 at24 = priv;
475 dev = at24_base_client_dev(at24);
476
477 if (unlikely(!count))
478 return -EINVAL;
479
480 if (off + count > at24->byte_len)
481 return -EINVAL;
482
483 ret = pm_runtime_get_sync(dev);
484 if (ret < 0) {
485 pm_runtime_put_noidle(dev);
486 return ret;
487 }
488
489
490
491
492
493 mutex_lock(&at24->lock);
494
495 while (count) {
496 ret = at24_regmap_write(at24, buf, off, count);
497 if (ret < 0) {
498 mutex_unlock(&at24->lock);
499 pm_runtime_put(dev);
500 return ret;
501 }
502 buf += ret;
503 off += ret;
504 count -= ret;
505 }
506
507 mutex_unlock(&at24->lock);
508
509 pm_runtime_put(dev);
510
511 return 0;
512}
513
514static const struct at24_chip_data *at24_get_chip_data(struct device *dev)
515{
516 struct device_node *of_node = dev->of_node;
517 const struct at24_chip_data *cdata;
518 const struct i2c_device_id *id;
519
520 id = i2c_match_id(at24_ids, to_i2c_client(dev));
521
522
523
524
525
526
527 if (of_node && of_match_device(at24_of_match, dev))
528 cdata = of_device_get_match_data(dev);
529 else if (id)
530 cdata = (void *)id->driver_data;
531 else
532 cdata = acpi_device_get_match_data(dev);
533
534 if (!cdata)
535 return ERR_PTR(-ENODEV);
536
537 return cdata;
538}
539
540static int at24_make_dummy_client(struct at24_data *at24, unsigned int index,
541 struct regmap_config *regmap_config)
542{
543 struct i2c_client *base_client, *dummy_client;
544 struct regmap *regmap;
545 struct device *dev;
546
547 base_client = at24->client[0].client;
548 dev = &base_client->dev;
549
550 dummy_client = devm_i2c_new_dummy_device(dev, base_client->adapter,
551 base_client->addr + index);
552 if (IS_ERR(dummy_client))
553 return PTR_ERR(dummy_client);
554
555 regmap = devm_regmap_init_i2c(dummy_client, regmap_config);
556 if (IS_ERR(regmap))
557 return PTR_ERR(regmap);
558
559 at24->client[index].client = dummy_client;
560 at24->client[index].regmap = regmap;
561
562 return 0;
563}
564
565static unsigned int at24_get_offset_adj(u8 flags, unsigned int byte_len)
566{
567 if (flags & AT24_FLAG_MAC) {
568
569 return 0xa0 - byte_len;
570 } else if (flags & AT24_FLAG_SERIAL && flags & AT24_FLAG_ADDR16) {
571
572
573
574
575
576 return 0x0800;
577 } else if (flags & AT24_FLAG_SERIAL) {
578
579
580
581
582 return 0x0080;
583 } else {
584 return 0;
585 }
586}
587
588static int at24_probe(struct i2c_client *client)
589{
590 struct regmap_config regmap_config = { };
591 struct nvmem_config nvmem_config = { };
592 u32 byte_len, page_size, flags, addrw;
593 const struct at24_chip_data *cdata;
594 struct device *dev = &client->dev;
595 bool i2c_fn_i2c, i2c_fn_block;
596 unsigned int i, num_addresses;
597 struct at24_data *at24;
598 struct regmap *regmap;
599 bool writable;
600 u8 test_byte;
601 int err;
602
603 i2c_fn_i2c = i2c_check_functionality(client->adapter, I2C_FUNC_I2C);
604 i2c_fn_block = i2c_check_functionality(client->adapter,
605 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK);
606
607 cdata = at24_get_chip_data(dev);
608 if (IS_ERR(cdata))
609 return PTR_ERR(cdata);
610
611 err = device_property_read_u32(dev, "pagesize", &page_size);
612 if (err)
613
614
615
616
617
618 page_size = 1;
619
620 flags = cdata->flags;
621 if (device_property_present(dev, "read-only"))
622 flags |= AT24_FLAG_READONLY;
623 if (device_property_present(dev, "no-read-rollover"))
624 flags |= AT24_FLAG_NO_RDROL;
625
626 err = device_property_read_u32(dev, "address-width", &addrw);
627 if (!err) {
628 switch (addrw) {
629 case 8:
630 if (flags & AT24_FLAG_ADDR16)
631 dev_warn(dev,
632 "Override address width to be 8, while default is 16\n");
633 flags &= ~AT24_FLAG_ADDR16;
634 break;
635 case 16:
636 flags |= AT24_FLAG_ADDR16;
637 break;
638 default:
639 dev_warn(dev, "Bad \"address-width\" property: %u\n",
640 addrw);
641 }
642 }
643
644 err = device_property_read_u32(dev, "size", &byte_len);
645 if (err)
646 byte_len = cdata->byte_len;
647
648 if (!i2c_fn_i2c && !i2c_fn_block)
649 page_size = 1;
650
651 if (!page_size) {
652 dev_err(dev, "page_size must not be 0!\n");
653 return -EINVAL;
654 }
655
656 if (!is_power_of_2(page_size))
657 dev_warn(dev, "page_size looks suspicious (no power of 2)!\n");
658
659 err = device_property_read_u32(dev, "num-addresses", &num_addresses);
660 if (err) {
661 if (flags & AT24_FLAG_TAKE8ADDR)
662 num_addresses = 8;
663 else
664 num_addresses = DIV_ROUND_UP(byte_len,
665 (flags & AT24_FLAG_ADDR16) ? 65536 : 256);
666 }
667
668 if ((flags & AT24_FLAG_SERIAL) && (flags & AT24_FLAG_MAC)) {
669 dev_err(dev,
670 "invalid device data - cannot have both AT24_FLAG_SERIAL & AT24_FLAG_MAC.");
671 return -EINVAL;
672 }
673
674 regmap_config.val_bits = 8;
675 regmap_config.reg_bits = (flags & AT24_FLAG_ADDR16) ? 16 : 8;
676 regmap_config.disable_locking = true;
677
678 regmap = devm_regmap_init_i2c(client, ®map_config);
679 if (IS_ERR(regmap))
680 return PTR_ERR(regmap);
681
682 at24 = devm_kzalloc(dev, struct_size(at24, client, num_addresses),
683 GFP_KERNEL);
684 if (!at24)
685 return -ENOMEM;
686
687 mutex_init(&at24->lock);
688 at24->byte_len = byte_len;
689 at24->page_size = page_size;
690 at24->flags = flags;
691 at24->read_post = cdata->read_post;
692 at24->num_addresses = num_addresses;
693 at24->offset_adj = at24_get_offset_adj(flags, byte_len);
694 at24->client[0].client = client;
695 at24->client[0].regmap = regmap;
696
697 at24->vcc_reg = devm_regulator_get(dev, "vcc");
698 if (IS_ERR(at24->vcc_reg))
699 return PTR_ERR(at24->vcc_reg);
700
701 writable = !(flags & AT24_FLAG_READONLY);
702 if (writable) {
703 at24->write_max = min_t(unsigned int,
704 page_size, at24_io_limit);
705 if (!i2c_fn_i2c && at24->write_max > I2C_SMBUS_BLOCK_MAX)
706 at24->write_max = I2C_SMBUS_BLOCK_MAX;
707 }
708
709
710 for (i = 1; i < num_addresses; i++) {
711 err = at24_make_dummy_client(at24, i, ®map_config);
712 if (err)
713 return err;
714 }
715
716
717
718
719
720
721
722
723
724
725
726 if (device_property_present(dev, "label")) {
727 nvmem_config.id = NVMEM_DEVID_NONE;
728 err = device_property_read_string(dev, "label",
729 &nvmem_config.name);
730 if (err)
731 return err;
732 } else {
733 nvmem_config.id = NVMEM_DEVID_AUTO;
734 nvmem_config.name = dev_name(dev);
735 }
736
737 nvmem_config.type = NVMEM_TYPE_EEPROM;
738 nvmem_config.dev = dev;
739 nvmem_config.read_only = !writable;
740 nvmem_config.root_only = !(flags & AT24_FLAG_IRUGO);
741 nvmem_config.owner = THIS_MODULE;
742 nvmem_config.compat = true;
743 nvmem_config.base_dev = dev;
744 nvmem_config.reg_read = at24_read;
745 nvmem_config.reg_write = at24_write;
746 nvmem_config.priv = at24;
747 nvmem_config.stride = 1;
748 nvmem_config.word_size = 1;
749 nvmem_config.size = byte_len;
750
751 i2c_set_clientdata(client, at24);
752
753 err = regulator_enable(at24->vcc_reg);
754 if (err) {
755 dev_err(dev, "Failed to enable vcc regulator\n");
756 return err;
757 }
758
759
760 pm_runtime_set_active(dev);
761 pm_runtime_enable(dev);
762
763 at24->nvmem = devm_nvmem_register(dev, &nvmem_config);
764 if (IS_ERR(at24->nvmem)) {
765 pm_runtime_disable(dev);
766 regulator_disable(at24->vcc_reg);
767 return PTR_ERR(at24->nvmem);
768 }
769
770
771
772
773
774 err = at24_read(at24, 0, &test_byte, 1);
775 if (err) {
776 pm_runtime_disable(dev);
777 regulator_disable(at24->vcc_reg);
778 return -ENODEV;
779 }
780
781 pm_runtime_idle(dev);
782
783 if (writable)
784 dev_info(dev, "%u byte %s EEPROM, writable, %u bytes/write\n",
785 byte_len, client->name, at24->write_max);
786 else
787 dev_info(dev, "%u byte %s EEPROM, read-only\n",
788 byte_len, client->name);
789
790 return 0;
791}
792
793static int at24_remove(struct i2c_client *client)
794{
795 struct at24_data *at24 = i2c_get_clientdata(client);
796
797 pm_runtime_disable(&client->dev);
798 if (!pm_runtime_status_suspended(&client->dev))
799 regulator_disable(at24->vcc_reg);
800 pm_runtime_set_suspended(&client->dev);
801
802 return 0;
803}
804
805static int __maybe_unused at24_suspend(struct device *dev)
806{
807 struct i2c_client *client = to_i2c_client(dev);
808 struct at24_data *at24 = i2c_get_clientdata(client);
809
810 return regulator_disable(at24->vcc_reg);
811}
812
813static int __maybe_unused at24_resume(struct device *dev)
814{
815 struct i2c_client *client = to_i2c_client(dev);
816 struct at24_data *at24 = i2c_get_clientdata(client);
817
818 return regulator_enable(at24->vcc_reg);
819}
820
821static const struct dev_pm_ops at24_pm_ops = {
822 SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
823 pm_runtime_force_resume)
824 SET_RUNTIME_PM_OPS(at24_suspend, at24_resume, NULL)
825};
826
827static struct i2c_driver at24_driver = {
828 .driver = {
829 .name = "at24",
830 .pm = &at24_pm_ops,
831 .of_match_table = at24_of_match,
832 .acpi_match_table = ACPI_PTR(at24_acpi_ids),
833 },
834 .probe_new = at24_probe,
835 .remove = at24_remove,
836 .id_table = at24_ids,
837};
838
839static int __init at24_init(void)
840{
841 if (!at24_io_limit) {
842 pr_err("at24: at24_io_limit must not be 0!\n");
843 return -EINVAL;
844 }
845
846 at24_io_limit = rounddown_pow_of_two(at24_io_limit);
847 return i2c_add_driver(&at24_driver);
848}
849module_init(at24_init);
850
851static void __exit at24_exit(void)
852{
853 i2c_del_driver(&at24_driver);
854}
855module_exit(at24_exit);
856
857MODULE_DESCRIPTION("Driver for most I2C EEPROMs");
858MODULE_AUTHOR("David Brownell and Wolfram Sang");
859MODULE_LICENSE("GPL");
860