Browse Source

W1-EEPROM: add sandbox driver

Add a sandbox driver for a one wire EEPROM memory

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
Eugen Hristev 3 years ago
parent
commit
84e55bdd8b
4 changed files with 69 additions and 0 deletions
  1. 6 0
      drivers/w1-eeprom/Kconfig
  2. 1 0
      drivers/w1-eeprom/Makefile
  3. 61 0
      drivers/w1-eeprom/eep_sandbox.c
  4. 1 0
      include/w1.h

+ 6 - 0
drivers/w1-eeprom/Kconfig

@@ -18,6 +18,12 @@ config W1_EEPROM_DS24XXX
18 18
 	help
19 19
 	  Maxim DS24 EEPROMs 1-Wire EEPROM support
20 20
 
21
+config W1_EEPROM_SANDBOX
22
+	bool "Enable sandbox onewire EEPROM driver"
23
+	depends on W1
24
+	help
25
+	  Sandbox driver for a onewire EEPROM memory
26
+
21 27
 endif
22 28
 
23 29
 endmenu

+ 1 - 0
drivers/w1-eeprom/Makefile

@@ -2,3 +2,4 @@ obj-$(CONFIG_W1_EEPROM) += w1-eeprom-uclass.o
2 2
 
3 3
 obj-$(CONFIG_W1_EEPROM_DS24XXX) += ds24xxx.o
4 4
 
5
+obj-$(CONFIG_W1_EEPROM_SANDBOX) += eep_sandbox.o

+ 61 - 0
drivers/w1-eeprom/eep_sandbox.c

@@ -0,0 +1,61 @@
1
+/* SPDX-License-Identifier:	GPL-2.0+
2
+ *
3
+ * Copyright (c) 2018 Microchip Technology, Inc.
4
+ *
5
+ */
6
+
7
+#include <common.h>
8
+#include <linux/err.h>
9
+#include <dm.h>
10
+#include <w1-eeprom.h>
11
+#include <w1.h>
12
+
13
+#define W1_F2D_READ_EEPROM      0xf0
14
+
15
+#define EEP_SANDBOX_SAMPLE_MEM "this is a sample EEPROM memory string."
16
+
17
+static int eep_sandbox_read_buf(struct udevice *dev, unsigned int offset,
18
+				u8 *buf, unsigned int count)
19
+{
20
+	/* do not allow to copy more than our maximum sample string */
21
+	if (offset + count < strlen(EEP_SANDBOX_SAMPLE_MEM)) {
22
+		offset = 0;
23
+		count = strlen(EEP_SANDBOX_SAMPLE_MEM);
24
+	}
25
+	strncpy((char *)buf, EEP_SANDBOX_SAMPLE_MEM, count);
26
+
27
+	/*
28
+	 * in case the w1 subsystem uses some different kind of sandbox testing,
29
+	 * like randomized gpio values , we take the buffer from there
30
+	 */
31
+
32
+	w1_reset_select(dev);
33
+
34
+	w1_write_byte(dev, W1_F2D_READ_EEPROM);
35
+	w1_write_byte(dev, offset & 0xff);
36
+	w1_write_byte(dev, offset >> 8);
37
+
38
+	w1_read_buf(dev, buf, count);
39
+
40
+	/*
41
+	 * even if read buf from w1 fails, return success as we hardcoded
42
+	 * the buffer.
43
+	 */
44
+	return 0;
45
+}
46
+
47
+static const struct w1_eeprom_ops eep_sandbox_ops = {
48
+	.read_buf	= eep_sandbox_read_buf,
49
+};
50
+
51
+static const struct udevice_id eep_sandbox_id[] = {
52
+	{ .compatible = "sandbox,w1-eeprom", .data = W1_FAMILY_EEP_SANDBOX },
53
+	{ },
54
+};
55
+
56
+U_BOOT_DRIVER(eep_sandbox) = {
57
+	.name		= "eep_sandbox",
58
+	.id		= UCLASS_W1_EEPROM,
59
+	.of_match	= eep_sandbox_id,
60
+	.ops		= &eep_sandbox_ops,
61
+};

+ 1 - 0
include/w1.h

@@ -12,6 +12,7 @@
12 12
 
13 13
 #define W1_FAMILY_DS24B33	0x23
14 14
 #define W1_FAMILY_DS2431	0x2d
15
+#define W1_FAMILY_EEP_SANDBOX	0xfe
15 16
 
16 17
 struct w1_device {
17 18
 	u64	id;