Hi Philipp:
On 2017年11月28日 21:59, Philipp Tomsich wrote:
+sjg
On Tue, 28 Nov 2017, Andy Yan wrote:
Most the current rockchip based boards use adc channel
1 detect the download key, but there are also some
boards like rv1108 based plaform use adc channel 0.
So we parse the adc channel from dts if we can get
it, otherwise we use the channel 1 as default.
Signed-off-by: Andy Yan <andy....@rock-chips.com>
Acked-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com>
---
arch/arm/mach-rockchip/boot_mode.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-rockchip/boot_mode.c
b/arch/arm/mach-rockchip/boot_mode.c
index 942849f..49dfd39 100644
--- a/arch/arm/mach-rockchip/boot_mode.c
+++ b/arch/arm/mach-rockchip/boot_mode.c
@@ -8,6 +8,9 @@
#include <adc.h>
#include <asm/io.h>
#include <asm/arch/boot_mode.h>
+#include <fdtdec.h>
+
+DECLARE_GLOBAL_DATA_PTR;
void set_back_to_bootrom_dnl_flag(void)
{
@@ -26,9 +29,19 @@ void set_back_to_bootrom_dnl_flag(void)
__weak int rockchip_dnl_key_pressed(void)
{
+ const void *blob = gd->fdt_blob;
unsigned int val;
+ int channel = 1;
+ int node;
+ u32 chns[2];
+
+ node = fdt_node_offset_by_compatible(blob, 0, "adc-keys");
+ if (node >= 0) {
+ if (!fdtdec_get_int_array(blob, node, "io-channels", chns, 2))
+ channel = chns[1];
+ }
The driver for 'adc-keys' should be a driver in drivers/input that can
then be retrieved via DM and queried using keyboard_getc().
Yes, if there is an exiting adc-keys driver, we will use it here
with no doubts, but there is not now. I just need to check the button
down event once, no up or other things needed, so I call the adc api
directly. I grep all the u-boot project, and found all other boards
handle this kind of button status check by call device specific api
directly, rather than use the api from input subsystem. So I think
this is a acceptable way.
Would you please consider taking this patch if there is no other
problems. And when there is a adc-keys driver in the future, I can move
it to input based api, or I will write a adc-keys driver when my
workloads is not so heavy as now.
- if (adc_channel_single_shot("saradc", 1, &val)) {
+ if (adc_channel_single_shot("saradc", channel, &val)) {
pr_err("%s: adc_channel_single_shot fail!\n", __func__);
return false;
}
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot