All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eugen Hristev <eugen.hristev@microchip.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 04/20] W1-EEPROM: Add an W1-EEPROM uclass for 1 wire EEPROMs
Date: Thu, 19 Jul 2018 12:57:52 +0300	[thread overview]
Message-ID: <1531994288-19423-5-git-send-email-eugen.hristev@microchip.com> (raw)
In-Reply-To: <1531994288-19423-1-git-send-email-eugen.hristev@microchip.com>

From: Maxime Ripard <maxime.ripard@free-electrons.com>

We might want to access data stored onto one wire EEPROMs.
Create a framework to provide a consistent API.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
[eugen.hristev at microchip.com: reworked patch]
Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
---
 drivers/Kconfig                      |  2 ++
 drivers/Makefile                     |  1 +
 drivers/w1-eeprom/Kconfig            | 17 +++++++++++
 drivers/w1-eeprom/Makefile           |  2 ++
 drivers/w1-eeprom/w1-eeprom-uclass.c | 56 ++++++++++++++++++++++++++++++++++++
 include/dm/uclass-id.h               |  1 +
 include/w1-eeprom.h                  | 28 ++++++++++++++++++
 7 files changed, 107 insertions(+)
 create mode 040000 drivers/w1-eeprom
 create mode 100644 drivers/w1-eeprom/Kconfig
 create mode 100644 drivers/w1-eeprom/Makefile
 create mode 100644 drivers/w1-eeprom/w1-eeprom-uclass.c
 create mode 100644 include/w1-eeprom.h

diff --git a/drivers/Kconfig b/drivers/Kconfig
index 2cae829..386af75 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -104,6 +104,8 @@ source "drivers/video/Kconfig"
 
 source "drivers/w1/Kconfig"
 
+source "drivers/w1-eeprom/Kconfig"
+
 source "drivers/watchdog/Kconfig"
 
 config PHYS_TO_BUS
diff --git a/drivers/Makefile b/drivers/Makefile
index 728380b..de67a17 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -102,6 +102,7 @@ obj-y += soc/
 obj-$(CONFIG_REMOTEPROC) += remoteproc/
 obj-y += thermal/
 obj-$(CONFIG_W1) += w1/
+obj-$(CONFIG_W1_EEPROM) += w1-eeprom/
 
 obj-$(CONFIG_MACH_PIC32) += ddr/microchip/
 endif
diff --git a/drivers/w1-eeprom/Kconfig b/drivers/w1-eeprom/Kconfig
new file mode 100644
index 0000000..d5ddc80
--- /dev/null
+++ b/drivers/w1-eeprom/Kconfig
@@ -0,0 +1,17 @@
+#
+# EEPROM subsystem configuration
+#
+
+menu "1-wire EEPROM support"
+
+config W1_EEPROM
+	bool "Enable support for EEPROMs on 1wire interface"
+	depends on DM
+	help
+	  Support for the EEPROMs connected on 1-wire Dallas protocol interface
+
+if W1_EEPROM
+
+endif
+
+endmenu
diff --git a/drivers/w1-eeprom/Makefile b/drivers/w1-eeprom/Makefile
new file mode 100644
index 0000000..b72950e
--- /dev/null
+++ b/drivers/w1-eeprom/Makefile
@@ -0,0 +1,2 @@
+obj-$(CONFIG_W1_EEPROM) += w1-eeprom-uclass.o
+
diff --git a/drivers/w1-eeprom/w1-eeprom-uclass.c b/drivers/w1-eeprom/w1-eeprom-uclass.c
new file mode 100644
index 0000000..4176baf
--- /dev/null
+++ b/drivers/w1-eeprom/w1-eeprom-uclass.c
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier:	GPL-2.0+
+ *
+ * Copyright (c) 2015 Free Electrons
+ * Copyright (c) 2015 NextThing Co.
+ *
+ * Maxime Ripard <maxime.ripard@free-electrons.com>
+ *
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <w1-eeprom.h>
+
+#include <dm/device-internal.h>
+
+int w1_eeprom_read_buf(struct udevice *dev, unsigned int offset,
+		       u8 *buf, unsigned int count)
+{
+	const struct w1_eeprom_ops *ops = device_get_ops(dev);
+
+	if (!ops->read_buf)
+		return -ENOSYS;
+
+	return ops->read_buf(dev, offset, buf, count);
+}
+
+UCLASS_DRIVER(w1_eeprom) = {
+	.name		= "w1_eeprom",
+	.id		= UCLASS_W1_EEPROM,
+};
+
+int w1_eeprom_dm_init(void)
+{
+	struct udevice *bus;
+	struct uclass *uc;
+	int ret;
+
+	ret = uclass_get(UCLASS_W1_EEPROM, &uc);
+	if (ret)
+		return ret;
+
+	uclass_foreach_dev(bus, uc) {
+		ret = device_probe(bus);
+		if (ret == -ENODEV) {	/* No such device. */
+			debug("W1_EEPROM not available.\n");
+			continue;
+		}
+
+		if (ret) {		/* Other error. */
+			printf("W1_EEPROM probe failed, error %d\n", ret);
+			continue;
+		}
+	}
+
+	return 0;
+}
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index 8eca9dc..06ff339 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -90,6 +90,7 @@ enum uclass_id {
 	UCLASS_VIDEO_BRIDGE,	/* Video bridge, e.g. DisplayPort to LVDS */
 	UCLASS_VIDEO_CONSOLE,	/* Text console driver for video device */
 	UCLASS_W1,		/* Dallas 1-Wire bus */
+	UCLASS_W1_EEPROM,	/* one-wire EEPROMs */
 	UCLASS_WDT,		/* Watchdot Timer driver */
 
 	UCLASS_COUNT,
diff --git a/include/w1-eeprom.h b/include/w1-eeprom.h
new file mode 100644
index 0000000..7c9dd96
--- /dev/null
+++ b/include/w1-eeprom.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier:	GPL-2.0+
+ *
+ * Copyright (c) 2015 Free Electrons
+ * Copyright (c) 2015 NextThing Co
+ * Copyright (c) 2018 Microchip Technology, Inc.
+ *
+ */
+
+#ifndef __W1_EEPROM_H
+#define __W1_EEPROM_H
+
+struct udevice;
+
+struct w1_eeprom_ops {
+	/*
+	 * Reads a buff from the given EEPROM memory, starting at
+	 * given offset and place the results into the given buffer.
+	 * Should read given count of bytes.
+	 * Should return 0 on success, and normal error.h on error
+	 */
+	int	(*read_buf)(struct udevice *dev, unsigned int offset,
+			    u8 *buf, unsigned int count);
+};
+
+int w1_eeprom_read_buf(struct udevice *dev, unsigned int offset,
+		       u8 *buf, unsigned int count);
+
+#endif
-- 
2.7.4

  parent reply	other threads:[~2018-07-19  9:57 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-19  9:57 [U-Boot] [PATCH 00/20] Add support for 1wire protocol and 1wire eeproms Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 01/20] w1: Add 1-Wire uclass Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 02/20] w1: Add 1-Wire gpio driver Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 03/20] dt-bindings: W1: w1-gpio: added bindings for w1-gpio Eugen Hristev
2018-07-19  9:57 ` Eugen Hristev [this message]
2018-07-20 14:28   ` [U-Boot] [PATCH 04/20] W1-EEPROM: Add an W1-EEPROM uclass for 1 wire EEPROMs Maxime Ripard
2018-07-30  8:54     ` Eugen Hristev
2018-07-31  2:06       ` Tom Rini
2018-08-02 16:56         ` Simon Glass
2018-07-19  9:57 ` [U-Boot] [PATCH 05/20] W1-EEPROM: add support for Maxim DS24 eeprom families Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 06/20] W1-EEPROM: add sandbox driver Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 07/20] w1: add command for onewire protocol Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 08/20] pinctrl: sandbox: add gpio onewire w1 group Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 09/20] sandbox: DTS: w1: add node for one wire interface on GPIO Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 10/20] configs: sandbox: add onewire w1 and sandbox eeprom Eugen Hristev
2018-07-19  9:57 ` [U-Boot] [PATCH 11/20] w1: enumerate sandbox driver if configured Eugen Hristev
2018-07-20 14:01   ` Lukasz Majewski
2018-07-23 23:48     ` Simon Glass
2018-07-24  6:58       ` Maxime Ripard
2018-07-24 15:28         ` Simon Glass
2018-07-25  9:15           ` Maxime Ripard
2018-07-19  9:58 ` [U-Boot] [PATCH 12/20] configs: sama5d2_xplained: add onewire and eeprom drivers Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 13/20] configs: sama5d3_xplained: " Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 14/20] board: atmel: add support for pda detection Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 15/20] board: sama5d2_xplained: add pda detect call at init time Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 16/20] board: sama5d3_xplained: " Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 17/20] configs: sama5d2_xplained: add fdt overlay support Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 18/20] configs: sama5d3_xplained: " Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 19/20] ARM: dts: at91: sama5d2_xplained: add onewire connector for LCD eeprom Eugen Hristev
2018-07-19  9:58 ` [U-Boot] [PATCH 20/20] ARM: dts: at91: sama5d3_xplained: " Eugen Hristev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1531994288-19423-5-git-send-email-eugen.hristev@microchip.com \
    --to=eugen.hristev@microchip.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.