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 07/20] w1: add command for onewire protocol
Date: Thu, 19 Jul 2018 12:57:55 +0300	[thread overview]
Message-ID: <1531994288-19423-8-git-send-email-eugen.hristev@microchip.com> (raw)
In-Reply-To: <1531994288-19423-1-git-send-email-eugen.hristev@microchip.com>

Add basic command for bus information and read for onewire
bus using Dallas 1-Wire protocol.

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
---
 cmd/Kconfig  |   7 ++++
 cmd/Makefile |   1 +
 cmd/w1.c     | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 129 insertions(+)
 create mode 100644 cmd/w1.c

diff --git a/cmd/Kconfig b/cmd/Kconfig
index aec2090..1a68b1f 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -816,6 +816,13 @@ config CMD_I2C
 	help
 	  I2C support.
 
+config CMD_W1
+	depends on W1
+	default y if W1
+	bool "w1 - Support for Dallas 1-Wire protocol"
+	help
+	  Dallas 1-wire protocol support
+
 config CMD_LOADB
 	bool "loadb"
 	default y
diff --git a/cmd/Makefile b/cmd/Makefile
index 323f1fd..51ad1d8 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -143,6 +143,7 @@ obj-$(CONFIG_CMD_THOR_DOWNLOAD) += thordown.o
 obj-$(CONFIG_CMD_XIMG) += ximg.o
 obj-$(CONFIG_CMD_YAFFS2) += yaffs2.o
 obj-$(CONFIG_CMD_SPL) += spl.o
+obj-$(CONFIG_CMD_W1) += w1.o
 obj-$(CONFIG_CMD_ZIP) += zip.o
 obj-$(CONFIG_CMD_ZFS) += zfs.o
 
diff --git a/cmd/w1.c b/cmd/w1.c
new file mode 100644
index 0000000..6255bc2
--- /dev/null
+++ b/cmd/w1.c
@@ -0,0 +1,121 @@
+/* SPDX-License-Identifier: GPL-2.0+
+ *
+ * (C) Copyright 2018
+ * Microchip Technology, Inc.
+ * Eugen Hristev <eugen.hristev@microchip.com>
+ */
+#include <common.h>
+#include <command.h>
+#include <w1.h>
+#include <w1-eeprom.h>
+#include <dm/device-internal.h>
+
+static int w1_bus(void)
+{
+	struct udevice *bus, *dev;
+	int ret;
+
+	ret = w1_get_bus(0, &bus);
+	if (ret) {
+		printf("one wire interface not found\n");
+		return CMD_RET_FAILURE;
+	}
+	printf("Bus %d:\t%s", bus->seq, bus->name);
+	if (device_active(bus))
+		printf("  (active)");
+	printf("\n");
+
+	for (device_find_first_child(bus, &dev);
+	     dev;
+	     device_find_next_child(&dev)) {
+		ret = device_probe(dev);
+
+		printf("\t%s (%d) uclass %s : ", dev->name, dev->seq,
+		       dev->uclass->uc_drv->name);
+
+		if (ret)
+			printf("device error\n");
+		else
+			printf("family 0x%x\n", w1_get_device_family(dev));
+	}
+	return CMD_RET_SUCCESS;
+}
+
+static int w1_read(int argc, char *const argv[])
+{
+	int bus_n = 0, dev_n = 0, offset = 0, len = 512;
+	int i;
+	struct udevice *bus, *dev;
+	int ret;
+	u8 buf[512];
+
+	if (argc > 2)
+		bus_n = simple_strtoul(argv[2], NULL, 10);
+
+	if (argc > 3)
+		dev_n = simple_strtoul(argv[3], NULL, 10);
+
+	if (argc > 4)
+		offset = simple_strtoul(argv[4], NULL, 10);
+
+	if (argc > 5)
+		len = simple_strtoul(argv[5], NULL, 10);
+
+	if (len > 512) {
+		printf("len needs to be <= 512\n");
+		return CMD_RET_FAILURE;
+	}
+
+	ret = w1_get_bus(bus_n, &bus);
+	if (ret) {
+		printf("one wire interface not found\n");
+		return CMD_RET_FAILURE;
+	}
+
+	for (device_find_first_child(bus, &dev), i = 0;
+	   dev && i <= dev_n;
+	   device_find_next_child(&dev), i++) {
+		ret = device_probe(dev);
+		if (!ret && i == dev_n)
+			break;
+	}
+
+	if (i != dev_n || ret || !dev) {
+		printf("invalid dev\n");
+		return CMD_RET_FAILURE;
+	}
+
+	if (strcmp(dev->uclass->uc_drv->name, "w1_eeprom")) {
+		printf("the device present on the interface is of unknown device class\n");
+		return CMD_RET_FAILURE;
+	}
+
+	w1_eeprom_read_buf(dev, offset, (u8 *)buf, len);
+	for (i = 0; i < len; i++)
+		printf("%x", buf[i]);
+	printf("\n");
+
+	return CMD_RET_SUCCESS;
+}
+
+int do_w1(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+	if (argc < 2)
+		return CMD_RET_USAGE;
+
+	if (!strcmp(argv[1], "bus"))
+		return w1_bus();
+
+	if (!strcmp(argv[1], "read"))
+		return w1_read(argc, argv);
+
+	return CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(w1, 6, 0, do_w1,
+	   "onewire interface utility commands",
+	   "bus - show onewire bus info (all)\n"
+	   "w1 read [<bus> [<dev> [offset [length]]]]"
+	   "    - read from onewire device 'dev' on onewire bus 'bus'"
+	   " starting from offset 'offset' and length 'length'\n"
+	   "      defaults: bus 0, dev 0, offset 0, length 512 bytes.");
-- 
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 ` [U-Boot] [PATCH 04/20] W1-EEPROM: Add an W1-EEPROM uclass for 1 wire EEPROMs Eugen Hristev
2018-07-20 14:28   ` 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 ` Eugen Hristev [this message]
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-8-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.