All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/5] VIM3: add support for checking 'Function' button state
       [not found] <CGME20210211084804eucas1p111b64b0251fd991f2aa6f2470341634a@eucas1p1.samsung.com>
@ 2021-02-11  8:47 ` Marek Szyprowski
       [not found]   ` <CGME20210211084805eucas1p2a9c601311c97458a3435e3fec49e331b@eucas1p2.samsung.com>
                     ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Marek Szyprowski @ 2021-02-11  8:47 UTC (permalink / raw)
  To: u-boot

Hi All,

This patchset adds all building blocks needed for checking the 'Function'
button state in the boot script on Amlogic A311D based VIM3 board. This
button is connected to the ADC line of the SoC, so it required to enable
meson SARADC, the clocks needed for it and a simple button-adc drivers.

Once applied, one can use following commands in the boot scripts:
-->8---
echo Checking Func button state: \\c
if button Function
then
	echo Selected alternative boot
	...
fi
--->8---

Best regards
Marek Szyprowski
Samsung R&D Institute Poland


Changelog:
v6:
- added a simple sandbox test for adc-keys
- use of_to_plat and adc_raw_to_uV to simplify code in the adc button driver

v5: https://lists.denx.de/pipermail/u-boot/2021-January/438751.html
- rebased onto latest uboot-amlogic/u-boot-amlogic-next branch
- synchronized adc-keys binding with the recent version from the Linux
  kernel
- updated adc-keys driver to match behavior from dt-bindings
- added a patch for meson-saradc driver to register vdd reference supply
  to the ADC framework

v4: https://lists.denx.de/pipermail/u-boot/2020-December/435641.html
- rebased onto uboot-amlogic/u-boot-amlogic-next and dropped merged patches
- added adc-keys bindings docs (copied from Linux kernel)
- minor code adjustments pointed by Simon
- enabled driver also in khadas-vim3l_defconfig

v3: https://lists.denx.de/pipermail/u-boot/2020-December/435072.html
- removed 'button' env variable
- extended kconfig and patch descriptions

v2: https://lists.denx.de/pipermail/u-boot/2020-December/434991.html
- removed Change-Id tags
- split defconfig changes into ADC and button related

v1: https://lists.denx.de/pipermail/u-boot/2020-December/434875.html
- initial submission


Patch summary:

Marek Szyprowski (5):
  dt-bindings: input: adc-keys bindings documentation
  button: add a simple Analog to Digital Converter device based button
    driver
  adc: meson-saradc: add support for getting reference voltage value
  configs: khadas-vim3(l): enable Function button support
  test: add a simple test for the adc-keys button driver

 arch/sandbox/dts/test.dts                   |  24 +++-
 configs/khadas-vim3_defconfig               |   2 +
 configs/khadas-vim3l_defconfig              |   2 +
 configs/sandbox_defconfig                   |   1 +
 doc/device-tree-bindings/input/adc-keys.txt |  67 +++++++++
 drivers/adc/meson-saradc.c                  |  21 +++
 drivers/button/Kconfig                      |   8 ++
 drivers/button/Makefile                     |   1 +
 drivers/button/button-adc.c                 | 146 ++++++++++++++++++++
 test/dm/button.c                            |  50 ++++++-
 10 files changed, 319 insertions(+), 3 deletions(-)
 create mode 100644 doc/device-tree-bindings/input/adc-keys.txt
 create mode 100644 drivers/button/button-adc.c

-- 
2.17.1

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v6 1/5] dt-bindings: input: adc-keys bindings documentation
       [not found]   ` <CGME20210211084805eucas1p2a9c601311c97458a3435e3fec49e331b@eucas1p2.samsung.com>
@ 2021-02-11  8:47     ` Marek Szyprowski
  0 siblings, 0 replies; 11+ messages in thread
From: Marek Szyprowski @ 2021-02-11  8:47 UTC (permalink / raw)
  To: u-boot

Dump adc-keys bindings documentation from Linux kernel source tree from
commit 698dc0cf9447 ("dt-bindings: input: adc-keys: clarify
description").

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 doc/device-tree-bindings/input/adc-keys.txt | 67 +++++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 doc/device-tree-bindings/input/adc-keys.txt

diff --git a/doc/device-tree-bindings/input/adc-keys.txt b/doc/device-tree-bindings/input/adc-keys.txt
new file mode 100644
index 0000000000..6c8be6a9ac
--- /dev/null
+++ b/doc/device-tree-bindings/input/adc-keys.txt
@@ -0,0 +1,67 @@
+ADC attached resistor ladder buttons
+------------------------------------
+
+Required properties:
+ - compatible: "adc-keys"
+ - io-channels: Phandle to an ADC channel
+ - io-channel-names = "buttons";
+ - keyup-threshold-microvolt: Voltage above or equal to which all the keys are
+			      considered up.
+
+Optional properties:
+	- poll-interval: Poll interval time in milliseconds
+	- autorepeat: Boolean, Enable auto repeat feature of Linux input
+	  subsystem.
+
+Each button (key) is represented as a sub-node of "adc-keys":
+
+Required subnode-properties:
+	- label: Descriptive name of the key.
+	- linux,code: Keycode to emit.
+	- press-threshold-microvolt: voltage above or equal to which this key is
+				     considered pressed.
+
+No two values of press-threshold-microvolt may be the same.
+All values of press-threshold-microvolt must be less than
+keyup-threshold-microvolt.
+
+Example:
+
+#include <dt-bindings/input/input.h>
+
+	adc-keys {
+		compatible = "adc-keys";
+		io-channels = <&lradc 0>;
+		io-channel-names = "buttons";
+		keyup-threshold-microvolt = <2000000>;
+
+		button-up {
+			label = "Volume Up";
+			linux,code = <KEY_VOLUMEUP>;
+			press-threshold-microvolt = <1500000>;
+		};
+
+		button-down {
+			label = "Volume Down";
+			linux,code = <KEY_VOLUMEDOWN>;
+			press-threshold-microvolt = <1000000>;
+		};
+
+		button-enter {
+			label = "Enter";
+			linux,code = <KEY_ENTER>;
+			press-threshold-microvolt = <500000>;
+		};
+	};
+
++--------------------------------+------------------------+
+| 2.000.000 <= value             | no key pressed         |
++--------------------------------+------------------------+
+| 1.500.000 <= value < 2.000.000 | KEY_VOLUMEUP pressed   |
++--------------------------------+------------------------+
+| 1.000.000 <= value < 1.500.000 | KEY_VOLUMEDOWN pressed |
++--------------------------------+------------------------+
+|   500.000 <= value < 1.000.000 | KEY_ENTER pressed      |
++--------------------------------+------------------------+
+|              value <   500.000 | no key pressed         |
++--------------------------------+------------------------+
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v6 2/5] button: add a simple Analog to Digital Converter device based button driver
       [not found]   ` <CGME20210211084805eucas1p19dd298b9466769d0ea8827b6d239d4d8@eucas1p1.samsung.com>
@ 2021-02-11  8:47     ` Marek Szyprowski
  2021-02-18  4:45       ` Simon Glass
  0 siblings, 1 reply; 11+ messages in thread
From: Marek Szyprowski @ 2021-02-11  8:47 UTC (permalink / raw)
  To: u-boot

Add a simple Analog to Digital Converter device based button driver. This
driver binds to the 'adc-keys' device tree node.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 drivers/button/Kconfig      |   8 ++
 drivers/button/Makefile     |   1 +
 drivers/button/button-adc.c | 146 ++++++++++++++++++++++++++++++++++++
 3 files changed, 155 insertions(+)
 create mode 100644 drivers/button/button-adc.c

diff --git a/drivers/button/Kconfig b/drivers/button/Kconfig
index 6b3ec7e55d..6db3c5e93a 100644
--- a/drivers/button/Kconfig
+++ b/drivers/button/Kconfig
@@ -9,6 +9,14 @@ config BUTTON
 	  can provide access to board-specific buttons. Use of the device tree
 	  for configuration is encouraged.
 
+config BUTTON_ADC
+	bool "Button adc"
+	depends on BUTTON
+	help
+	  Enable support for buttons which are connected to Analog to Digital
+	  Converter device. The ADC driver must use driver model. Buttons are
+	  configured using the device tree.
+
 config BUTTON_GPIO
 	bool "Button gpio"
 	depends on BUTTON
diff --git a/drivers/button/Makefile b/drivers/button/Makefile
index fcc10ebe8d..bbd18af149 100644
--- a/drivers/button/Makefile
+++ b/drivers/button/Makefile
@@ -3,4 +3,5 @@
 # Copyright (C) 2020 Philippe Reynes <philippe.reynes@softathome.com>
 
 obj-$(CONFIG_BUTTON) += button-uclass.o
+obj-$(CONFIG_BUTTON_ADC) += button-adc.o
 obj-$(CONFIG_BUTTON_GPIO) += button-gpio.o
diff --git a/drivers/button/button-adc.c b/drivers/button/button-adc.c
new file mode 100644
index 0000000000..eed86564fb
--- /dev/null
+++ b/drivers/button/button-adc.c
@@ -0,0 +1,146 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2021 Samsung Electronics Co., Ltd.
+ *		http://www.samsung.com
+ * Author: Marek Szyprowski <m.szyprowski@samsung.com>
+ */
+
+#include <common.h>
+#include <adc.h>
+#include <button.h>
+#include <log.h>
+#include <dm.h>
+#include <dm/lists.h>
+#include <dm/of_access.h>
+#include <dm/uclass-internal.h>
+
+/**
+ * struct button_adc_priv - private data for button-adc driver.
+ *
+ * @adc: Analog to Digital Converter device to which button is connected.
+ * @channel: channel of the ADC device to probe the button state.
+ * @min: minimal uV value to consider button as pressed.
+ * @max: maximal uV value to consider button as pressed.
+ */
+struct button_adc_priv {
+	struct udevice *adc;
+	int channel;
+	int min;
+	int max;
+};
+
+static enum button_state_t button_adc_get_state(struct udevice *dev)
+{
+	struct button_adc_priv *priv = dev_get_priv(dev);
+	unsigned int val;
+	int ret, uV;
+
+	ret = adc_start_channel(priv->adc, priv->channel);
+	if (ret)
+		return ret;
+
+	ret = adc_channel_data(priv->adc, priv->channel, &val);
+	if (ret)
+		return ret;
+
+	ret = adc_raw_to_uV(priv->adc, val, &uV);
+	if (ret)
+		return ret;
+
+	return (uV >= priv->min && uV < priv->max) ? BUTTON_ON : BUTTON_OFF;
+}
+
+static int button_adc_of_to_plat(struct udevice *dev)
+{
+	struct button_uc_plat *uc_plat = dev_get_uclass_plat(dev);
+	struct button_adc_priv *priv = dev_get_priv(dev);
+	struct ofnode_phandle_args args;
+	u32 treshold, up_treshold, t;
+	ofnode node;
+	int ret;
+
+	/* Ignore the top-level button node */
+	if (!uc_plat->label)
+		return 0;
+
+	ret = dev_read_phandle_with_args(dev->parent, "io-channels",
+					 "#io-channel-cells", 0, 0, &args);
+	if (ret)
+		return ret;
+
+	ret = uclass_get_device_by_ofnode(UCLASS_ADC, args.node, &priv->adc);
+	if (ret)
+		return ret;
+
+	ret = ofnode_read_u32(dev_ofnode(dev->parent),
+			      "keyup-threshold-microvolt", &up_treshold);
+	if (ret)
+		return ret;
+
+	ret = ofnode_read_u32(dev_ofnode(dev), "press-threshold-microvolt",
+			      &treshold);
+	if (ret)
+		return ret;
+
+	dev_for_each_subnode(node, dev->parent) {
+		ret = ofnode_read_u32(node, "press-threshold-microvolt", &t);
+		if (ret)
+			return ret;
+
+		if (t > treshold)
+			up_treshold = t;
+	}
+
+	priv->channel = args.args[0];
+	priv->min = treshold;
+	priv->max = up_treshold;
+
+	return ret;
+}
+
+static int button_adc_bind(struct udevice *parent)
+{
+	struct udevice *dev;
+	ofnode node;
+	int ret;
+
+	dev_for_each_subnode(node, parent) {
+		struct button_uc_plat *uc_plat;
+		const char *label;
+
+		label = ofnode_read_string(node, "label");
+		if (!label) {
+			debug("%s: node %s has no label\n", __func__,
+			      ofnode_get_name(node));
+			return -EINVAL;
+		}
+		ret = device_bind_driver_to_node(parent, "button_adc",
+						 ofnode_get_name(node),
+						 node, &dev);
+		if (ret)
+			return ret;
+		uc_plat = dev_get_uclass_plat(dev);
+		uc_plat->label = label;
+	}
+
+	return 0;
+}
+
+static const struct button_ops button_adc_ops = {
+	.get_state	= button_adc_get_state,
+};
+
+static const struct udevice_id button_adc_ids[] = {
+	{ .compatible = "adc-keys" },
+	{ }
+};
+
+U_BOOT_DRIVER(button_adc) = {
+	.name		= "button_adc",
+	.id		= UCLASS_BUTTON,
+	.of_match	= button_adc_ids,
+	.ops		= &button_adc_ops,
+	.priv_auto	= sizeof(struct button_adc_priv),
+	.bind		= button_adc_bind,
+	.of_to_plat	= button_adc_of_to_plat,
+};
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v6 3/5] adc: meson-saradc: add support for getting reference voltage value
       [not found]   ` <CGME20210211084806eucas1p1ddadaa9bf4eb0f0b4f0acd1dd06113d7@eucas1p1.samsung.com>
@ 2021-02-11  8:47     ` Marek Szyprowski
  0 siblings, 0 replies; 11+ messages in thread
From: Marek Szyprowski @ 2021-02-11  8:47 UTC (permalink / raw)
  To: u-boot

Add support for getting the 'vref-supply' regulator and register it as
ADC's reference voltage regulator, so clients can translate sampled ADC
values to the voltage.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 drivers/adc/meson-saradc.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/adc/meson-saradc.c b/drivers/adc/meson-saradc.c
index 21db55831d..1a45a3a265 100644
--- a/drivers/adc/meson-saradc.c
+++ b/drivers/adc/meson-saradc.c
@@ -18,6 +18,7 @@
 #include <linux/delay.h>
 #include <linux/math64.h>
 #include <linux/bitfield.h>
+#include <power/regulator.h>
 
 #define MESON_SAR_ADC_REG0					0x00
 	#define MESON_SAR_ADC_REG0_PANEL_DETECT			BIT(31)
@@ -656,7 +657,10 @@ static int meson_saradc_stop(struct udevice *dev)
 
 static int meson_saradc_probe(struct udevice *dev)
 {
+	struct adc_uclass_plat *uc_pdata = dev_get_uclass_plat(dev);
 	struct meson_saradc_priv *priv = dev_get_priv(dev);
+	struct udevice *vref;
+	int vref_uv;
 	int ret;
 
 	ret = regmap_init_mem(dev_ofnode(dev), &priv->regmap);
@@ -675,6 +679,23 @@ static int meson_saradc_probe(struct udevice *dev)
 
 	priv->active_channel = -1;
 
+	ret = device_get_supply_regulator(dev, "vref-supply", &vref);
+	if (ret) {
+		printf("can't get vref-supply: %d\n", ret);
+		return ret;
+	}
+
+	vref_uv = regulator_get_value(vref);
+	if (vref_uv < 0) {
+		printf("can't get vref-supply value: %d\n", vref_uv);
+		return vref_uv;
+	}
+
+	/* VDD supplied by common vref pin */
+	uc_pdata->vdd_supply = vref;
+	uc_pdata->vdd_microvolts = vref_uv;
+	uc_pdata->vss_microvolts = 0;
+
 	return 0;
 }
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v6 4/5] configs: khadas-vim3(l): enable Function button support
       [not found]   ` <CGME20210211084806eucas1p12459ec4f4d9871e8abba678a8589165a@eucas1p1.samsung.com>
@ 2021-02-11  8:47     ` Marek Szyprowski
  0 siblings, 0 replies; 11+ messages in thread
From: Marek Szyprowski @ 2021-02-11  8:47 UTC (permalink / raw)
  To: u-boot

Add options required to check the 'Function' button state.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 configs/khadas-vim3_defconfig  | 2 ++
 configs/khadas-vim3l_defconfig | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/configs/khadas-vim3_defconfig b/configs/khadas-vim3_defconfig
index 5d16652fd6..bc17430569 100644
--- a/configs/khadas-vim3_defconfig
+++ b/configs/khadas-vim3_defconfig
@@ -31,6 +31,8 @@ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_ADC=y
 CONFIG_SARADC_MESON=y
+CONFIG_BUTTON=y
+CONFIG_BUTTON_ADC=y
 CONFIG_DM_I2C=y
 CONFIG_SYS_I2C_MESON=y
 CONFIG_DM_MMC=y
diff --git a/configs/khadas-vim3l_defconfig b/configs/khadas-vim3l_defconfig
index 6b13ce045c..c1877922c7 100644
--- a/configs/khadas-vim3l_defconfig
+++ b/configs/khadas-vim3l_defconfig
@@ -31,6 +31,8 @@ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
 CONFIG_NET_RANDOM_ETHADDR=y
 CONFIG_ADC=y
 CONFIG_SARADC_MESON=y
+CONFIG_BUTTON=y
+CONFIG_BUTTON_ADC=y
 CONFIG_DM_I2C=y
 CONFIG_SYS_I2C_MESON=y
 CONFIG_DM_MMC=y
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v6 5/5] test: add a simple test for the adc-keys button driver
       [not found]   ` <CGME20210211084807eucas1p2e9e5d1fe99d98130649d97ebcd82d854@eucas1p2.samsung.com>
@ 2021-02-11  8:47     ` Marek Szyprowski
  2021-02-11 10:16       ` Heinrich Schuchardt
                         ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Marek Szyprowski @ 2021-02-11  8:47 UTC (permalink / raw)
  To: u-boot

Add adc-keys device to the sandbox/test.dts and connect it to the channel
#3 of the sandbox_adc driver. The default values sampled by sandbox_adc
driver determines that button3 and button4 are released and button5 is
pressed.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 arch/sandbox/dts/test.dts | 24 ++++++++++++++++++-
 configs/sandbox_defconfig |  1 +
 test/dm/button.c          | 50 +++++++++++++++++++++++++++++++++++++--
 3 files changed, 72 insertions(+), 3 deletions(-)

diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index e95f4631bf..a32b019ae7 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -69,6 +69,27 @@
 		};
 	};
 
+	buttons2 {
+		compatible = "adc-keys";
+		io-channels = <&adc 3>;
+		keyup-threshold-microvolt = <3000000>;
+
+		button-up {
+			label = "button3";
+			press-threshold-microvolt = <1500000>;
+		};
+
+		button-down {
+			label = "button4";
+			press-threshold-microvolt = <1000000>;
+		};
+
+		button-enter {
+			label = "button5";
+			press-threshold-microvolt = <500000>;
+		};
+	};
+
 	cros_ec: cros-ec {
 		reg = <0 0>;
 		compatible = "google,cros-ec-sandbox";
@@ -587,8 +608,9 @@
 		i2c-eeprom = <&bootcount_i2c>;
 	};
 
-	adc at 0 {
+	adc: adc at 0 {
 		compatible = "sandbox,adc";
+		#io-channel-cells = <1>;
 		vdd-supply = <&buck2>;
 		vss-microvolts = <0>;
 	};
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index 0c7674efc9..3731bf05ff 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -122,6 +122,7 @@ CONFIG_DM_BOOTCOUNT=y
 CONFIG_DM_BOOTCOUNT_RTC=y
 CONFIG_DM_BOOTCOUNT_I2C_EEPROM=y
 CONFIG_BUTTON=y
+CONFIG_BUTTON_ADC=y
 CONFIG_BUTTON_GPIO=y
 CONFIG_CLK=y
 CONFIG_CLK_COMPOSITE_CCF=y
diff --git a/test/dm/button.c b/test/dm/button.c
index ecaa47cf5f..f8a7fab61d 100644
--- a/test/dm/button.c
+++ b/test/dm/button.c
@@ -7,7 +7,10 @@
 
 #include <common.h>
 #include <dm.h>
+#include <adc.h>
 #include <button.h>
+#include <power/regulator.h>
+#include <power/sandbox_pmic.h>
 #include <asm/gpio.h>
 #include <dm/test.h>
 #include <test/ut.h>
@@ -17,11 +20,20 @@ static int dm_test_button_base(struct unit_test_state *uts)
 {
 	struct udevice *dev;
 
-	/* Get the top-level device */
+	/* Get the top-level gpio buttons device */
 	ut_assertok(uclass_get_device(UCLASS_BUTTON, 0, &dev));
+	/* Get the 2 gpio buttons */
 	ut_assertok(uclass_get_device(UCLASS_BUTTON, 1, &dev));
 	ut_assertok(uclass_get_device(UCLASS_BUTTON, 2, &dev));
-	ut_asserteq(-ENODEV, uclass_get_device(UCLASS_BUTTON, 3, &dev));
+
+	/* Get the top-level adc buttons device */
+	ut_assertok(uclass_get_device(UCLASS_BUTTON, 3, &dev));
+	/* Get the 3 adc buttons */
+	ut_assertok(uclass_get_device(UCLASS_BUTTON, 4, &dev));
+	ut_assertok(uclass_get_device(UCLASS_BUTTON, 5, &dev));
+	ut_assertok(uclass_get_device(UCLASS_BUTTON, 6, &dev));
+
+	ut_asserteq(-ENODEV, uclass_get_device(UCLASS_BUTTON, 7, &dev));
 
 	return 0;
 }
@@ -72,3 +84,37 @@ static int dm_test_button_label(struct unit_test_state *uts)
 	return 0;
 }
 DM_TEST(dm_test_button_label, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
+/* Test adc-keys driver */
+static int dm_test_button_keys_adc(struct unit_test_state *uts)
+{
+	struct udevice *supply;
+	struct udevice *dev;
+	int uV;
+
+	ut_assertok(uclass_get_device_by_name(UCLASS_ADC, "adc at 0", &dev));
+
+	ut_assertok(regulator_get_by_devname(SANDBOX_BUCK2_DEVNAME, &supply));
+	ut_assertok(regulator_set_value(supply, SANDBOX_BUCK2_SET_UV));
+	ut_asserteq(SANDBOX_BUCK2_SET_UV, regulator_get_value(supply));
+	/* Update ADC plat and get new Vdd value */
+	ut_assertok(adc_vdd_value(dev, &uV));
+	ut_asserteq(SANDBOX_BUCK2_SET_UV, uV);
+
+	/*
+	 * sandbox-adc returns constant value on channel 3, is used by adc-keys:
+	 * SANDBOX_ADC_CHANNEL3_DATA * SANDBOX_BUCK2_SET_UV / SANDBOX_ADC_DATA_MASK =
+	 * 0x3000 * 3300000 / 0xffff = 618759uV
+	 * This means that button3 and button4 are released and button5
+	 * is pressed.
+	 */
+	ut_assertok(button_get_by_label("button3", &dev));
+	ut_asserteq(BUTTON_OFF, button_get_state(dev));
+	ut_assertok(button_get_by_label("button4", &dev));
+	ut_asserteq(BUTTON_OFF, button_get_state(dev));
+	ut_assertok(button_get_by_label("button5", &dev));
+	ut_asserteq(BUTTON_ON, button_get_state(dev));
+
+	return 0;
+}
+DM_TEST(dm_test_button_keys_adc, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v6 5/5] test: add a simple test for the adc-keys button driver
  2021-02-11  8:47     ` [PATCH v6 5/5] test: add a simple test for the adc-keys button driver Marek Szyprowski
@ 2021-02-11 10:16       ` Heinrich Schuchardt
  2021-02-18  4:45       ` Simon Glass
  2021-02-18  9:28         ` Neil Armstrong
  2 siblings, 0 replies; 11+ messages in thread
From: Heinrich Schuchardt @ 2021-02-11 10:16 UTC (permalink / raw)
  To: u-boot

On 11.02.21 09:47, Marek Szyprowski wrote:
> Add adc-keys device to the sandbox/test.dts and connect it to the channel
> #3 of the sandbox_adc driver. The default values sampled by sandbox_adc
> driver determines that button3 and button4 are released and button5 is
> pressed.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  arch/sandbox/dts/test.dts | 24 ++++++++++++++++++-
>  configs/sandbox_defconfig |  1 +
>  test/dm/button.c          | 50 +++++++++++++++++++++++++++++++++++++--
>  3 files changed, 72 insertions(+), 3 deletions(-)
>
> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> index e95f4631bf..a32b019ae7 100644
> --- a/arch/sandbox/dts/test.dts
> +++ b/arch/sandbox/dts/test.dts
> @@ -69,6 +69,27 @@
>  		};
>  	};
>
> +	buttons2 {
> +		compatible = "adc-keys";
> +		io-channels = <&adc 3>;
> +		keyup-threshold-microvolt = <3000000>;
> +
> +		button-up {
> +			label = "button3";
> +			press-threshold-microvolt = <1500000>;

In patch 1/5 you wrote that "linux,code" is a required property.

Even if you don't use the property currently, I suggest to keep test.dts
compliant.

Best regards

Heinrich

> +		};
> +
> +		button-down {
> +			label = "button4";
> +			press-threshold-microvolt = <1000000>;
> +		};
> +
> +		button-enter {
> +			label = "button5";
> +			press-threshold-microvolt = <500000>;
> +		};
> +	};
> +
>  	cros_ec: cros-ec {
>  		reg = <0 0>;
>  		compatible = "google,cros-ec-sandbox";
> @@ -587,8 +608,9 @@
>  		i2c-eeprom = <&bootcount_i2c>;
>  	};
>
> -	adc at 0 {
> +	adc: adc at 0 {
>  		compatible = "sandbox,adc";
> +		#io-channel-cells = <1>;
>  		vdd-supply = <&buck2>;
>  		vss-microvolts = <0>;
>  	};
> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
> index 0c7674efc9..3731bf05ff 100644
> --- a/configs/sandbox_defconfig
> +++ b/configs/sandbox_defconfig
> @@ -122,6 +122,7 @@ CONFIG_DM_BOOTCOUNT=y
>  CONFIG_DM_BOOTCOUNT_RTC=y
>  CONFIG_DM_BOOTCOUNT_I2C_EEPROM=y
>  CONFIG_BUTTON=y
> +CONFIG_BUTTON_ADC=y
>  CONFIG_BUTTON_GPIO=y
>  CONFIG_CLK=y
>  CONFIG_CLK_COMPOSITE_CCF=y
> diff --git a/test/dm/button.c b/test/dm/button.c
> index ecaa47cf5f..f8a7fab61d 100644
> --- a/test/dm/button.c
> +++ b/test/dm/button.c
> @@ -7,7 +7,10 @@
>
>  #include <common.h>
>  #include <dm.h>
> +#include <adc.h>
>  #include <button.h>
> +#include <power/regulator.h>
> +#include <power/sandbox_pmic.h>
>  #include <asm/gpio.h>
>  #include <dm/test.h>
>  #include <test/ut.h>
> @@ -17,11 +20,20 @@ static int dm_test_button_base(struct unit_test_state *uts)
>  {
>  	struct udevice *dev;
>
> -	/* Get the top-level device */
> +	/* Get the top-level gpio buttons device */
>  	ut_assertok(uclass_get_device(UCLASS_BUTTON, 0, &dev));
> +	/* Get the 2 gpio buttons */
>  	ut_assertok(uclass_get_device(UCLASS_BUTTON, 1, &dev));
>  	ut_assertok(uclass_get_device(UCLASS_BUTTON, 2, &dev));
> -	ut_asserteq(-ENODEV, uclass_get_device(UCLASS_BUTTON, 3, &dev));
> +
> +	/* Get the top-level adc buttons device */
> +	ut_assertok(uclass_get_device(UCLASS_BUTTON, 3, &dev));
> +	/* Get the 3 adc buttons */
> +	ut_assertok(uclass_get_device(UCLASS_BUTTON, 4, &dev));
> +	ut_assertok(uclass_get_device(UCLASS_BUTTON, 5, &dev));
> +	ut_assertok(uclass_get_device(UCLASS_BUTTON, 6, &dev));
> +
> +	ut_asserteq(-ENODEV, uclass_get_device(UCLASS_BUTTON, 7, &dev));
>
>  	return 0;
>  }
> @@ -72,3 +84,37 @@ static int dm_test_button_label(struct unit_test_state *uts)
>  	return 0;
>  }
>  DM_TEST(dm_test_button_label, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
> +
> +/* Test adc-keys driver */
> +static int dm_test_button_keys_adc(struct unit_test_state *uts)
> +{
> +	struct udevice *supply;
> +	struct udevice *dev;
> +	int uV;
> +
> +	ut_assertok(uclass_get_device_by_name(UCLASS_ADC, "adc at 0", &dev));
> +
> +	ut_assertok(regulator_get_by_devname(SANDBOX_BUCK2_DEVNAME, &supply));
> +	ut_assertok(regulator_set_value(supply, SANDBOX_BUCK2_SET_UV));
> +	ut_asserteq(SANDBOX_BUCK2_SET_UV, regulator_get_value(supply));
> +	/* Update ADC plat and get new Vdd value */
> +	ut_assertok(adc_vdd_value(dev, &uV));
> +	ut_asserteq(SANDBOX_BUCK2_SET_UV, uV);
> +
> +	/*
> +	 * sandbox-adc returns constant value on channel 3, is used by adc-keys:
> +	 * SANDBOX_ADC_CHANNEL3_DATA * SANDBOX_BUCK2_SET_UV / SANDBOX_ADC_DATA_MASK =
> +	 * 0x3000 * 3300000 / 0xffff = 618759uV
> +	 * This means that button3 and button4 are released and button5
> +	 * is pressed.
> +	 */
> +	ut_assertok(button_get_by_label("button3", &dev));
> +	ut_asserteq(BUTTON_OFF, button_get_state(dev));
> +	ut_assertok(button_get_by_label("button4", &dev));
> +	ut_asserteq(BUTTON_OFF, button_get_state(dev));
> +	ut_assertok(button_get_by_label("button5", &dev));
> +	ut_asserteq(BUTTON_ON, button_get_state(dev));
> +
> +	return 0;
> +}
> +DM_TEST(dm_test_button_keys_adc, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v6 2/5] button: add a simple Analog to Digital Converter device based button driver
  2021-02-11  8:47     ` [PATCH v6 2/5] button: add a simple Analog to Digital Converter device based button driver Marek Szyprowski
@ 2021-02-18  4:45       ` Simon Glass
  0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2021-02-18  4:45 UTC (permalink / raw)
  To: u-boot

On Thu, 11 Feb 2021 at 01:48, Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>
> Add a simple Analog to Digital Converter device based button driver. This
> driver binds to the 'adc-keys' device tree node.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  drivers/button/Kconfig      |   8 ++
>  drivers/button/Makefile     |   1 +
>  drivers/button/button-adc.c | 146 ++++++++++++++++++++++++++++++++++++
>  3 files changed, 155 insertions(+)
>  create mode 100644 drivers/button/button-adc.c

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v6 5/5] test: add a simple test for the adc-keys button driver
  2021-02-11  8:47     ` [PATCH v6 5/5] test: add a simple test for the adc-keys button driver Marek Szyprowski
  2021-02-11 10:16       ` Heinrich Schuchardt
@ 2021-02-18  4:45       ` Simon Glass
  2021-02-18  9:28         ` Neil Armstrong
  2 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2021-02-18  4:45 UTC (permalink / raw)
  To: u-boot

On Thu, 11 Feb 2021 at 01:48, Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>
> Add adc-keys device to the sandbox/test.dts and connect it to the channel
> #3 of the sandbox_adc driver. The default values sampled by sandbox_adc
> driver determines that button3 and button4 are released and button5 is
> pressed.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  arch/sandbox/dts/test.dts | 24 ++++++++++++++++++-
>  configs/sandbox_defconfig |  1 +
>  test/dm/button.c          | 50 +++++++++++++++++++++++++++++++++++++--
>  3 files changed, 72 insertions(+), 3 deletions(-)
>

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v6 5/5] test: add a simple test for the adc-keys button driver
  2021-02-11  8:47     ` [PATCH v6 5/5] test: add a simple test for the adc-keys button driver Marek Szyprowski
@ 2021-02-18  9:28         ` Neil Armstrong
  2021-02-18  4:45       ` Simon Glass
  2021-02-18  9:28         ` Neil Armstrong
  2 siblings, 0 replies; 11+ messages in thread
From: Neil Armstrong @ 2021-02-18  9:28 UTC (permalink / raw)
  To: u-boot

Hi Marek,

On 11/02/2021 09:47, Marek Szyprowski wrote:
> Add adc-keys device to the sandbox/test.dts and connect it to the channel
> #3 of the sandbox_adc driver. The default values sampled by sandbox_adc
> driver determines that button3 and button4 are released and button5 is
> pressed.
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  arch/sandbox/dts/test.dts | 24 ++++++++++++++++++-
>  configs/sandbox_defconfig |  1 +
>  test/dm/button.c          | 50 +++++++++++++++++++++++++++++++++++++--
>  3 files changed, 72 insertions(+), 3 deletions(-)
> 

[...]

Everything is reviewed, can you re-send with the missing "linux,code" ? and I'll push it.

Neil

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v6 5/5] test: add a simple test for the adc-keys button driver
@ 2021-02-18  9:28         ` Neil Armstrong
  0 siblings, 0 replies; 11+ messages in thread
From: Neil Armstrong @ 2021-02-18  9:28 UTC (permalink / raw)
  To: Marek Szyprowski, u-boot, u-boot-amlogic
  Cc: Lukasz Majewski, Philippe Reynes, Simon Glass,
	Heinrich Schuchardt, Jaehoon Chung, Bartlomiej Zolnierkiewicz

Hi Marek,

On 11/02/2021 09:47, Marek Szyprowski wrote:
> Add adc-keys device to the sandbox/test.dts and connect it to the channel
> #3 of the sandbox_adc driver. The default values sampled by sandbox_adc
> driver determines that button3 and button4 are released and button5 is
> pressed.
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
>  arch/sandbox/dts/test.dts | 24 ++++++++++++++++++-
>  configs/sandbox_defconfig |  1 +
>  test/dm/button.c          | 50 +++++++++++++++++++++++++++++++++++++--
>  3 files changed, 72 insertions(+), 3 deletions(-)
> 

[...]

Everything is reviewed, can you re-send with the missing "linux,code" ? and I'll push it.

Neil

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2021-02-18  9:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <CGME20210211084804eucas1p111b64b0251fd991f2aa6f2470341634a@eucas1p1.samsung.com>
2021-02-11  8:47 ` [PATCH v6 0/5] VIM3: add support for checking 'Function' button state Marek Szyprowski
     [not found]   ` <CGME20210211084805eucas1p2a9c601311c97458a3435e3fec49e331b@eucas1p2.samsung.com>
2021-02-11  8:47     ` [PATCH v6 1/5] dt-bindings: input: adc-keys bindings documentation Marek Szyprowski
     [not found]   ` <CGME20210211084805eucas1p19dd298b9466769d0ea8827b6d239d4d8@eucas1p1.samsung.com>
2021-02-11  8:47     ` [PATCH v6 2/5] button: add a simple Analog to Digital Converter device based button driver Marek Szyprowski
2021-02-18  4:45       ` Simon Glass
     [not found]   ` <CGME20210211084806eucas1p1ddadaa9bf4eb0f0b4f0acd1dd06113d7@eucas1p1.samsung.com>
2021-02-11  8:47     ` [PATCH v6 3/5] adc: meson-saradc: add support for getting reference voltage value Marek Szyprowski
     [not found]   ` <CGME20210211084806eucas1p12459ec4f4d9871e8abba678a8589165a@eucas1p1.samsung.com>
2021-02-11  8:47     ` [PATCH v6 4/5] configs: khadas-vim3(l): enable Function button support Marek Szyprowski
     [not found]   ` <CGME20210211084807eucas1p2e9e5d1fe99d98130649d97ebcd82d854@eucas1p2.samsung.com>
2021-02-11  8:47     ` [PATCH v6 5/5] test: add a simple test for the adc-keys button driver Marek Szyprowski
2021-02-11 10:16       ` Heinrich Schuchardt
2021-02-18  4:45       ` Simon Glass
2021-02-18  9:28       ` Neil Armstrong
2021-02-18  9:28         ` Neil Armstrong

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.