You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
3.2 KiB
73 lines
3.2 KiB
From eb3742c4250c6a79e7080bdb6286e5df50c7f26a Mon Sep 17 00:00:00 2001
|
|
From: Linus Walleij <linus.walleij@linaro.org>
|
|
Date: Sat, 28 Oct 2017 15:37:17 +0200
|
|
Subject: [PATCH 04/31] pinctrl: Add skew-delay pin config and bindings
|
|
|
|
Some pin controllers (such as the Gemini) can control the
|
|
expected clock skew and output delay on certain pins with a
|
|
sub-nanosecond granularity. This is typically done by shunting
|
|
in a number of double inverters in front of or behind the pin.
|
|
Make it possible to configure this with a generic binding.
|
|
|
|
Cc: devicetree@vger.kernel.org
|
|
Acked-by: Rob Herring <robh@kernel.org>
|
|
Acked-by: Hans Ulli Kroll <ulli.kroll@googlemail.com>
|
|
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
|
---
|
|
Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt | 4 ++++
|
|
drivers/pinctrl/pinconf-generic.c | 2 ++
|
|
include/linux/pinctrl/pinconf-generic.h | 5 +++++
|
|
3 files changed, 11 insertions(+)
|
|
|
|
--- a/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
|
|
+++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
|
|
@@ -271,6 +271,10 @@ output-high - set the pin to output mod
|
|
sleep-hardware-state - indicate this is sleep related state which will be programmed
|
|
into the registers for the sleep state.
|
|
slew-rate - set the slew rate
|
|
+skew-delay - this affects the expected clock skew on input pins
|
|
+ and the delay before latching a value to an output
|
|
+ pin. Typically indicates how many double-inverters are
|
|
+ used to delay the signal.
|
|
|
|
For example:
|
|
|
|
--- a/drivers/pinctrl/pinconf-generic.c
|
|
+++ b/drivers/pinctrl/pinconf-generic.c
|
|
@@ -49,6 +49,7 @@ static const struct pin_config_item conf
|
|
PCONFDUMP(PIN_CONFIG_POWER_SOURCE, "pin power source", "selector", true),
|
|
PCONFDUMP(PIN_CONFIG_SLEEP_HARDWARE_STATE, "sleep hardware state", NULL, false),
|
|
PCONFDUMP(PIN_CONFIG_SLEW_RATE, "slew rate", NULL, true),
|
|
+ PCONFDUMP(PIN_CONFIG_SKEW_DELAY, "skew delay", NULL, true),
|
|
};
|
|
|
|
static void pinconf_generic_dump_one(struct pinctrl_dev *pctldev,
|
|
@@ -181,6 +182,7 @@ static const struct pinconf_generic_para
|
|
{ "power-source", PIN_CONFIG_POWER_SOURCE, 0 },
|
|
{ "sleep-hardware-state", PIN_CONFIG_SLEEP_HARDWARE_STATE, 0 },
|
|
{ "slew-rate", PIN_CONFIG_SLEW_RATE, 0 },
|
|
+ { "skew-delay", PIN_CONFIG_SKEW_DELAY, 0 },
|
|
};
|
|
|
|
/**
|
|
--- a/include/linux/pinctrl/pinconf-generic.h
|
|
+++ b/include/linux/pinctrl/pinconf-generic.h
|
|
@@ -90,6 +90,10 @@
|
|
* @PIN_CONFIG_SLEW_RATE: if the pin can select slew rate, the argument to
|
|
* this parameter (on a custom format) tells the driver which alternative
|
|
* slew rate to use.
|
|
+ * @PIN_CONFIG_SKEW_DELAY: if the pin has programmable skew rate (on inputs)
|
|
+ * or latch delay (on outputs) this parameter (in a custom format)
|
|
+ * specifies the clock skew or latch delay. It typically controls how
|
|
+ * many double inverters are put in front of the line.
|
|
* @PIN_CONFIG_END: this is the last enumerator for pin configurations, if
|
|
* you need to pass in custom configurations to the pin controller, use
|
|
* PIN_CONFIG_END+1 as the base offset.
|
|
@@ -117,6 +121,7 @@ enum pin_config_param {
|
|
PIN_CONFIG_POWER_SOURCE,
|
|
PIN_CONFIG_SLEEP_HARDWARE_STATE,
|
|
PIN_CONFIG_SLEW_RATE,
|
|
+ PIN_CONFIG_SKEW_DELAY,
|
|
PIN_CONFIG_END = 0x7F,
|
|
PIN_CONFIG_MAX = 0xFF,
|
|
};
|
|
|